質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • MySQL

    6033questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

レコードの再利用について

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 283

shougo777

score 1

 レコードを再利用することは一般的なことでしょうか?

MySQLでInnoDBを使ったテーブルでレコードに使用期限のカラムを追加するようにして、新たなデータの登録時に期限の切れているデータが存在した場合には、新規のレコードは作成せずに期限の切れたデータのレコードを上書きして再利用しようと思っています。

この方法は、このデータの使用期間が決まっているのと、データが毎日1,000件ペースで増えてしまうので、レコードの増加を抑えるために何とかしたいと思い考えました。

ただ...この様にレコードを上書きして再利用する方法は、一般的に行なっても問題のない方法なのでしょうか?

それとも定期的に使用期限の来たデータをDELETEする方が良いのでしょうか?
もし問題がなければ上書きをしたいと思っています。

削除も上書きもせずに済むなら良いのですが、他のテーブルのデータ増加が大きいので出来るだけデータ量を小さくしたいと思っています。

アドバイスをよろしくお願いいたします。

 補足情報

使用環境はMySQL5.6。ストレージエンジンは「InnoDB」を利用しています。
IDの採番は、別テーブルで管理しようと思っています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • maisumakun

    2018/05/22 10:01

    「使用期限が決まっている」データとは、具体的にどのようなデータなのでしょうか。ログとして残さなくても本当にいいようなものなのでしょうか。

    キャンセル

  • shougo777

    2018/05/22 10:04

    商品の見積データです。見積の有効期間を過ぎたらデータは廃棄しても問題ないので、ログも必要ありません。

    キャンセル

  • mts10806

    2018/05/22 10:09

    「送信メールの再利用」みたいにしたいということでしょうか。(メールの場合だと新しいレコード増えますが)

    キャンセル

  • shougo777

    2018/05/22 10:19

    いえ、完全に別データを上書きして使用しますので、元のデータの内容を利用するわけではありません。

    キャンセル

回答 4

checkベストアンサー

+4

この様にレコードを上書きして再利用する方法は、一般的に行なっても問題のない方法なのでしょうか?

「レコードの増加を抑えるため」程度の目的であればやらないほうがいいと思います。

というのも、単にレコードを挿入するだけであれば排他制御上の問題は発生しづらいのに対して、既存のレコードを上書きするとなれば、同時に2箇所から同じレコードを更新しようとしてしまったときのことを考えないといけなくなるからです。

新規作成時に既存レコードのチェックも行わないといけなくなるため、必要以上にコードも煩雑化します。

それとも定期的に使用期限の来たデータをDELETEする方が良いのでしょうか?

自分だったら、見積作成の少ないタイミング(たとえば深夜)にバッチジョブとして削除を仕込みます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/22 11:27

    たしかに同時に2箇所から同じレコードを更新される可能性を忘れていました。
    もしかすると再利用の場合に、他にも見落としている問題があるような気がしてきました。皆さんの仰る通り、安易に再利用は考えないで、定期的にDELETEする方向で考えてみたいと思います。
    勉強になりました。ありがとうございます。

    キャンセル

+2

・それとも定期的に使用期限の来たデータをDELETEする方が良いのでしょうか?
やるとしてもこっちが普通かなと思います。

個人的には「データは資産」だと思っているのでデータの『削除』や『上書き』という行為に関して
かなり拒否感があります。確かに「見積」としては見積期間が過ぎたら不要でしょうが
見積データ自体はほかのなにかに使える可能性が0ではありません。

なぜ「レコードの増加を抑えないといけないと思うのか」を質問内に記述した方がいいと思います。

MySQLは触ったこと無いんですが一般的にデータが増えようがインデックスが適正なら
1万件の中から1件探すのも1億件の中から1件探すのもほとんど変わりません。
そもそも文字データが毎日1000件積まれようがデータベース的な容量はあまり変わらないのでは?
他のデータの増加が大きいのであれば、データの増加が大きい方をなんとかすべきかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/22 11:44

    「データは資産」ですか。そうですよね。僕も出来れば削除はしたくありませんが、サクラのマネージドサーバの利用することに決まっているので、拡張なし少しでも長く使える様にと考えてしまいました。
    ただ再利用は、皆さんの仰る通り、オススメではない事が理解できましたので、定期的にDELETEする方向で考えてみたいと思います。

    キャンセル

+1

1,000件のデータの容量はどの程度でしょうか?現在のストレージの空きは?

大人のためのInnoDBテーブルとの正しい付き合い方。 に参考になる内容がありますから、熟読されては?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/22 11:37

    実は、まだテーブルのカラムが確定ではないので容量はハッキリしていませんが、予想以上に増えてしまった場合の事を考えて少しでも節約しようと思って考えた方法でした。
    使用するサーバがサクラのマネージドに決まってしまっているので、拡張できない前提でいろいろ考えてしまいました。

    キャンセル

+1

リサイクルするのは面倒なので、不要になったものを削除してやれば良いのではないでしょうか。

タスクを準備して定期的に削除。その際圧縮も同時に行えばリソースもある程度確保できると思います。

【MySQL】肥大化したInnoDBテーブルを圧縮機能で縮小する方法!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/22 11:48

    皆さんの仰る通り、定期的にDELETEする方向で考えてみます。
    圧縮ですか、もしできるなら試みてみたいと思いました。
    サクラのマネージドサーバでもできるのでしょうか?少し調べてみます。ありがとうございます。

    キャンセル

関連した質問

同じタグがついた質問を見る

  • MySQL

    6033questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。