要对NOSQL 选型,对TC(Tokyo Cabinet),TT(Tokyo Tyrant),leveldb,redis,ssdb 做了简单的比较,比较的代码比较简单.
一个代码示例,都是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) 对可以有字符集限制,没参与这个测试.
有另外一个小测试:
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 这样的组合在某些应用场合应该不错.