【发布时间】:2014-12-13 00:33:58
【问题描述】:
我正在寻找一种在 Google App Engine 中对列表进行分片的良好设计模式。我已经阅读并实现了 Google Docs here 中描述的分片计数器,但我现在正尝试将相同的原则应用于列表。以下是我的问题和可能的解决方案 - 我可以得到您的意见吗?
问题: 我系统上的用户可以收到许多消息,有点像在线聊天系统。我希望服务器记录所有传入的消息(它们将包含几个字段 - 从、到等)。但是,我从文档中知道,更新同一个实体组通常会导致数据存储争用导致异常。当一个用户在短时间内收到许多消息从而导致他的实体被多次写入时,可能会发生这种情况。那么如何抽象出上面的分片计数器示例:
- 定义五个实体/实体组
- 对于要添加的每条消息,随机选择一个实体并将消息附加到它并写回商店,
- 要获取消息列表,请读取所有实体并合并...
关于上面的一些问题:
- 最重要的是,这是处理事情的最佳方式还是有更优雅/更高效的设计模式?
- 有什么方法可以有效地按某个字段表示某个日期之后的所有内容来过滤邮件列表?
- 如果我需要一个分片集怎么办?我是否应该阅读所有实体并检查每次写入时是否已经存在新项目?或者只是像上面一样添加它,然后在下一个请求进入读取时删除重复项?
【问题讨论】:
标签: java performance google-app-engine sharding