JDBC連接openGauss6.0和PostgreSQL16.2性能對比

本文分享自華爲雲社區《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

cde3e59d885d19f87ef1c5dfd69dfa0d_20240423-5920493a-8b73-4a89-8f8b-b28d64bc132b.png

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

392884d7dcd32added9cc8032688fc57_20240425-c04ac173-ccd2-4bbf-af68-eb7751ab5402.png

04 連接數據庫(openGauss)

openGauss出6.0了,下載個極簡版來試試

be2aa89349f19d672e59a7b619c95be4_20240424-f4c3e609-b22a-4bc7-a0a7-fd5caf651e1b.png

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

012aef26a3c198bba8d6d221cd684756_20240425-baefea00-2d2e-49a2-b080-0feef391b58c.png

05 PG 🆚 OG 總結

image.png

  • PostgreSQL 16.2 對比 openGauss 6.0 在連接創建上大概有3~4倍左右的性能優勢,當然都是在毫秒級別
  • 針對高併發場景建議使用連接池來減少連接的頻繁創建和關閉所帶來的耗時

 

點擊關注,第一時間瞭解華爲雲新鮮技術~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章