【问题标题】:Updating entity concurrency in Datastore GAE在 Datastore GAE 中更新实体并发
【发布时间】:2013-08-06 16:31:38
【问题描述】:

我正在使用 Google App Engine 和 Datastore 开发我的第一个网络应用程序。发展中的 过程非常简单,但我有一个巨大的困境。我想为 用户状态(如 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 合作)

谢谢!

【问题讨论】:

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


    【解决方案1】:
    1. 您需要在事务中读写likeIndex。

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

    幸运的是,有一个教程可以逐步解释所有内容。太棒了!

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

    【讨论】:

    • 我遇到了这个解决方案,但我想使用更传统的交易解决方案。你知道使用 EntityManager 对象的交易指南吗?非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    相关资源
    最近更新 更多