了解更多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相关推荐

  1. JDBC批处理插入更新MySQL Oracle

    Today we will look into JDBC Batch insert and update examples in MySQL and Oracle databases. Sometim ...

  2. JAVA通过JDBC连接并操作MySQL数据库

    JAVA通过JDBC连接并操作MySQL数据库 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提 ...

  3. jdbc存储过程mysql_JDBC对MySQL数据库存储过程的调用

    1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用户通过指定存储过程的名字并给出参 ...

  4. jdbc 3种获得mysql插入数据的自增字段值的方法_JDBC 3种获得mysql插入数据的自增字段值的方法...

    JDBC 3种获得mysql插入数据的自增字段值的方法. 1. Retrieving AUTO_INCREMENT Column Values using Statement.getGenerated ...

  5. JDBC insert语句

    JDBC insert语句 执行步骤 package cn.itcast.jdbc;import java.sql.Connection; import java.sql.DriverManager; ...

  6. mysql和windows连接不上_问题-jdbc连接不上mysql,windows下开启两个mysql服务

    1.问题: 前两天安装了个php 环境- wamp,由于我自己电脑上本身带有 mysql的数据库,在安装完后,没有注意到,mysql已经指向了 刚安装好的wamp里的mysql .导致 之前的 mys ...

  7. jdbc 变量 mysql_JDBC读写mysql总结

    一.下载驱动(主要是jar包) mysql-connection-java-5.1.31-bin.jar 二.添加jar包,配置环境变量 把驱动jar包添加到以下两个目录,并设置classpath环境 ...

  8. 错误:“Cannot load JDBC driver class ‘com.mysql.jdbc.Driver”的解决方法

    错误:"Cannot load JDBC driver class 'com.mysql.jdbc.Driver"的解决方法 参考文章: (1)错误:"Cannot lo ...

  9. 中国学霸本科生提出AI新算法:速度比肩Adam,性能媲美SGD,ICLR领域主席赞不绝口

    晓查 乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI 两位学霸本科生,一位来自北大,一位来自浙大. 他们在实习期间,研究出一种新的AI算法,相关论文已经被人工智能顶级会议ICLR 201 ...

最新文章

  1. 关于C#调用非托管DLL,报“内存已损坏的”坑,坑,坑
  2. nfp 网络共享服务器 搭建与配置
  3. 以行为单位对字符串变量下标为奇数位置上的字符按其ASCii值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中
  4. Bootstrap 禁用导航链接
  5. (九)企业分布式微服务云SpringCloud SpringBoot mybatis-服务链路追踪(Spring Cloud Sleuth)...
  6. 拉丁正方形 java_Leetcode 221 最大正方形 动态规划
  7. textbox多行文本框_文本框脚本
  8. 北京精雕现状_北京精雕科技有限公司怎么样?
  9. mysql 日期减号_MySQL表字段名包含减号的问题
  10. 如何用艺术字制作水印?教你一招快速制作专属水印
  11. 计算机中冰点还原快捷键,冰点还原软件如何使用,小编教你如何使用冰点还原软件...
  12. 微信文章数据分析一(阅读点赞评论)
  13. 为什么腾讯微云显示服务器繁忙,谁知道腾讯微云是干什么?
  14. 计算机网络 网络层 私网地址和公网地址及子网划分
  15. 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(十)-Java反序列化漏洞(2)
  16. python基础--截图提取图中文字存入Excel表
  17. 安卓开发--Eclipse搭建开发环境
  18. 机器人 瓷砖墙面清洗_卫生间瓷砖怎么清洗 教你几招让卫生间墙面光洁如新
  19. 尼康相机测试软件mac版,Nikon Camera Control
  20. K8S云管平台开发实践 - 报警功能01

热门文章

  1. 程序员DIY HIFI功放(前后级)的艰难过程
  2. [BZOJ4084][Sdoi2015]bigyration hash
  3. FCPX插件:视频转场插件Stupid Raisins Panel Pop
  4. 时间戳和时间相互转换
  5. 卡西欧计算机算坐标步骤,卡西欧计算器坐标的正反算.doc
  6. Python基础复习--print()函数、转义符、变量命名
  7. 阿里云服务器 安装下载工具aira2步骤
  8. Android中文乱码的分析与解决
  9. jquery传输文件到后端,后端处理数据。
  10. Python基础--读取yaml文件