當與 MySQL Server 8.0.19 及更新版本搭配使用時,Connector/J 支援 X DevAPI 連線的資料壓縮。有關此功能的一般詳細資訊,請參閱 使用 X 外掛程式的連線壓縮。有關如何設定 Connector/J 的連線壓縮的詳細資訊,請參閱第 6.3 節「組態屬性」中連線屬性 xdevapi.compression
、xdevapi.compression-algorithms
和 xdevapi.compression-extensions
的說明。以下是此功能的摘要
可以使用連線屬性 xdevapi.compression-algorithms
來指定要與伺服器協商的壓縮演算法,以及協商的優先順序。它接受以逗號 (,) 分隔的
清單。如果未設定此屬性,則會使用預設值 「[algorithm-name]
_[operation-mode]
zstd_stream,lz4_message,deflate_stream
」。協商的優先順序遵循演算法在清單中出現的順序。明確為該屬性設定空字串表示應停用該連線的壓縮。
當使用 xdevapi.compression-algorithms
指定壓縮演算法時,可以使用別名 zstd
、lz4
和 deflate
來代替 zstd_stream
、lz4_message
和 deflate_stream
。
在 MySQL Server 現在支援用於 X DevAPI 連線的所有壓縮演算法中,Connector/J 僅提供 Deflate 的開箱即用支援;這是因為現有的 JRE 本身不支援其他壓縮演算法 (目前為 LZ4 和 zstd)。為了支援這些演算法,用戶端應用程式必須以 OutputStream
和 InputStream
物件的形式提供對應的解壓縮和壓縮操作的實作。達成此目的最簡單的方法是使用第三方程式庫,例如 Apache Commons Compress 程式庫,其支援 LZ4 和 zstd。連線選項 xdevapi.compression-extensions
允許使用者設定 Connector/J,以使用 MySQL Server 支援的任何壓縮演算法,只要該演算法有 Java 實作。該選項會採用以逗號 (,) 分隔的三元組清單,而每個三元組又包含以下以冒號 (:) 分隔的元素
壓縮演算法名稱,由伺服器使用的識別碼指出(請參閱 使用 X 外掛程式的連線壓縮;可以使用 注意中提到的別名)。
實作介面
java.io.InputStream
的類別完整名稱,該類別將用於解壓縮以命名演算法壓縮的資料。實作介面
java.io.OutputStream
的類別完整名稱,該類別將用於使用命名演算法壓縮資料。
以下範例設定了使用 Apache Commons Compress 程式庫來支援 lz4_message
和 zstd_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
,則如果無法成功協商任何演算法,則連線嘗試會因錯誤而失敗。