高性能NoSql数据库 SSDB

今天在看一个开源项目的时候,发现作者使用一个ssdb的数据库,第一反应是ssd硬盘,当时很诧异。后面了解后才知道,原来是 nosql数据库。ssdb介绍一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis.SSDB 是一个 C/C++ 语言开发的高性能 NoSQL 数据库, 支持 KV, list, map(hash), zset(sorted set) 等数据结构, 用来替代或者与 Redis 配合存储十亿级别列表的数据.SSDB 具有和 Redis 相似的 API, 持的客户端包括: PHP, C++, Python, Java, Lua, Ruby, Nodejs, etc.SSDB 是稳定的, 生产环境使用的, 已经在许多互联网公司得到广泛使用, 如奇虎360, TOPGAME.如果,你会使用 redis,那你就很容易上手。下载安装下面是具体的安装过程,我在mac和ubuntu上安装。编译和安装wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zipunzip mastercd ssdb-mastermake# 将安装在 /usr/local/ssdb 目录下sudo make install如果你想安装 ssdb 在其它的目录, 不在 /usr/local 目录下, 可以这样sudo make install PREFIX=/your/direcotry问题解决如果出现如下错误:g++ ...deps/snappy-1.1.0/.libs/libsnappy.a: No such file or directorymake[1]: *** [all] Error 1或者g++ ...deps/jemalloc-3.3.1/lib/libjemalloc.a: No such file or directorymake[1]: *** [all] Error 1这是因为 Snappy 或者 Jemalloc 没有编译成功, 这一般是因为你的系统时钟有问题. 可以这样解决:cd deps/snappy-1.1.0autoreconf --force --install./configuremake或者cd deps/jemalloc-3.3.1autoreconf --force --install./configuremake启动和停止# 启动主库, 此命令会阻塞住命令行./ssdb-server ssdb.conf# 或者启动为后台进程(不阻塞命令行)./ssdb-server -d ssdb.conf# 停止 ssdb-server./ssdb-server ssdb.conf -s stop# 对于旧版本kill `cat ./var/ssdb.pid`# 重启./ssdb-server ssdb.conf -s restart到目前为止, 你需要手动管理 ssdb-server 进程, 如果你希望在操作系统启动和停止时自动地管理, 请按下面的说明进行.SSDB 启动脚本(随操作系统自启动)假设你已经安装 SSDB 在默认的 /usr/local/ssdb 目录, 把 tools/ssdb.sh 脚本放到 /etc/init.d 目录下.注意: 对于 CentOS 用户, 请将 ssdb.sh 重命名为 ssdb.编辑下面的内容:# each config file for one instanceconfigs=/data/ssdb_data/test/ssdb.conf将 /data/ssdb_data/test/ssdb.conf 修改为你的 SSDB 配置文件的路径. 如果你有多个 SSDB 实例, 那么把它们写在一行, 用空格来分隔, 例如:# each config file for one instanceconfigs=/data/ssdb_data/test/ssdb.conf /data/ssdb_data/demo/ssdb.conf# CentOSsudo chkconfig --add ssdbsudo chkconfig ssdb on# Ubuntusudo chmod a+x /etc/init.d/ssdbsudo update-rc.d ssdb defaultsSSDB 默认安装在 /usr/local/ssdb 录下. ssdb-server 是服务器的程序, ssdb-cli 是命令 客户端.在使 带的 ssdb.conf 配置 件时, SSDB 成的 志 件按体积进 分割, 仅此 已. 所 以, 你需要编写 的 crontab 进 志压缩和定期清理.如果出现服务器掉电, kernel panic 等系统故障, 在系统重新启动之后, 你需要 动删除 ssdb 的 PID 件 ssdb.pid, 然后才能启动 ssdb-server.另外, 你可以参考下 的做法, 在系统启动和关机时, 启动和关闭 ssdb-server:#!/bin/shcase "$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') ssdb.conf kill `cat /usr/local/ssdb/var/ssdb.pid`echo "ssdb stopped."sleep0.5/usr/local/ssdb/ssdb-server -d /usr/local/ssdb/ echo "ssdb started." ;; *) echo "Usage: $0 {start|stop|restart}" exit1 ;;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,youdi@liangchangyoudeMacBook-Pro  ~/OtherProject/ssdb-master/tools  ./ssdb-cli -p 8888ssdb (cli) - ssdb command line tool.Copyright (c) 2012-2016 ssdb.io'h' or 'help' for help, 'q' to quit.ssdb-server 1.9.5ssdb 127.0.0.1:8888> h# display ssdb-server status info# escape/do not escape response data : escape yes|no# export/import export [-i] out_file -i interactive mode import in_filesee http://ssdb.io/docs/php/ for commands detailspress 'q' and Enter to quit.ssdb 127.0.0.1:8888> infoversion 1.9.5links 1total_calls 5dbsize 0binlogs capacity : 20000000 min_seq : 0 max_seq : 1serv_key_range kv : "" - "" hash: "" - "" zset: "" - "" list: "" - ""data_key_range kv : "k" - "k" hash: "" - "" zset: "" - "" list: "" - ""leveldb.stats Compactions Level Files Size(MB) Time(sec) Read(MB) Write(MB) --------------------------------------------------17 result(s) (0.000 sec)(0.000 sec)你可以输 字 h, 然后按回 查看帮助信息.KV操作(0.000 sec)ssdb 127.0.0.1:8888> set one 1ok(0.000 sec)ssdb 127.0.0.1:8888> get one1(0.000 sec)ssdb 127.0.0.1:8888> get twonot_found(0.000 sec)ssdb 127.0.0.1:8888> set two 2ok(0.000 sec)ssdb 127.0.0.1:8888> get two2(0.000 sec)ssdb 127.0.0.1:8888> del oneok(0.000 sec)ssdb 127.0.0.1:8888> get onenot_found(0.000 sec)hashmap 操作ssdb 127.0.0.1:8888> hsize hash0(0.000 sec)ssdb 127.0.0.1:8888> hset hash one 1ok(0.000 sec)ssdb 127.0.0.1:8888> hset hash two 2ok(0.000 sec)ssdb 127.0.0.1:8888> hsize hash2(0.000 sec)ssdb 127.0.0.1:8888> hset hash three 3ok(0.000 sec)ssdb 127.0.0.1:8888> hsize hash3(0.000 sec)ssdb 127.0.0.1:8888> hget hash one1(0.000 sec)ssdb 127.0.0.1:8888> hdel hash one1(0.000 sec)ssdb 127.0.0.1:8888> hget hash onenot_found(0.000 sec)ssdb 127.0.0.1:8888> hscan hashclient_error: wrong number of arguments(0.000 sec)ssdb 127.0.0.1:8888> hscan hash "" "" 10key value------------------------- three : 3 two : 22 result(s) (0.000 sec)(0.000 sec)ssdb 127.0.0.1:8888> hclear hash2(0.000 sec)ssdb 127.0.0.1:8888> hscan hash "" "" 10key value-------------------------0 result(s) (0.000 sec)(0.000 sec)zset 操作ssdb 127.0.0.1:8888> zsize set0(0.000 sec)ssdb 127.0.0.1:8888> zset set one 1ok(0.000 sec)ssdb 127.0.0.1:8888> zset set two 2ok(0.000 sec)ssdb 127.0.0.1:8888> zsizeclient_error: wrong number of arguments(0.000 sec)ssdb 127.0.0.1:8888> zsize set2(0.000 sec)ssdb 127.0.0.1:8888> zscan set "" "" "" 10key value------------------------- one : 1 two : 22 result(s) (0.000 sec)SSDB应程序开发不同语言的使用方法,文档http://ssdb.io/docs/zh_cn/clients.html 中都有,下面介绍一些我会的语言的使用。php<?phpinclude_once('SSDB.php');try{ $ssdb = new SimpleSSDB('127.0.0.1', 8888);}catch(SSDBException $e){ die(__LINE__ . ' ' . $e->getMessage());}$ret = $ssdb->set('key', 'value');if($ret === false){ // error!}echo $ssdb->get('key');和redis使用类似,文档http://ssdb.io/docs/zh_cn/php/index.htmlgolangpackage mainimport ( "fmt" "os" "./ssdb" )func main(){ ip := "127.0.0.1"; port := 8888; db, err := ssdb.Connect(ip, port); if(err != nil){ os.Exit(1); } var val interface{}; db.Set("a", "xxx"); val, err = db.Get("a"); fmt.Printf("%s\n", val); db.Del("a"); val, err = db.Get("a"); fmt.Printf("%s\n", val); db.Do("zset", "z", "a", 3); db.Do("multi_zset", "z", "b", -2, "c", 5, "d", 3); resp, err := db.Do("zrange", "z", 0, 10); if err != nil{ os.Exit(1); } if len(resp) % 2 != 1{ fmt.Printf("bad response"); os.Exit(1); } fmt.Printf("Status: %s\n", resp[0]); for i:=1; i<len(resp); i+=2{ fmt.Printf(" %s : %3s\n", resp[i], resp[i+1]); } return;rubygem install ssdbrequire "ssdb"ssdb = SSDB.newssdb.set("mykey", "hello world")# => truessdb.get("mykey")# => "hello world"ssdb.batch do ssdb.set "foo", "5" ssdb.get "foo" ssdb.incr "foo"endpython首先需要加载SSDB模块, pip好像有。from SSDB import SSDBtry: pass ssdb = SSDB('127.0.0.1', 8888)except Exception , e: pass print e sys.exit(0)ssdb.request('set', ['test', '123'])ssdb.request('get', ['test'])ssdb.request('incr', ['test', '1'])ssdb.request('decr', ['test', '1'])nodejsvar SSDB = require('./SSDB.js');var ssdb = SSDB.connect(host, port);ssdb.set('a', new Date(), function(){ console.log('set a');});ssdb.get('a', function(err, val){ console.log('get a = ' + val); ssdb.close();});以上都是使用的官方的语言的接口。有一些开发者,提供了其他的语言接口的模块,相比于官方,更贴近语言的常用语法和习惯,相对优雅。ssdb 也支持集群多实例,主从复制等等高级特性都有。感兴趣,可以研究一下。

(0)

相关推荐

  • 「我来啦」可不要说 I'm coming,这句话歧义太大啦!

    「我来啦」可不要说 I&#39;m coming,这句话歧义太大啦!

  • redis数据类型之set,zset,hash

    上一篇说了string和list两种数据类型,现在说说剩下的几种数据类型: 继续敲命令每一个命令,害╮(╯_╰)╭ 1.set 这个就类似于java中的Set<Set<T>>, ...

  • Redis核心数据结构与高性能原理

    作者公众号:一角钱技术(org_yijiaoqian) 五种常用数据结构 String 结构 字符串常用操作 SET key value  //存入字符串键值对MSET key value [key  ...

  • C# Redis五种数据类型的操作--简易易懂

    前段时间学习了Redis,一直在忙着工作和一些其他的事情,这两天有空了,就把这学习到的技术分享出来给大家,谢谢 Redis是什么? Redis的特点 Redis使用场景 Redis数据类型 一..Re ...

  • Redis学习笔记:Redis简介

    一.NoSQL和关系型数据库区别 NoSQL非关系型数据库:Redis.MongoDB.HBase等,基于Key-Value存储,采用命令操作. 关系型数据库:Oracle.MySQL.DB2.SQL ...

  • 一个 Go 语言实现的高性能 NoSQL 数据库

    Go语言中文网 今天 以下文章来源于Go招聘 ,作者欧盆索思 Go招聘Golang 相关求职和招聘,以及面试题.经验分享,Go 语言其他知识和职场也是值得分享的. NoSQL 数据库和关系数据库一样被 ...

  • 基于.net ,使用几种常见的NoSQL数据库

    目录 0 .net中的缓存对象 1.MemCached 2.Redis 3.MongoDB 示例完整源码地址 shanzm-2020年1月10日 10:10:10 本文只是我的一个Github仓库的自 ...

  • 常见的 NoSQL 数据库有哪些?一篇详尽(图表展示)

    关系型数据库产品很多,如 MySQL.Oracle.Microsoft SQL Sever 等,但它们的基本模型都是关系型数据模型. 非关系型数据库又称为:NoSQL ,没有统一的模型,而且是非关系型 ...

  • 手把手教 | 如何设计高性能数据库表

    回复"面试"获取全套面试资料 如何斩获offer?如何提升技术?看看我的案例吧 尽管我们不是DBA,但我们平时都会涉及到数据库表的设计,那么我们该怎么设计呢?,表名怎么取?字段名怎 ...

  • 轱辘日报|威兰达高性能版上市,本田、长安公布最新销量成绩

    ▪   轱辘哥从上汽荣威官网获悉,荣威ei6 MAX新增了两款网约车版车型,售价分别为17.88-18.88万元.新车的配置非常丰富,标配LED大灯.360度全景影像.14.3英寸大屏.车联网系统等配 ...

  • 124种~综合类资源数据库大汇总

    数据库简介 序号 数据库名称 文献类型 简介 数据类型 链接 1 2 宁波图书馆宁波特色数据库 图书/报纸 宁波市图书馆的数字化资源,主要有馆藏老报纸.<申报>中的宁波史料.宁波文史资料. ...

  • 网上研学 | 免费中文期刊数据库——中国知网

    今天闽图君要给大家介绍的是全球最大的学术论文数据库中国期刊全文数据库(CNKI),适合高校或社会研究机构科研人员.大学生群体使用. 中国期刊全文数据库(CNKI)又叫"中国知识基础设施工程网 ...

  • 【Python爬虫】:使用高性能异步多进程爬虫获取豆瓣电影Top250

    在本篇博文当中,将会教会大家如何使用高性能爬虫,快速爬取并解析页面当中的信息.一般情况下,如果我们请求网页的次数太多,每次都要发出一次请求,进行串行执行的话,那么请求将会占用我们大量的时间,这样得不偿 ...

  • 高性能混凝土

    高性能混凝土是20世纪90年代初提出的,是一种新型的高技术混凝土,采用常规材料和工艺生产,具有混凝土结构所要求的各项力学性能,具有高耐久性.高工作性和高体积稳定性的混凝土.而且在节约资源.保护环境.提 ...