我想知道其他一些非关系数据库是否适合活动流 - 有点像你在 Facebook、Flickr ( http://www.flickr.com/activity ) 等上看到的。现在,我'正在使用 MySQL,但它非常费力(我有数千万条活动记录),而且由于它们基本上是只读的,一旦写入并且总是按时间顺序查看,我认为替代数据库可能会运作良好。
这些活动是这样的:
- 下午 6 点:约翰最喜欢培根
- 下午 5:30:简评论了雪崩
- 5:15 PM:简将培根的照片添加到她的相册
问题是,与 Twitter 和其他一些系统不同,我不能简单地将活动附加到每个对活动感兴趣的用户的列表中——如果可以的话,Redis 会很合适(使用它的列表操作)。
我需要能够执行以下操作:
- 以相反的日期顺序为您关注的一组或部分人(“John”和“Jane”)提取活动
- 以相反的日期顺序拉动事物(如“培根”)的活动
- 按活动类型过滤(“收藏”、“评论”)
- 存储至少 3000 万个活动
- 理想情况下,如果您添加或删除了您关注的人,您的活动流将反映更改。
我一直在用 MySQL 做这个。我的“活动”表尽可能紧凑,键尽可能小,并且索引适当。它有效,但感觉就像是这个工作的错误工具。
有没有人在传统的 RDBMS 之外做这样的事情?
2009 年 11 月更新:现在回答我自己的问题还为时过早,但我目前的解决方案是坚持使用 MySQL,但增加 Redis 以快速访问新的活动流数据。我的答案中的更多信息:如何在社交网络中实现活动流...
2014 年8 月更新:多年后,我仍然使用 MySQL 作为记录系统,并使用 Redis 快速访问每个用户的最新活动。多亏了pt-online-schema-change,处理大型 MySQL 表上的模式更改已成为一个非问题