0

タスク: グローバルなクロス エンティティ グループ BLOB 共有を実装します。

強い一貫性を保つには、BlobReference オブジェクトの親として BlobInfo または BlobKey の文字列表現を持つ先祖グループが必要です。そのため、参照元の DB オブジェクトの親として blob-key を使用して仮想祖先グループを構築します ...

br = BlobReferenece(id=some_id, parent = ndb.Key("MyBlobKey",str(blob))) 
br.put()

これは今のところ SDK で動作しますが、これが appengine の文書化されたパスからかけ離れていることを懸念しています。

以前の試行では、ndb.Key.from_old_key(blobinfo.key()) を使用して blob-key を db-key に変換できませんでした。BlobInfo テーブルへの「db/ndb」参照を取得する合法的な方法はないようです (BlobInfo クラスはdb.Model のようなインターフェイスを提供するため)。ここで何か不足していますか?

4

2 に答える 2

0

APIのさまざまな部分で「キー」という言葉がさまざまに使用されていることに混乱しているように聞こえます。BLOB キーとエンティティ キーの共通点はありません。幸いなことに、BlobKey インスタンスの str() は、Base64 でエンコードされた適切な文字列であり、Key オブジェクトの ID 部分として問題なく使用できます。そして、BlobKey コンストラクターを使用して、その ID 文字列から BlobKey インスタンスに移動できます。

于 2013-07-15T16:55:26.533 に答える
0

あなたの質問は、存在しない親を指定して、ある種の「仮想祖先グループ」を作成できるかどうかを尋ねているようです。これは正当です。ドキュメントには、親が実際に存在する必要はないことが記載されています。

https://developers.google.com/appengine/docs/python/datastore/entities#Python_Ancestor_paths

または、BlobReferences のリストが制限される場合は、それらのリストを 1 つのエンティティ内に格納するだけで、おそらくより簡単で安価になります。そのコンテナー エンティティの Key を BlobKey と同じにします。次に、そのエンティティをキーで取得して変更すると、結果整合性の問題が発生することなく作業できます。また、インデックス付きエンティティのクエリと変更よりも安価になります。

于 2013-07-15T12:56:41.910 に答える