SQLクエリ結果をキャッシュするためのクラスを設計するように依頼されました。クラスのqueryメソッドを呼び出すと、最初に結果のセット全体がクエリされてキャッシュされます。その後、各サブシーケンスクエリは更新された部分のみを取得し、結果をキャッシュにマージします。
クラスがジェネリックである必要がある場合、つまりデータベースとテーブルに関する知識がない場合、何か考えがありますか?
それは可能ですか、そして最後のクエリ以降に更新された/新しいレコードのみを取得する方法はありますか?
SQLクエリ結果をキャッシュするためのクラスを設計するように依頼されました。クラスのqueryメソッドを呼び出すと、最初に結果のセット全体がクエリされてキャッシュされます。その後、各サブシーケンスクエリは更新された部分のみを取得し、結果をキャッシュにマージします。
クラスがジェネリックである必要がある場合、つまりデータベースとテーブルに関する知識がない場合、何か考えがありますか?
それは可能ですか、そして最後のクエリ以降に更新された/新しいレコードのみを取得する方法はありますか?
MySQL(または私が知る限り他のSQLベースのデータベース)は、行の「最終更新時刻」または「挿入時刻」をどこにも保存しません。少なくとも、クエリできる場所には保存しません(バイナリログの解析はおそらくあなたがやろうとしていることではありません)。
「新しいレコード」を取得するには、次のいずれかを行う必要があります。
別のテーブルでUPDATEまたはINSERTが発生するたびにレコードを格納する独自のテーブルをコードで作成し、テーブルにデータを入力する他のすべてのテーブルにトリガーを追加することを検討できます。
しかし、それは少し多いかもしれません。
キャッシュクラスにすべての更新を通知する必要があるか、何らかの有効期限が必要です。
他の唯一のオプションは、データベースにクエリを実行してチェックすることですが、キャッシュのポイントを失うことになります:)
上記は「汎用」キャッシュに当てはまります。特定のテーブルに特化したキャッシュを実装すると、DMLパターンを利用できる可能性があります。