• 2013-10-23

    SSDB 增加 zrank, zrange 命令

    Views: 45082 | 6 Comments

    Zrank/zrrank 命令是 zset 数据结构的一个特有命令, 用于求某个元素在集合中的排序名次. 对于 Redis 来说, 数据都在内存里, 而且是排序的, 所以求元素的排名(indexOf)可以很快, 但因为 SSDB 的数据主要在硬盘中, 所以, 求排序名次可不是那么简单.

    基于这个考虑, SSDB 原来并不支持 zrank 命令. 但 zrank 命令的需求还是有的, 经过考虑, 所以在 1.6.3 版本中增加了 zrank 命令.

    不过, 使用这个命令应该是在离线环境中, 而不能是在线上生产环境中, 因为 zrank 的实现是通过遍历数据(相当于全表扫描).

    另外, SSDB 还增加了 zrange/zrrange 命令, 相当于数组的 slice 操作或者 MySQL 的 limit 操作. 和 zrank 类似, zrange 也是通过表扫描来实现的, 只要 offset 越大, 速度就越慢. 所以, 在 offset 小于 200 时, 可以在线上生产环境使用, 否则最好是离线环境中使用.

    Posted by ideawu at 2013-10-23 13:05:07 Tags: , , ,
  • 2013-10-17

    SSDB 的 C++ 客户端接口

    Views: 39431 | 11 Comments

    SSDB 本身是用 C++ 语言编写的, 所以天生就支持 C++ 客户端 API. SSDB 源码中自带的 leveldb-import.cpp, ssdb-dump.cpp 等程序, 也是 C++ 客户端的例子. 不过, 这些 API 依赖整个项目, 编译和链接的参数非常繁琐. 因此, 有必要开发对用户友好的 C++ API, 减少依赖, 方便开发 SSDB 的 C++ 客户端应用.

    我很高兴的通知, 接口简单, 对用户友好的 SSDB 的 C++ 客户端 API 已经有了! 并且, 有了相应的 API 文档(我相信文档对于一个软件的作用是非常重要的). 我可以用一行代码了显示这个 API 的使用是如何的简单:

    g++ -o hello-ssdb hello-ssdb.cpp libssdb.a
    

    hello-ssdb.cpp 就是一个使用了 SSDB C++ API 的客户端程序, 上面的一行命令用于编译这个程序, 生成可执行文件.

    SSDB C++ API 包括了两类方法, 一类是简单方法, 另一类是语义化的方法. 简单方法就是在一个统一的函数中传递任意命令和参数. 而语义化的方法即类型 get(), set() 这样顾名思义的方法. 因为时间的缘故, 后一种方法还没有实现.(更新: 两类方法都已实现.)

    欢迎大家使用, 如果有什么意义, 欢迎反馈!

    SSDB C++ 客户端接口文档: http://www.ideawu.com/ssdb/docs/cpp/

    Posted by ideawu at 2013-10-17 23:27:05 Tags: , ,
  • 2013-10-08

    SSDB 支持 Snappy 压缩了

    Views: 31080 | 9 Comments

    SSDB 数据库服务器从 1.6.2 版本开始, 支持 Snappy 数据压缩. Snappy 是一个由 Google 公司开发的压缩库, 在 Google 内部应用非常广泛, 同时也在很多知名开源软件中得到应用, 如 Cassandra, Hadoop 等.

    LevelDB 也是可以使用 Snappy 的, 但不是强制绑定, 而是在编译 LevelDB 时自动判断使用. 但是, 在编译 LevelDB 时要添加关于 Snappy 的参数, 而且在编译使用了 LevelDB 的程序(如 SSDB)中也要添加关于 Snappy 的参数, 所以经常出现编译出错.

    Continue reading »

    Posted by ideawu at 2013-10-08 23:32:35 Tags: , ,
  • 2013-10-06

    用SSDB快速开发一个微博(Twitter)demo

    Views: 25434 | 3 Comments

    对于新浪微博或者 Twitter 这样的应用, 其最核心的数据结构就是排序列表. 例如, 我关注的人, 关注我的人, 我发的微博, 我收到的微博, 等等. 这些业务功能点都是排序列表数据结构, 根据时间排序.

    这样的数据结构如果用关系数据库(如 MySQL)来存储的话, 需要设计一个表, 表和一个外键字段, 作为列表的名字, 还要有一个 int 型时间字段用于排序, 还有第 3 个字段就是列表的元素(如 uid, 微博 ID). 不过, 因为 MySQL 一旦表的数据量达到 100 万行数据时, MySQL 就基本无法满足实时查询的要求了.

    Continue reading »

    Posted by ideawu at 2013-10-06 15:02:48 Tags: ,
  • 2013-09-25

    SSDB常规升级-更新到leveldb-1.14.0, Windows安装包

    Views: 24796 | 7 Comments

    在最近的 SSDB 1.6.1 版本中, 更新到了最新的 leveldb-1.14.0 版本. 这是一次常规升级, 大家可以根据情况决定升级.

    SSDB 预编译的 Windows 可执行安装包

    另外, SSDB 提供了预编译的 Windows 下的可执行安装包, Windows 用户可以下载后直接运行 ssdb-server.exe. Windows 下的 SSDB 依赖 cygwin, 所以附带了几个 dll 文件. 使用方式:

    1. 从 https://github.com/ideawu/ssdb-bin 下载可执行文件 ssdb-server.exe 和相关 dll.
    2. 从 https://github.com/ideawu/ssdb 下载 ssdb.conf 配置文件.
    3. 解压, 然后从开始菜单中运行 cmd.exe.
    4. 在 cmd.exe 启动后, cd ssdb-server.exe 所在的目录.
    5. 执行 ssdb-server.exe ssdb.conf

    Posted by ideawu at 2013-09-25 22:23:14 Tags:
  • 2013-07-21

    SSDB在大数据量日志分析中的应用案例

    Views: 33684 | 2 Comments

    在一个网站广告系统中, 需要针对每一个用户所接受的弹窗次数和点击次数这两个重要指标进行统计, 从而进行效果分析和精准投放的改进. 这两个指标的统计算法其实非常简单, 主要的难点在于大数据量. 广告系统的涉及的用户量达到数千万人, 每天的日志数据量是几亿条.

    最开始的想法是使用 MySQL 数据库, 不过这个方案马上就被否, 因为如此大量数据已经远远超过 MySQL 的存储能力, 必定带来许多无谓的问题.

    第二个方案是使用 Redis. Redis 是内存存储方案, 速度快, 而且 zset 数据结果存储列表数据非常方便, 能直接地统计用户的弹窗次数和点击次数. 不过, Redis 本身的局限就是它最多能存储不超过内存容量的数据, 对于一台 100G 内存的服务器, Redis 最好是存储不超过 30G 的数据量. 因此, Redis 的方案在运行了短时间之后也被否定了.

    第三个方案是使用 SSDB. SSDB 可以存储 TB(1000GB) 级别的数据, 并且支持列表等集合数据结构, 有着和 Redis 高度兼容的 API, 所以, 当从 Redis 迁移到 SSDB 时, 改动非常小.

    每一个用户的弹窗历史用一个 zset 来存储, key 是时间戳, 对应的 score 也是时间戳, 因为我们只关心用户的弹窗历史, 具体的弹窗信息会用 map 来存储(时间戳作为 key, 对应弹窗信息 value). SSDB 的 zset 支持根据 score 范围来查询, 所以只需要一条命令就能算出用户在任意时间段内的弹窗次数.

    用户的点击统计也是类似.

    Posted by ideawu at 2013-07-21 16:08:46 Tags: ,
|<<<123456>>>| 2/6 Pages, 35 Results.