Documentation Home

10.1 使用 X DevAPI 进行连接压缩

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

对于 Connector/J 8.0.22 及更高版本:可以使用 connection 属性指定要与服务器协商的压缩算法和协商的优先级xdevapi.compression-algorithms。它接受 由逗号 (,) 分隔的 , 列表。如果未设置该属性,则使用默认值 。协商的优先级遵循算法在列表中出现的顺序。为该属性显式设置一个空字符串意味着应该为连接禁用压缩。 [algorithm-name]_[operation-mode]zstd_stream,lz4_message,deflate_stream

笔记

使用 指定压缩算法时 xdevapi.compression-algorithms,别名 zstdlz4deflate可分别用于代替 zstd_streamlz4_messagedeflate_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_messagezstd_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,并且无法成功协商任何算法,则连接尝试会失败并出现错误。