キーまたはIDでエンティティをロードおよび保存するために単純なレイヤーを使用し、このレイヤーにキャッシュを追加しました。指定されたキーを持つエンティティがキャッシュにある場合、データストアからフェッチするのではなく、それを返します。また、エンティティが更新されてデータストアに保存されると、レイヤは単にキャッシュ内のエンティティを null に設定します。完全に透明です。
正常に動作しているように見えますが、キャッシュからフェッチされたオブジェクトは、データストアからフェッチされたオブジェクトとわずかに異なります。たとえば、いくつかのことが機能しなくなり、エンティティ内のコレクションで .contains() を使用して、2 つのエンティティ間に関係があるかどうかを確認できません。また、キャッシュからオブジェクトをロードし、その直後にデータストアに保存したときに、関係を表すコレクション内のすべてのアイテムがnull
s に置き換えられたという奇妙な動作にも遭遇しました。しかし、私はそれを再現できませんでした。今では正常に動作しています。
内部で何が起こっているのかわからないので、問題は、キャッシュを操作するこの方法は信頼できるかということです。データストアからフェッチされたのと同じように、キャッシュからフェッチされたエンティティを操作できますか (子へのアクセス、更新、削除など)?