从 8.0.20 版开始,Connector/J 在使用 MySQL Server 8.0.19 及更高版本时支持 X DevAPI 连接的数据压缩。有关此功能的一般详细信息,请参阅使用 X 插件进行连接压缩。有关如何为 Connector/J 配置连接压缩的详细信息,请参阅连接属性的说明
xdevapi.compression
,
xdevapi.compression-algorithms
以及
xdevapi.compression-extensions
第
6.3 节“配置属性”中的说明。以下是该功能的摘要:
对于 Connector/J 8.0.22 及更高版本:可以使用 connection 属性指定要与服务器协商的压缩算法和协商的优先级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
。
对于 Connector/J 8.0.21 及更早版本: Connector/J 按照 X DevAPI 推荐的优先级协商压缩算法:首先尝试 zstd,然后是 LZ4,最后是 Deflate。
在 MySQL 8.0 现在支持的用于 X DevAPI 连接的所有压缩算法中,Connector/J 仅提供对 Deflate 的开箱即用支持;这是因为现有的 JRE 本身不支持任何其他压缩算法(目前是 LZ4 和 zstd)。OutputStream
为了支持这些算法,客户端应用程序必须分别以对象和
对象的形式为相应的压缩和膨胀操作提供实现
InputStream
。完成此操作的最简单方法是使用第三方库,例如支持 LZ4 和 zstd 的 Apache Commons Compress 库。连接选项
xdevapi.compression-extensions
允许用户将 Connector/J 配置为使用 MySQL 服务器支持的任何压缩算法,只要该算法有 Java 实现即可。该选项采用以逗号 (,) 分隔的三元组列表,每个三元组依次包含以下元素,以冒号 (:) 分隔:
压缩算法名称,由服务器使用的标识符指示(请参阅 使用 X 插件的连接压缩;可以使用上面 注释中提到的别名 )。
实现接口的类的完全限定名称,该接口
java.io.InputStream
将用于膨胀使用指定算法压缩的数据。实现接口的类的完全限定名称,该接口
java.io.OutputStream
将用于使用命名算法 压缩数据。
下面是设置对算法的支持
lz4_message
并
zstd_stream
使用 Apache Commons Compress 库的示例:
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
,并且无法成功协商任何算法,则连接尝试会失败并出现错误。