在Google App Engine中构建分片列表

时间:2014-12-12 10:11:33

标签: java performance google-app-engine sharding

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

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

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

关于上述内容的一些问题:

  1. 最重要的是,这是最好的方式还是有更优雅/更有效的设计模式?
  2. 通过其中一个字段过滤消息列表的有效方法是说某个日期之后的所有内容?
  3. 如果我需要分片集怎么办?我应该读入所有实体并检查每次写入时新项目是否已存在?或者只是按照上面的说法添加它,然后在下一个请求进入读取时删除重复项?

1 个答案:

答案 0 :(得分:0)

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

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

取决于这是否是可接受的权衡。