2011-08-08 20 views
1

私はORMレイヤのオブジェクトキャッシュを構築しました。基本的に、SQLクエリのハッシュがキーとして使用され、値にはDB結果セットのオブジェクトのコレクションが含まれます。ただし、結果セット内のオブジェクトの1つが更新されると、キャッシュされた結果セットに更新されたオブジェクトが含まれていないと、問題が発生します。書き込みの一貫性はありません。書き込みの整合性をどのように実装しますか?APCキャッシュの一貫性の問題

おかげ

UPDATEは:現在、私はどのようなオブジェクトがキャッシュされると、そのキーを扱うObjectWatcherクラスを持っています。オブジェクトは検索可能なキーでキャッシュされるので、Personクラスの場合はPerson.101です。 SQLクエリがハッシュされ、キーがDependencyオブジェクトにマップされます。このオブジェクト内に依存オブジェクトのリストがあります。そのため、は、Person.101とPerson.102にマップされるAPCからDependencyオブジェクトを返すことがあります。結果のコレクションは、このDependencyオブジェクトから作成されます。これは、単一のオブジェクトの更新でうまく動作します。だから私がPerson.101を更新して新しく更新されたオブジェクトをAPCに置き換えて古いものを上書きすると、古いクエリが実行されると、その更新されたオブジェクトがその結果セットに入れられます。メモリからオブジェクトだけでなく、更新されたオブジェクトへの参照を保持するすべてのDependencyオブジェクトを消去する方法が必要です。 APCでは、キーと値を含むキーや値を含むキーを検索する方法がありますか?

答えて

1

この質問はAPCとは関係ありません。
データをAPC(または他のストレージ)に保存する方法を管理する必要があります。 APCでキーの値を更新する場合、オブジェクトが変更されたときにオブジェクトがキー(クエリのハッシュ)を認識し、このオブジェクトが別のオブジェクトからすべてのデータを収集できるときのみ可能ですそのクエリ。すべてが不条理なアイデアのように聞こえる。

すべてのモデルは単一責任原則で設計する必要があります。したがって、オブジェクト全体をキャッシュする場合(あまり良いことではありません)、オブジェクトごとに一意のキーを作成してください。
また、オブジェクトは、それらがどのように格納(キャッシュ)されるか、およびどこで格納されるかには注意するべきではありません。したがって、もう1つのオブジェクトが必要です。これはオブジェクトのキャッシュを管理します。

オブジェクト全体をキャッシュするのではなく、DBのレコードの値だけをキャッシュすることをお勧めします。これは、DBからフェッチするのに多くの時間がかかります。

しかし、SQLクエリのハッシュをキーとして使用する場合は、tagsを使用して、これらのタグにオブジェクトの「名前」を書き込むことができます。 たとえば、結果セットにPerson、Employer、Customerというオブジェクトがある場合、keyにはタグ「person」、「employer」、および「customer」が含まれます。オブジェクトCustomerが変更されると、タグcustomerでマークされたすべてのキーをキャッシュから削除することができます。
とにかく、それはCustomerオブジェクトの責任ではなく、このすべては別のオブジェクトによって管理される必要があります。

質問を編集しましたので、私はあまりにも私の答えを編集します:)

タグ、APCの一部ではないラッパーの一部です。タグは非常に便利なもので、あなたの場合には非常に便利です。更新されたオブジェクトへの参照を保持

タグは、この参照することができます。タグでキーを検索する必要はなく、そのタグに関連付けられたすべてのキーを削除するだけで(データを実際に保持するために)、このラッパーには既存の方法があります。

例:
クエリSELECT * FROM persons WHERE email <> ''があります。このクエリのキャッシュ結果には、タグ「person」が表示されます。

したがって、Personオブジェクトを更新する場合、タグ「person」でマークされたすべてのキーが削除されるため、クエリSELECT * FROM persons WHERE email <> ''の結果は削除され、次回のリクエストでスクリプトは新しい)値。

+0

申し訳ありませんが、私はより具体的にすべきでした、私は質問を更新しました。 APCでキーにタグを書き込むと、タグを含むキーを検索するにはどうすればよいですか? – Gcoop

関連する問題