Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何选择NoSQL数据库引擎?_Mongodb_Cassandra_Redis_High Load_Nosql - Fatal编程技术网

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的部分功能)


我想他指的是7mb/记录。另一个选择是在Cassandra之上使用可伸缩SQL的PlayOrm…更多的机器可以产生更好的性能,因为磁盘将在范围扫描等方面并行工作。

我认为,如果您能够达到指定的性能要求,那么DB是否在内存中这一事实将无关紧要

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

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

尝试使用 它有二级索引,并且完全在内存中。 它还使用快速异步IProto协议


它被证明稳定且速度惊人。

您不需要在任何地方向磁盘写入任何内容或同步状态,这是数据库设计中两个最大的复杂性,而且您的数据集都有7 MB。您是否考虑过自己将其存储在适当的数据结构中?无论您使用哪种语言,都不难获得如此高的性能水平。@willglynn+1。否则,您是否检查了Riak功能?您所说的“二级索引”是什么意思?许多NoSQL技术(如MongoDB)只使用一个查询,除非它是
$或
,因此用于查询的辅助索引实际上不起作用。此外,MongoDB不存储在内存中,因此这里不可能使用它。@Sammaye通常所说的“二级索引”是指主索引之外的任何索引。所以对于MongoDB来说,这是超出
\u id
@johnyhk Aha上的索引的任何索引。谢谢,很多术语用于同一件事,有时很难全部获得:)Aerospike不是开源的。支持二级索引的关键在于它们是自动维护的。