• 2013-04-02

    LevelDB 会丢数据吗?

    Views: 26863 | 14 Comments

    Google 公司开源的 LevelDB KV 存储引擎是一个非常不错的东西, 支持 zset 数据结构的 SSDB 存储服务器便是使用 LevelDB 作为存储引擎. SSDB 的目的是用来替代 Redis, 作为大数据量存储的服务器. 为什么要在 LevelDB 上面做封装呢? 因为传统的 KV 存储天生不适合存储集合数据, 但实际业务几乎都要求处理集合数据.

    LevelDB 将数据写到磁盘上以保证持久化, 但一个重要的问题是, LevelDB 会丢数据吗? 如果程序意外退出, 或者机器掉电, LevelDB 的数据会丢失吗? 其实, 包括 Redis 在内, 甚至是所有的关系数据库系统, 也会面临这个问题.

    LevelDB 的写操作是直接操作文件描述符的, 虽然不是带缓冲的标准 IO 的 FILE, 看起来数据会被立即写到磁盘上, 但这个"立即"所对应的时间可就长了.

    首先, write() 函数返回时, 数据可能并未到达磁盘, 甚至到达了磁盘也可能只存在于磁盘的可丢失缓冲区. 当然, 如果数据确实达到了磁盘, 丢失的机率就非常小了. 数据何时被写到磁盘, 一般由操作系统内核控制. Linux 内核默认需要 30 秒才将数据刷新到磁盘上. 30 秒可是很长的时间! 丢失的数据可能达到几十万条.

    而 LevelDB 使用了 mmap, 这个时间可能更长!

    我给 LevelDB 提了一个 issue, 希望能给加上一个类似 Redis 的 sync everysecond 机制, 起一个单独的线程, 每隔一秒将数据刷到磁盘. 不过, 开发者认为这个线程不应该被加入到 LevelDB 里, 而是应该由使用者自己来实现.

    一些有用的讨论: http://oldblog.antirez.com/post/redis-persistence-demystified.html

    Posted by ideawu at 2013-04-02 20:30:23 Tags:
  • 2013-01-28

    SSDB增加hlist, zlist命令

    Views: 20698 | 4 Comments

    最近一段时间以来, SSDB 一直保持的稳定的更新速度, 代码在完善, 功能在丰富和整合. 目前已经有多个国内和国外用户在尝试使用, 相信很快就可以成为 SSDB 的正式用户.

    前几个版本, SSDB 增加了 log rotate 功能. 最新的更新版本中增加了 hlist 和 zlist 命令, 用于列出当前的 map 和 zset. KV 结构的数据仍然使用 keys 列出. *list 既不同于 *keys, 也不同于 *scan, 因为 *list 用于列出集合的名字, 而后两者则用于列出集合的内容.

    最近 SSDB 在生产环境的使用中, 遇到了多机房的问题. 在机房间网络无法改善的情况下, SSDB 必须能应付这种状况. 这里初步设计了新的同步体系, 欢迎大家一起讨论: https://github.com/ideawu/ssdb/issues/11.

    Posted by ideawu at 2013-01-28 11:24:13 Tags: ,
  • 2013-01-13

    SSDB 已经迁移到 github

    Views: 24335 | No Comments

    据说 github 功能更强大更适合多人协作开发, 所以我把 SSDB 从 Google Code 上迁移到了 github. 目前正在体验当中, 能想到的 github 的一个好处是, 我可以 fork 一个项目出来, 作为基于 SSDB(LevelDB) 的分布式存储项目, SSDB 仍然作为单机和简单主从结构的存储服务器项目.

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

    Posted by ideawu at 2013-01-13 21:22:43 Tags: , ,
  • 2013-01-11

    SSDB(LevelDB 服务器) PPT

    Views: 27399 | No Comments

    Posted by ideawu at 2013-01-11 23:34:44 Tags: , , ,
  • 2013-01-10

    SSDB与Redis命令对比

    Views: 33500 | 9 Comments
    Redis SSDB
    kv get get
    set set
    del del
    incr/incrBy incr
    decr/decrBy decr
    getMultiple multi_get
    setMultiple multi_set
    del(multiple) multi_del
    keys scan(for kv type only)


    Redis SSDB
    hashmap hget hget
    hset hset
    hdel hdel
    hIncrBy hincr
    hDecrBy hdecr
    hKeys hkeys
    hVals hscan
    hMGet multi_hget
    hMSet multi_hset
    hLen hsize


    Redis SSDB
    zset zScore zget
    zAdd zset
    zRem zdel
    zRange zrange/zscan
    zRangeByScore zscan
    zIncrBy zincr
    zDecrBy zdecr
    zCount
    zCard zsize
    Posted by ideawu at 2013-01-10 18:41:49 Tags: , , ,
  • 2013-01-06

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

    Views: 34643 | 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: , ,
|<<<456789101112>>>| 8/12 Pages, 68 Results.