SlideShare ist ein Scribd-Unternehmen logo
1 von 9
Downloaden Sie, um offline zu lesen
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 应⽤用程序开发!
⽰示例 1: 在线书店!

7
8

保存书籍信息!

8

建⽴立排序索引!

8

分⻚页浏览!

8

相关链接!

8
⽂文档信息
作者: ideawu
⺴⽹网站: http://www.ideawu.net/
⽇日期: 2013-09-29
更新: 2013-10-13
SSDB 简介
SSDB 是⼀一个 C++ 语⾔言开发的⾼高性能开源 NoSQL 数据库服务器, ⽀支持 Key-value, Keyhashmap, Key-zset(sorted set) 等数据结构, ⼗十分适合存储数亿条级别的列表, 排序表等集合
数据, 是 Redis 的替代和增强⽅方案.
SSDB 具有和 Redis 相似的 API, ⽀支持的客户端包括: PHP, C++, Python, Java, Lua, Ruby,
Nodejs, etc.
项⺫⽬目主⻚页: https://github.com/ideawu/ssdb

PHP 使⽤用⽰示例
<?php
require_once('SSDB.php');
$ssdb = new SimpleSSDB('127.0.0.1', 8888);
$resp = $ssdb->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>
error: not_found
(0.007 sec)
ssdb 127.0.0.1:8888>
ok
(0.000 sec)
ssdb 127.0.0.1:8888>
1
(0.000 sec)
ssdb 127.0.0.1:8888>
ok
(0.000 sec)
ssdb 127.0.0.1:8888>
error: not_found
(0.000 sec)
ssdb 127.0.0.1:8888>

get k
set k 1
get k
del k
get k

进⾏行 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/

Weitere ähnliche Inhalte

Was ist angesagt?

cdn的那些事儿
cdn的那些事儿cdn的那些事儿
cdn的那些事儿rfyiamcool
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developerdianming.song
 
Redis 介绍 -田琪
Redis 介绍 -田琪Redis 介绍 -田琪
Redis 介绍 -田琪Shaoning Pan
 
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计zhujiadun
 
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计aleafs
 
Seqdb存储引擎
Seqdb存储引擎   Seqdb存储引擎
Seqdb存储引擎 luckywhu
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast sharerfyiamcool
 
手机腾讯网Js资源版本增量更新方案w3ctech
手机腾讯网Js资源版本增量更新方案w3ctech 手机腾讯网Js资源版本增量更新方案w3ctech
手机腾讯网Js资源版本增量更新方案w3ctech luyongfugx
 
V tiger 默认时区配置不生效
V tiger 默认时区配置不生效V tiger 默认时区配置不生效
V tiger 默认时区配置不生效YUCHENG HU
 
Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)家雋 莊
 
Ocean base 千亿级海量数据库-日照
Ocean base 千亿级海量数据库-日照Ocean base 千亿级海量数据库-日照
Ocean base 千亿级海量数据库-日照Shaoning Pan
 
Java内存管理问题案例分享
Java内存管理问题案例分享Java内存管理问题案例分享
Java内存管理问题案例分享bluedavy lin
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍yczealot
 
Redis cluster那些事儿
Redis cluster那些事儿Redis cluster那些事儿
Redis cluster那些事儿rfyiamcool
 
MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renrend0nn9n
 
Linux 教育訓練
Linux 教育訓練Linux 教育訓練
Linux 教育訓練Bo-Yi Wu
 
Mongo简介
Mongo简介Mongo简介
Mongo简介wuda0112
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptxjames tong
 

Was ist angesagt? (20)

cdn的那些事儿
cdn的那些事儿cdn的那些事儿
cdn的那些事儿
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developer
 
Redis 介绍 -田琪
Redis 介绍 -田琪Redis 介绍 -田琪
Redis 介绍 -田琪
 
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计
 
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计
 
Seqdb存储引擎
Seqdb存储引擎   Seqdb存储引擎
Seqdb存储引擎
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast share
 
手机腾讯网Js资源版本增量更新方案w3ctech
手机腾讯网Js资源版本增量更新方案w3ctech 手机腾讯网Js资源版本增量更新方案w3ctech
手机腾讯网Js资源版本增量更新方案w3ctech
 
V tiger 默认时区配置不生效
V tiger 默认时区配置不生效V tiger 默认时区配置不生效
V tiger 默认时区配置不生效
 
Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)
 
Ocean base 千亿级海量数据库-日照
Ocean base 千亿级海量数据库-日照Ocean base 千亿级海量数据库-日照
Ocean base 千亿级海量数据库-日照
 
Java内存管理问题案例分享
Java内存管理问题案例分享Java内存管理问题案例分享
Java内存管理问题案例分享
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍
 
Glider
GliderGlider
Glider
 
Redis cluster那些事儿
Redis cluster那些事儿Redis cluster那些事儿
Redis cluster那些事儿
 
MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB at Qihoo 360
MongoDB at Qihoo 360
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renren
 
Linux 教育訓練
Linux 教育訓練Linux 教育訓練
Linux 教育訓練
 
Mongo简介
Mongo简介Mongo简介
Mongo简介
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx
 

Ähnlich wie SSDB 入门基础

Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境dbabc
 
基于Innodb开发的最佳实践
基于Innodb开发的最佳实践基于Innodb开发的最佳实践
基于Innodb开发的最佳实践wubx
 
阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化guiyingshenxia
 
阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化colderboy17
 
Oda安装 恢复步骤
Oda安装 恢复步骤Oda安装 恢复步骤
Oda安装 恢复步骤n-lauren
 
MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220Jinrong Ye
 
Mongo db架构之优先方案
Mongo db架构之优先方案Mongo db架构之优先方案
Mongo db架构之优先方案Lucien Li
 
Mysql遇到的一些问题
Mysql遇到的一些问题Mysql遇到的一些问题
Mysql遇到的一些问题wang tongchao
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹國昭 張
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOpenSourceCamp
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and DesignHo Kim
 
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1Yi-Feng Tzeng
 
Mysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimizationMysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimizationisnull
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)ykdsg
 
Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案cao jincheng
 
Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86dbabc
 
icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介Kito Cheng
 
Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践maclean liu
 
How to plan a hadoop cluster for testing and production environment
How to plan a hadoop cluster for testing and production environmentHow to plan a hadoop cluster for testing and production environment
How to plan a hadoop cluster for testing and production environmentAnna Yen
 

Ähnlich wie SSDB 入门基础 (20)

Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
 
基于Innodb开发的最佳实践
基于Innodb开发的最佳实践基于Innodb开发的最佳实践
基于Innodb开发的最佳实践
 
阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化
 
阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化
 
Oda安装 恢复步骤
Oda安装 恢复步骤Oda安装 恢复步骤
Oda安装 恢复步骤
 
MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220
 
Mongo db架构之优先方案
Mongo db架构之优先方案Mongo db架构之优先方案
Mongo db架构之优先方案
 
Mysql遇到的一些问题
Mysql遇到的一些问题Mysql遇到的一些问题
Mysql遇到的一些问题
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresql
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and Design
 
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
 
Mysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimizationMysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimization
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
 
Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案
 
Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86
 
icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介
 
Asm+aix
Asm+aixAsm+aix
Asm+aix
 
Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践
 
How to plan a hadoop cluster for testing and production environment
How to plan a hadoop cluster for testing and production environmentHow to plan a hadoop cluster for testing and production environment
How to plan a hadoop cluster for testing and production environment
 

SSDB 入门基础

  • 1. 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 应⽤用程序开发! ⽰示例 1: 在线书店! 7 8 保存书籍信息! 8 建⽴立排序索引! 8 分⻚页浏览! 8 相关链接! 8
  • 3. SSDB 简介 SSDB 是⼀一个 C++ 语⾔言开发的⾼高性能开源 NoSQL 数据库服务器, ⽀支持 Key-value, Keyhashmap, Key-zset(sorted set) 等数据结构, ⼗十分适合存储数亿条级别的列表, 排序表等集合 数据, 是 Redis 的替代和增强⽅方案. SSDB 具有和 Redis 相似的 API, ⽀支持的客户端包括: PHP, C++, Python, Java, Lua, Ruby, Nodejs, etc. 项⺫⽬目主⻚页: https://github.com/ideawu/ssdb PHP 使⽤用⽰示例 <?php require_once('SSDB.php'); $ssdb = new SimpleSSDB('127.0.0.1', 8888); $resp = $ssdb->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 的字节数组顺序进⾏行排序.
  • 4. 如果数据需要经常被遍历, 则应该使⽤用 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
  • 5. $ ./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
  • 6. 这样, 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> error: not_found (0.007 sec) ssdb 127.0.0.1:8888> ok (0.000 sec) ssdb 127.0.0.1:8888> 1 (0.000 sec) ssdb 127.0.0.1:8888> ok (0.000 sec) ssdb 127.0.0.1:8888> error: not_found (0.000 sec) ssdb 127.0.0.1:8888> get k set k 1 get k del k get k 进⾏行 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
  • 7. (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 应⽤用程序开发
  • 8. 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
  • 9. 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/