我不知道如何在 BigTable 数据存储中处理这个问题。
想象一下以下示例(只是为了解释概念。该示例与我的实际数据模型不符):
- 我有一个计数器实体,用于跟踪数据存储中的事务数量。假设当前“计数”为 100。
- 现在两个网络请求同时读取该值。
- 两个网络请求都添加了新事务
- 最后两者都更新了计数器(至 101)。
计数器值现在不准确。应该是 102。
对于如何处理这种情况有什么建议吗?我可以“锁定”计数器以确保在第一个 Web 请求完成之前第二个 Web 请求不会读取它吗?
最佳答案
您有多种选择:
- 根据您的柜台和实体的范围,让交易实体成为柜台的子实体。然后,您可以插入交易并更新计数器 transactionally 。请记住,这会将您的更新率限制为大约 1-5 QPS。
- 如果您的计数不必 100% 准确,请分别插入实体并更新计数器(使用单实体事务)。您可以运行常规 cronjob 来重新计算实体数量,并在错误导致计数器不同步时修复计数器。
- 您可以构建自己的 limited distributed transaction support .
关于google-app-engine - 在 BigTable 数据存储中,关于并发性,如何 "lock"实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1804112/