用了 mysql 的同事遇到 pg 都相逢恨晚

2017-11-21 11:06:32 +08:00
 cstj0505

某业务部门的同事们,生成一亿条数据写入 mysql 数据库,花了好几个小时。

我告诉他 pg 一秒可以写十几万条,并拿出压测数据的时候,他们纷纷表示非常震惊。 这几位程序员,运维的都是工作好些年的,但之前都没听过 pg。

另外一个部门每天要把几亿条数据从 oracle 库用 navcat 搬到 mysql 库(恩,他们也没听过 pg,把最后的 mysql 库作为结果查询库),然后每天要跑 7 个小时。 听说我们大数据很快,就过来问我们怎么加快速度。乱七八糟的叹了一下午,他们想法很多,最后说要加快速度你可以装个 pg 试试。

然后他们在原来的 mysql 集群上,装了个 pg 的主备。在 oracle 生成了几亿条数据。然后分别跑了测试。 mysql 的速度和上面差不多, 但是 pg 呢,开了 10 个并行,原话如下: “ pg 的 copyin 方式,432 秒拷贝 3.68 亿条记录,cpu 最高 62%,磁盘写 io 最高 100MB/s,网络带宽最高 670Mbps。另外,磁盘占用比 mysql 少多了(大概少 50GB )。”

估计现在他们也会感觉和 pg 相逢恨晚了。

10719 次点击
所在节点    数据库
112 条回复
kn007
2017-11-22 07:47:24 +08:00
呵呵
cstj0505
2017-11-22 08:34:50 +08:00
@yangqi 你内行,几亿条数据你 7 分钟从 oralce 搞进 8 核 16g io100 左右的机器上的 mysql 我就服你,有本事别只会打嘴炮啊
cstj0505
2017-11-22 08:35:56 +08:00
@azh7138m 后来直接用 java 写了代码开了 10 个线程写,也就 30000 条一分钟
cstj0505
2017-11-22 08:37:06 +08:00
@sunchen 我们自己用的是 pg+hawq+spark+kafka,也好使
azh7138m
2017-11-22 08:49:51 +08:00
@cstj0505 MySQL 性能没这么不堪,姿势不对而已,
光说数据量没啥意思啊,load file 导入 20+G 数据,7.5kw 条,DO 的小 VPS 也就用了 30 分钟
cstj0505
2017-11-22 08:54:20 +08:00
@azh7138m load file 当然快啊,但是 load file 要先把数据从 oracle 里面写出来落地吧,再 load 到 mysql。不知道您这个数据多少索引,他们是几十张表,一共上面有 100 个索引
DavidGao
2017-11-22 09:01:52 +08:00
目前使用 PG 9.5,准备紧跟时代步伐使用 PG 10
hjlmjx
2017-11-22 09:05:39 +08:00
呵呵,呵呵,呵呵呵
leeg810312
2017-11-22 09:07:44 +08:00
在 lz 的环境中 pg 性能好就符合 lz 的观点了,认为 lz 不对的,lz 放点模拟数据出来,让楼上试试 mysql,有更好的方案也好让大家学习,也可以证明 mysql 的性能,这样互相嘴炮有啥意思?
kindjeff
2017-11-22 09:10:51 +08:00
为啥我用 mysql5.6 load data 四百万条数据才几十秒钟。
cstj0505
2017-11-22 09:18:08 +08:00
@kindjeff 这种导出到文件的,每个数据库都快。

我们同事是数据在 oracle 里面,不在文件里面。如果导文件每天要倒一次还要比较记录条数,控制数据格式,重建索引,如果把这个做成一套逻辑的话就比较麻烦了
zacard
2017-11-22 09:23:09 +08:00
围观数据库大佬的解决方案
sagaxu
2017-11-22 09:23:43 +08:00
copyin 和 insert 原理不同,你应该分别尝试下 mysqldump 的几种不同体位
azh7138m
2017-11-22 09:27:16 +08:00
@cstj0505 就个 hash 索引
你不是 navicat 迁移的数据?这么搞没索引的啊
cstj0505
2017-11-22 09:31:26 +08:00
@sagaxu 他们数据源在 oracle 里面,不好用 mysqldump 吧

实际业务场景就是 oracle 与文物库里面的数据,每天算好报表以后同步到 mysql。大概几十张表,100 个索引,数据量 40 多 G。
cstj0505
2017-11-22 09:36:29 +08:00
@azh7138m navcat 是现在在生产上跑的。

然后这次测试他们有分别用过 kettle/和手写 java 程序 先导数据,再建索引;索引存在的时候导数据。测下来 10000 条 /30s 左右就没测了。数据落地的方案肯定要快些,但是流程控制比较长,他们也没人专门维护这个,所以不愿意选择
janxin
2017-11-22 09:36:49 +08:00
MySQL 优点,用的人多,当然坑也多,好歹搜索能找到答案=,=
kiddult
2017-11-22 09:51:10 +08:00
看楼主描述大概能猜出同事的水平了,一个事情如果两种方式做,能有数量级的差距,基本是方式问题,不过具体到工具上,楼主真的觉得 MySQL 的开发人员智商会比 PG 的低一个数量级?我是不信 O(∩_∩)O
cloudzhou
2017-11-22 10:06:48 +08:00
这个事情我刚好测试过,分别是:
1 单个插入
2 批量插入
3 批量 + 事务
4 Load File
并且 Sql vs PrepareStatement,不同的批量个数,并发等
几种方式比较,时间数量级别的差距

所以这个本身你们就是要考虑的,需要仔细调优
robinlovemaggie
2017-11-22 10:42:33 +08:00
用 NoSQL 的表示笑而不语,你们接着吵……

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

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

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

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

© 2021 V2EX