数据存储:针对事务内的实体组的多次写入超出写入限制?

时间:2016-07-09 01:02:17

标签: google-app-engine google-cloud-datastore

我熟悉Datastore对实体组的单次写入限制(ok,5,可能)。这与交易有什么关系?

文档似乎表明我可以在事务中进行多项修改 - 例如添加几个后代实体:

  

单个事务可以修改单个组中的多个实体,   或者通过使新实体的父实体成为新的实体来添加新的实体   该组中的现有实体。

https://cloud.google.com/appengine/docs/java/datastore/transactions

1 个答案:

答案 0 :(得分:1)

是的,您可以在同一事务中为每个实体组执行多次写操作,但要小心:

  • 注意没有写入导致同一事务内部发生冲突,否则事务最终会失败(即使重试后)
  • 尝试将每个事务中的写入量保持在较低水平或以某种方式确保事务之间有足够的间隔,以使总写入操作率(或者更确切地说是其短期平均值)保持(良好)低于1写入/秒限制 - 为瞬间峰值留出空间,偶尔重试那些在这个限制上咀嚼的失败。否则,您将获得并发/争用异常。请参阅Objectify - many writes to same entity in short period of time with and without transaction

当然,您可以在跨组事务中写入最多25个实体组(此时)(每个实体组都有自己的~1个写入/秒限制,最多可达~25个写入/秒) )。

在最终的一致性和写入throuput之间取得适当的平衡并非易事。这个可能有趣:What would be the purpose of putting all datastore entities in a single group?

更新DanMcGrath的评论:

  

技术上每个实体组每秒写1次写入事务,   其中一个事务最多可包含500个实体   组。这意味着您最多可以每秒写入500个实体   进入一个实体组。另请注意,您可以立即达到峰值   第二,虽然如果你支持它,你会增加击球的风险   争用以及系统的最终一致性。 - 丹   McGrath 1小时前