在Datastore GAE中更新实体并发

时间:2013-08-06 16:31:38

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

我正在使用Google App Engine和Datastore开发我的第一个Web应用程序。发展中国家 过程很简单,但我有一个很大的困境。我想创建一个“喜欢”的机制 用户的状态(如Facebook的“喜欢”)。

所以我创建了一个“状态”实体,它具有“likeIndex”属性(我只想总计喜欢的总和)。现在我想确保当多个用户同时给出状态时,我不会遇到并发问题。

我是否从我对Datastore的短暂经验中学到了这样的流程:

  1. (在更新函数调用时)userA和userB将使用likeIndex = 0的相同版本的statusA对象 - 同时发生调用。
  2. userA将制作likeIndex ++;
  3. userA将使用likeIndex = 1更新statusA。
  4. userB将制作likeIndex ++;
  5. userB将更新statusA likeIndex = 1。
  6. 我没有在具有likeIndes = 2的Datastore statusA对象中使用likeIndex = 1的对象。 如何处理更新过程以避免并发问题。这听起来简单而且常见,所以我很惊讶我很难在网上找到解决方案。 (我正在使用JPA)

    谢谢!

1 个答案:

答案 0 :(得分:2)

  1. 您需要在事务中读写likeIndex。

  2. 如果您有很多人喜欢(即超过1次/秒),您将遇到性能问题。您需要使用分片计数器。

  3. 幸运的是,有一个教程可以一步一步地解释它。惊人!

    https://developers.google.com/appengine/articles/sharding_counters