文档首页
MySQL Connector/J 开发人员指南
相关文档 下载本手册
PDF (美国信纸) - 1.2Mb
PDF (A4) - 1.2Mb


10.1 使用 X DevAPI 进行连接压缩

Connector/J 在与 MySQL Server 8.0.19 及更高版本一起使用时,支持 X DevAPI 连接的数据压缩。有关此功能的一般详细信息,请参阅 使用 X 插件进行连接压缩。有关如何为 Connector/J 配置连接压缩的详细信息,请参阅连接属性 xdevapi.compressionxdevapi.compression-algorithmsxdevapi.compression-extensions 的说明,位于 第 6.3 节,“配置属性” 中。以下是此功能的摘要

可以使用连接属性 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 的开箱即用支持;这是因为其他压缩算法 (LZ4 和 zstd,目前) 未被现有 JRE 本机支持。要支持这些算法,客户端应用程序必须以 OutputStreamInputStream 对象的形式分别提供对应于 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_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,则如果无法成功协商任何算法,连接尝试将以错误告终。