0

我正在考虑一个非常简单的类似 Twitter 的应用程序,我正在考虑仅支持 twits 和时间线。

但是我的脑袋,已经习惯了关系模型……无法在 Azure 表或 noSql 中想出一个合理的模型。基本上,我在想:

  • 用户可以将其他用户添加为好友。
  • 用户可以编写消息(最多 200 个字符)。
  • 消息总是按时间顺序显示,最新的在前。
  • 用户页面显示他最近的 20 条消息。
  • 主页(时间线)显示来自他和他的朋友的最后 20 条消息。

很简单:D

如果我将所有消息放在一个表中,并将 userId 作为分区键......一切都很简单,但是......我不认为该解决方案可以很好地扩展。但是其他解决方案使时间线页面非常复杂或非常低效,因为它不是要从您的每个朋友那里获取最新的 20 条消息,而是要从所有人那里获取最新的 20 条消息……这让我大吃一惊。可能是您有一个非常讨厌的朋友,而最近的 20 条消息来自他 :D

以 Azure 表格方式存储此信息的可扩展且有效的方法是什么?

提前致谢。

4

1 回答 1

4

我想说仅使用 Azure 表存储是不够的。您也应该使用 Azure 队列。当消息进入时,它会被放入队列中。工作人员从队列中获取消息并处理它们。

  1. 消息出现在公共时间线上(以时间戳为键的表)
  2. 工作人员获取发布消息的用户的所有关注者,并将消息的副本放在他们的每个时间线上(由 followerId 键入的表)
  3. 当然,消息也会被放置在用户的时间线上。(由 UserId 键入的表)

看起来这可能是一种浪费的方法,但您正在优化读取性能并最终保持写入一致性。从读取端删除连接可以简化事情。

于 2011-01-17T21:08:31.470 回答