ssdb入门基础


SSDB ⼊⻔基础 ⽂档信息 ! 2 SSDB 简介 ! 3 PHP 使⽤⽰例 ! 3 SSDB 数据类型 ! 3 KV! 3 Hashmap! 3 Zset! 4 安装和运⾏ ! 4 使⽤ SSDB 命令⾏客户端 (ssdb-cli)! 6 运⾏ ssdb-cli! 6 进⾏ KV 操作 ! 6 进⾏ hashmap 操作 ! 6 进⾏ zset 操作 ! 7 SSDB 应⽤程序开发 ! 7 ⽰例 1: 在线书店 ! 8 保存书籍信息 ! 8 建⽴排序索引 ! 8 分⻚浏览 ! 8 相关链接 ! 8 ⽂档信息 作者 : ideawu ⺴站 : http://www.ideawu.net/ ⽇期 : 2013-09-29 更新 : 2013-10-13 SSDB 简介 SSDB 是⼀个 C++ 语⾔开发的⾼性能开源 NoSQL 数据库服务器 , ⽀持 Key-value, Key- hashmap, Key-zset(sorted set) 等数据结构 , ⼗分适合存储数亿条级别的列表 , 排序表等集合 数据 , 是 Redis 的替代和增强⽅案 . SSDB 具有和 Redis 相似的 API, ⽀持的客户端包括 : PHP, C++, Python, Java, Lua, Ruby, Nodejs, etc. 项⺫主⻚ : https://github.com/ideawu/ssdb PHP 使⽤⽰例 set('key', '123'); $resp = $ssdb->get('key'); echo $resp; // output: 123 SSDB 数据类型 SSDB ⽀持三种数据类型 , 别分是 KV(key-value), Hashmap(map), Zset(sorted set). 三种数 据类型处于不同的命名区间 , 所以不同类型的数据可以起相同的名字 , 但不建议这么做 . KV KV 数据类型⽀持基本的 set(), get(), del(), incr() ⼏种操作 . KV 数据类型主要⽤于存储离散 的 , 之间没有关系 (或者关系被忽略 )的⼤数据 , 如图⽚⽂件 , ⼤段⽂本等 . ⼀般 KV 类型都可以 被 Hashmap 替代 , 但 KV 会⽐ Hashmap 性能⾼⼀些 . key value k1 vc k2 vx k3 vy Hashmap Hashmap 类型和 KV 功能相似 , 可⽤于存储⼤体积的数据 , 但不同的数据项在业务上处于某 个集合 . 并且 , Hashmap 维护了⼀个集合⼤⼩的计数 . Hashmap 中的数据项是 Key-value 的键值对 , 并且按 Key 的字节数组顺序进⾏排序 . 如果数据需要经常被遍历 , 则应该使⽤ Hashmap 来替代 KV. 对于只添加 , 不更新和删除的有 排序需求的数据集合 , 可以⽤ Hashmap 来存储⽽不需要使⽤ Zset, 因为 Hashmap 会⽐ Zset 性能⾼⼀些 . name key value h k1 vb h k2 va h k3 vc Key 是按字节顺序排序的 . Zset Zset 是⼀种根据数据项的权重 (score, 整数值 )进⾏排序的集合 , Zset 集合中的数据项是唯⼀ , 不可重复的 . Zset 可以理解为关系数据中只有 ID 主键和整数 score 字段⼀共两个字段的表 . 因为 Zset 的排序特性 , 所以可⽤来存储排序列表 , 如商品按价格的排序列表 , 商品按上架⽇ 期的排序列表 , 等等 . 每⼀个排序列表对应⼀个 Zset 集合 . Zset 不能⽤来存储⼤体积的数据 , 因为它是⼀种 "索引 "数据类型 , 被索引的东⻄ (集合中的数 据项 )只能是 200 字节以内的字节数组 (包括字符串 ). name key score z k2 0 z k3 1 z k1 2 Key 是按 score(64 位整数 )的⼤⼩排序的 . 安装和运⾏ SSDB 的建议安装⽅式是源码编译安装 , 建议运⾏环境是主流 Linux 发⾏版 . 远程 SSH 登录 你的服务器 , 然后⽤下⾯的命令下载 , 编译 , 安装和运⾏ : $ wget --no-check-certificate https://github.com/ideawu/ssdb/ archive/master.zip $ unzip master $ cd ssdb-master $ make $ #optional, install ssdb in /usr/local/ssdb $ sudo make install # start master $ ./ssdb-server ssdb.conf # or start as daemon $ ./ssdb-server -d ssdb.conf # ssdb command line $ ./tools/ssdb-cli -p 8888 # stop ssdb-server $ kill `cat ./var/ssdb.pid` SSDB 默认安装在 /usr/local/ssdb ⺫录下 . ssdb-server 是服务器的程序 , ssdb-cli 是命令⾏ 客户端 . 在使⽤⾃带的 ssdb.conf 配置⽂件时 , SSDB ⽣成的⽇志⽂件按体积进⾏分割 , 仅此⽽已 . 所 以 , 你需要编写⾃⼰的 crontab 进⾏⽇志压缩和定期清理 . 如果出现服务器掉电 , kernel panic 等系统故障 , 在系统重新启动之后 , 你需要⼿动删除 ssdb 的 PID ⽂件 ssdb.pid, 然后才能启动 ssdb-server. 另外 , 你可以参考下⾯的做法 , 在系统启动和关机时 , 启动和关闭 ssdb-server: #!/bin/sh case "$1" in !'start') !!/usr/local/ssdb/ssdb-server -d /usr/local/ssdb/ ssdb.conf !!echo "ssdb started." !!;; !'stop') !!kill `cat /usr/local/ssdb/var/ssdb.pid` !!echo "ssdb stopped." !!;; !'restart') !!kill `cat /usr/local/ssdb/var/ssdb.pid` !!echo "ssdb stopped." !!sleep 0.5 !!/usr/local/ssdb/ssdb-server -d /usr/local/ssdb/ ssdb.conf !!echo "ssdb started." !!;; !*) !!echo "Usage: $0 {start|stop|restart}" !!exit 1 !;; esac 把⽂件保存为 /etc/init.d/ssdb.sh(需要 root 权限 ), 然后执⾏ : chmod ugo+x /etc/init.d/ssdb.sh 这样 , ssdb-server 就可以随着操作系统启动和关闭了 . 使⽤ SSDB 命令⾏客户端 (ssdb-cli) SSDB 的命令⾏客户端 ssdb-cli 可⽤于⽇常管理 , 包括查看 SSDB 的运⾏状态 (info), 还能做 ⼀些 API 没有的操作 , 如清空整个数据库 . 运⾏ ssdb-cli 连接到 127.0.0.1:8888, $ /usr/local/ssdb/ssdb-cli -h 127.0.0.1 -p 8888 ssdb (cli) - ssdb command line tool. Copyright (c) 2012-2013 ideawu.com 'h' or 'help' for help, 'q' to quit. ssdb 127.0.0.1:8888> 你可以输⼊字⺟ h, 然后按回⻋查看帮助信息 . 进⾏ KV 操作 ssdb 127.0.0.1:8888> get k error: not_found (0.007 sec) ssdb 127.0.0.1:8888> set k 1 ok (0.000 sec) ssdb 127.0.0.1:8888> get k 1 (0.000 sec) ssdb 127.0.0.1:8888> del k ok (0.000 sec) ssdb 127.0.0.1:8888> get k error: not_found (0.000 sec) ssdb 127.0.0.1:8888> 进⾏ hashmap 操作 ssdb 127.0.0.1:8888> hsize h 0 (0.007 sec) ssdb 127.0.0.1:8888> hset h k1 vb ok (0.000 sec) ssdb 127.0.0.1:8888> hset h k2 va ok (0.000 sec) ssdb 127.0.0.1:8888> hset h k3 vc ok (0.000 sec) ssdb 127.0.0.1:8888> hscan h "" "" 10 key value ------------------------- k1 : vb k2 : va k3 : vc 3 result(s) (0.000 sec) ssdb 127.0.0.1:8888> hclear h hclear 'h' 3 key(s). ssdb 127.0.0.1:8888> hscan h "" "" 10 key value ------------------------- 0 result(s) (0.000 sec) ssdb 127.0.0.1:8888> 进⾏ zset 操作 ssdb 127.0.0.1:8888> zsize z 0 (0.000 sec) ssdb 127.0.0.1:8888> zset z k1 2 ok (0.000 sec) ssdb 127.0.0.1:8888> zset z k2 0 ok (0.000 sec) ssdb 127.0.0.1:8888> zset z k3 1 ok (0.000 sec) ssdb 127.0.0.1:8888> zscan z "" "" "" 10 key score ------------------------- k2 : 0 k3 : 1 k1 : 2 3 result(s) (0.000 sec) ssdb 127.0.0.1:8888> zclear z zclear 'z' 3 key(s). ssdb 127.0.0.1:8888> zscan z "" "" "" 10 key score ------------------------- 0 result(s) (0.000 sec) SSDB 应⽤程序开发 SSDB 的客户端 API ⽀持 PHP, Java 等语⾔ , 下⽂通过⼀个例⼦ , 如何使⽤ SSDB 开发⼀个 在线书店⺴站 , 以 PHP 为例 . ⽰例 1: 在线书店 保存书籍信息 $book = array( !'id'=>'10001', !'title'=>'Honglou Meng', !'author'=>'CaoXueqin', !'pub_year'=>'1784' !); $ssdb->hset('books', $book['id'], json_encode($book)); 书籍信息经过 json_encode() 序列化成⽂本后 , 以书籍 ID 为 key 保存在⼀个 Hashmap 集合 ⾥ . 当然 , 你也可以使⽤其它的序列化⽅式 , SSDB ⽀持任意字节流作为数据 . 建⽴排序索引 在 books 集合中 , 书籍信息按 ID(字符串 , 不是整数 ) 进⾏排序 , 但实际应⽤中 , 书籍的排序需 求有很多 , 例如按出版⽇期年份 , 所以需要⽤ Zset 来建⽴排序索引 . $score = intval($book['pub_year']); $ssdb->zset('books_sorted_by_pub_year', $book_key, $score); 如何还有其它的排序需求 , 再使⽤更多的 Zset 来建⽴索引 . 分⻚浏览 // list 10 books that published after year 1784 $zset = 'books_sorted_by_pub_year'; $book_keys = $ssdb->zscan($zset, '', 1784, null, 10); $books = $ssdb->multi_hget('books', array_keys($book_keys)); 这段代码获取了 1784 年之后 (不包括 1784 年 )出版的 10 本书籍 . Zscan() 函数从 Zset 排序 集合中读取这 10 本书的 ID, 然后批量从 books Hashmap 集合中读取 10 本书籍的详细信 息 . Zscan() 函数的第 2 个参数被设置为空字符串 , 该参数⽤于处理相同年份的情况 , 这⾥为了简 单演⽰ , 所以传空字符串 , 表⽰不关⼼相同年份的情况 . 第 4 个参数被设置为 null, 这个参数表⽰截⽌年份 , 通过 null 来表⽰忽略截⽌年份 . 相关链接 SSDB 项⺫主⻚和源码下载 ! https://github.com/ideawu/ssdb SSDB 作者的⺴站 ! http://www.ideawu.net/blog/ SSDB API ⽂档 !(English)http://www.ideawu.com/ssdb/docs/php/ !(中⽂ )http://www.ideawu.com/ssdb/docs/zh_cn/php/ Redis ! http://redis.io/ LevelDB 项⺫主⻚ ! https://code.google.com/p/leveldb/
还剩8页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

sdd

贡献于2016-03-30

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf