什么是最有效的面向文档的数据库引擎来存储数千个中等大小的文档?

时间:2011-02-23 12:16:23

标签: mongodb performance redis nosql

MongoDB或Redis?

我听说我应该在MongoDB中保留较少的集合以实现更好的索引(以及适合RAM的索引),并且我听说redis“非常快速”,但如果你有更大的集合,MongoDB会更好。 / p>

如果我拥有数千个哈哈的数千个集合,那么效率最高的是什么?

我问这个是因为在我的项目中,将可用数据用于基准测试还为时过早,我可能会设计糟糕的基准测试脚本,因为我不太了解这两个数据库引擎的理论概念,特别是Redis。 / p>

感谢所有回答此问题的人。

5 个答案:

答案 0 :(得分:20)

这在很大程度上取决于具体的用例。如果您希望能够使用ID以外的其他内容查询文档,则不应选择Redis。使用Redis,您必须实现自己的索引方案,这是不必要的。

实际上很少有Redis对我认为你的用例更好的选择(不是说Redis有什么问题,我经常使用Redis和Mongo,但是用于不同的事情)。听起来像你有可以表示为哈希的对象。 Mongo和Redis都可以存储哈希值,但Mongo可以做更多事情。使用Mongo,您可以在其任何字段上搜索文档,您可以添加索引以加快速度,字段甚至不必是字符串,它可以是数字,日期,列表,甚至是文档(或文档列表),并且所有文档都不必适合RAM(尽管Redis的磁盘存储功能完成时会有所改变)。 Redis没有这些。您必须自己实现索引以便能够搜索,除了字符串之外不能存储任何东西(有时候真的很不方便),并且除了平坦的哈希之外你不能存储任何东西(不需要求助于实现或使用某种映射)像Ohm)这样的层。

你也提到速度。 Redis速度非常快,Mongo也不错,但是,使用Mongo的用例可能会更快。请注意我说使用 Mongo,而不是Mongo本身会更快。问题是,如果你使用Redis并且仍然希望能够使用不是主键的字段来搜索文档,那么就像我上面提到的那样,你必须自己实现它。然后,搜索必须向Redis发出至少两个请求,一个用于查找索引,一个用于获取文档。如果搜索结果是多个文档,则必须单独为每个文档发出请求。制作所有这些请求的开销可能会使使用Redis比使用Mongo更糟糕。根据我的经验,除最简单的缓存,队列或类似内容之外的任何内容都需要向Redis发出多个请求以获取所需的一切。

所以,由于我掌握的信息有限,我推荐使用MongoDB。

答案 1 :(得分:4)

答案 2 :(得分:2)

文档大小虽然重要,但在选择Mongo或Redis时不应该是最重要的因素。您很少会在Mongo中达到4MB的限制,如果这样做,它可能表明您的文档没有足够的分解。 Redis更多用途所以如果您打算在应用程序状态(建议框,缓存等)中使用您的数据存储区域,Redis可能更适合。如果持有更丰富的项目,那些超出Redis原生数据类型和结构的项目,Mongo可能更适合。

说实话,Redis和Mongo都非常出色,并且很容易起床和跑步。考虑到它在您的生命周期的早期,尝试两者的尺寸,看看感觉更好。

答案 3 :(得分:2)

我会在戒指中再添加一个选项:Berkeley DB XML。它是一个小型C ++库,带有C ++和Java API,可提供XML数据管理,XQuery和XPath查询。它的设计非常快速,可扩展且可靠。它支持事务,恢复和复制。您可以使用它来存储XML文档以及非SQL键值对。

免责声明:我是Berkeley DB的产品经理,所以我有点偏颇。但是,我们有许多客户将BDB XML用于中型到超大型文档存储库。

答案 4 :(得分:0)

Redis提出了二级索引,可能会为您的目的服务。 Linkg:https://redis.io/topics/indexes