1

オブジェクトがどのくらいの頻度で使用されたかを判断するために、次のフィールドを持つテーブルを使用します。

id - objectID - timestamp

オブジェクトが使用されるたびに、IDtime()が追加されます。これにより、オブジェクトが過去の時間/分/秒などに使用された頻度を判断できます。

1 時間後、行は役に立たなくなります (1 時間以上はチェックしていません)。ただし、主キー(auto_increment ID)を台無しにする可能性があるため、単純に行を削除するのは賢明ではないことを理解しています。

そこで、「アクティブ」というフィールドを追加しました。オブジェクトの使用頻度を確認する前に、すべてをループしてWHERE active=1、1 時間以上経過している場合は 0 に設定します。これにより複数のユーザー間で同時実行の問題が発生するとは思いませんが、未使用のデータが大量に残ります。

active=0新しい使用状況データを挿入する前に、フィールドがあるかどうかを確認してから、新しい行を挿入するのではなく、その行を新しいデータで更新し、アクティブを再度 1 に設定するのが最善であると考えています。ただし、これには、複数のクライアントが同じ行を更新するのを防ぐために、テーブルをロックする必要があります。

誰かこれについてもっと光を当てることができますか?

4

2 に答える 2

2

行を削除すると主キーが台無しになるということはどこにも聞いたことがありません。

おそらく、idによって自動的に割り当てられた値auto_incrementが別のテーブルの値と一致することを確認しようとしていますか? これは必須ではありません。単に列INTEGER PRIMARY KEYとして を使用してid、値を明示的に割り当てることができます。

于 2012-04-22T10:57:34.763 に答える
1

1 時間以上経過したすべての行に一致する更新クエリを実行できます。

UPDATE table SET active=0 WHERE timestamp < now() - interval 1 hour
于 2012-04-22T10:56:12.517 に答える