用了 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 相逢恨晚了。

10686 次点击
所在节点    数据库
112 条回复
panpanpan
2017-11-21 12:43:52 +08:00
我看到用'''navcat 搬到 mysql 库'''...我就感觉是不是你们的方式不太对
xi_lin
2017-11-21 12:49:57 +08:00
@panpanpan 求教一下正确的方式是啥?用 mysqldump 对吗?
caotian
2017-11-21 12:51:18 +08:00
呃,工作几年的开发不知道 pg, 有情可原, 运维也不知道?
cstj0505
2017-11-21 13:30:48 +08:00
@yangqi 懒得泼妇骂街,就问问你啊,几亿条数据,怎么搞到 mysql 里面去,要花多久。
你有好方案我和同事说了告诉他们去
cstj0505
2017-11-21 13:32:55 +08:00
@doubleflower 这有什么不能比的,可能某些事物场景下 mysql 有优势,但是大数据量下的并行查询,copyin 的数据写入不是性能吗
realpg
2017-11-21 13:39:40 +08:00
没过 GRE 不敢用
glues
2017-11-21 13:48:43 +08:00
PG 现是在公认的最好的开源数据库,MySQL 自从被 Oracle 收购后几乎没啥进步了。
楼上的那些无脑黑估计这辈子只用过单机 MySQL 吧,所以对他们来说用什么数据库是无所谓的
stabc
2017-11-21 13:52:12 +08:00
虽然数据库的选择方面我也站 PG,但是真要和 MYSQL 对比的话,最好还是公平点,严格点吧。我看你写的内容,无法确定对比的公平性。
cstj0505
2017-11-21 14:00:27 +08:00
@stabc 这个确实不是严格的压测,现在他们第一个最大的问题就是把几亿条数据从 oracle 搬到 mysql。mysql 他们去年就开始在客户那边用了,你要说他们会做有多少优化我不知道,但我觉得给几十个客户用了再生产上肯定不会是默认配置吧。还有另一个部门用的阿里云的 RDS8 核 16G。这个项目上几百个 mysql 实例了。


但是就 pg 这样的写入速度,他们在 mysql 上应该是没见过。
描述里面第二个场景服务器资源完全一样,因为在同样两台机器上分别做的测试。
glues
2017-11-21 14:02:11 +08:00
肯定又有人说为什么阿里腾讯都用 MySQL,其实他们已经在大规模用了

阿里双十一秒杀背后的技术
https://yq.aliyun.com/articles/64351

微信支付商户系统中运行近 3 年,管理超过 230 个节点和 400T 的数据量,也是全球最大的 PostgreSQL 集群之一
https://www.qcloud.com/community/article/465912
keymao
2017-11-21 14:03:41 +08:00
不要用 navicat 导出导入脚本。 mysqldump 导出最佳,max_allowed_packet 调大些。

至于 PG, 没用过,不评价。MySQL 的话优点,emmm 免费, 然后? 你问我然后? 没了。
stabc
2017-11-21 14:08:47 +08:00
@cstj0505 影响数据写入速度的因素很多,CPU 和内存速度,单个条目数据大小,数据关联程度等。超大量写入的话还要加上硬盘速度。我的建议还是要同样条件的公平对比。
mazyi
2017-11-21 14:12:47 +08:00
不就导个几亿条数据嘛,工具不会用倒是怪起了数据库?
Pastsong
2017-11-21 14:16:26 +08:00
MariaDB 呢?
cstj0505
2017-11-21 14:19:36 +08:00
@stabc 就是同样的条件。就两台机器,同时装了 mysql 和 pg 的主备。起 mysql 的时候 pg 停掉,pg 的数据清掉。起 pg 的时候 mysql 停掉,mysql 的数据清掉。
数据源都是同样几张来自 oracle 的数据表。
stabc
2017-11-21 14:25:18 +08:00
@cstj0505 并行呢?
yushiro
2017-11-21 14:28:40 +08:00
@cstj0505 同一数据库的不同导入方式,性能会有巨大差异。以前用 insert 往 mssql 插入数据,那么叫慢啊,后来换用 mssql 的命令行 bcp 导数据,速度快了好几个数量级。
cstj0505
2017-11-21 14:30:37 +08:00
@stabc 都是一样的,一开始开了 100 个,cpu100%,然后我说你就 8 核的,就开了 10 个并行。
liprais
2017-11-21 14:33:36 +08:00
大部分工程师连 sql 都不会写,觉得数据库 = mysql ,说这些他们听不懂的
cstj0505
2017-11-21 14:38:08 +08:00
@yushiro insert 确实不会太快,不过我本地 pg ( i76700hq,16g,256SSD )当时开了 4 个线程 insert 到了 7 万 /s.同等情况下 mysql 只有 2 万。
用 pg jdbc 的 copyin 更夸张,13w 行 /s.

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

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

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

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

© 2021 V2EX