【发布时间】:2015-11-23 19:08:32
【问题描述】:
我正在从 Meteor/MongoDB 的集合中提取数据。总共大约有 15,000 个文档,查询大约提取了其中的一半(8,100 个)。 Kadira 报告说,提取(在对其进行任何操作之前)需要 5-7 秒。
相关字段上有索引,我可以在 20-50 毫秒内运行 find() - 所以问题在于获取,而不是发现。而这一次不包括实际对文档做任何事情 - 它只是 find()。
每个文档大约有十几个字段,主要是带有几个 ISODates 和几个 1-2 个字符串的数组的短字符串(
这一切都在服务器上 - 没有任何东西被发送到客户端。
持续时间正常吗?如果没有,我可以考虑做些什么来加快速度?
【问题讨论】:
-
如果你运行相同的查询,返回相同数量的文档,使用 mongodb cli 你得到相同的持续时间吗?可能只是一端连接速度慢,而不是 fetch 方法的问题。
-
1.减少您要发布的字段数量,2. 减少您同时发布的文档数量(您真的需要客户端上的所有 8k 文档吗?) 3. 如果您在服务器上进行聚合某种使用 mongo 聚合框架,让 db 直接完成工作,4. 固态磁盘!
-
@michel-floyd:这一切都在服务器上——没有任何东西被发布到客户端。这是支持某些自定义报告的例程的一部分。服务器从客户端获取报告参数(哪些集合、字段等),然后有效地将集合连接在一起。然后将结果放入一个集合中,该集合会以零碎的方式发送给客户端。那部分工作正常。不过,听起来我可能需要重新架构整个东西——我从来没有想过将 5 兆字节的数据拉入服务器上的内存需要这么长时间。
-
@brian-shamblen:不是连接问题——这一切都发生在服务器上。
-
另一个数据点。在 RoboMongo 中,如果我运行查询并执行 toArray(),则只需不到一秒钟。看起来这应该花费与流星的 fetch() 一样多的时间。似乎这里发生了一些奇怪的事情。
标签: meteor mongodb-query