gpt4 book ai didi

python - 用于计数查询的 Google Cloud Datastore 索引

转载 作者:行者123 更新时间:2023-12-01 09:12:17 24 4
gpt4 key购买 nike

Google 云数据存储要求需要构建复合索引来查询一种类型的多个字段。以下面的查询为例,

class Greeting(ndb.Model):
user = ndb.StringProperty()
place = ndb.StringProperty()

# Query 1
Greeting.query(Greeting.user == 'yash@gmail.com', Greeting.place == 'London').fetch()
# Query 2
Greeting.query(Greeting.user == 'yash@gmail.com', Greeting.place == 'London').count()

我正在使用 python 和 ndb 来访问云数据存储。在上面的示例中,如果 userplace 上没有定义复合索引,查询 1 会引发 NeedIndexError。但即使 userplace 上没有索引,查询 2 也能正常工作。

我想了解当云数据存储强制使用​​索引来获取实体列表(查询 1)时,它如何在没有索引的情况下获取计数(查询 2)。据我所知,它存储每个索引的每种统计信息,这将导致对现有索引计数的更快响应(请参阅 docs )。但我无法解释上述行为。

注意:查询给定类型的一个属性时不会出现问题,因为默认情况下云数据存储对单个属性有索引。

最佳答案

对于为什么会发生这种情况,没有明确和直接的解释,但很可能是因为改进的查询规划器如何与 zigzag 索引配合使用。

您可以在这里阅读更多相关信息:https://cloud.google.com/appengine/articles/indexselection#Improved_Query_Planner

count() 工作和 fetch() 背后的逻辑可能不会,因为使用 count() 你不需要保留内存中有很多结果。

因此,在 count() 的情况下,您可以通过将工作拆分为并行处理的多个 block ,然后将相应的计数求和为一个来轻松扩展。你不能用游标/记录集廉价地做到这一点。

关于python - 用于计数查询的 Google Cloud Datastore 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51555774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com