我正在为一个需要提供以下用例的项目使用巨蟒库:
gcloud.datastore.api.get_multi()提供批量获取,但不提供投影gcloud.datastore.api.Query()提供投影,但不提供批处理get (如IN查询)。AFAIK,GQLQuery提供内部查询(批处理获取)和投影。是否有计划支持gcloud-python库中的GQLQueries?或者,是否有另一种方法可以在单个请求中获得批处理和投影?
发布于 2015-06-21 15:41:47
目前无法请求实体属性的子集。当您有您需要的密钥列表时,您应该使用get_multi()。
投影查询背景
在Datastore中,投影查询只是索引扫描。
例如,考虑您正在编写查询SELECT * FROM MyKind ORDER BY myFirstProp, mySecondProp。此查询将针对索引:Index(MyKind, myFirstProp, mySecondProp)执行。此索引可能类似于:
myFirstProp | mySecondProp | __key__
------------------------------------
a 1 k1
a 2 k2
b 1 k3对于索引中的每个结果,Datastore然后查找与该索引结果关联的键。如果在只投影myFirstProp或mySecondProp或两者的情况下执行投影查询,则Datastore可以避免进行随机访问查找,以查找每个结果的关联实体。这通常是通过使用预测--而不是通过网络传输它的节省--获得巨大性能收益的地方。
同样,如果您知道您需要的键列表,您可以直接查找键--不需要先查找索引。
在算子中
在Python (不在类似的云中数据存储GQL)中,有一个IN操作符,它允许您编写如下所示的查询:
SELECT * FROM MyKind WHERE myFirstProp IN ['a', 'b'].但是,Datastore实际上并不支持本机查询。在python客户机中,它将被转换为析取范式。
SELECT * FROM MyKind WHERE myFirstProp = 'a'
UNION
SELECT * FROM MyKind WHERE myFirstProp = 'b'这意味着对于IN中的每个值,您将发出一个单独的数据存储查询。
https://stackoverflow.com/questions/30960569
复制相似问题