您将如何使用Azure表存储来处理类似Twitter的应用程序?

时间:2011-01-17 20:42:47

标签: twitter azure nosql data-modeling azure-table-storage

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

但我的头,几乎习惯了关系模型......无法在Azure表或noSql中找到合理的模型。基本上,我在思考:

  • 用户可以添加其他用户 朋友。
  • 用户可以写信息(最多200个 字符)。
  • 消息始终按顺序显示 时间,最新的第一个。
  • 用户页面显示他的最后20个 消息。
  • 主页面(时间线)显示 来自他和他的最后20条消息 朋友。

非常简单:D

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

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

提前致谢。

1 个答案:

答案 0 :(得分:4)

我认为仅使用Azure Table Storage是不够的。您也应该使用Azure队列。 当消息进入时,它会被放入队列中。工作者从队列中获取消息并处理它们。

  1. 消息在公共时间轴(由时间戳键入的表)
  2. 上进行
  3. 该工作人员获取发布该消息的用户的所有关注者,并在每个时间轴上放置该消息的副本(由followerId键入的表)
  4. 当然,该消息也会放在用户的时间轴上。 (由UserId键入的表)
  5. 看起来这可能是一种浪费的方法,但是您要优化读取性能,并最终保持写入的一致性。从读取端删除连接简化了事情。