gpt4 book ai didi

google-app-engine - 降序 __key__ 索引是否需要额外的写入操作?

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:36 25 4
gpt4 key购买 nike

我一直在努力了解各种类型的索引如何影响每个实体所需的 Write Ops 数量。我以为我已经很清楚了,但后来我发现了一个让我陷入困境的案例。

我有一个根 User 实体,其中包含许多 GameSummary 子实体,这些子实体具有时间戳和一堆其他统计字段(比如玩家姓名、分数等)。

我的目标是能够查询所有用户或特定用户的 GameSummaries 列表。所有结果都应该按时间戳降序排列,我可能想稍后添加一个搜索功能,在其他一些 GameSummary 字段上添加相等过滤器,并以相同的排序顺序返回结果。这一切都相当简单,但我显然希望使用尽可能少的索引来做到这一点。

在时间戳属性上使用默认索引会创建两个索引(升序和降序),但我只需要其中一个索引,因此另一个写入只是开销。我的第一个想法是将该属性设置为“noindex”(Python 中的 Indexed=False),然后在 index.yaml 中添加我需要的降序索引。这最终无法正常工作,大概是因为查询计划程序无论如何都会尝试使用默认索引,但不会返回任何结果。

然后我想到,如果我使用时间戳作为实体键,我可以按 __key__ (没有默认索引)排序并仅添加我实际需要的索引。我正在使用 --require_indexes 运行开发服务器,这导致我的查询失败(正如预期的那样),直到我添加了这两个索引:

- kind: GameSummary
ancestor: no
properties:
- name: __key__
direction: desc

- kind: GameSummary
ancestor: yes
properties:
- name: __key__
direction: desc

此时,我查看了管理控制台中的数据存储查看器,注意到我的 GameSummaries 的 Write Ops 列只有 2(Entities 和 EntitiesByKind)。我期望在这里看到计数为 5(第一个索引多 1 个,祖先索引多 2 个)。不过,根据开发服务器的说法,我似乎免费获得了降序 __key__ 索引写入?

管理控制台在骗我吗?还是我遗漏了 __key__ 属性上的一些奇怪的索引?

更奇怪的是,添加具有在 __key__ 上排序的附加属性的索引,如下所示:

- kind: GameSummary
ancestor: no
properties:
- name: Player
- name: Enemy
- name: __key__
direction: desc

- kind: GameSummary
ancestor: yes
properties:
- name: Player
- name: Enemy
- name: __key__
direction: desc

也不会增加 GameSummary 实体的 Write Ops。我可能会看到这个简单的案例发生了一些神奇的事情,但这让我觉得它越来越像是开发服务器中的一个错误。

最佳答案

刚刚确认这是一个 sdk 错误,如果它不存在,您应该报告它。我在实时服务器上使用 appstats 对其进行了测试,它在添加降序索引时添加了额外的写入。

但是作为一个提示,因为我遇到了同样的事情来避免多个索引并且总是按邮寄时间降序排列,你可以对你的时间戳进行位移操作并存储它的十六进制+随机数以避免冲突。它对我有用没有问题。虽然我的确切用法是我真的有自己的计数器而不是时间戳,但出于项目规范原因。

关于google-app-engine - 降序 __key__ 索引是否需要额外的写入操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20534268/

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