0

Google DataStoreでは、urlsafeキー値を使用してエンティティを一括取得する方法はありますか?Google Datastoreは、urlsafeを使用してバルクデータを取得します。

私は約ndb.get_multi([list])を知っています。これは、キーのリストを取得し、より効率的な一括でエンティティを取得します。しかし、私たちのケースでは、エンティティのurlsafeキー値が埋め込まれた数百のエンティティを持つWebページがあります。最初は単一のエンティティでしか操作を行っていなかったので、urlsafe値を使用してエンティティを取得し、問題なく操作できました。さて、複数のエンティティを一度に変更する必要があり、効率的なアプローチのように聞こえるわけではありません。何かご意見は?

エンティティの鍵IDを直接使用する利点はありますか(対鍵の安全な値)? documentationget_by_id()は、一括してエンティティを取得できることを意味しません(IDは1つだけです)。

エンティティキーを使用してエンティティを一括して取得する唯一の方法は、ウェブページでキーを公開することはお勧めできません。これは、ページの一括操作に関して数百の実体?

答えて

1

鍵とurlsafeの文字列は、正確に1:1の関係にあります。あなたが対応するキーを取得し、すべてのエンティティを取得するためにこれらのキーとndb.get_multi()を使用することができますurlsafe文字列の束を持っている場合、だから、

urlsafe_string = entity_key.urlsafe() 
entity_key = ndb.Key(urlsafe=urlsafe_string) 

を使用し、その後、必要に応じてそれらを修正する:あなたは1を持っている場合、あなたは他を得ることができますndb.put_multi()を使用してデータストアに戻します。

IDを使用する場合、エンティティの祖先を使用しない場合にのみ便利です(便利な方法で)。それ以外の場合は、IDとエンティティの親キー(またはその祖先全体)の両方が必要なキーを取得する必要があります。この場合、urlsafe文字列を使用する方が便利です。

しかし、(それぞれのエンティティグループのルートエンティティ別名)なし親エンティティキーとそのIDを持つエンティティの1に常にある:1の関係とあなたが他を持っている場合は、再度使用すると、1つを取得することができます。

entity_key_id = entity_key.id() 
entity_key = ndb.Key(MyModel, entity_key_id) 

さらに、IDの束から、ndb.get_multi()および/またはndb.put_multi()で使用するキーを取得できます。

urlsafe文字列の上に化粧品の利点を持つことができるIDを使用しては - 彼らはURL内またはページのHTMLコード:)

IDを使用する別の利点でつくれたときに目に通常より短くかつ簡単に分割する機能ですまたは1対1の関係にあるエンティティをより単純な方法で扱うことができます。 re-using an entity's ID for other entities of different kinds - sane idea?

Creating and Using Entity Keysを参照してください。

+0

ありがとう@Dan Cornilescuは説明のためにたくさんありますので、あなたが言っていることはurlsafeリストをループし、 'entity_key = ndb.Key(urlsafe = urlsafe_string)'を使用するとデータストアにアクセスしません。 urlsafeをキーに変換(_decode_)するクラス関数?その後 'ndb.get_multi()'を使うことができますが、正しいのですか? – Khaled

+0

はい、そうです。 –

+0

素晴らしいです、ありがとうございます。私はそれを試み、それは美しく働いた。単一のものではなく未来​​のリストを返す非同期バージョン 'ndb.get_multi_async()'を使い、 'get_result()'がリストに対して機能しないので、別の問題が浮かび上がった。リストをループしたくないが、これを理解する:D .. – Khaled

関連する問題