当前位置: 首页 > 面试题库 >

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

梅飞宇
2023-03-14
问题内容

MongoDB还是Redis?

我听说我应该在MongoDB中保持较小的集合,以实现更好的索引编制(并使索引适合RAM),并且听说redis是“快速发展”的,但是如果您有更大的集合,MongoDB会更好。

如果我有成千上万个哈希值的数千个集合,哪一种是最有效的?

我之所以这样问,是因为在我的项目中,尚无可用数据进行基准测试,而且我可能会设计不良的基准脚本,因为我对这两个数据库引擎(特别是Redis)的理论概念不太了解。

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


问题答案:

这在很大程度上取决于特定的用例。如果您想查询文档的ID以外的其他内容,则不要选择Redis。使用Redis,您将必须实现自己的索引编制方案,而这是不必要的。

实际上,在极少数情况下,对于我认为您的用例而言,Redis会是一个更好的选择(不是Redis出现任何问题,我经常同时使用Redis和Mongo,但是用于不同的事情)。在我看来,您有一些可以表示为哈希的对象。Mongo和Redis都可以存储哈希,但是Mongo可以做更多的事情。使用Mongo,您可以在文档的任何字段中搜索文档,可以添加索引来加快文档的速度,并且该字段甚至不必是字符串,可以是数字,日期,列表甚至文档(或文档列表),并且所有文档都不必放在RAM中(尽管在Redis的磁盘存储功能完成时会有所变化)。Redis没有任何东西。您必须自己实现索引才能进行搜索,哦)。

您还提到了速度。Redis的运行速度非常快,Mongo也不错,但是,使用Mongo的用例可能会更快。注意我说 使用
Mongo,不是说Mongo本身会更快。事实是,如果您使用Redis并仍然希望能够使用不是主键的字段来搜索文档,则如上所述,您必须自己实现此功能。然后,搜索必须至少向Redis发出两个请求,一个用于查找索引,另一个用于获取文档。如果搜索结果涉及多个文档,则您必须分别请求每个文档。发出所有这些请求的开销可能会使使用Redis比使用Mongo更糟。以我的经验,除最简单的缓存,队列或类似操作外,其他任何事情都需要向Redis发出多个请求,以获取其所需的一切。

因此,鉴于我掌握的信息有限,我建议使用MongoDB。



 类似资料:
  • [错误:flutter/lib/ui/ui_dart_state.cc(157)]未处理的异常:PlatformException(错误,文档引用无效。文档引用的段数必须为偶数,但users为1,为null)

  • 我有一个表单,如果我使用存储文件,是整个文件内容存储在数据库还是只是文件路径? 假设我有几十万或几百万个文件。因为表的大小必须很大,所以将它们存储在数据库中是否有效? 如果我不想把它们存储在数据库中,简单的上传并保存在本地文件系统中,有没有办法得到所有文件名的列表?通过将它们存储在数据库中,我只需通过以下方式获得: 谢谢

  • 我有一个结构如下的文档,有两种类型的子文档。第二个子文档指的是一些第一个子文档,但不是全部 这里的“答案文本”需要链接到多个问题,因为一个答案可以对多个问题有效。 在答案模式中,我应该如何存储问题。我不想再次存储问题对象数据,因为它将是重复的数据,并且如果一些问题被修改,那么它需要在问题中被修改回答子文档。所以基本上我想存储问题的_id回答。 猫鼬中回答模式的语法是什么?目前我有空数组,但不确定这

  • 问题内容: 我想在数据库中存储大量声音文件,但是我不知道这是一个好习惯。我想知道这样做的利弊。 我还考虑了与这些文件建立“链接”的可能性,但这也许会带来比解决方案更多的问题。对此方向的任何经验都将受到欢迎:) 注意:数据库将是MySQL。 问题答案: 我所知道的每个存储大量大文件的系统都将它们存储在数据库的外部。您将文件的所有可查询数据(标题,艺术家,长度等)以及文件的部分路径存储在数据库中。当需

  • 我有一个word文件,我想数一下里面有多少页。 已使用Docx4Java创建该文件。 以前有人这么做过吗? 谢谢!

  • 我想在firestore数据库中查询文档id。目前我有以下代码: 我没有结果。但当我查询其他字段时,它会起作用: 文档id的名称是如何调用的?