首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据存储:是否有计划增加GQLQuery支持?

数据存储:是否有计划增加GQLQuery支持?
EN

Stack Overflow用户
提问于 2015-06-21 01:57:33
回答 1查看 77关注 0票数 1

我正在为一个需要提供以下用例的项目使用巨蟒库:

  • 获取一批具有其属性子集的实体(投影)
  • gcloud.datastore.api.get_multi()提供批量获取,但不提供投影
  • gcloud.datastore.api.Query()提供投影,但不提供批处理get (如IN查询)。

AFAIK,GQLQuery提供内部查询(批处理获取)和投影。是否有计划支持gcloud-python库中的GQLQueries?或者,是否有另一种方法可以在单个请求中获得批处理和投影?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-21 15:41:47

目前无法请求实体属性的子集。当您有您需要的密钥列表时,您应该使用get_multi()

投影查询背景

在Datastore中,投影查询只是索引扫描。

例如,考虑您正在编写查询SELECT * FROM MyKind ORDER BY myFirstProp, mySecondProp。此查询将针对索引:Index(MyKind, myFirstProp, mySecondProp)执行。此索引可能类似于:

代码语言:javascript
复制
myFirstProp | mySecondProp | __key__
------------------------------------
a             1              k1
a             2              k2
b             1              k3

对于索引中的每个结果,Datastore然后查找与该索引结果关联的键。如果在只投影myFirstPropmySecondProp或两者的情况下执行投影查询,则Datastore可以避免进行随机访问查找,以查找每个结果的关联实体。这通常是通过使用预测--而不是通过网络传输它的节省--获得巨大性能收益的地方。

同样,如果您知道您需要的键列表,您可以直接查找键--不需要先查找索引。

在算子中

在Python (不在类似的云中数据存储GQL)中,有一个IN操作符,它允许您编写如下所示的查询:

代码语言:javascript
复制
SELECT * FROM MyKind WHERE myFirstProp IN ['a', 'b'].

但是,Datastore实际上并不支持本机查询。在python客户机中,它将被转换为析取范式

代码语言:javascript
复制
SELECT * FROM MyKind WHERE myFirstProp = 'a'
UNION
SELECT * FROM MyKind WHERE myFirstProp = 'b'

这意味着对于IN中的每个值,您将发出一个单独的数据存储查询。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30960569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档