Mysql 用于活动流的传统关系数据库的替代方案

Mysql 用于活动流的传统关系数据库的替代方案,mysql,database,database-design,nosql,Mysql,Database,Database Design,Nosql,我想知道其他一些非关系型数据库是否适合活动流——有点像你在Facebook、Flickr()等网站上看到的那样。现在,我使用MySQL,但这很费劲(我有上千万条活动记录),而且因为它们基本上是只读的,一次写入,总是按时间顺序查看,我在想,另一种DB可能会很好地工作 这些活动包括: 下午6点:约翰喜欢吃熏肉 下午5:30:简对雪灾发表了评论 下午5:15:简在她的相册中添加了一张培根的照片 问题是,与Twitter和其他一些系统不同,我不能简单地将活动添加到对活动感兴趣的每个用户的列表中——如

我想知道其他一些非关系型数据库是否适合活动流——有点像你在Facebook、Flickr()等网站上看到的那样。现在,我使用MySQL,但这很费劲(我有上千万条活动记录),而且因为它们基本上是只读的,一次写入,总是按时间顺序查看,我在想,另一种DB可能会很好地工作

这些活动包括:

  • 下午6点:约翰喜欢吃熏肉
  • 下午5:30:简对雪灾发表了评论
  • 下午5:15:简在她的相册中添加了一张培根的照片
问题是,与Twitter和其他一些系统不同,我不能简单地将活动添加到对活动感兴趣的每个用户的列表中——如果我可以的话——它看起来像(带有列表操作)

我需要能够做到以下几点:

  • 按与日期相反的顺序,为您正在跟踪的人(“John”和“Jane”)的集合或子集拉取活动
  • 按与日期相反的顺序提取某事物(如“培根”)的活动
  • 按活动类型筛选(“收藏”、“评论”)
  • 存储至少3000万个活动
  • 理想情况下,如果您添加或删除了您正在跟踪的人员,您的活动流将反映更改
我一直在用MySQL做这件事。我的“活动”表尽可能紧凑,键尽可能小,索引也适当。它是有效的,但感觉它是这个工作的错误工具

有人在传统RDBMS之外做类似的事情吗?

2009年11月更新:现在回答我自己的问题还为时过早,但我目前的解决方案是坚持使用MySQL,但使用Redis进行扩展,以便快速访问新的活动流数据。更多信息请参见我的回答:


2014年8月更新:几年后,我仍然使用MySQL作为记录系统,并使用Redis快速访问每个用户的最新活动。由于

我还计划离开SQL,因此处理大规模MySQL表上的模式更改已不再是问题。我一直在看,这看起来很有希望。从您的需求来看,我认为所有这些都可以通过CouchDB视图和列表api来完成。

对于一个项目,我曾经需要一个简单的数据库,它可以快速进行查找,并且可以进行大量查找和偶尔编写。我只是写了我自己的文件格式

虽然您也可以这样做,但它相当复杂,特别是当您需要从web服务器支持它时。对于web服务器,您至少需要保护对文件的每次写入,并确保可以从多个线程读取该文件。这种文件格式的设计应该通过大量的测试和实验来尽可能好地解决。对于这种风格的web项目来说,一个小错误可能是致命的,但如果您让它工作起来,它可以非常好而且非常快地工作


但对于99.999%的情况,您不需要这样的自定义解决方案。升级硬件、迁移到Oracle、SQL Server或InterBase、使用专用数据库服务器、使用更快的硬盘、安装更多内存、升级到64位系统都更容易。这些是用最少的努力来提高性能的更通用的技巧。

我真的,真的,建议您继续使用MySQL(或RDBMS),直到您完全了解情况为止

我不知道您计划使用多少性能或数据,但3000万行并不多

如果需要优化某些范围扫描,可以通过(例如)InnoDB明智地选择(隐式聚集)主键和/或在必要时进行非规范化来实现

但和大多数事情一样,首先让它工作,然后修复在生产级硬件的性能测试实验室中检测到的性能问题


编辑:其他一些要点:

  • 键/值数据库,如Cassandra、Voldermort等,通常不支持二级索引
  • 因此,您不能创建索引
  • 他们中的大多数人也不做范围扫描(甚至在主索引上),因为他们使用散列来实现分区(他们大多数都这样做)
  • 因此,它们也不会进行范围到期(从tbl中删除,其中ts
  • 您的应用程序必须自己完成所有这一切,或者在没有它的情况下进行管理;二级索引是真正的杀手
  • 改变表格。。。添加索引在MySQL中需要相当长的时间,例如使用一个大表,但至少不需要编写太多代码来完成。在“nosql”数据库中,这也需要很长时间,但您还必须编写一堆又一堆代码来维护新的二级索引,使其正确过期,并修改查询以使用它

简言之。。。您不能使用键/值数据库作为避免更改表的快捷方式。

我建议您学习技术。有几种开源选项可用,也有强大的商业产品,可以满足您所描述的小零食量。

在我看来,您想要做的事情——以几种不同的方式查询大量数据并对结果排序——正是RDBME设计的目的

我怀疑您会发现任何其他数据存储能够做到这一点,以及现代商业DBMS(Oracle、SQLServer、DB2等)或任何能够实现这一点的opn源代码工具 这比MySql更好

你可以看看Googles BigTable,它实际上是一个关系数据库,但是 它可以为您的程序呈现“对象”的个性。它特别适合自由格式的文本 搜索和复杂谓词。由于整件事(至少是你可以下载的版本)都是用Python实现的,我怀疑它在查询马拉松中会击败MySql。

是无模式的,检索一个巨大的