Cloud Datastore - 使用小型操作

Posted

技术标签:

【中文标题】Cloud Datastore - 使用小型操作【英文标题】:Cloud Datastore - Make Use of Small Operations 【发布时间】:2017-10-13 15:22:47 【问题描述】:

在我的 Google Cloud Datastore 中,使用 App Engine,我有大约 1000 个 A 类型的实体。

我需要预先加载整个实体列表,并在每次用户登录时不断更新。我不能静态地这样做。

利用 Google Cloud Datastore 定价模型 (https://cloud.google.com/datastore/pricing) 我将查询代码更改为:

a_entities = A.query().fetch()

到:

a_keys = A.query().fetch(keys_only=True)
a_entities = ndb.get_multi(a_keys)

所以我保持在每日免费配额内,因为我将大部分读取操作转移到“数据存储小型操作”类型,在我阅读时,这些操作是免费且无限制的。

这是一个合理的解决方案吗?如果流量增加很多,它是否能够维持一定的流量?它会影响其他资源吗?

谢谢

【问题讨论】:

【参考方案1】:

keys_only 查询是免费的(只需 1 次操作)。但是下一行,get_multi 实际实体不是免费的。您还没有发现保持在免费配额内的漏洞。

【讨论】:

好的,谢谢,通过测试,我发现这往往比第一行在配额上执行得更好。是因为memcache吗? @FedericoCapello 如果值在内存缓存中,从成本的角度来看,您将从这种方法中受益(假设使用共享内存缓存)。但是,从性能的角度来看,您需要进行 2 次往返。在大容量场景中,您还需要注意热键问题

以上是关于Cloud Datastore - 使用小型操作的主要内容,如果未能解决你的问题,请参考以下文章

库 appengine.api.datastore 和 com.google.cloud.datastore 有啥区别?

在 Google Cloud Datastore 上使用动态类型

Google Cloud Datastore Emulator 如何验证我们的 datastore-index.xml?

Cloud Firestore 下一代 Cloud Datastore?

使用 google Cloud Datastore 在所有用户之间共享数据

如何从项目中完全删除 Cloud Datastore?