0

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

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

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

  1. (更新函数调用)userA 和 userB 将采用相同版本的 statusA 对象,likeIndex = 0 - 调用同时发生。
  2. userA 将使 likeIndex++;
  3. userA 将使用 likeIndex=1 更新 statusA。
  4. userB 将生成 likeIndex++;
  5. userB 将更新 statusA likeIndex=1。

我没有在 Datastore statusA 中拥有 likeIndes=2 的对象,而是拥有 likeIndex=1 的对象。如何处理更新过程以避免并发问题。这听起来简单而常见的问题,所以我很惊讶我很难在网上找到解决方案。(我正在与 JPA 合作)

谢谢!

4

1 回答 1

2
  1. 您需要在事务中读取和写入 likeIndex。

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

幸运的是,有一个教程一步一步地解释了这一切。惊人!

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

于 2013-08-06T16:37:31.673 回答