• 2013-04-23

    SSDB 使用 jemalloc

    Views: 39469 | 2 Comments

    SSDB 目前已经进展到 1.3.x 版本, 在使用过程中, 程序一直非常稳定, 内存占用也很合理, 即使在一个40G数据在应用中, 内存占用也稳定在1G左右.

    最近, SSDB 被应用到了一个极端的环境, 这是一个图片相关的应用, 给 SSDB 造成的压力就是:

    1. 单条数据较大. 一般的应用也就几K级别的单条数据, 但图片处理一般在1M级别
    2. 并发数较多, 达20K+

    Continue reading »

    Posted by ideawu at 2013-04-23 13:11:00 Tags: ,
  • 2013-01-06

    LevelDB 服务器 SSDB 支持主从(master-slave)同步了!

    Views: 34644 | 5 Comments

    经过前段时间的连续奋战, 前两晚的代码清理和收尾, 基于 LevelDB 的 KV(支持数据类型包括 hashmap, zset) 存储服务器 SSDB 终于发布了 1.2.0 版本. 这是一个里程碑式的版本, 因为从此 SSDB 支持了主从同步(master-slave replication), 再加上在线备份功能, SSDB 已经成为一个真正的生产环境的存储服务器!

    Google 的 LevelDB 存储引擎保证了 SSDB 至少能存储 T 级别的数据, 并在上面进行快速的查询, 有报告称 100G 级别的数据已经在网站上正常工作. 而 SSDB 本身实现的备份和主从同步特性, 则是对生产环境的必要支持 - 负载均衡.

    Continue reading »

    Posted by ideawu at 2013-01-06 13:34:53 Tags: , ,
  • 2013-01-05

    SSDB 解决了 Snappy 导致 LevelDB 编译失败的问题

    Views: 31413 | 15 Comments

    有不少用户反馈, 对于曾经编译和安装过 LevelDB 和 Snappy 的环境, 编译 SSDB 会出错. 问题出在 LevelDB 无法正确地找到 Snappy 的库(libsnappy), 而且, SSDB 本身没有考虑 -lsnappy 选项.

    最终我决定手动修改 LevelDB 的 Makefile 和 build_detect_platform 两个文件, 完全放弃 Snappy. 但 SSDB 将会在未来的版本中增加 Snappy(直接打包附带源码), 而不是使用系统已安装的 Snappy.

    请下载 SSDB 1.1.3: https://code.google.com/p/zdb/downloads/list https://github.com/ideawu/ssdb

    开发进度预告: 经过前段时间紧张的开发, 支持主从(master-slave)复制功能的 SSDB 版本 1.2 已经基本开发完毕, 目前在整理代码, 近几天就可以发布! 该主从同步方案用 LevelDB 存储库的更新 Log, 并按 LevelDB 内部的序号组织, 所以主从同步可以容忍非常糟糕的网络环境和非期待的异常当机.

    Posted by ideawu at 2013-01-05 14:08:05 Tags: ,
  • 2012-12-27

    SSDB 已经支持在线备份功能!

    Views: 26596 | 12 Comments

    SSDB 1.1.0 已经发布! 这个版本支持了在线备份功能, 可以在不停止服务的情况下备份服务器数据. 这个功能让 SSDB 更加成为一个真正生产环境的存储服务器!

    备份

    ./tools/ssdb-dump 127.0.0.1 8888 ./backup_dir
    

    这条命令从监听在 127.0.0.1:8888 的 SSDB 服务器上备份全量的数据, 保存到本地新创建的目录 backup_dir, 这个目录其实是一个 LevelDB 的数据库(db).

    恢复

    恢复方案非常简单.

    backup_dir 传输到服务器, 修改新ssdb服务器的配置文件, 将 SSDB 使用的数据库名改为 backup_dir, 然后重启 SSDB 即可.

    下一步

    SSDB 的下一个特性将是同步复制, 也即常说的"主从(Master-Slave)架构", 一旦同步复制功能加入进来, SSDB 将变得更加适合生产环境使用. 毕竟, 单份的数据总是让人不放心, 必须得复制多份保存下来才能让人安心. ssdb-dump 虽然可以达到此目的, 但还是一种被动的备份方式. 而同步复制功能将是分布式的基础. 主从架构还能用作简单的负载均衡.

    SSDB 是一个 LevelDB 服务器, 项目主页: https://code.google.com/p/zdb/

    Posted by ideawu at 2012-12-27 00:10:06 Tags: ,
  • 2012-12-19

    SSDB – 支持 zset 的 LevelDB 服务器

    Views: 25638 | No Comments

    Google 开源的 LevelDB 是一个单纯的 key-value 存储的类库, 可以理解为是一个存储引擎, 并不是常见意义的服务器. 你无法通过网络接口来使用它, 只能用 C/C++ 语言才能使用它.

    LevelDB 速度非常快, 是 Google 内部分布式存储系统 Bigtable 的存储引擎的开源版本, 作为分布式系统的一个存储节点(Tablet). LevelDB 的设计思想和 Google 内部的版本部分相同, 但肯定也被隐藏了一些接口和思想, 而这部分很可能是非常重要和关键的.

    Continue reading »

    Posted by ideawu at 2012-12-19 13:48:10 Tags: ,
  • 2012-11-16

    必须放在循环中的pthread_cond_wait

    Views: 11217 | No Comments

    消费者线程(多个):

    // *错误做法*
    lock(my_lock){
        if(wait = 1){
            pthread_cond_wait(cond, my_lock);
        }
        wait = 1;
    }
    

    生产者线程:

    lock(my_lock){
        wait = 0;
        pthread_cond_signal(cond);
    }
    

    由于在 if(wait=1) 之后和 pthread_cond_wait() 在之前, wait 有可能已经被其它消费者线程更改了.

    所以, 必须把 pthread_cond_wait() 放在循环中:

    // 正确做法
    lock(my_lock){
        while(wait = 1){
            pthread_cond_wait(cond, my_lock);
        }
        wait = 1;
    }
    
    Posted by ideawu at 2012-11-16 18:36:55
|<<<123456789>>>| 4/14 Pages, 84 Results.