在cassandra 2.2.7中有关于数据压缩/解压缩的问题。
我使用java cassandra驱动程序启用压缩。 cassandra表也配置为使用sstable压缩。 cassandra.yaml
中还有配置选项:
commitlog_compression:
- class_name: LZ4Compressor
在所有情况下都使用LZ4算法。
在我的情况下,LZ4将0.5G数据压缩到40Mb。在将数据发送到套接字驱动程序压缩之前,设置COMPRESSED
标志并发送到cassandra服务器。通过调试,我看到确切地将40Mb写入了socker。 Cassandra服务器通过OutOfMemoryError
接收,解压缩并消亡。
我认为它不会解压缩已压缩的数据并将其存储在目标表中。是否可以选择告诉cassandra在处理之前不解压缩数据?
更多细节。 Cassandra服务器有Server.Initial
个类,用于初始化netty ChannelPipeline
并附加几个ChannelHandler
。其中一个ChannelHandler
是Frame.Decompressor
。它检查给定帧是否有COMPRESSED
标志并解压缩数据(如果存在)。