Mongodb 如何选择NoSQL数据库引擎?
我们有一个具有以下参数的数据库:Mongodb 如何选择NoSQL数据库引擎?,mongodb,cassandra,redis,high-load,nosql,Mongodb,Cassandra,Redis,High Load,Nosql,我们有一个具有以下参数的数据库: 30k记录,7mb大小 每秒20次插入 每秒1000次更新 1000范围选择/秒,按二级索引,每个约10行 至少需要一个二级索引 如果密钥在75秒内未更新,则需要一些机制使其过期(可以通过编程垃圾收集器完成,但需要额外的“last_update”索引,并将添加一些负载) 不需要一致性 不需要耐久性 数据库应该存储在内存中 现在我们使用Redis,但它没有二级索引,而且它的keys-index:foo::太慢了。Membase也没有二级索引(据我所知)。Mon
- 30k记录,7mb大小
- 每秒20次插入
- 每秒1000次更新
- 1000范围选择/秒,按二级索引,每个约10行
- 至少需要一个二级索引
- 如果密钥在75秒内未更新,则需要一些机制使其过期(可以通过编程垃圾收集器完成,但需要额外的“last_update”索引,并将添加一些负载)
- 不需要一致性
- 不需要耐久性
- 数据库应该存储在内存中
现在我们使用Redis,但它没有二级索引,而且它的
keys-index:foo::
太慢了。Membase也没有二级索引(据我所知)。MongoDB和MySQL内存引擎具有表级锁。什么引擎适合我们的用例?我认为Redis确实支持二级索引,但它们不是隐式的:您必须显式地维护它们。排序集可以用于范围扫描,但它不如MongoDB或关系数据库方便
如果你正在寻找一个更能支持范围扫描的Redis服务器,我建议你看看已经停产的AlchemyDB项目,或者Aerospike 3(商业)产品(包括AlchemyDB的部分功能)
它被证明稳定且速度惊人。您不需要在任何地方向磁盘写入任何内容或同步状态,这是数据库设计中两个最大的复杂性,而且您的数据集都有7 MB。您是否考虑过自己将其存储在适当的数据结构中?无论您使用哪种语言,都不难获得如此高的性能水平。@willglynn+1。否则,您是否检查了Riak功能?您所说的“二级索引”是什么意思?许多NoSQL技术(如MongoDB)只使用一个查询,除非它是
$或,因此用于查询的辅助索引实际上不起作用。此外,MongoDB不存储在内存中,因此这里不可能使用它。@Sammaye通常所说的“二级索引”是指主索引之外的任何索引。所以对于MongoDB来说,这是超出\u id
@johnyhk Aha上的索引的任何索引。谢谢,很多术语用于同一件事,有时很难全部获得:)Aerospike不是开源的。支持二级索引的关键在于它们是自动维护的。