如何在Google App Engine上建模社交新闻Feed
我们想要做一个“新闻推送”,用户可以看到她朋友们发来的消息,并且最新的消息排在最前面。但是这个推送需要能反映她朋友列表的变化。也就是说,如果她添加了新朋友,来自这些朋友的消息应该出现在推送中;如果她删除了朋友,那么这些朋友的消息就不应该再出现。如果我们使用pubsub-test的例子,并且给每条消息附上一个接收者列表,这样的话,当用户添加或删除朋友时,就需要频繁地修改消息的接收者列表。
一开始,我们用传统的关系数据库管理系统(RDBMS)思路来模拟发布-订阅的“分发”方式。起初看起来还不错,但后来由于IN操作符的工作方式,我们很快意识到这样做行不通。我们找到了一段Brett Slatkin在去年Google I/O上的演讲,看了几遍,但对于如何使用“动态”接收者列表仍然不太明白。
我们需要一些关于如何在建模时“思考”的提示。
1 个回答
3
我把在Google App Engine的Google小组里得到的答案贴在这里,链接是http://groups.google.com/group/google-appengine/browse_thread/thread/09a05c5f41163b4d#,作者是Ikai L(谷歌的)。
这里有几个想法:
删除朋友的操作是不是很常见?同样,添加朋友的操作也是不是很常见?(这些都是相对的,跟“新闻动态”的阅读量有关)
我记得,要让大量的读取操作变得高效,唯一的方法就是在每个人的动态中多次写入数据。Twitter好像就是这样做的,采用了一种“最终一致性”的模型。这就是为什么在高负载时,你的动态更新可能会延迟几分钟。大家普遍认为,传统的关系型数据库模型是行不通的。
- Jaiku引擎是开源的,你可以研究一下:http://code.google.com/p/jaikuengine。这个引擎可以在App Engine上运行。希望这些对你设计时有所帮助。