Greenplum6 JDBC insert性能媲美MySQL

news/2024/5/19 0:21:20 标签: 数据库, 大数据, jdbc, 经验分享

了解更多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

在这里插入图片描述


http://www.niftyadmin.cn/n/1447045.html

相关文章

FZU-2216 The Longest Straight (二分枚举)

题目大意&#xff1a;给n个0~m之间的数&#xff0c;如果是0&#xff0c;那么0可以变为任意的一个1~m之间的一个数。从中选出若干个数&#xff0c;使构成一个连续的序列。问能构成的最长序列的长度为多少&#xff1f; 题目分析&#xff1a;枚举连续序列的起点&#xff0c;二分枚…

机器学习算法基础:极大似然估计(MLE)、最大后验概率估计(MAP)、贝叶斯估计区别

概率论、统计学相信大家都有了解或者上课学过&#xff0c;还有不少人认为概率论也就P(A)P(B)1P(A)P(B)1P(A)P(B)1如此简单&#xff0c;包括曾经的我哈&#xff0c;大学概率论满分&#xff0c;也觉得概率论、统计学就那样嘛&#xff0c;不难。 但随着深入的学习&#xff0c;概率…

数据库日常维护(参考)(转)

数据库日常维护工作是系统管理员的重要职责。其内容主要包括以下几个部分&#xff1a;一、备份系统数据SYBASE 系统的备份与恢复机制保证了在系统失败时重新获取数据的可能性。SQL Server 提供了两种不同类型的恢复机制&#xff1a;一类是系统自动完成的恢复&#xff0c;这种措…

Greenplum 带ORCA 优化器的编译安装解析

了解更多Greenplum技术干货&#xff0c;欢迎访问Greenplum中文社区网站 ORCA是开源的Postgres和Greenplum的优化器&#xff0c;相比于Greenplum和Postgres内置的优化器&#xff0c;ORCA在复杂查询以及分区表等场合有非常好的性能提升。这里介绍下如何使Greenplum启用ORCA优化器…

机器学习算法基础:分类模型概念归纳与总结(持续更新)

分类模型概念归纳与总结分类模型的归纳经典机器学习分类算法归纳与总结本人笔记本人理解、归纳、总结线性分类的归纳分类模型的归纳 判别模型&#xff08;由数据直接学习决策函数f(X)f(X)f(X)或条件概率分布f(Y∣X)f(Y|X)f(Y∣X)作为预测的模型&#xff09;&#xff1a;k近邻法…

第四章 变量、作用域和内存问题

JavaScript变量松散类型的本质&#xff0c;决定了它只是在特定时间用于保存特定值的一个名字而已。由于不存在定义某个变量必须要保存何种数据类型值的规则&#xff0c;变量的值及其数据类型可以在脚本的生命周期内改变。 4.1基本类型和引用类型的值 ECMAScript变量可能包含两种…

手把手教您借助GPCC查看表的分布和分区策略

了解更多Greenplum技术干货&#xff0c;欢迎访问Greenplum中文社区网站 ​Greenplum是一个大规模并行处理数据库&#xff0c;由一个master和多个segment组成。在之前推送的文章《Greenplum数据分布和分区策略》中&#xff0c;我们介绍了在Greenplum上&#xff0c;数据是按照什么…

为Linux配备Oracle 8(转)

为Linux配备Oracle 8,sql,sql教程,Oracle基础为Linux配备Oracle 8 在Linux下使用Oracle 8以前&#xff0c;应当安装Oracle 8&#xff0c;但Oracle公司提供的安装文档较为简单。笔者借鉴其在Unix操作系统下的安装方法&#xff0c;得出了在Linux上安装Oracle 8的方法&#xff0c;…