V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dtgxx
V2EX  ›  问与答

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

  •  
  •   dtgxx · 2020-10-22 09:57:51 +08:00 · 954 次点击
    这是一个创建于 1524 天前的主题,其中的信息可能已经有所发展或是发生改变。

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


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


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

    13 条回复    2020-10-27 09:24:59 +08:00
    silentsee
        1
    silentsee  
       2020-10-22 10:15:19 +08:00   ❤️ 1
    感觉像是单个文档的数据太大
    dtgxx
        2
    dtgxx  
    OP
       2020-10-22 10:18:14 +08:00
    @silentsee #1 奥对,忘记说了,每一条数据只有五个字段,每个字段长度大约是个字符。
    dtgxx
        3
    dtgxx  
    OP
       2020-10-22 10:18:38 +08:00
    @silentsee #1 大约十个字符
    xeathen
        4
    xeathen  
       2020-10-22 10:19:49 +08:00   ❤️ 1
    mongo 在本地还是云服务器上?
    dtgxx
        5
    dtgxx  
    OP
       2020-10-22 10:21:56 +08:00
    @xeathen #4 在本地的,网线连交换机再和服务器直连的。没创建副本,3 分片。
    silentsee
        6
    silentsee  
       2020-10-22 10:45:04 +08:00   ❤️ 1
    lancelee01
        7
    lancelee01  
       2020-10-22 11:24:37 +08:00   ❤️ 1
    应该是缓存的原因吧,MongoDB 如果数据在内存里,返回的特别快,如果在磁盘上,加载耗时长吧
    dtgxx
        8
    dtgxx  
    OP
       2020-10-22 11:53:39 +08:00
    @silentsee 好的
    @lancelee01 是的,那差不多就是因为数据在磁盘,每次查询结果大的时候,全从磁盘读取所以就比较慢?
    dtgxx
        9
    dtgxx  
    OP
       2020-10-22 11:54:43 +08:00
    @lancelee01 #7 不过感觉 mysql 这种,也是磁盘存储,每次查询 1000 条数据,压力也不大,mongodb 里面,一次 100 条,就要几秒了,
    lancelee01
        10
    lancelee01  
       2020-10-26 17:28:47 +08:00   ❤️ 1
    @dtgxx 两个底层存储默认都是 B+树,MySQL 压力不大是不是,查询条件和数据量都不一样呢
    dtgxx
        11
    dtgxx  
    OP
       2020-10-26 17:31:30 +08:00
    @lancelee01 #10 数据量确实有差距,mongo 的大一些。 mongo 里面比如没查到,瞬间就可以结束啥也不返回,查到 200 条的话,会卡三秒。这部分时间是不是消耗在了从磁盘读取数据上呢?
    lancelee01
        12
    lancelee01  
       2020-10-27 09:11:53 +08:00   ❤️ 1
    可能是,MongoDB 特别吃内存,内存生产我们都是 256G 的。MongoDB 一般是热点数据都是在内存中
    dtgxx
        13
    dtgxx  
    OP
       2020-10-27 09:24:59 +08:00
    @lancelee01 #12 嗯呢 应该是这原因
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5536 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:40 · PVG 11:40 · LAX 19:40 · JFK 22:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.