1

だから私たちはデータベースを持っています。頻繁に新しいデータセットを追加し、最も古いデータセットを削除する必要があります。

DB が 6 月上旬: 18 レコード、6 月下旬: 15 レコード、8 月: 23 レコードであるとします。次のレコードを追加するときは、6 月上旬のレコードを削除します。ただし、新しいデータの追加は完全に定期的ではありません。私の 2 番目の考えは、各レコードに「oldness」フィールドを設定し、新しいデータ セットを追加する前に、すべての「oldness」フィールドを 1 増やしてから、「oldness」が 3 のすべてのデータを削除することです。

これが最適な方法ではないのではないかと心配していますが、あまり頻繁に更新されないかなり小さなデータベースであるため、問題があるかどうかはわかりません。とは言うものの、これを達成するためのより良いアルゴリズムの提案を歓迎します。

4

3 に答える 3

2

データはレポートごとにタイムスタンプ (日付) 列を持つように保存されており、x (この場合は 3) か月前のデータを常に削除する必要があると想定しています。DATEDIFFもしそうなら、mysql の機能 を使用することを考えるかもしれません。

たとえば、次のようになります。

DELETE from table1 WHERE datediff(CURRENT_DATE(), datecol) > 89

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_datediff

于 2011-09-12T18:49:31.857 に答える
0

いつも月単位ですか?

UPDATE table SET status = "oldness" WHERE date_inserted <= NOW() - INTERVAL 3 MONTH
于 2011-09-12T18:49:59.033 に答える
0

user937146の助けを借りて、解決策を見つけたと思います。基本的

$query = "SELECT MIN(timestamp) FROM new_items WHERE type = 'Book' ";

次に、そのタイムスタンプを取得し、1 時間を追加して (データのアップロードには 1 秒以上かかる場合があるため、おそらく 1 分で十分です)、そのタイムスタンプよりも古いデータベースからすべてを削除するだけです。

于 2011-09-12T19:59:51.537 に答える