文件首頁
MySQL Connector/J 開發人員指南
相關文件 下載本手冊

10.1 使用 X DevAPI 的連線壓縮

當與 MySQL Server 8.0.19 及更新版本搭配使用時,Connector/J 支援 X DevAPI 連線的資料壓縮。有關此功能的一般詳細資訊,請參閱 使用 X 外掛程式的連線壓縮。有關如何設定 Connector/J 的連線壓縮的詳細資訊,請參閱第 6.3 節「組態屬性」中連線屬性 xdevapi.compressionxdevapi.compression-algorithmsxdevapi.compression-extensions 的說明。以下是此功能的摘要

可以使用連線屬性 xdevapi.compression-algorithms 來指定要與伺服器協商的壓縮演算法,以及協商的優先順序。它接受以逗號 (,) 分隔的 [algorithm-name]_[operation-mode] 清單。如果未設定此屬性,則會使用預設值 zstd_stream,lz4_message,deflate_stream。協商的優先順序遵循演算法在清單中出現的順序。明確為該屬性設定空字串表示應停用該連線的壓縮。

注意

當使用 xdevapi.compression-algorithms 指定壓縮演算法時,可以使用別名 zstdlz4deflate 來代替 zstd_streamlz4_messagedeflate_stream

在 MySQL Server 現在支援用於 X DevAPI 連線的所有壓縮演算法中,Connector/J 僅提供 Deflate 的開箱即用支援;這是因為現有的 JRE 本身不支援其他壓縮演算法 (目前為 LZ4 和 zstd)。為了支援這些演算法,用戶端應用程式必須以 OutputStreamInputStream 物件的形式提供對應的解壓縮和壓縮操作的實作。達成此目的最簡單的方法是使用第三方程式庫,例如 Apache Commons Compress 程式庫,其支援 LZ4 和 zstd。連線選項 xdevapi.compression-extensions 允許使用者設定 Connector/J,以使用 MySQL Server 支援的任何壓縮演算法,只要該演算法有 Java 實作。該選項會採用以逗號 (,) 分隔的三元組清單,而每個三元組又包含以下以冒號 (:) 分隔的元素

  • 壓縮演算法名稱,由伺服器使用的識別碼指出(請參閱 使用 X 外掛程式的連線壓縮;可以使用 注意中提到的別名)。

  • 實作介面 java.io.InputStream 的類別完整名稱,該類別將用於解壓縮以命名演算法壓縮的資料。

  • 實作介面 java.io.OutputStream 的類別完整名稱,該類別將用於使用命名演算法壓縮資料。

以下範例設定了使用 Apache Commons Compress 程式庫來支援 lz4_messagezstd_stream 演算法

String connStr = "jdbc:mysql://johndoe:secret@localhost:33060/mydb?" 
    + "xdevapi.compression-extensions=" 
    + "lz4_message"+":" // LZ4 triplet 
    + FramedLZ4CompressorInputStream.class.getName() + ":" 
    + FramedLZ4CompressorOutputStream.class.getName() + "," 
    + "zstd_stream"+":" // zstd triplet 
    + ZstdCompressorInputStream.class.getName() + ":" 
    + ZstdCompressorOutputStream.class.getName(); 
SessionFactory sessFact = new SessionFactory(); 
Session sess = sessFact.getSession(connStr); 
Collection col = sess.getDefaultSchema().getCollection("myCollection"); 
// (...) 
sess.close();
注意

對於 Connector/J 8.0.21 和更早版本:上述的連線屬性 xdevapi.compression-extensions 在 Connector/J 8.0.21 和更早版本中名為 xdevapi.compression-algorithm,而且每個三元組中的元素應以逗號 (,) 而不是冒號 (:) 分隔。

預設會嘗試協商壓縮演算法(預設為 xdevapi.compression=Preferred),除非連線屬性 xdevapi.compression 設定為 DISABLED。最終壓縮演算法的選擇取決於伺服器上啟用的演算法。依預設,由於不需要壓縮,如果協商失敗,則不會壓縮連線,但用戶端仍然可以與伺服器通訊;但是,如果連線屬性 xdevapi.compression 設定為 REQUIRED,則如果無法成功協商任何演算法,則連線嘗試會因錯誤而失敗。