本文分享自華為雲社群《JDBC連線openGauss6.0和PostgreSQL16.2效能對比》,作者: Gauss松鼠會小助手。
PostgreSQL vs openGauss
01 前置準備
安裝JDK:
詳細安裝步驟請問度娘,輸入能正常返回即已安裝
[root@db06 ~]# java -version openjdk version "1.8.0_262" OpenJDK Runtime Environment (build 1.8.0_262-b10) OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode) [root@db06 ~]# javac -version javac 1.8.0_262
下載PostgreSQL驅動jar包:https://jdbc.postgresql.org/
下載openGuass驅動jar包:https://opengauss.org/zh/download/
02 Hello World
純java程式碼,不涉及資料庫層,編輯java檔案程式碼,注意檔名需與類名同名
vi HelloWorld.java
public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World . . . "); } }
編譯執行:
javac HelloWorld.java
java HelloWorld
03 連線資料庫(PostgreSQL)
需要用到驅動jar包,測試PG版本是16.2
建立Demo檔案,檔名與類名同名
vi DBConnectDemo.java
import java.sql.*; public class DBConnectDemo { public static void main(String[] args){ // 相關ip,port,database,user,password需進行替換 String url = "jdbc:postgresql://172.16.107.156:54321/testdb"; String username = "muser"; String password = "Test@123"; try { // 載入驅動 Class.forName("org.postgresql.Driver"); // 列印資料庫版本 Connection conn = DriverManager.getConnection(url, username, password); Statement stmt = conn.createStatement(); ResultSet result = stmt.executeQuery("select version();"); while (result.next()){ System.out.println("DB version : " + result.getString("version")); } long avgtime = 0; int n = 10; // 迴圈次數 // 迴圈列印連線建立時間 for(int i=0;i<n;i++){ long start = System.nanoTime(); Connection connection = DriverManager.getConnection(url, username, password); long end = System.nanoTime() - start; System.out.println("connect success: " + end + " 納秒"); connection.close(); avgtime += end; } System.out.println("avg time: " + avgtime/n + " 納秒"); } catch (Exception e){ e.printStackTrace(); } } }
編譯執行:需要在路徑前面加上 .: 來指定路徑
javac編譯時在同目錄下可以不指定驅動jar包
java執行時則需要指定
javac -cp "/tmp/postgresql-42.5.2.jar" DBConnectDemo.java java -cp "/tmp/postgresql-42.5.2.jar" DBConnectDemo (有問題) java -cp ".:/tmp/postgresql-42.5.2.jar" DBConnectDemo java -cp ".:./*" DBConnectDemo
04 連線資料庫(openGauss)
openGauss出6.0了,下載個極簡版來試試
opengauss連線需要調整驅動和資料庫資訊
String url = "jdbc:opengauss://172.16.107.156:15400/testdb"; Class.forName("org.opengauss.Driver");
完整程式碼:
vi OGConnectDemo.java
import java.sql.*; public class OGConnectDemo { public static void main(String[] args){ // 相關ip,port,database,user,password需進行替換 String url = "jdbc:opengauss://172.16.107.156:6543/testdb"; String username = "muser"; String password = "Test@1234"; try { // 載入驅動 Class.forName("org.opengauss.Driver"); // 列印資料庫版本 Connection conn = DriverManager.getConnection(url, username, password); Statement stmt = conn.createStatement(); ResultSet result = stmt.executeQuery("select version();"); while (result.next()){ System.out.println("DB version : " + result.getString("version")); } long avgtime = 0; int n = 10; // 迴圈次數 // 迴圈列印連線建立時間 for(int i=0;i<n;i++){ long start = System.nanoTime(); Connection connection = DriverManager.getConnection(url, username, password); long end = System.nanoTime() - start; System.out.println("connect success: " + end + " 納秒"); connection.close(); avgtime += end; } System.out.println("avg time: " + avgtime/n + " 納秒"); } catch (Exception e){ e.printStackTrace(); } } }
編譯執行:OG會列印其他日誌資訊,這裡我們把輸出結果寫到檔案裡
javac -cp ".:/tmp/opengauss-jdbc-6.0.0-RC1.jar" OGConnectDemo.java java -cp .:/tmp/opengauss-jdbc-6.0.0-RC1.jar OGConnectDemo > OGConnectDemo.log cat OGConnectDemo.log
05 PG 🆚 OG 總結
- PostgreSQL 16.2 對比 openGauss 6.0 在連線建立上大概有3~4倍左右的效能優勢,當然都是在毫秒級別
- 針對高併發場景建議使用連線池來減少連線的頻繁建立和關閉所帶來的耗時
點選關注,第一時間瞭解華為雲新鮮技術~