如何选择NoSQL数据库引擎?

时间:2012-10-19 14:24:52

标签: mongodb cassandra redis high-load nosql

我们有一个包含以下参数的数据库:

  • 30k记录,7mb大小
  • 20次/秒
  • 1000次更新/秒
  • 1000范围选择/秒,通过二级索引,每个大约10行
  • 至少需要一个二级索引
  • 需要一些机制来使密钥过期,如果它们没有更新75秒(可以通过程序化垃圾收集器完成,但需要额外的'last_update'索引并且会增加一些负载)
  • 不需要一致性
  • 不需要耐久性
  • db应存储在内存中

现在我们使用Redis,但它没有二级索引,keys index:foo:*太慢了。 Membase也没有二级索引(据我所知)。 MongoDB和MySQL内存引擎具有表级锁。什么引擎适合我们的用例?

4 个答案:

答案 0 :(得分:2)

我认为Redis确实支持二级索引,但它们并不是隐含的:你必须明确地维护它们。有序集可以用于范围扫描,但它不如MongoDB或关系数据库中的方便。

如果您正在寻找更好地支持范围扫描的类似Redis的服务器,我建议您查看已停产的AlchemyDB项目,或Aerospike 3(商业)产品(其中包括AlchemyDB的部分功能) )。

答案 1 :(得分:2)

尝试使用http://tarantool.org/ 它有二级索引,完全在内存中。 它还使用快速异步IProto协议。

它证明稳定且速度极快。

答案 2 :(得分:0)

我以为他的意思是7mb /唱片。另一个选择是使用它的Scalable-SQL在Cassandra之上的PlayOrm ...更多的机器可以带来更好的性能,因为磁盘将在范围扫描上并行工作。

答案 3 :(得分:0)

我认为如果你能达到你指定的性能要求,那么DB在内存中或不在内存中的事实将是无关紧要的。

您的性能目标完全在单个非复制和非分片MongoDB实例的功能范围内。 Mongo使用内存映射文件,因此所有数据都将存储在内存中,但DB将连续刷新到磁盘。默认情况下,Mongo使用“不安全”模式,这消除了磁盘I / O的大部分负担。对于您的用例而言,值得考虑,而不是尝试在应用程序代码中执行数据库应该为您做什么。

添加副本(Mongo的聚类术语)和/或分片将使您有机会在需要时轻松提高性能。多个索引(包括复合索引),灵活查询,批量插入和原子更新是有助于提高性能的好功能,可以减轻应用程序代码的负担。