google-cloud-datastore - 谷歌云数据存储,同时读/写,可能发生冲突?
问题描述
场景是,我启动了很多工作人员(计算引擎虚拟机),他们都以“打开”状态查询相同的数据存储类型。他们以 10k 的限制进行查询。然后工作人员通过 put_multi (python) 将状态更新为“正在运行”。
同时访问实体时会发生读/写冲突吗?
解决方案
Google Cloud Datastore 在使用上有一些限制,例如 Datastore 可以处理很多操作,但您需要遵循Datastore 的最佳实践文档500/50/5
中提到的规则。
这条规定说
我们建议每秒最多对新类型进行 500 次操作,然后每 5 分钟将流量增加 50%。理论上,使用此加速计划,您可以在 90 分钟后增长到每秒 740K 操作。确保写入在整个键范围内相对均匀分布。
最佳实践文件还提到:
如果您更新实体的速度过快,那么您的 Datastore 模式写入将具有更高的延迟、超时和其他类型的错误。这称为争用。
以我的经验,contention
当一个实体在一秒钟内被修改一次以上时会出现这种效果,我的建议是每秒修改一次同一个实体(写操作)
通过遵循这些规则,同时读取和写入不会成为性能问题。
关于数据一致性,请记住,同时启动的读取和写入操作将进入竞争状态,这可能会导致一些意想不到的结果。
正如事务文档中提到的,您可以使用它们来延迟第二个事务,避免由于事务锁定功能而导致的竞争条件
本文档中是一些关于使用事务的数据一致性的代码示例。
推荐阅读
- javascript - 如何单击按钮从谷歌驱动器播放 iframe?
- gnuplot - Gnuplot -- 在散点图的适当位置显示平均值
- go - 以编程方式重放原始 HTTP 请求
- python - Django 登录错误,LOGIN_REDIRECT_URL 不起作用
- maxima - 使用 EzUnits 绘制图形
- azure - Azure 应用服务如何管理与 docker 容器的端口绑定?它可以识别 Expose 吗?
- typeorm - 如何在 TypeOrm 中为 postgresql 指定约束名称
- python - 使用 python 在不同的代码文件中使用套接字服务器连接
- flutter - Riverpod Flutter 中 Provider.value 的等价物
- vector - 相机偏航/俯仰到方向矢量