咨询一个 mongodb 的问题,大佬们来帮帮忙~~~~

2020-10-22 09:57:51 +08:00
 dtgxx

我的 mongodb 集合建了 data 字段索引,在 mongoshell 执行查询的时候 db.col.find({"data":"mydata"}) 返回数据的时间差异很大


观察了一下,每次查询都用到了索引,如果该集合没有我查询的数据的时候,几乎瞬间就可以返回,但是如果查询到了几百条数据,通常会在 3-5 秒才能返回,差异实在太大。


是不是查询的性能大部分都在返回数据上了?老铁们有没有啥办法让 mongodb 返回数据快一些,或者说这个性能怎样可以优化一下,查询到的数据越多,返回的就越慢…… (一直是在 mongoshell 查询的,没有用代码查)

863 次点击
所在节点    问与答
13 条回复
silentsee
2020-10-22 10:15:19 +08:00
感觉像是单个文档的数据太大
dtgxx
2020-10-22 10:18:14 +08:00
@silentsee #1 奥对,忘记说了,每一条数据只有五个字段,每个字段长度大约是个字符。
dtgxx
2020-10-22 10:18:38 +08:00
@silentsee #1 大约十个字符
xeathen
2020-10-22 10:19:49 +08:00
mongo 在本地还是云服务器上?
dtgxx
2020-10-22 10:21:56 +08:00
@xeathen #4 在本地的,网线连交换机再和服务器直连的。没创建副本,3 分片。
silentsee
2020-10-22 10:45:04 +08:00
lancelee01
2020-10-22 11:24:37 +08:00
应该是缓存的原因吧,MongoDB 如果数据在内存里,返回的特别快,如果在磁盘上,加载耗时长吧
dtgxx
2020-10-22 11:53:39 +08:00
@silentsee 好的
@lancelee01 是的,那差不多就是因为数据在磁盘,每次查询结果大的时候,全从磁盘读取所以就比较慢?
dtgxx
2020-10-22 11:54:43 +08:00
@lancelee01 #7 不过感觉 mysql 这种,也是磁盘存储,每次查询 1000 条数据,压力也不大,mongodb 里面,一次 100 条,就要几秒了,
lancelee01
2020-10-26 17:28:47 +08:00
@dtgxx 两个底层存储默认都是 B+树,MySQL 压力不大是不是,查询条件和数据量都不一样呢
dtgxx
2020-10-26 17:31:30 +08:00
@lancelee01 #10 数据量确实有差距,mongo 的大一些。 mongo 里面比如没查到,瞬间就可以结束啥也不返回,查到 200 条的话,会卡三秒。这部分时间是不是消耗在了从磁盘读取数据上呢?
lancelee01
2020-10-27 09:11:53 +08:00
可能是,MongoDB 特别吃内存,内存生产我们都是 256G 的。MongoDB 一般是热点数据都是在内存中
dtgxx
2020-10-27 09:24:59 +08:00
@lancelee01 #12 嗯呢 应该是这原因

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/717329

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX