我们有一个包含以下参数的数据库:
现在我们使用Redis,但它没有二级索引,keys index:foo:*
太慢了。 Membase也没有二级索引(据我所知)。 MongoDB和MySQL内存引擎具有表级锁。什么引擎适合我们的用例?
答案 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的聚类术语)和/或分片将使您有机会在需要时轻松提高性能。多个索引(包括复合索引),灵活查询,批量插入和原子更新是有助于提高性能的好功能,可以减轻应用程序代码的负担。