SSDB 数据库服务器从 1.6.2 版本开始, 支持 Snappy 数据压缩. Snappy 是一个由 Google 公司开发的压缩库, 在 Google 内部应用非常广泛, 同时也在很多知名开源软件中得到应用, 如 Cassandra, Hadoop 等.
LevelDB 也是可以使用 Snappy 的, 但不是强制绑定, 而是在编译 LevelDB 时自动判断使用. 但是, 在编译 LevelDB 时要添加关于 Snappy 的参数, 而且在编译使用了 LevelDB 的程序(如 SSDB)中也要添加关于 Snappy 的参数, 所以经常出现编译出错.
不过, 从 SSDB 1.6.2 版本起, SSDB 修改了 LevelDB 的编译参数, 总是使用 Snappy, 并且在源码中附带了 Snappy, 避免依赖关系错误. SSDB 在源码级别整合了 Snappy, 并且默认把 Snappy 编译进 LevelDB 中, 但是, 你仍然可以在 SSDB 的配置文件中配置成不使用压缩, 这只是一个可选项, 并不是强制的. 而且, 带有 Snappy 的 SSDB 完全兼容原来没有经过压缩的数据, 所以, 1.6.2 版本的 SSDB 兼容旧版本.
在一个简单的单项数据大小为 100K 的 Key-Value 数据的测试中, Snappy 可以达到 90% 的压缩比(也就是压缩后的体积是压缩前的 10%).
如果想启用 Snappy 压缩, 你需要在 ssdb.conf 的 leveldb 一节增加配置:
leveldb: compression: yes
如果没有这个选项, 默认是 no, 也即不压缩.
SSDB 是一个开源的 KV NoSQL 数据库, 使用 C++ 语言开发, 非常适合存储数百亿元素的大型列表, 还支持 zset(sort set). 欢迎大家使用, 项目地址是: https://github.com/ideawu/ssdb
你好,我刚接触ssdb
g++ -o sa Main.cpp libleveldb.a -lpthread
我在执行测试Main 这个 c++程序的时候报这错 看错误是确实snappy 这个东西,我看网上一些资料都没有对snappy 有什么配置,我下载的ssdb-master中自带 leveldb 1.14 和snappy 1.1.0 请问这个是什么原因~
libleveldb.a(table_builder.o): In function `leveldb::TableBuilder::WriteBlock(leveldb::BlockBuilder*, leveldb::BlockHandle*)':
table_builder.cc:(.text+0x6a8): undefined reference to `snappy::MaxCompressedLength(unsigned long)’
table_builder.cc:(.text+0x6e2): undefined reference to `snappy::RawCompress(char const*, unsigned long, char*, unsigned long*)’
libleveldb.a(format.o): In function `leveldb::ReadBlock(leveldb::RandomAccessFile*, leveldb::ReadOptions const&, leveldb::BlockHandle const&, leveldb::BlockContents*)':
format.cc:(.text+0x5de): undefined reference to `snappy::GetUncompressedLength(char const*, unsigned long, unsigned long*)’
format.cc:(.text+0x64e): undefined reference to `snappy::RawUncompress(char const*, unsigned long, char*)’
collect2: ld returned 1 exit status Reply
git checkout deps/snappy-1.1.0/aclocal.m4 Reply