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

2015-09-12 22:18:56 +08:00
 liuzhen

事情是这样:

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

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

那么问题来了。。

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

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

8345 次点击
所在节点    程序员
16 条回复
9hills
2015-09-12 22:29:18 +08:00
有没有用 Bulk Write
cevincheung
2015-09-12 22:35:45 +08:00
关闭安全写入
多用 background 操作,不要等待响应
磁盘同步尽量设置大点或者干脆关闭
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
2015-09-12 22:48:39 +08:00
@9hills 谢谢,我测试下
liuzhen
2015-09-12 22:48:54 +08:00
@cevincheung 谢谢
liuzhen
2015-09-12 22:55:16 +08:00
@9hills 再请教一下,分片后不是通过连接 mongos 操作数据吗?怎么直接将数据发送到指定的分片呢?
9hills
2015-09-12 22:56:53 +08:00
Keita1314
2015-09-12 23:07:35 +08:00
@liuzhen @9hills 我目前一个 collection 有 12 亿条数据,没做分片,有索引,指定 id 插入,每秒大概 600 条数据,为什么你们的那么快,因为我指定 id 吗?
Keita1314
2015-09-12 23:12:44 +08:00
@liuzhen 看错了,你是插入另一个表。我是插入原表。
liuzhen
2015-09-12 23:14:57 +08:00
@Keita1314 id 不指定,自动生成
Keita1314
2015-09-12 23:18:44 +08:00
@liuzhen 我插入的是在 12 亿的表的基础上插入的,你插入的新表数据量应该不大吧,要不 5000/s 很快了
9hills
2015-09-12 23:22:51 +08:00
@Keita1314 加了几个索引?
9hills
2015-09-12 23:27:00 +08:00
@Keita1314 600 有点慢,可以看 http://docs.mongodb.org/master/core/write-performance/

不过 mongodb 的 insert 和数据量有关的部分就只有 index 了,控制 index 数量吧。。。
liuweisj
2015-09-13 08:36:20 +08:00
先查查你的瓶颈是什么把, 一般可能是磁盘 io 和内存
Keita1314
2015-09-13 09:52:35 +08:00
@9hills 就一个索引而已, 4 个 fields
pynix
2015-09-13 17:42:09 +08:00
@Keita1314 这么大的数据量,瓶颈必定在索引。。。。

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

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

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

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

© 2021 V2EX