• 2015-03-30

    SSDB 支持 iOS 设备使用了

    Views: 1299 | No Comments

    我很高兴地告诉大家, SSDB 支持在 iOS 设备上使用了! 当然, 这不是要在 iOS 设备上运行一个 ssdb server, 而是将 SSDB 库嵌入到你的 App 里.

    例如, 你在开发一个 iOS 邮件客户端, 你可以使用 SSDB 来存储邮件列表, 利用 SSDB 支持亿级别数据列表的功能特性, 轻松管理大量邮件. 例如, 你在开发一个阅读器, 你可以把成千上万的文章存储到 SSDB 中. 例如, 你在开发一个 iOS IM 应用, 你可以把消息历史用 SSDB 来存储管理.

    使用方法:

    1. 编译 SSDB 静态链接库

    make ios
    # ls ios/
    include/ libleveldb-ios.a libsnappy-ios.a libssdb-ios.a libutil-ios.a
    

    2. 将静态链接库和头文件引入你的 Xcode 项目.

    源码下载: https://github.com/ideawu/ssdb/tree/dev

    Posted by ideawu at 2015-03-30 17:16:00 Tags:
  • 2015-03-26

    编译 LevelDB 的 iOS 版本

    Views: 1328 | No Comments
    cd leveldb
    CXXFLAGS=-stdlib=libc++ make PLATFORM=IOS
    
    Posted by ideawu at 2015-03-26 11:00:58
  • 2015-03-10

    使用 SSDB 来实现操作频率限制

    Views: 3137 | 4 Comments

    在 Web 开发中, 经常需要实现操作频率限制的功能, 以避免单个用户过度地消耗某项资源, 或者消除安全隐患. 例如, 限制某 IP 刷新页面的频率, 限制一个用户投票只能投一次, 等等.

    要实现操作频率限制, 就要用到存储. 使用 SSDB 来存储, 可以支持海量用户的操作频率限制, 而且代码非常简洁高效.
    Continue reading »

    Posted by ideawu at 2015-03-10 17:49:02
  • 2014-12-02

    SSDB源码分析 – 主从和多主同步原理解析

    Views: 9737 | 28 Comments

    SSDB 的主从同步策略非常简单, 就是把主(Master)上的所有写操作(Binlogs), 在从(Slave)上再执行一遍. MySQL 的主从同步也是一样. 而多主可以理解为互为主从.

    把 Master 上的所有操作(Binlogs)在 Slave 上执行一遍, 说来很简单, 但还是会遇到一些难题, 例如 Binlogs 不可能无限地永久保留. SSDB 只保留最新的 1000 万次写操作. 对于熟悉 MySQL 的同学可能也知道这样的例子: 在有 Binlogs 之前, 数据库内已经有了一部分数据. 也就是说, 这部分数据是无法通过 Binlog 来获得的.

    为此, 要有一个基础数据的拷贝(Copy)过程. 对于 MySQL 来说, 必须由 DBA 手动拷贝. 而对于 SSDB 来说, 这是自动的.

    Continue reading »

    Posted by ideawu at 2014-12-02 20:02:42
  • 2014-11-15

    SSDB源码分析 – 服务器的启动过程

    Views: 9196 | No Comments

    SSDB 服务器进程的 main 函数在 ssdb-server.cpp 文件里, 启动过程用伪代码表示如下:

    welcome();
    parse_args(argc, argv);
    conf = Config::load();
    data_db = SSDB::open(conf);
    meta_db = SSDB::open(conf);
    net = NetworkServer::init(*conf);
    // 初始化业务处理
    SSDBServer *ss = new SSDBServer(data_db, meta_db, *conf, net);
    // 处理网络请求
    net.serve();
    

    这个主体的启动过程其实很简单. SSDB 库(libssdb)是封装好的, 直接打开数据库文件即可. 而 NetworkServer 也是封装好的网络模块(libnet), 之前有介绍过(SSDB 源码分析 – 网络框架概述).

    SSDBServer 是比较复杂的地方, 因为它将 libssdb 和 libnet 整合起来, 同时还整合主从同步功能, 所以需要详细介绍.

    在 serv.cpp 的 SSDBServer 构造函数里:

    reg_procs(net);
    backend_sync = new BackendSync(ssdb);
    expiration = new ExpirationHandler(ssdb);
    start_slaves();
    

    首先, 给网络处理器注册命令处理函数, libnet 是业务无关的, 当 SSDB 服务器增加了一个新命令, 就要注册这个命令的处理函数, 这样当从客户端收到一个请求报文时, 服务器才知道如何处理.

    接着会启动主从同步的处理器 BackendSync. 当网络服务器收到一个新的 slave 节点连接进来时, 请求会被转给 BackendSync 处理, BackendSync 将 binlog 发给 slave 处理.

    关于 key 过期的处理是独立于 libssdb 的, 在 ExpirationHandler 类里处理.

    由于每一个 SSDB 服务器节点既能作为 master, 同时也能作为 slave, 所以, 还需要根据配置文件决定是否启动 slave 处理器.

    Posted by ideawu at 2014-11-15 15:02:29
  • 2014-11-09

    SSDB 源码分析 – 网络框架概述

    Views: 10950 | 2 Comments

    最近, 我对 SSDB 的代码进行了重构, 分离出了 libutil, libnet, libssdb 几个高度可复用的模块, 代码的模块化更清晰, 也更容易进行 SSDB 的源码分析.

    这一次要分析的是网络模块. 网络模块包括一个服务器的代码框架和运行框架, 以及网络协议设计和解析.

    协议

    SSDB 的网络协议非常简单, 而且是业务无关的, 所以你可以把 SSDB 的网络协议应用于几乎所有类型的应用! 只要遵循 SSDB 的网络协议, 你就可以使用 ssdb-cli 命令行工具来连接, 与服务器交互, 或者方便调试. 你甚至可以使用 nc 命令来和任何一个支持 SSDB 网络协议的服务器交互.

    Continue reading »

    Posted by ideawu at 2014-11-09 12:49:43 Tags:
|<<<123456789>>>| 1/12 Pages, 68 Results.