From 29cef3405bc5a2dd5f01b529d4b9d026cebb333d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Fri, 2 Jun 2023 11:49:10 +0800 Subject: [PATCH] 'commit' --- pom.xml | 15 ++- .../UnitTest/OpenGaussReadWriteSplit.java | 24 ++--- .../java/UnitTest/OpenGaussWriteBatch.java | 70 ++++++++++++++ .../UnitTest/OpenGaussWriteShiWu_JDBC.java | 76 +++++++++++++++ .../UnitTest/OpenGaussWriteShiWu_Jfinal.java | 96 +++++++++++++++++++ 5 files changed, 266 insertions(+), 15 deletions(-) create mode 100644 src/main/java/UnitTest/OpenGaussWriteBatch.java create mode 100644 src/main/java/UnitTest/OpenGaussWriteShiWu_JDBC.java create mode 100644 src/main/java/UnitTest/OpenGaussWriteShiWu_Jfinal.java diff --git a/pom.xml b/pom.xml index 7f5230b..a2cb1c0 100644 --- a/pom.xml +++ b/pom.xml @@ -251,11 +251,20 @@ + + + + + + + - org.opengauss - opengauss-jdbc - 5.0.0 + org.postgresql + postgresql + 42.6.0 + + org.apache.kafka diff --git a/src/main/java/UnitTest/OpenGaussReadWriteSplit.java b/src/main/java/UnitTest/OpenGaussReadWriteSplit.java index 818adcc..eadd2cf 100644 --- a/src/main/java/UnitTest/OpenGaussReadWriteSplit.java +++ b/src/main/java/UnitTest/OpenGaussReadWriteSplit.java @@ -1,7 +1,6 @@ package UnitTest; -import com.alibaba.druid.filter.stat.StatFilter; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; @@ -18,9 +17,9 @@ public class OpenGaussReadWriteSplit { public static DruidPlugin createDruidPlugin(String url, String username, String password, String driverClass) { DruidPlugin druidPlugin = new DruidPlugin(url, username, password, driverClass); //最大连接池数量 - druidPlugin.setMaxActive(20); + druidPlugin.setMaxActive(100); //最小连接池数量 - druidPlugin.setMinIdle(1); + druidPlugin.setMinIdle(50); //初始化时建立物理连接的个数,默认为0 druidPlugin.setInitialSize(1); //获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 @@ -32,21 +31,22 @@ public class OpenGaussReadWriteSplit { //建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 druidPlugin.setTestWhileIdle(true); //申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。默认为true - druidPlugin.setTestOnBorrow(false); + druidPlugin.setTestOnBorrow(true); //归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。默认为true - druidPlugin.setTestOnReturn(false); + druidPlugin.setTestOnReturn(true); //数据监控 - druidPlugin.addFilter(new StatFilter()); + //druidPlugin.addFilter(new StatFilter()); return druidPlugin; } public static void main(String[] args) { - String masterUrl = "jdbc:postgresql://10.10.14.61:15400/test_db"; - String slaveUrl = "jdbc:postgresql://10.10.14.62:15400/test_db"; - //String slaveUrl = "jdbc:postgresql://10.10.14.61:15400,10.10.14.62:15400/test_db?loadBalanceHosts=true&targetServerType=preferSlave"; + String masterUrl = "jdbc:postgresql://10.10.14.63:15400/test_db"; + String passWord = "DsideaL147258369"; + + String slaveUrl = "jdbc:postgresql://10.10.14.61:15400,10.10.14.62:15400/test_db?loadBalanceHosts=true&targetServerType=preferSlave"; + String driverClass = "org.postgresql.Driver"; String userName = "postgres"; - String passWord = "DsideaL147258369"; DruidPlugin druidMaster = createDruidPlugin(masterUrl, userName, passWord, driverClass); druidMaster.start(); @@ -69,11 +69,11 @@ public class OpenGaussReadWriteSplit { long start = System.currentTimeMillis(); List list=new ArrayList<>(); - for (int i = 1; i <= 100000; i++) { + for (int i = 1; i <= 1000; i++) { sql = "insert into test(id,txt) values("+i+",'黄海')"; list.add(sql); } - Db.batch(list,2000); + Db.batch(list,500); long end = System.currentTimeMillis(); long elapsed = end - start; diff --git a/src/main/java/UnitTest/OpenGaussWriteBatch.java b/src/main/java/UnitTest/OpenGaussWriteBatch.java new file mode 100644 index 0000000..1545fd2 --- /dev/null +++ b/src/main/java/UnitTest/OpenGaussWriteBatch.java @@ -0,0 +1,70 @@ +package UnitTest; + + +import com.jfinal.plugin.activerecord.ActiveRecordPlugin; +import com.jfinal.plugin.activerecord.Db; +import com.jfinal.plugin.activerecord.dialect.PostgreSqlDialect; +import com.jfinal.plugin.druid.DruidPlugin; + +import java.util.ArrayList; +import java.util.List; + +import static com.dsideal.FengHuang.Const.DbConst.MASTER; + +public class OpenGaussWriteBatch { + public static DruidPlugin createDruidPlugin(String url, String username, String password, String driverClass) { + DruidPlugin druidPlugin = new DruidPlugin(url, username, password, driverClass); + //最大连接池数量 + druidPlugin.setMaxActive(100); + //最小连接池数量 + druidPlugin.setMinIdle(50); + //初始化时建立物理连接的个数,默认为0 + druidPlugin.setInitialSize(1); + //获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 + druidPlugin.setMaxWait(60000); + //如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。 + druidPlugin.setTimeBetweenEvictionRunsMillis(60000); + //连接保持空闲而不被驱逐的最小时间 + druidPlugin.setMinEvictableIdleTimeMillis(300000); + //建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 + druidPlugin.setTestWhileIdle(true); + //申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。默认为true + druidPlugin.setTestOnBorrow(true); + //归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。默认为true + druidPlugin.setTestOnReturn(true); + return druidPlugin; + } + + public static void main(String[] args) { + String masterUrl = "jdbc:postgresql://10.10.14.63:15400/test_db"; + String passWord = "DsideaL147258369"; + + String driverClass = "org.postgresql.Driver"; + String userName = "postgres"; + + DruidPlugin druidMaster = createDruidPlugin(masterUrl, userName, passWord, driverClass); + druidMaster.start(); + + ActiveRecordPlugin arpMaster = new ActiveRecordPlugin(MASTER, druidMaster); + arpMaster.setDevMode(false); + arpMaster.setDialect(new PostgreSqlDialect()); + arpMaster.start(); + + + String sql = "truncate table test"; + Db.use(MASTER).update(sql); + + long start = System.currentTimeMillis(); + + List list=new ArrayList<>(); + for (int i = 1; i <= 100000; i++) { + sql = "insert into test(id,txt) values("+i+",'黄海')"; + list.add(sql); + } + Db.batch(list,500); + + long end = System.currentTimeMillis(); + long elapsed = end - start; + System.out.println("程序耗时:" + elapsed + " 毫秒"); + } +} \ No newline at end of file diff --git a/src/main/java/UnitTest/OpenGaussWriteShiWu_JDBC.java b/src/main/java/UnitTest/OpenGaussWriteShiWu_JDBC.java new file mode 100644 index 0000000..e31a267 --- /dev/null +++ b/src/main/java/UnitTest/OpenGaussWriteShiWu_JDBC.java @@ -0,0 +1,76 @@ +package UnitTest; + +import java.sql.*; + +public class OpenGaussWriteShiWu_JDBC { + + // JDBC连接参数 + private static final String DB_DRIVER = "org.postgresql.Driver"; + private static final String DB_CONNECTION = "jdbc:postgresql://10.10.14.63:15400/test_db"; + private static final String DB_USER = "postgres"; + private static final String DB_PASSWORD = "DsideaL147258369"; + + // 批量插入数据 + public static void batchInsertData() { + // JDBC连接对象 + Connection conn = null; + // JDBC执行语句对象 + Statement stmt = null; + + try { + // 加载JDBC驱动程序 + Class.forName(DB_DRIVER); + // 获取JDBC连接对象 + conn = DriverManager.getConnection(DB_CONNECTION, DB_USER, DB_PASSWORD); + // 设置事务自动提交为false + conn.setAutoCommit(false); + // 获取JDBC执行语句对象 + stmt = conn.createStatement(); + // 批量插入数据的SQL语句 + String sql = "INSERT INTO test(id, txt) " + + "VALUES (?, ?)"; + // 预编译SQL语句并添加批量操作数据 + long start = System.currentTimeMillis(); + + int cnt=0; + for (int k = 1; k <= 10; k++) { + PreparedStatement pstmt = conn.prepareStatement(sql); + for (int i = 1; i <= 10000; i++) { + cnt++; + pstmt.setInt(1, cnt); + pstmt.setString(2, "黄海_" + i); + pstmt.addBatch(); + } + // 执行批量插入操作 + pstmt.executeBatch(); + // 提交事务 + conn.commit(); + } + + long end = System.currentTimeMillis(); + long elapsed = end - start; + System.out.println("程序耗时:" + elapsed + " 毫秒"); + } catch (SQLException | ClassNotFoundException e) { + e.printStackTrace(); + try { + conn.rollback(); + } catch (SQLException ex) { + ex.printStackTrace(); + } + } finally { + try { + if (stmt != null) { + stmt.close(); + } + if (conn != null) { + conn.close(); + } + } catch (SQLException ex) { + ex.printStackTrace(); + } + } + } + public static void main(String[] args) { + batchInsertData(); + } +} \ No newline at end of file diff --git a/src/main/java/UnitTest/OpenGaussWriteShiWu_Jfinal.java b/src/main/java/UnitTest/OpenGaussWriteShiWu_Jfinal.java new file mode 100644 index 0000000..fb798ae --- /dev/null +++ b/src/main/java/UnitTest/OpenGaussWriteShiWu_Jfinal.java @@ -0,0 +1,96 @@ +package UnitTest; + + +import com.jfinal.plugin.activerecord.*; +import com.jfinal.plugin.activerecord.dialect.PostgreSqlDialect; +import com.jfinal.plugin.druid.DruidPlugin; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import static com.dsideal.FengHuang.Const.DbConst.MASTER; + +public class OpenGaussWriteShiWu_Jfinal { + public static DruidPlugin createDruidPlugin(String url, String username, String password, String driverClass) { + DruidPlugin druidPlugin = new DruidPlugin(url, username, password, driverClass); + //最大连接池数量 + druidPlugin.setMaxActive(100); + //最小连接池数量 + druidPlugin.setMinIdle(50); + //初始化时建立物理连接的个数,默认为0 + druidPlugin.setInitialSize(1); + //获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 + druidPlugin.setMaxWait(60000); + //如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。 + druidPlugin.setTimeBetweenEvictionRunsMillis(60000); + //连接保持空闲而不被驱逐的最小时间 + druidPlugin.setMinEvictableIdleTimeMillis(300000); + //建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 + druidPlugin.setTestWhileIdle(true); + //申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。默认为true + druidPlugin.setTestOnBorrow(true); + //归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。默认为true + druidPlugin.setTestOnReturn(true); + return druidPlugin; + } + + public static void main(String[] args) throws SQLException { + String masterUrl = "jdbc:postgresql://10.10.14.63:15400/test_db"; + String passWord = "DsideaL147258369"; + + String driverClass = "org.postgresql.Driver"; + String userName = "postgres"; + + DruidPlugin druidMaster = createDruidPlugin(masterUrl, userName, passWord, driverClass); + druidMaster.start(); + + ActiveRecordPlugin arpMaster = new ActiveRecordPlugin(MASTER, druidMaster); + arpMaster.setDevMode(false); + arpMaster.setDialect(new PostgreSqlDialect()); + arpMaster.start(); + + + String truncateSql = "truncate table test"; + Db.use(MASTER).update(truncateSql); + + //记录开始时间 + long start = System.currentTimeMillis(); + // 声明数据库连接 + Connection conn = null; + try { + conn = DbKit.getConfig().getDataSource().getConnection(); + DbKit.getConfig().setThreadLocalConnection(conn); + conn.setAutoCommit(false); + String sql = "INSERT INTO test(id, txt) " + "VALUES (?, ?)"; + PreparedStatement pstmt = conn.prepareStatement(sql); + for (int i = 1; i <= 100000; i++) { + pstmt.setInt(1, i); + pstmt.setString(2, "黄海_" + i); + pstmt.addBatch(); + } + // 执行批量插入操作 + pstmt.executeBatch(); + conn.commit(); + System.out.println("事务操作成功"); + } catch (Exception e) { + e.printStackTrace(); + System.err.println("事务操作失败"); + try { + conn.rollback(); + } catch (SQLException eSql) { + System.err.println("Connection 回滚失败"); + } + } finally { + if (null != conn) { + conn.close(); + } + DbKit.getConfig().removeThreadLocalConnection(); + } + long end = System.currentTimeMillis(); + long elapsed = end - start; + System.out.println("程序耗时:" + elapsed + " 毫秒"); + } +} \ No newline at end of file