2013-10-08

SSDB 支持 Snappy 压缩了

Views: 29497 | 9 Comments

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

Related posts:

  1. SSDB 解决了 Snappy 导致 LevelDB 编译失败的问题
  2. LevelDB 服务器 SSDB 支持主从(master-slave)同步了!
  3. SSDB – 支持 zset 的 LevelDB 服务器
  4. SSDB 配置文件
  5. SSDB 已经支持在线备份功能!
Posted by ideawu at 2013-10-08 23:32:35 Tags: , ,

9 Responses to "SSDB 支持 Snappy 压缩了"

  • 还是开启压缩好一些,这个周末我也部署一个ssdb看看。 Reply
    @新浪微博rss: 好, 欢迎有信息反馈. Reply
    @ideawu:
    你好,我刚接触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
  • 请重新下载一份干净的源码, 然后重新编译. 注意看中间有什么报错, 把错误信息贴上来. Reply
  • ssdb安装时一直出错,提示“snappy-1.1.0/.libs/libsnappy.a:没有那个文件或目录”,该怎么办呢? Reply
    @blw: 因为 snappy 的未知的原因, 如果提示类似的错误, 请执行

    git checkout deps/snappy-1.1.0/aclocal.m4 Reply
    @blw: 请重新下载一份干净的源码, 然后重新编译. 注意看中间有什么报错, 把错误信息贴上来. ps: 留意你的系统时间是不是设置错了. Reply
  • ssdb数据达到T级别之后的性能怎么样? Reply
    @whl: 我们目前最大的应用是 500G, 性能并没有任何下降. Reply

Leave a Comment