首页 > 解决方案 > 谷歌云数据存储,同时读/写,可能发生冲突?

问题描述

场景是,我启动了很多工作人员(计算引擎虚拟机),他们都以“打开”状态查询相同的数据存储类型。他们以 10k 的限制进行查询。然后工作人员通过 put_multi (python) 将状态更新为“正在运行”。

同时访问实体时会发生读/写冲突吗?

标签: google-cloud-datastore

解决方案


Google Cloud Datastore 在使用上有一些限制,例如 Datastore 可以处理很多操作,但您需要遵循Datastore 的最佳实践文档500/50/5中提到的规则。

这条规定说

我们建议每秒最多对新类型进行 500 次操作,然后每 5 分钟将流量增加 50%。理论上,使用此加速计划,您可以在 90 分钟后增长到每秒 740K 操作。确保写入在整个键范围内相对均匀分布。

最佳实践文件还提到:

如果您更新实体的速度过快,那么您的 Datastore 模式写入将具有更高的延迟、超时和其他类型的错误。这称为争用。

以我的经验,contention当一个实体在一秒钟内被修改一次以上时会出现这种效果,我的建议是每秒修改一次同一个实体(写操作)

通过遵循这些规则,同时读取和写入不会成为性能问题。

关于数据一致性,请记住,同时启动的读取和写入操作将进入竞争状态,这可能会导致一些意想不到的结果。

正如事务文档中提到的,您可以使用它们来延迟第二个事务,避免由于事务锁定功能而导致的竞争条件

文档中是一些关于使用事务的数据一致性的代码示例。


推荐阅读