0

私はファイルシステムを実装しています。フォルダにはそれぞれACLがあります。これは、基本的には、フォルダへの読み書きが許可されているユーザーIDの一覧になります。上位レベルのフォルダから下位レベルのフォルダにACLをコピーして実装したいのですが、継承されたアクセス許可が必要ですが、読み取り時にそれらを検索する必要はありません。サブフォルダ内のスーパーフォルダへの参照としてフォルダ間の関係を保存します。appengineのエンティティ間で一貫した継承プロパティHRD

操作の以下の順序、次いで、HRDで解決することは困難である:すでに存在しているフォルダAのサブフォルダとしてデータストア内

  1. プットフォルダB。
  2. 変更の問題は、私はステップ2でAのアクセス権を変更するとき、私は子供たちのすべてをルックアップする必要があるので、私はアクセス許可の変更を適用することができ、ということであるA.

のパーミッションそれらも同様です。残念ながら、これはクエリを意味するので、Bはそのクエリに表示されない可能性があります。 Bは許可の変更を逃す可能性があります!

これまで考えていた唯一の解決策は、「サブフォルダ」関係を双方向に保存することです.Aはすべてのサブフォルダへの参照を持ち、Bはスーパーフォルダへの参照を持ちます。次に、グループ間トランザクションを使用してAとBを同時に更新することができ、ステップ2でクエリを必要としません。これは、直接取得を簡単にキャッシュでき、インデックススキャンなどを必要としないためです。

誰もが他に何か考えがありますか?私は、このソリューションの冗長ストレージニーズ、またはXGトランザクションの必要性は嫌いです。

答えて

1

データストア内のトランザクションと強固に唯一のユニットはエンティティグループです。したがって、Bの読者にトランザクション保証付きのAの変更について知りたければ、AとBは同じグループに属している必要があります。そのアプローチの短所(競合、グループごとの書き込み率)を回避しようとしているように聞こえるので、許容できるトレードオフを見つける必要があります。

例えば、AエンティティとBエンティティが同じグループに属していない場合、この種のメタデータのインスタンスが同じグループに存在することは許容されます(ほとんど更新されない場合など)元のエンティティとは別に(エンティティのXG更新とこのメタデータが正常であれば)、データを分離して類似した状態に保つことができます。

Bの階層祖先すべてをすばやく識別できるデータ構造がある場合は、Bおよびその祖先の集約メタデータプロパティを決定するときに、すべての祖先の非同期読み取りを実行できます。あなたはエンティティとの完全なパスを格納することによってこれを管理することができます。これにはより多くのデータストア操作(パスの長さ順)が必要ですが、それ以上の要求時間はありません。このデータを正規化したままにしておきます。

関連する問題