google-app-engine - 在 BigTable 数据存储中,关于并发性,如何 "lock"实体?

标签 google-app-engine concurrency bigtable

我不知道如何在 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/

相关文章:

python - 为存储在数据存储中的图像发送 "Cache-Control: public"时设置 “304 Not Modified” 是否可以

java - 如何为 Google Cloud SQL 配置 Java Hibernate?

google-app-engine - Appengine > Go > 映射数据存储结果

go - mutex.Lock() 如何知道要锁定哪些变量?

kubernetes - 使用HTTP POST将OpenTSDB写入Bigtable不起作用(使用Kubernetes(

javax.naming.initialcontext 是一个受限制的类 google app engine

java - 如果 Collection 只写在构造函数中,它是线程安全的吗?

concurrency - 锁定 Camel 处理器

computer-science - 什么是 SSTable?

python - App Engine 会自动缓存频繁查询吗?