gpt4 book ai didi

google-app-engine - 出于计费目的,ndb 缓存读取操作是否仍算作数据存储读取操作?

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

来自 NDB Caching :

NDB manages caches for you. There are two caching levels: an in-context cache and a gateway to App Engine's standard caching service, memcache. Both caches are enabled by default for all entity types, but can be configured to suit advanced needs.

我的应用程序没有进行任何 ndb 缓存配置更改,因此它必须使用默认设置 - 两个缓存级别均已启用。

我正在我的暂存环境(一个单独的专用 GAE 项目)上运行一些测试,我可以在其中完全隔离事件序列与任何虚假的外部请求。

每个事件序列都由相互触发的级联推送任务组成,创建数百个可变实体,修改其中一些实体的次数可变,读取所有实体的次数可变,最后将它们全部删除.

只有少数其他已经存在的实体在序列中被访问,所有这些实体在序列结束后仍然存在。对持久实体的访问次数应明显低于对易失实体的访问次数。

绝大多数读取操作都是通过键或 ID 进行实体查找,从 keys_only 查询或其他相关实体中获取。

我没有使用实体祖先。这些任务中的大多数执行跨组事务,我确实经常看到由于一些“热”实体上的数据争用而导致的事务失败/重试(我估计在这次运行中大约有 200-400 个,很难在Stackdriver 日志页面)。

在每日配额重置后重新执行这样一个大约 20 分钟的序列后,应用的仪表板显示云数据存储读取操作(3 万次)是云数据存储实体写入操作(1 万次)的 3 倍。如果重要的话,易变实体的数量由云数据存储实体删除(0.00089 万)指示。

memcache 命中率为 81%,但我不知道这是仅针对我的应用程序的显式 memcache 使用还是包括 ndb 的 memcache 使用。

一些早期的类似测量但不是在干净的环境中产生了类似的结果,我做了这个干净的作为验证。

这些观察结果似乎表明从缓存中读取的实体仍然算作数据存储区读取。但在这里我假设:

  • 在那大约 20 分钟内,内存缓存逐出次数并不多(该应用没有专用的内存缓存桶)。
  • 每个写入操作都会使缓存无效,因此需要读取数据存储来更新缓存,但后续的读取操作应该来自缓存(直到下一个写入操作),这应该导致整体相当可比如果不计算缓存读取,则读取和写入计数
  • 我的(相当复杂的)应用程序代码确实实现了我所描述的功能:)

我没有在文档中找到任何关于此的内容,所以想知道是否有人知道缓存的 ndb 读取是否确实算作数据存储读取,或者可以指出我的解释或某些官方文档中的缺陷关于这个问题。

最佳答案

memcache 命中率包括 ndb 写入的实体的命中。它不包括 ndb 的上下文缓存命中数。

每次写入数据存储都会使缓存失效,因此下一次读取不会缓存在内存缓存或上下文缓存中。

另一件事是 ndb 为每个事务创建一个新的上下文缓存,因此上下文缓存在面对事务时不是很有效。

简单的回答是,出于计费目的,数据存储实体的内存缓存命中不作为数据存储读取收费。

关于google-app-engine - 出于计费目的,ndb 缓存读取操作是否仍算作数据存储读取操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50284922/

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