2013-06-15

SSDB 增加了 Compaction 限速功能

Views: 35417 | 4 Comments

最新的 SSDB 1.5.0 增加了 Compaction(合并) 限速功能, 避免 LevelDB 在合并的过程中写满磁盘, 导致 SSDB 无法快速的响应请求的情况. 遇到类似问题的 SSDB 用户, 建议你立即升级. 如果你升级之后仍然使用原有的 ssdb.conf 配置文件, 请在 leveldb 一节配置中加入下面一行:

	compaction_speed: 100

注意缩进. 这表示限速为 100MB/s, 你可以根据你的磁盘性能调整这个数值.

事实上, 所有使用了 Log-Structured Merge-Tree(LSM-tree) 类似结构的存储服务器, 都可能出现合并过程写满 IO 的问题, 包括 Redis, LevelDB, Cassandra 等. 我不清楚这些软件为什么不加入合并限速功能, 也许是偷懒. 但是, 如果没有合并限速功能, 这些软件的可用性堪忧, 因为它们会出现不确定的几乎无法响应的情况. 我们就曾经忍受了 Redis 合并带来的业务频繁报警, 最后不得不禁用其自动合并功能, 改为在凌晨手动(crontab)触发合并.

据我所知, 新浪微博使用的 Redis 也是他们自己加上了合并限速模块.

SSDB 项目地址: https://github.com/ideawu/ssdb

Related posts:

  1. SSDB 采用里程碑式版本发布机制
  2. LevelDB 服务器 SSDB 支持主从(master-slave)同步了!
  3. SSDB 支持 Snappy 压缩了
  4. 性能超越 Redis 的 NoSQL 数据库 SSDB
  5. SSDB – 支持 zset 的 LevelDB 服务器
Posted by ideawu at 2013-06-15 14:14:32 Tags:

4 Responses to "SSDB 增加了 Compaction 限速功能"

  • 这个功能很重要啊,我这几天ssdb程序挂了,就有可能是这个原因,文档里面没有写这个配置说明。 Reply
  • 最新版本的redis有参数可以控制,在bgrewriteaof时,新写入的数据根本不需要刷盘 Reply
  • 我们在生产环境测试了5天,使用setx(key, value, 3600*48),五天过去了,数据文件仍然在不断增长,现在已经超过30G,并且没有变小的迹象;

    使用top查看结果如下:
    28247 ssdb-user 20 0 28.5g 948m 851m S 0.3 12.1 40:30.79 ssdb-server

    我想问下ssdb的过期数据应该怎样清除? Reply
    @万老湿: 你可以在 ssdb-cli 命令行下执行 compact 命令, 看看硬盘空间是否被释放. ssdb 会在适当的时机释放硬盘空间, 而不是key过期后就立即释放. Reply

Leave a Comment