基於leveldb引擎的高效能Nosql服務ssdb的測試使用

choubou發表於2021-09-09

前言:

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章