tokyo
cabinet
: 下载 wget
http://1978th.net/tokyocabinet/tokyocabinet-1.4.36.tar.gz
依靠
包:
zlib:
sudo apt-get install zlib1g-dev
bzip2:
sudo apt-get install libbz2-dev
安装:
tar
zxvf tokyocabinet-1.4.36.tar.gz
cd
tokyocabinet-1.4.36
./configure
make
sudo
make install
tokyo tyrant
: 下载 wget
http://1978th.net/tokyotyrant/tokyotyrant-1.1.37.tar.gz
安装:
tar
zxvf tokyotyrant-1.1.37.tar.gz
cd
tokyotyrant-1.1.37
./configure
make
sudo
make install
运行tokyo
tyrant
ttserver
-dmn -pid /home/mk2/ttserver/tt.pid -log
/home/mk2/ttserver/tt.log -le -ulog /home/mk2/ttserver/ -ulim 128m
/home/mk2/ttserver/data.tcb#bnum=100000
#
tcb: b+ tree格式, 在内存中缓存最热门的10w条查询
更改执行权限:sudo chmod a+x pytyrant.py
运行pytyrant.py
,
代码在: http://code.google.com/p/pytyrant/source/browse/trunk/pytyrant.py
没有任
何异常输出? 那就成功了!!!
与
memcache对比测试
benchmark.py:
!/usr/bin/envpython
#
-*-coding:utf-8-*-
"""
benchmarktestforpytyrant
"""
import
time
import
threading
import
memcache
import
pytyrant
class
worker(threading.thread):
def
__init__
(self,index,bench,count
=
1000
):
self._count
=
count
self._bench
=
bench
self._index
=
index
super(worker,self).
__init__
()
def
run(self):
self._bench(self._count,self.show)
def
show(self,s):
print
'
thread%d
'
%
self._index,s
def
_benchmark_threads(bench,count,threads):
print
'
-
'
*
80
print
'
%s:%dthreads,%dtimes
'
%
(bench.
__name__
,threads,count)
ts
=
[]
for
i
in
range(threads):
t
=
worker(i,bench,count
/
threads)
ts.append(t)
t.start()
for
t
in
ts:
t.join()
def
show(s):
print
s
#
onethreadset
def
set_benchmark(count
=
100000
,display
=
show):
mem
=
memcache.client([
'
127.0.0.1:11211
'
])
tt
=
pytyrant.pytyrant.open(
'
127.0.0.1
'
,
1978
)
start
=
time.time()
for
i
in
xrange(count):
mem.set(
'
key_%d
'
%
i,
'
value_%d
'
%
i)
if
display:
display(
'
memcache%dset:%s
'
%
(count,time.time()
-
start))
start
=
time.time()
for
i
in
xrange(count):
tt[
'
key_%d
'
%
i]
=
'
value_%d
'
%
i
if
display:
display(
'
tokyotyrant%dset:%s
'
%
(count,time.time()
-
start))
def
set_benchmark_threads(count
=
100000
,threads
=
20
):
_benchmark_threads(set_benchmark,count,threads)
#
onethreadget
def
get_benchmark(count
=
100000
,display
=
show):
mem
=
memcache.client([
'
127.0.0.1:11211
'
])
tt
=
pytyrant.pytyrant.open(
'
127.0.0.1
'
,
1978
)
start
=
time.time()
for
i
in
xrange(count):
assert
mem.get(
'
key_%d
'
%
i)
==
'
value_%d
'
%
i
display(
'
memcache%dget:%s
'
%
(count,time.time()
-
start))
start
=
time.time()
for
i
in
xrange(count):
assert
tt[
'
key_%d
'
%
i]
==
'
value_%d
'
%
i
display(
'
tokyotyrant%dget:%s
'
%
(count,time.time()
-
start))
def
get_benchmark_threads(count
=
100000
,threads
=
20
):
_benchmark_threads(get_benchmark,count,threads)
#
onethreadgetallmiss
def
get_miss_benchmark(count
=
100000
,display
=
show):
mem
=
memcache.client([
'
127.0.0.1:11211
'
])
tt
=
pytyrant.pytyrant.open(
'
127.0.0.1
'
,
1978
)
start
=
time.time()
for
i
in
xrange(count):
assert
mem.get(
'
key_%d_miss
'
%
i)
is
none
display(
'
memcache%dgetmiss:%s
'
%
(count,time.time()
-
start))
start
=
time.time()
for
i
in
xrange(count):
assert
tt.get(
'
key_%d_miss
'
%
i,none)
is
none
display(
'
tokyotyrant%dgetmiss:%s
'
%
(count,time.time()
-
start))
def
get_miss_benchmark_threads(count
=
100000
,threads
=
20
):
_benchmark_threads(get_miss_benchmark,count,threads)
if
__name__
==
'
__main__
'
:
print
'
onethreads
'
print
'
set_benchmark
'
set_benchmark()
print
'
-
'
*
80
print
'
get_benchmark
'
get_benchmark()
print
'
-
'
*
80
print
'
get_miss_benchmark
'
get_miss_benchmark()
set_benchmark_threads()
get_benchmark_threads()
get_miss_benchmark_threads()
测试输
出:
one
threads
set_benchmark
memcache 100000 set: 10.5929949284
tokyo
tyrant 100000 set: 9.69395589828
--------------------------------------------------------------------------------
get_benchmark
memcache
100000 get: 10.9661550522
tokyo tyrant 100000 get: 11.5382130146
--------------------------------------------------------------------------------
get_miss_benchmark
memcache
100000 get miss: 9.16992592812
tokyo tyrant 100000 get miss:
10.9790480137
--------------------------------------------------------------------------------
set_benchmark:
20 threads, 100000 times
thread 5 memcache 5000 set: 9.16596198082
thread
1 memcache 5000 set: 9.2044479847
thread 2 memcache 5000 set:
9.5196750164
thread 10 memcache 5000 set: 9.78295493126
thread 9
memcache 5000 set: 10.1644408703
thread 8 memcache 5000 set:
10.2827599049
thread 3 memcache 5000 set: 10.3494279385
thread 18
memcache 5000 set: 10.5312678814
thread 14 memcache 5000 set:
10.5295097828
thread 13 memcache 5000 set: 10.5583910942
thread 6
memcache 5000 set: 10.64412117
thread 11 memcache 5000 set:
10.7909929752
thread 7 memcache 5000 set: 10.8441131115
thread 12
memcache 5000 set: 10.9090180397
thread 16 memcache 5000 set:
10.9221849442
thread 4 memcache 5000 set: 10.9808840752
thread 17
memcache 5000 set: 11.0821311474
thread 0 memcache 5000 set:
11.135324955
thread 15 memcache 5000 set: 11.2227208614
thread 19
memcache 5000 set: 11.4754559994
thread 2 tokyo tyrant 5000 set:
7.76640605927
thread 5 tokyo tyrant 5000 set: 8.22156119347
thread
1 tokyo tyrant 5000 set: 8.40494203568
thread 10 tokyo tyrant 5000
set: 7.92209196091
thread 9 tokyo tyrant 5000 set: 7.55454802513
thread
18 tokyo tyrant 5000 set: 7.27255797386
thread 8 tokyo tyrant 5000
set: 7.63895893097
thread 11 tokyo tyrant 5000 set: 7.13767504692
thread
13 tokyo tyrant 5000 set: 7.42961502075
thread 14 tokyo tyrant 5000
set: 7.43208909035
thread 6 tokyo tyrant 5000 set: 7.3564889431
thread
15 tokyo tyrant 5000 set: 6.79607892036
thread 17 tokyo tyrant 5000
set: 6.93887209892
thread 3 tokyo tyrant 5000 set: 7.68552422523
thread
12 tokyo tyrant 5000 set: 7.12319302559
thread 16 tokyo tyrant 5000
set: 7.10764598846
thread 0 tokyo tyrant 5000 set: 6.90239214897
thread
7 tokyo tyrant 5000 set: 7.22372317314
thread 4 tokyo tyrant 5000
set: 7.10077404976
thread 19 tokyo tyrant 5000 set: 6.64217996597
--------------------------------------------------------------------------------
get_benchmark:
20 threads, 100000 times
thread 6 memcache 5000 get: 8.76900911331
thread
18 memcache 5000 get: 8.84009003639
thread 17 memcache 5000 get:
8.86155486107
thread 5 memcache 5000 get: 8.91267108917
thread 13
memcache 5000 get: 8.92148303986
thread 0 memcache 5000 get:
8.98046302795
thread 19 memcache 5000 get: 8.98061203957
thread 16
memcache 5000 get: 8.99304008484
thread 11 memcache 5000 get:
9.07233214378
thread 1 memcache 5000 get: 9.09262895584
thread 14
memcache 5000 get: 9.11016702652
thread 4 memcache 5000 get:
9.11597895622
thread 3 memcache 5000 get: 9.1481218338
thread 12
memcache 5000 get: 9.20062994957
thread 10 memcache 5000 get:
9.2384750843
thread 2 memcache 5000 get: 9.27785277367
thread 8
memcache 5000 get: 9.27573204041
thread 9 memcache 5000 get:
9.32341504097
thread 7 memcache 5000 get: 9.40595293045
thread 15
memcache 5000 get: 9.44804811478
thread 6 tokyo tyrant 5000 get:
6.73215508461
thread 0 tokyo tyrant 5000 get: 6.55519604683
thread
17 tokyo tyrant 5000 get: 6.68555307388
thread 5 tokyo tyrant 5000
get: 6.64170980453
thread 11 tokyo tyrant 5000 get: 6.53203821182
thread
12 tokyo tyrant 5000 get: 6.41466784477
thread 4 tokyo tyrant 5000
get: 6.51224589348
thread 2 tokyo tyrant 5000 get: 6.35708498955
thread
14 tokyo tyrant 5000 get: 6.54695796967
thread 19 tokyo tyrant 5000
get: 6.67935991287
thread 16 tokyo tyrant 5000 get: 6.67978215218
thread
18 tokyo tyrant 5000 get: 6.83982586861
thread 13 tokyo tyrant 5000
get: 6.78410601616
thread 3 tokyo tyrant 5000 get: 6.55975389481
thread
9 tokyo tyrant 5000 get: 6.38529014587
thread 8 tokyo tyrant 5000
get: 6.4428050518
thread 7 tokyo tyrant 5000 get: 6.31911993027
thread
10 tokyo tyrant 5000 get: 6.496737957
thread 15 tokyo tyrant 5000
get: 6.28649902344
thread 1 tokyo tyrant 5000 get: 6.65115785599
--------------------------------------------------------------------------------
get_miss_benchmark:
20 threads, 100000 times
thread 10 memcache 5000 get miss:
7.05730509758
thread 9 memcache 5000 get miss: 7.05415606499
thread
3 memcache 5000 get miss: 7.1769759655
thread 16 memcache 5000 get
miss: 7.19843101501
thread 13 memcache 5000 get miss: 7.26215600967
thread
7 memcache 5000 get miss: 7.26590704918
thread 19 memcache 5000 get
miss: 7.27665185928
thread 12 memcache 5000 get miss: 7.35561084747
thread
17 memcache 5000 get miss: 7.46251511574
thread 18 memcache 5000 get
miss: 7.48763084412
thread 14 memcache 5000 get miss: 7.50556397438
thread
5 memcache 5000 get miss: 7.57047796249
thread 4 memcache 5000 get
miss: 7.56979203224
thread 1 memcache 5000 get miss: 7.61345601082
thread
11 memcache 5000 get miss: 7.60594892502
thread 6 memcache 5000 get
miss: 7.63839101791
thread 2 memcache 5000 get miss: 7.65122389793
thread
0 memcache 5000 get miss: 7.70662999153
thread 8 memcache 5000 get
miss: 7.72461605072
thread 15 memcache 5000 get miss: 7.73385190964
thread
9 tokyo tyrant 5000 get miss: 6.74626517296
thread 3 tokyo tyrant
5000 get miss: 6.66942286491
thread 10 tokyo tyrant 5000 get miss:
6.8257830143
thread 16 tokyo tyrant 5000 get miss: 6.69402313232
thread
13 tokyo tyrant 5000 get miss: 6.63183093071
thread 12 tokyo tyrant
5000 get miss: 6.5411028862
thread 7 tokyo tyrant 5000 get miss:
6.66564011574
thread 19 tokyo tyrant 5000 get miss: 6.70229697227
thread
17 tokyo tyrant 5000 get miss: 6.54302000999
thread 4 tokyo tyrant
5000 get miss: 6.44842004776
thread 1 tokyo tyrant 5000 get miss:
6.44668984413
thread 14 tokyo tyrant 5000 get miss: 6.57335805893
thread
18 tokyo tyrant 5000 get miss: 6.58749604225
thread 5 tokyo tyrant
5000 get miss: 6.51425504684
thread 15 tokyo tyrant 5000 get miss:
6.35351395607
thread 11 tokyo tyrant 5000 get miss: 6.48207402229
thread
8 tokyo tyrant 5000 get miss: 6.37408590317
thread 0 tokyo tyrant
5000 get miss: 6.39541912079
thread 6 tokyo tyrant 5000 get miss:
6.46143507957
thread 2 tokyo tyrant 5000 get miss: 6.46356105804
由上面
输出可以看到,tokyo tyrant并不比memcache性能差太多(可能是memcache.py有性能问题)。
在多线
(进)程环境下,memcache表现并不好,而tokyo tyrant有明显的性能提高。
相关推荐
尝试开发PHP的扩展,仅用于学习。目前仅能够在windows下编译通过。 Linux下的tokyo cabinet API与Windows与差别,写的时候是在windows下,准备在linux下编译时才发现tokyo cabinet API在Unix下与Windows下是不一样的
Tokyo Cabinet 和 Tokyo Tyrant 的组合在某些特定场景下,如日志分析、高速缓存、分布式存储等,表现出了优秀的性能和可靠性。它们的使用需要一定的学习成本,但一旦熟悉了其工作原理和API,就能在处理大数据时发挥...
值得注意的是,虽然Tokyo Cabinet和Tokyo Tyrant在特定场景下表现出色,但它们对内存的需求较高,适合那些对内存资源充足且追求高性能读写的应用场景。例如,在MIXI这样的大型社交网络服务中,Tokyo Cabinet被广泛...
安装Tokyo Cabinet通常涉及编译源代码并链接到项目中,或者通过包管理器如Homebrew在Unix-like系统上安装预编译的二进制包。使用时,开发者需了解其API,编写相应的数据操作代码。 10. **维护与更新** Tokyo ...
Tokyo cabinet C 库的Lua绑定接口。 Tokyo cabinet 是一个管理数据库的库。该数据库是一个单一的数据文件,每个记录为关键字和值。每个关键字和值是可变长度的字节序。二进制数据和字符串都可作为关键字或值。每个...
Tokyo cabinet C 库代码的Java绑定接口。 Tokyo cabinet 是一个管理数据库的库。该数据库是一个单一的数据文件,每个记录为关键字和值。每个关键字和值是可变长度的字节序。二进制数据和字符串都可作为关键字或值。...
东京橱柜食谱 使用 Chef 安装东京橱柜。 支持的平台 支持以下平台: ...在节点的run_list包含tokyo-cabinet : { " run_list " : [ " recipe[tokyo-cabinet::default] " ] } 作者 作者:坂锐( )
在安装这两个库之前,确保你的系统已经设置好`ulimit -SHn 65535`,这是为了增加文件描述符的最大数量,以便支持更多的并发连接。 - **libevent**:下载libevent的源代码,解压并配置安装路径,然后编译和安装。 ...
**东京内阁(Tokyo Cabinet)**是一款高效的开源数据库库,它源于QDBM并在此基础上进行了优化和提升。作为QDBM的升级版本,东京内阁在性能方面有着显著的改进,尤其在处理大量数据时,其速度表现更加出色,无需依赖...
“工具”标签则意味着Tokyo Cabinet作为一款工具,不仅限于数据库存储,还可能与其他开发工具或框架结合使用,例如在自动化脚本(如`test.sh`)中作为数据处理部分。这个`test.sh`脚本可能包含了一系列操作Tokyo ...
在安装Tokyocabinet之前,确保系统已经更新到最新版本,以获取所有必要的依赖项。打开终端并运行以下命令: ``` sudo apt update sudo apt upgrade ``` 2. **安装依赖**: Tokyocabinet的编译和安装需要一些...
Tokyo Cabinet是一个高效、轻量级且开源的数据库管理系统,主要设计用于在本地存储大量数据。这个名为"tokyocabinet-1.4.45.tar.gz"的压缩包文件包含的是Tokyo Cabinet的1.4.45版本源代码。在本文中,我们将深入探讨...
从这份文档中,我们可以深入理解Tokyo Tyrant及其关联的Tokyo Cabinet数据库的多个方面,包括其安装、使用、原理以及与其他数据库系统的性能比较。下面将详细解析这些关键知识点。 ### 1. Tokyo Tyrant与Tokyo ...
Tokyo Cabinet提供了C语言的API接口,同时也支持其他语言的绑定,如Python、Ruby、Java等,方便开发者在不同环境下使用。 7. 数据安全性: Tokyo Cabinet支持事务处理,确保数据的一致性。同时,它还提供了数据备份...
5. **并发控制**:Tokyo Cabinet提供了简单的锁机制来支持多线程或进程环境下的并发访问,虽然不如事务型数据库那样强大,但对于许多简单场景已经足够。 6. **性能优化**:Tokyo Cabinet通过预分配空间、内存映射等...
这篇博文很可能是关于如何在操作系统环境下安装和使用这四种数据库的教程。 1. **Memcached**:Memcached是一款高性能、分布式的内存对象缓存系统,用于加速动态Web应用程序。它的主要特点是轻量级和高速,通过缓存...
BNR持久性亚伦·希勒加斯(Aaron Hillegass) 2010年7月9日经过几年的抱怨,Core Data可能会变得更好,我认为我应该编写一个...安装首先,您需要下载Tokyo Cabinet: : (有一个sourceforge页面,但是最新的版本似乎
标题 "tokyoCabinet及tokyoTyrant简介" 指向了两个与数据库管理相关的开源工具,Tokyo Cabinet和Tokyo Tyrant。这两个工具由日本开发者开发,主要用于小型到中型的数据存储,尤其适合那些对数据读写速度有较高要求的...
在安装完成后,需要根据提供的安装说明,配置HTTPSQS的服务端和客户端,启动服务,并进行测试,确保能够正常发布和消费消息。HTTPSQS的使用文档和示例代码通常会提供详细的步骤和示例,帮助开发者快速上手。 总之,...
1. **Microsoft Cabinet 文件格式**:CAB文件是微软设计的一种数据压缩格式,主要应用于Windows操作系统中的软件安装程序和更新。它支持分块压缩,可以提高解压速度,并且可以包含数字签名,确保文件的完整性和安全...