1

ndb.get_multi(list_of_keys)より高価なクエリを実行することを避けるために使用したい。私の理解が正しければ、ndb.get_multi()返されたエンティティごとに 1 回の読み取りのみが請求されるため、50 個のキーのリストがあり、20 個しか見つからない場合は、20 回の読み取りに対してのみ請求されます。

        keys = list()

        keys.append(Key('User', 2)) // this user exists
        keys.append(Key('User', 12)) // this user DOES NOT exist
        keys.append(Key('User', 15)) // this user DOES NOT exist

        users = ndb.get_multi(keys)

私が返すのは、3 つの項目です。1 つはユーザーで、2 つは null 値だけです。AppStats を確認すると、2 つ存在しなかったにもかかわらず、そこに入力したすべてのキーに対して実際に課金されていることがわかります。

null エンティティが返されるのはなぜですか? 見つからないアイテムはスキップするべきではありませんか?

4

2 に答える 2

2

できるようになりたい

obj1, obj2, obj3 = ndb.get_multi([key1, key2, key3])

返される結果の数が任意の長さである場合、タプルのアンパックが中断し、リストを取得してキーを検査および比較する必要があります。フィルタを使用して必要な場合は、Noneを削除するのも簡単です。

filter(None, list)

コストはget/read(操作)ごとであり、返された結果(データ)ごとと同じではありません。GAEの内部サービスと通信のコストは、存在するかどうかに関係なくほぼ同じですが、存在しないアイテムの逆シリアル化のためにCPUに支払う必要はありません。

于 2012-10-19T21:46:56.543 に答える
1

いいえ、見つからなかったアイテムを確認できるようになったからです。

于 2012-10-19T15:54:10.013 に答える