ijd8.COM

A simple blog for an old Ma Nong.

NOSQL 数据库的选择及组合

Permalink

要对NOSQL 选型,对TC(Tokyo Cabinet),TT(Tokyo Tyrant),leveldb,redis,ssdb 做了简单的比较,比较的代码比较简单.

一个代码示例,都是python 客户端:

Python: 示例
1
2
3
4
5
6
7
8
9
10
import pytc

db = pytc.BDB()
db.open('test.db',  pytc.BDBOWRITER | pytc.BDBOREADER | pytc.BDBOCREAT)

for i in range(256):
    v = chr(i)
    for x in range(256):
        db.put(chr(x), v)
        db.get(chr(x))

用time 测试 $time python nosqltest.py

测试结果,只记录real time:

1
2
3
4
5
TC        0.115
TT        7.153
leveldb   0.768
ssdb      16.612
redis     8.671

把他们放在一起比较主要是他们之间有点关系,TT 是TC 的网络服务,ssdb 是leveldb 的一个网络服务, ssdb 的数据结构和操作都在仿redis.

他们的优点和不足,TC 读写非常快,但当数据上亿条时性能急剧下降,在2000万这个级别上性能很好.leveldb 是T 级数据,但官方没有出server.ssdb 可作leveldb 的server, 但性能比较差,期望它在海量数据下表现比mysql 强.redis 可以实现独特需求的数据结构,如实时排行之类.但它是内存大户,可放少量需要实时统计的数据.

由于mc(memcache) 对可以有字符集限制,没参与这个测试.

有另外一个小测试:

Python:
1
2
3
4
5
6
7
8
9
10
11
12
time1 = int(time())

m = 0
j = 0
n = 1000000
for i in xrange(n):
    if db.set('test', str(i)):
        m += 1
    else:
        j += 1

time2 = int(time())

主要看数据库服务每秒能处理多少次读写,顺便把mysql 也拉进来,(python 客户端)测试结果:

1
2
3
4
5
6
7
8
9
10
数据库    set     get
mysql    5882    10000
umysql   8771    26315
ssdb     6756    9615
mc       12820   13157
umc      25641   27777
redis    14285   13888
leveldb  166666  1000000
tc       1111111 1666666
tt       19342   16260

注: mc(memcache),umc(umemcache)

小结: ssdb + TC + redis 这样的组合在某些应用场合应该不错.

Write a Comment

Submit Comment Login
Based on Golang + fastHTTP + sdb | go1.16.7 Processed in 1ms