Connector/J 在与 MySQL Server 8.0.19 及更高版本一起使用时,支持 X DevAPI 连接的数据压缩。有关此功能的一般详细信息,请参阅 使用 X 插件进行连接压缩。有关如何为 Connector/J 配置连接压缩的详细信息,请参阅连接属性 xdevapi.compression
、xdevapi.compression-algorithms
和 xdevapi.compression-extensions
的说明,位于 第 6.3 节,“配置属性” 中。以下是此功能的摘要
可以使用连接属性 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 的开箱即用支持;这是因为其他压缩算法 (LZ4 和 zstd,目前) 未被现有 JRE 本机支持。要支持这些算法,客户端应用程序必须以 OutputStream
和 InputStream
对象的形式分别提供对应于 deflate 和 inflate 操作的实现。最简单的方法是使用 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
,则如果无法成功协商任何算法,连接尝试将以错误告终。