0

SQLクエリ結果をキャッシュするためのクラスを設計するように依頼されました。クラスのqueryメソッドを呼び出すと、最初に結果のセット全体がクエリされてキャッシュされます。その後、各サブシーケンスクエリは更新された部分のみを取得し、結果をキャッシュにマージします。

クラスがジェネリックである必要がある場合、つまりデータベースとテーブルに関する知識がない場合、何か考えがありますか?

それは可能ですか、そして最後のクエリ以降に更新された/新しいレコードのみを取得する方法はありますか?

4

2 に答える 2

1

MySQL(または私が知る限り他のSQLベースのデータベース)は、行の「最終更新時刻」または「挿入時刻」をどこにも保存しません。少なくとも、クエリできる場所には保存しません(バイナリログの解析はおそらくあなたがやろうとしていることではありません)。

「新しいレコード」を取得するには、次のいずれかを行う必要があります。

  • 最後の既知の最大値よりも高い自動インクリメント値を持つすべてのレコードをクエリします
  • レコードの挿入/更新時刻を格納する日時/タイムスタンプをテーブルに追加し、それに基づいてクエリを実行します

別のテーブルでUPDATEまたはINSERTが発生するたびにレコードを格納する独自のテーブルをコードで作成し、テーブルにデータを入力する他のすべてのテーブルにトリガーを追加することを検討できます。

しかし、それは少し多いかもしれません。

于 2010-12-23T08:50:04.907 に答える
0

キャッシュクラスにすべての更新を通知する必要があるか、何らかの有効期限が必要です。

他の唯一のオプションは、データベースにクエリを実行してチェックすることですが、キャッシュのポイントを失うことになります:)

上記は「汎用」キャッシュに当てはまります。特定のテーブルに特化したキャッシュを実装すると、DMLパターンを利用できる可能性があります。

于 2010-12-23T10:29:01.163 に答える