9.1.6 压缩与解压缩
class ObCompressor
{
public:
//数据压缩与解压缩接口
//@param[in]src_buff输入数据缓冲区
//@param[in]src_data_size输入数据大小
//@param[in/out]dst_buffer输出数据缓冲区
//@param[in]dst_buffer_size输出数据缓冲区大小
//@param[out]dst_data_size输出数据大小
virtual compress(const charsrc_buffer,const int64_t src_data_size,chardst_buffer,const int64_t dst_buffer_size,int64_t&dst_data_size)=0;
virtual decompress(const charsrc_buffer,const int64_t src_data_size,chardst_buffer,const int64_t dst_buffer_size,int64_t&dst_data_size)=0;
//获取压缩库名称
const char*get_compress_name()const;
//根据传入的大小计算压缩后最大可能的溢出大小
int64_t get_max_overflow_size(const int64_t src_data_size)const;
};
ObCompressor定义了压缩与解压缩的通用接口,具体的压缩库实现了这些接口。压缩库以动态库(.so)的形式存在,每个工作线程第一次调用compress或者decompress方法时将加载相应的动态库,这样便实现了压缩库的插件化。目前,支持的压缩库包括LZO[1]以及Snappy[2]。
[1]LZO:见http://www.oberhumer.com/opensource/lzo/
[2]Snappy:Google开源的压缩库,见http://code.google.com/p/snappy/