当前位置: 首页 > 知识库问答 >
问题:

1000万mongodb文档查询

澹台展鹏
2023-03-14

我在mongodb文档中存储图书元数据,如名称、作者、价格、出版商等。我有大约1000万份这些文件,它们都在一个收藏中。平均文档大小为1.9KB。现在我有了关于nameauthorsprice的索引。事实上,我有两个价格指数,一个是升序,一个是降序。我的mongodb版本是2.2.0,我正在使用php驱动程序查询Mongo。驱动程序的版本是1.12。但是当我对price进行范围查询时,我会得到一个MongoCursorTimeoutException。在我的查询中,我试图找到的书在一定的价格范围,如“价格低于1000和超过500”。

增加超时似乎不是个好主意(已经是30秒了)。我还能做些什么来加快查询过程。

其实编辑我的价格指数是复合的。我有一个状态字段,它有一个整数值,所以我的价格指数看起来像{price:-1,status:1}{price:1,status:1}

共有1个答案

潘鸿文
2023-03-14

我们在使用单一/共享服务器和EC2上使用传统和SSD EBS卷的专用副本集的数百万文档的Mongo集合方面有很多经验。工作负载是多种多样的:一些是面向分析的,另一些是支持Web请求的。下面是我html" target="_blank">推荐的根本原因分析路径:

>

  • 使用.explain()运行查询,查看所用索引等方面的情况。如有必要,请调整索引。Mongo的优化器相当幼稚,所以如果您的索引与查询模式不完全匹配,那么它们可能会被遗漏。

    检查MMS并查找以下任何一个问题:(1)内存中的数据不是全部(由页面错误表示)和(2)队列长度(通常表示某种类型的瓶颈)。当不是所有数据都在内存中时,Mongo的性能会迅速下降,因为数据库具有单个全局锁和触摸存储,尤其是在云中是个坏消息。我们最近升级到SSD云存储,我们看到在一个大约1/2Tb大小的数据库上性能提高了3-10倍。

    将分析级别增加到2(最大值),运行一段时间并查看操作日志。请参阅MongoDB探查器。

    希望这有帮助。

  •  类似资料:
    • 主要内容:find() 方法,pretty() 方法,findOne() 方法,条件查询,AND条件语句,OR 条件语句,AND 和 OR 联合使用前面我们介绍了怎么将文档插入到集合中,本节我们来介绍一下如何从集合中查询指定的文档。 find() 方法 想要查询集合中的文档,可以使用 MongoDB 中的 find() 方法,find() 方法可以将查询结果以非结构化的方式展示出来,其语法格式如下: db.collection_name.find(query, projection) 语法说明如

    • 我有一个只有2个文档的mongodb数据库。两者具有相同的结构: 小文档在消息中有0个对象,大文档有1000个。我数了数这两份文件上的标牌:小:28000大:450000 我使用nodeJS和常规mongodb驱动程序访问文档,并且我将索引设置为“general.sid”。 现在我要他们的将军提供文件。而且这两个文档的时间差别很大!我接收文档,进行一些计算并更新文档。 我打印接收和更新文档之前和之

    • 本文向大家介绍MongoDB查询以删除特定文档,包括了MongoDB查询以删除特定文档的使用技巧和注意事项,需要的朋友参考一下 要删除特定文档,请在MongoDB中使用。让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是删除特定文档的查询- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出-

    • 每月,我想从我的一个集合中删除所有超过1个月的文档。集合中的示例文档如下所示: 我希望自动安排此任务的执行,这样它就不需要人工输入(例如,作为cron作业),因此我希望它具有尽可能少的逻辑。 如何查询createDate早于1个月的文档?我曾想过尝试这样的事情: 。。。其中,我创建了一个当前时间减去1个月毫秒的新ISODate,但它不会返回任何数据。这也有点难看,即使它确实有用。我将如何实现这一点

    • 我是新来的mongo。我有以下收藏。 文件: 请求: 文档集合中的typeId是文档类型的id,其中请求中的typeId是也可以为空的外部字段。如何获得以下输出。

    • 我有一个集合,其中包含具有以下结构的文档: 我想在1个查询中获取存在或等于的所有文档。即与列表中的键匹配的文档。 在MongoDB中有没有办法做到这一点?