基於leveldb引擎的高效能Nosql服務ssdb的測試使用
前言:
SSDB是一個開源的高效能資料庫伺服器, 使用Google 的 LevelDB作為儲存引擎, 大家有可能沒聽過leveldb的名字,但是淘寶的開源nosql tair大家應該有所耳聞吧,他也是基於leveldb做的開發。ssdb支援T級別的資料, 同時支援類似Redis中的zset和hash等資料結構, 在同時需求高效能和大資料的條件下, 是一個可以代替Redis的方案.
其實ssdb他的推出就是為了頂替redis的高可用性以及高度依賴硬碟的缺點。(當然他的穩定性還有待線下測試,畢竟是個nosql中的新人)
ssdb是一個持久化儲存的KV系統,和Memcached、Redis這種記憶體型的KV系統不同,ssdb不會像Redis一樣狂吃記憶體,而是將大部分資料儲存到磁碟上。
我個人的經驗來說,redis的雙主方案不靠譜,我以前寫過一個keepalived redis的高可用性方案,但是這個東西,也是不好用的,切換的時候,會出現將近一分鐘的恢復延遲。 配置和操作起來也算簡單,出問題的時候,把redis 從改成主,也要注意下kv的資料,如果是那種實時性很強的資料,就要考慮到是否要把操作的介面暫時給堵塞起來,不然使用者得到以前的資料總歸不好,等資料都同步ok後,就放開堵塞。
keepalived redis 在大量的讀寫場景下,這時候的切換會造成不小的問題的。(sina 微博搞定了多主的方案,估計是做了很多的二次開發。)
SSDB支援多主雙主的架構 SSDB分散式框架
:
兩個或者更多的主伺服器. 當其中一部分出現故障時, 剩餘的主伺服器仍然能正常接受寫請求, 來保證服務是可以正常使用的。
SSDB 的主要特點:
支援 zset, map 資料結構, 可替代 Redis
特別適合儲存大量集合資料
使用 Google LevelDB 作為儲存引擎
支援主從同步, 多主同步
客戶端支援 PHP, C++, Python, Lua, Java, Ruby, nodejs, Go 等
記憶體佔用極少
ssdb 專案地址:
安裝及服務配置的方法:
wget --no-check-certificate /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
start slave
./ssdb-server ssdb_slave.conf
ssdb command line
./tools/ssdb-cli -p 8888
stop ssdb-server
kill `cat ./var/ssdb.pid`
需要提前先安裝jemalloc記憶體管理器的,不然無法繼續 ~
wKiom1LH7cOgVw8uAAFAaS_3n4c191.jpg
安裝成功,然後跑一下 ~
wKioL1LH7hjD_HuNAADIxfTPoPU461.jpg
果然是大量相容redis的 ~
wKioL1LH8AnyGr49AACjryGeZPo648.jpg
ssdb也可以用redis裡面比較常用的hash。
#xiaorui.cc
[root@65 ~]# ssdb-cli
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> hset a one 1
ok
(0.000 sec)
ssdb 127.0.0.1:8888> hset a two 2
ok
(0.000 sec)
ssdb 127.0.0.1:8888> hset a three 3
ok
(0.000 sec)
ssdb 127.0.0.1:8888> hscan a "" "" 10
key value
-------------------------
one : 1
three : 3
two : 2
3 result(s) (0.000 sec)hai
根據結果來排序的儲存型別 zset !
ssdb 127.0.0.1:8888>
ssdb 127.0.0.1:8888>
ssdb 127.0.0.1:8888>
ssdb 127.0.0.1:8888>
ssdb 127.0.0.1:8888> zsize b
0
(0.000 sec)
ssdb 127.0.0.1:8888> zset b b1 1
ok
(0.000 sec)
ssdb 127.0.0.1:8888> zset b b2 2
ok
(0.000 sec)
ssdb 127.0.0.1:8888> zset b b3 33
ok
(0.000 sec)
ssdb 127.0.0.1:8888> zset b b4 8888
ok
(0.000 sec)
ssdb 127.0.0.1:8888> zscan b "" "" 10
error: client_error
(0.000 sec)
ssdb 127.0.0.1:8888> zscan b "" "" "" 10
key score
-------------------------
b1 : 1
b2 : 2
b3 : 33
b4 : 8888
4 result(s) (0.000 sec)
ssdb 127.0.0.1:8888>
ssdb 127.0.0.1:8888> zsize b
4
(0.000 sec)
ssdb 127.0.0.1:8888> zsize b
4
(0.000 sec)
ssdb 127.0.0.1:8888> zscan b "" "" "" 10
key score
-------------------------
b1 : 1
b2 : 2
b3 : 33
b4 : 8888
4 result(s) (0.000 sec)
ssdb 127.0.0.1:8888> zclear b
4
(0.000 sec)
ssdb 127.0.0.1:8888> zscan b "" "" "" 10
key score
-------------------------
0 result(s) (0.000 sec)
ssdb 127.0.0.1:8888>
新版的ssdb也出來個ttl的東西,來控制kv的生效時間,很贊 ~
ssdb 127.0.0.1:8888> setx yoururl xiaorui.cc 10
ok
(0.000 sec)
ssdb 127.0.0.1:8888> get yoururl
xiaorui.cc
(0.000 sec)
ssdb 127.0.0.1:8888> get yoururl
xiaorui.cc
(0.000 sec)
ssdb 127.0.0.1:8888> get yoururl
xiaorui.cc
(0.000 sec)
ssdb 127.0.0.1:8888> get yoururl
xiaorui.cc
(0.000 sec)
ssdb 127.0.0.1:8888> get yoururl
not_found
(0.000 sec)
ssdb 127.0.0.1:8888> get yoururl
not_found
為了方便操作ssdb服務可以寫成一個啟動關閉指令碼。
# /bin/sh
#
# chkconfig:345 98 98
# description: SSDB is a fast NoSQL database for storing big list of billions of elements
# processname:ssdb
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
exit 0
直接來個redis和ssdb的命令對比 !
Redis SSDB
kv get get
set set
del del
incr/incrBy incr
decr/decrBy decr
getMultiple multi_get
setMultiple multi_set
del(multiple) multi_del
keys scan(for kv type only)
hashmap hget hget
hset hset
hdel hdel
hIncrBy hincr
hDecrBy hdecr
hKeys hkeys
hVals hscan
hMGet multi_hget(in schedule)
hMSet multi_hset(in schedule)
hLen hsize(in schedule)
zset zScore zget
zAdd zset
zRem zdel
zRange
zRangeByScore zscan
zIncrBy zincr
zDecrBy zdecr
zCount
zCard zsize(in schedule)
我們專案有很多是python寫的,看了下支援的語言介面,ssdb也是支援python的,我這邊就簡單跑下例子 ~ 果然和redis很相像的哈!
[root@65 ~]# ipython
Python 2.6.6 (r266:84292, Feb 21 2013, 23:54:59)
Type "copyright", "credits" or "license" for more information.
IPython 0.10 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.
In [1]: import pyssdb
...:
In [2]: c = pyssdb.Client()
In [3]: c.set('key', 'value')
Out[3]: 1
In [4]: c.get('key')
Out[4]: 'value'
In [5]: c.hset('51cto', 'devops', 'xiaorui.cc')
Out[5]: 1
In [6]: c.hset('51cto', 'autops', 'xiaorui.cc')
Out[6]: 1
In [9]: c.hget('51cto','')
In [10]: c.hget('51cto','devops')
Out[10]: 'xiaorui.cc'
In [13]: c.hget('51cto','autops')
Out[13]: 'xiaorui.cc'
In [14]: c.incr('counter')
Out[14]: 1
In [15]: c.incr('counter')
Out[15]: 2
In [16]: c.incr('counter')
Out[16]: 3
In [17]: c.incr('counter')
Out[17]: 4
In [18]: c.keys('a', 'z', 1)
Out[18]: ['counter']
ssdb的社群和推廣的部落格很熱的,經常看到一些積極的問答,透過問答我自己也學到了不少東西。想讓redis轉到ssdb,成本很小的,只需要改改幾個特定的介面就可以啦,連ssdb的客戶端模組都不需要,可以直接呼叫redis來操作ssdb資料庫。ssdb在國內的話,據說360遊戲部門用的不少 ~ 但是不管怎麼說,ssdb屬於新興的東西,穩定性還是有待考察的,就想當初考察mongodb一樣。
©著作權歸作者所有:來自51CTO部落格作者rfyiamcool的原創作品,謝絕轉載,否則將追究法律責任
python ssdbnosql ssdbssdb redisNosql/Mysql
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4548/viewspace-2821659/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 搭建基於 Soketi 的 WebSockets 高效能服務(Laravel 零侵入免費使用)WebLaravel
- debian 中使用 telnet 測試服務
- 如何使用thrift 服務引擎元件元件
- 基於 xorm 的服務端框架 XGoServerORM服務端框架GoServer
- 基於HAProxy的高效能HTTP快取伺服器和RESTful NoSQL快取伺服器HTTP快取伺服器RESTSQL
- 基於HAProxy的高效能HTTP快取伺服器和RESTful NoSQL快取伺服器。HTTP快取伺服器RESTSQL
- HMI測試服務
- 使用 Docker 和 Nginx 打造高效能的二維碼服務DockerNginx
- 教程|騰訊雲高效能應用服務(HAI)搭建多音色控制的TTS引擎AITTS
- 構建基於RocketMQ的分散式事務服務MQ分散式
- 基於代理服務的介面合併方案
- 基於jmeter的效能全流程測試JMeter
- SSDB安裝和使用初探
- 使用grpcui測試ASP.NET core gRPC服務RPCUIASP.NET
- Gome 高效能撮合引擎微服務Go微服務
- 使用Prometheus監控Golang服務-基於YoyoGo框架PrometheusGolang框架
- 挑戰 - 微服務架構下的服務端測試微服務架構服務端
- 基於Spring Cloud微服務叢集的服務治理思考SpringCloud微服務
- 基於雲的 CRM 能為您的業務提供哪些服務?
- 服務端效能測試你應該知道的服務端
- Go實現基於WebSocket的彈幕服務GoWeb
- 基於 swoole 的 websocket 服務一:狀態同步Web
- 基於.Net Core 5.0 Worker Service 的 Quart 服務
- 基於TPC-C基準的Python ORM的效能測試PythonORM
- 基於 Htte 的 API 自動化測試API
- 基於ROWID更新的物化檢視測試
- 基於事件驅動的測試框架ETS事件框架
- 基於JUnit進行的專案測試
- 基於APNs最新HTTP/2介面實現iOS的高效能訊息推送(服務端篇)HTTPiOS服務端
- 使用 JMH 做 Kotlin 的基準測試Kotlin
- SAP CDS view自學教程之一:如何測試基於SAP CDS view自動生成的OData服務View
- 單元/整合測試服務
- 雲服務測試報告測試報告
- 什麼是滲透測試?滲透測試的服務方式有哪些?
- 如何使用 jacoco 統計多個 docker 容器服務的測試覆蓋率Docker
- 拿去面試!一個基於 DDD 的高效能短鏈系統面試
- 基於ECS搭建GitLab服務Gitlab
- Nacos服務呼叫(基於Openfeign)