Greenplum6 JDBC insert性能媲美MySQL
了解更多Greenplum技术干货,欢迎访问Greenplum中文社区网站
近些年,大数据技术在IT界里已经是必提的话题了,朋友圈里经常看到一些同事们、项目合作公司朋友们转发的大数据相关文章。最近工作中也在做一款与数据相关的产品,不幸的是,真正遇到数据量大的时候,发现常用的MySQL等数据库真是顶不住。百度一下,当前流行的Greenplum数据库映入眼帘。仔细一查,发现Greenplum还是个开源数据库,再去各大招聘网站和APP查看了一下,招聘Greenplum相关人才的还真不少。在一番调研后,经测试发现,参数调优后的Greenplum数据库Insert写入性能有很大程度提升,完成100W数据写入由每秒780条提升到2252条,写入速度已经与MySQL相媲美了。用这篇文章来记录一下我的测试与调参过程。
开始接触Greenplum是一次机缘巧合,当时领导让调研下Greenplum的性能,于是我在公司用了四台虚拟机,开始搭建起来。记得当时Greenplum的6.0版本还没发布,我便搭建了一个5点几的版本,并用常规的JDBC等操作关系数据库的方式来使用Greenplum,不料发现数据写入很慢。网上百度发现不只是我一个人这么认为,试验了一些网上的方法也无济于事。没过几天,在Github上搜索GPDB相关内容时,发现Greenplum发布了6.0版本,同时也查到了Greenplum中文社区(greenplum.cn)里的一篇相关文章,文章中提到Greenplum 6.0在OLTP上有很大提升,推掉5的环境,当天就将Greenplum改为了6.0的,继续用JDBC来insert数据,发现还是很慢,一开始怀疑自己的测试程序有问题,于是先后几次用Greenplum自己的驱动包、kettle的API、datax工具等几种方式测试,结果仍然没有太大变化。无奈只好继续在网上搜索,后来搜到阿里有篇文章对Greenplum的数据写入问题有过总结,印象比较深的是insert语句用批量values方式、用copy方式写入等。
感觉没过去几天,在Greenplum技术群里听说Greenplum又出新版本了,便想着下周再试试。谁知等我再次准备升级环境测试时,Github上最新的已经是6.2.1版本了。再次测试,感觉数据写入速度好像还不如6.0的。于是去Greenplum技术群组中求助,得到一位大侠指点,要提高OLTP的写入性能,需要调整Greenplum的一些默认配置参数,经尝试,果然很不一样。
接下来看看我的测试与调参过程吧。
一、测试过程
测试的数据库包括Greenplum集群版本、Oracle单机版本、MySQL单机版本。
1、系统环境
2、Greenplum环境
- 软件版本
greenplum-db-6.0.0-rhel7-x86_64.rpm
greenplum-db-6.2.1-rhel7-x86_64.rpm
- 集群节点
3、Oracle环境
- 软件版本
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
- 单机环境
4、MySQL环境
- 软件版本
mysql-5.6.25
- 部署环境
- 数据库驱动
5、测试过程
- 测试目标
用JDBC方式测试单表单线程Insert写入100W数据的性能
- 测试准备
在Greenplum、Oracle、MySQL三种类型数据库中分别创建名为t_test_tang_1的表,表中包含两个字段:整型的ID和文本型的NAME。
- 测试代码
public static void test(PropertiesConfig config) throws Exception {long begin = System.currentTimeMillis();try {Class.forName(config.driverClassName); try (Connection conn = DriverManager.getConnection(config.jdbcUrl, config.username, config.password);) {String sql = "insert into \"t_test_tang_1\" (\"ID\",\"NAME\") values (?,?)"; if (config.jdbcUrl.indexOf("mysql") > 0) {sql = "insert into t_test_tang_1 (ID,NAME) values (?,?)"; }try(PreparedStatement ps = conn.prepareStatement(sql);){ conn.setAutoCommit(false); System.out.println("Opened database successfully");long id = 1;String namePrefix = RandomStringUtils.randomAlphanumeric(1024);for(int i=0; i<1000; i++) { for(int j=0; j<1000; j++) {ps.setLong(1, id);ps.setString(2, namePrefix);ps.addBatch();id++;}ps.executeBatch();conn.commit();}} catch (Exception e) { conn.rollback();System.err.println(e.getClass().getName() + ": " + e.getMessage());}}} catch (Exception e) {e.printStackTrace();}long end = System.currentTimeMillis();System.out.println("total elipse = " + (end - begin)+" ms");}
二、测试结果
用上述代码,基于三种数据库的配置进行相同代码过程测试,测试结果如下:
1、第一次测试:
本次测试使用的Greenplum为6.0版本,并使用默认配置参数
2、第二次测试:
本次测试使用的Greenplum为6.2.1版本,分别为默认参数下测试和参数调整后测试,结果如下:
Greenplum调整的参数如下:
(1)全局死锁检测开关
在Greenplum 6中其默认关闭,需要打开它才可以支持并发更新/删除操作;
gpconfig -c gp_enable_global_deadlock_detector -v on(2) 禁用GPORCA优化器(据说GPDB6默认的优化器为:GPORCA)
gpconfig -c optimizer -v off(3)关闭日志
此GUC减少不必要的日志,避免日志输出对I/O性能的干扰。
gpconfig -c log_statement -v none
注意:参数配置修改后,我使用gpstop -u重新加了配置,并用gpconfig -s检查了各个参数确认为修改成功。
三、测试总结
从测试结果中明显发现,经参数调优后的Greenplum数据库Insert写入性能有很大程度提升,完成100W数据写入由每秒780条提升到2252条,写入速度已经与MySQL相媲美了。虽然与Oracle的差距还很远,毕竟Greenplum与Oracle的侧重场景还是不同的嘛,如果Greenplum采用copy或gpfdist方式灌数据,速度那才是惊人呢。
据说,Greenplum 7 在OLTP上还会有大幅度提升,非常期待!!!
四、结束语
基于copy方式,作者编写了一个oracle/SqlServer/mysql/PostgreSQL表结构及数据向Greenplum数据库的离线同步小工具,希望给个star哦。
介绍详见:
https://blog.csdn.net/inrgihc/article/details/103739629
Greenplum6 JDBC insert性能媲美MySQL相关推荐
- JDBC批处理插入更新MySQL Oracle
Today we will look into JDBC Batch insert and update examples in MySQL and Oracle databases. Sometim ...
- JAVA通过JDBC连接并操作MySQL数据库
JAVA通过JDBC连接并操作MySQL数据库 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提 ...
- jdbc存储过程mysql_JDBC对MySQL数据库存储过程的调用
1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用户通过指定存储过程的名字并给出参 ...
- jdbc 3种获得mysql插入数据的自增字段值的方法_JDBC 3种获得mysql插入数据的自增字段值的方法...
JDBC 3种获得mysql插入数据的自增字段值的方法. 1. Retrieving AUTO_INCREMENT Column Values using Statement.getGenerated ...
- JDBC insert语句
JDBC insert语句 执行步骤 package cn.itcast.jdbc;import java.sql.Connection; import java.sql.DriverManager; ...
- mysql和windows连接不上_问题-jdbc连接不上mysql,windows下开启两个mysql服务
1.问题: 前两天安装了个php 环境- wamp,由于我自己电脑上本身带有 mysql的数据库,在安装完后,没有注意到,mysql已经指向了 刚安装好的wamp里的mysql .导致 之前的 mys ...
- jdbc 变量 mysql_JDBC读写mysql总结
一.下载驱动(主要是jar包) mysql-connection-java-5.1.31-bin.jar 二.添加jar包,配置环境变量 把驱动jar包添加到以下两个目录,并设置classpath环境 ...
- 错误:“Cannot load JDBC driver class ‘com.mysql.jdbc.Driver”的解决方法
错误:"Cannot load JDBC driver class 'com.mysql.jdbc.Driver"的解决方法 参考文章: (1)错误:"Cannot lo ...
- 中国学霸本科生提出AI新算法:速度比肩Adam,性能媲美SGD,ICLR领域主席赞不绝口
晓查 乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAI 两位学霸本科生,一位来自北大,一位来自浙大. 他们在实习期间,研究出一种新的AI算法,相关论文已经被人工智能顶级会议ICLR 201 ...
最新文章
- 关于C#调用非托管DLL,报“内存已损坏的”坑,坑,坑
- nfp 网络共享服务器 搭建与配置
- 以行为单位对字符串变量下标为奇数位置上的字符按其ASCii值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中
- Bootstrap 禁用导航链接
- (九)企业分布式微服务云SpringCloud SpringBoot mybatis-服务链路追踪(Spring Cloud Sleuth)...
- 拉丁正方形 java_Leetcode 221 最大正方形 动态规划
- textbox多行文本框_文本框脚本
- 北京精雕现状_北京精雕科技有限公司怎么样?
- mysql 日期减号_MySQL表字段名包含减号的问题
- 如何用艺术字制作水印?教你一招快速制作专属水印
- 计算机中冰点还原快捷键,冰点还原软件如何使用,小编教你如何使用冰点还原软件...
- 微信文章数据分析一(阅读点赞评论)
- 为什么腾讯微云显示服务器繁忙,谁知道腾讯微云是干什么?
- 计算机网络 网络层 私网地址和公网地址及子网划分
- 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(十)-Java反序列化漏洞(2)
- python基础--截图提取图中文字存入Excel表
- 安卓开发--Eclipse搭建开发环境
- 机器人 瓷砖墙面清洗_卫生间瓷砖怎么清洗 教你几招让卫生间墙面光洁如新
- 尼康相机测试软件mac版,Nikon Camera Control
- K8S云管平台开发实践 - 报警功能01
热门文章
- 程序员DIY HIFI功放(前后级)的艰难过程
- [BZOJ4084][Sdoi2015]bigyration hash
- FCPX插件:视频转场插件Stupid Raisins Panel Pop
- 时间戳和时间相互转换
- 卡西欧计算机算坐标步骤,卡西欧计算器坐标的正反算.doc
- Python基础复习--print()函数、转义符、变量命名
- 阿里云服务器 安装下载工具aira2步骤
- Android中文乱码的分析与解决
- jquery传输文件到后端,后端处理数据。
- Python基础--读取yaml文件