V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
liuzhen
V2EX  ›  程序员

mongodb 下大数据批量插入速度问题

  •  
  •   liuzhen ·
    liuzhen9327 · 2015-09-12 22:18:56 +08:00 · 8428 次点击
    这是一个创建于 3393 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事情是这样:

    在 mongo 里已经有 base 库(2 亿)数据,"key"字段有索引

    现在可能会有这种业务:大约两百万数据的 key ,去 base 库里匹配,匹配上的数据重新插入另一个表(这里叫 test_table )

    那么问题来了。。

    我在单机测试中发现 mongo 插入速度只能达到 5000/s ,领导的要求是最少 1w/s

    我测试了 mongo 的 sharding 效果并没有显著提升,求 V 友们给点思路~

    16 条回复    2015-09-13 17:42:09 +08:00
    9hills
        1
    9hills  
       2015-09-12 22:29:18 +08:00
    有没有用 Bulk Write
    cevincheung
        2
    cevincheung  
       2015-09-12 22:35:45 +08:00
    关闭安全写入
    多用 background 操作,不要等待响应
    磁盘同步尽量设置大点或者干脆关闭
    9hills
        3
    9hills  
       2015-09-12 22:36:43 +08:00
    1. 使用 Bulk Write
    2. 保证网卡不是瓶颈
    3. sharding 是有效果的,甚至可以先 split ,然后将 split 后的数据分别发送到不同的分片。
    4. sharding key 不能用 ObjectID 这种和 timestamp 有关的 key ,应该用 hash key ( mongodb 能自动这么搞),这样避免写入落入一个分片
    liuzhen
        4
    liuzhen  
    OP
       2015-09-12 22:48:39 +08:00 via Android
    @9hills 谢谢,我测试下
    liuzhen
        5
    liuzhen  
    OP
       2015-09-12 22:48:54 +08:00 via Android
    @cevincheung 谢谢
    liuzhen
        6
    liuzhen  
    OP
       2015-09-12 22:55:16 +08:00 via Android
    @9hills 再请教一下,分片后不是通过连接 mongos 操作数据吗?怎么直接将数据发送到指定的分片呢?
    Keita1314
        8
    Keita1314  
       2015-09-12 23:07:35 +08:00
    @liuzhen @9hills 我目前一个 collection 有 12 亿条数据,没做分片,有索引,指定 id 插入,每秒大概 600 条数据,为什么你们的那么快,因为我指定 id 吗?
    Keita1314
        9
    Keita1314  
       2015-09-12 23:12:44 +08:00
    @liuzhen 看错了,你是插入另一个表。我是插入原表。
    liuzhen
        10
    liuzhen  
    OP
       2015-09-12 23:14:57 +08:00 via Android
    @Keita1314 id 不指定,自动生成
    Keita1314
        11
    Keita1314  
       2015-09-12 23:18:44 +08:00
    @liuzhen 我插入的是在 12 亿的表的基础上插入的,你插入的新表数据量应该不大吧,要不 5000/s 很快了
    9hills
        12
    9hills  
       2015-09-12 23:22:51 +08:00
    @Keita1314 加了几个索引?
    9hills
        13
    9hills  
       2015-09-12 23:27:00 +08:00
    @Keita1314 600 有点慢,可以看 http://docs.mongodb.org/master/core/write-performance/

    不过 mongodb 的 insert 和数据量有关的部分就只有 index 了,控制 index 数量吧。。。
    liuweisj
        14
    liuweisj  
       2015-09-13 08:36:20 +08:00
    先查查你的瓶颈是什么把, 一般可能是磁盘 io 和内存
    Keita1314
        15
    Keita1314  
       2015-09-13 09:52:35 +08:00
    @9hills 就一个索引而已, 4 个 fields
    pynix
        16
    pynix  
       2015-09-13 17:42:09 +08:00
    @Keita1314 这么大的数据量,瓶颈必定在索引。。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5792 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 02:44 · PVG 10:44 · LAX 18:44 · JFK 21:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.