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 个只有空值。当我检查 AppStats 时,我发现它确实对我放入其中的所有密钥收费,即使 2 不存在。

为什么我要返回空实体?不应该跳过未找到的项目吗?

4

2 回答 2

2

你希望能够做到

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

如果返回的结果数量是任意长度,则元组解包会中断,您必须获取一个列表并检查和比较键。如果您需要使用filter删除 None 也很简单:

filter(None, list)

成本是每次获取/读取(操作),与返回结果(数据)不同。GAE 中内部服务和通信的成本无论是否存在都大致相同,但对于不存在的项目,您不必为反序列化支付 cpu 费用。

于 2012-10-19T21:46:56.543 回答
1

不,因为现在您可以看到哪些项目没有找到。

于 2012-10-19T15:54:10.013 回答