【问题标题】:Building a sharded list in Google App Engine在 Google App Engine 中构建分片列表
【发布时间】:2014-12-13 00:33:58
【问题描述】:

我正在寻找一种在 Google App Engine 中对列表进行分片的良好设计模式。我已经阅读并实现了 Google Docs here 中描述的分片计数器,但我现在正尝试将相同的原则应用于列表。以下是我的问题和可能的解决方案 - 我可以得到您的意见吗?

问题: 我系统上的用户可以收到许多消息,有点像在线聊天系统。我希望服务器记录所有传入的消息(它们将包含几个字段 - 从、到等)。但是,我从文档中知道,更新同一个实体组通常会导致数据存储争用导致异常。当一个用户在短时间内收到许多消息从而导致他的实体被多次写入时,可能会发生这种情况。那么如何抽象出上面的分片计数器示例:

  • 定义五个实体/实体组
  • 对于要添加的每条消息,随机选择一个实体并将消息附加到它并写回商店,
  • 要获取消息列表,请读取所有实体并合并...

关于上面的一些问题:

  1. 最重要的是,这是处理事情的最佳方式还是有更优雅/更高效的设计模式?
  2. 有什么方法可以有效地按某个字段表示某个日期之后的所有内容来过滤邮件列表?
  3. 如果我需要一个分片集怎么办?我是否应该阅读所有实体并检查每次写入时是否已经存在新项目?或者只是像上面一样添加它,然后在下一个请求进入读取时删除重复项?

【问题讨论】:

    标签: java performance google-app-engine sharding


    【解决方案1】:

    为什么要将所有消息放在 1 个实体组中?

    如果您不指定祖先,则不需要分片,但由于最终一致性,最终用户在查询消息时可能会看到一些滞后。

    取决于这是否可以接受。

    【讨论】:

    • 我不打算将所有消息放在一个实体组中,我担心当一个用户收到太多消息而导致他的实体出现争用时会发生什么。
    • 好吧,你会得到异常说'太多争用'。最好针对这个进行设计,然后进行处理。
    • 我想我看到了你的困惑:同一个实体同一个实体组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2012-09-05
    • 2013-12-25
    • 2014-05-29
    • 2019-03-09
    • 2012-07-08
    • 1970-01-01
    相关资源
    最近更新 更多