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有明显的性能提高。
相关推荐
DCM与PFC融合的CRM混合模式创新实践,DCM CRM混合模式PFC ,DCM; CRM混合模式; PFC,DCM与PFC的混合模式在CRM系统中的应用
Radon-Wigner变换与Wigner-Hough估计在信号参数提取中的应用研究——线性调频信号处理与雷达信号速度补偿的探索,利用Radon—Wigner变,Wigner—Hough估计线性调频信号参数,信号参数估计,雷达信号处理,速度补偿 ,核心关键词:Radon—Wigner变换; Wigner—Hough估计; 线性调频信号参数估计; 信号参数估计; 雷达信号处理; 速度补偿,利用Radon-Wigner变换与Wigner-Hough估计,实现线性调频信号参数快速估计,雷达信号处理中的速度补偿技术
基于三菱PLC与组态王技术的自动化立体车库堆垛书架控制系统研究与应用第1100例实践,No.1100 基于三菱PLC和组态王组态自动化立体车库控制堆垛书架 ,三菱PLC; 组态王组态; 自动化立体车库; 控制; 堆垛书架,基于三菱PLC与组态王控制的立体车库堆垛书架自动化系统
"交错并联Boost PFC仿真电路模型:双闭环控制策略下的输出电压与电感电流分析",交错并联Boost PFC仿真电路模型 采用输出电压外环,电感电流内环的双闭环控制方式 交流侧输入电流畸变小,波形良好,如效果图所示 plecs matlab simulink仿真模型 ,核心关键词: 交错并联Boost; PFC仿真电路模型; 双闭环控制方式(输出电压外环、电感电流内环); 交流侧输入电流畸变小; 波形良好; plecs matlab simulink仿真模型。,基于PLECS与Matlab Simulink的Boost PFC双闭环控制仿真模型
"COMSOL仿真:固体超声导波二维模拟及汉宁窗调制5周期正弦激励信号的添加与中心频率200kHz的位移控制",COMSOL—固体超声导波二维仿真 激励信号为汉宁窗调制的5周期正弦函数,中心频率为200kHz 通过指定位移来添加激励信号 ,COMSOL;固体超声导波;二维仿真;汉宁窗调制;正弦函数;中心频率200kHz;指定位移添加激励信号。,COMSOL固体超声导波二维仿真:汉宁窗调制正弦激励信号添加
MATLAB环境下多元变分模态分解与多通道去趋势波动分析多变量信号去噪技术的研究与应用,MATLAB环境下一种基于多元变分模态分解和多通道去趋势波动分析的多变量信号去噪方法。 算法运行环境为MATLAB r2018a,算法可迁移至金融时间序列,地震信号,语音信号,声信号,生理信号(ECG,EEG,EMG)等信号。 ,多元变分模态分解; 多通道去趋势波动分析; MATLAB r2018a; 金融时间序列; 地震信号; 语音信号; 声信号; 生理信号去噪,MATLAB多模态多通道去噪算法在多元信号处理中的应用
基于COMSOL的高坝三维应力渗流耦合分析程序:突破传统二维限制的数值模拟研究,基于comsol的高坝-应力渗流耦合分析,三维程序,非二维 ,基于Comsol; 高坝-应力渗流耦合分析; 三维程序; 非二维。,基于COMSOL的三维高坝应力渗流耦合分析程序
"利用Matlab的Music算法提升雷达超分辨成像的图像质量及分辨率",matlab的Music算法,可用于雷达超分辨成像,提高图像分辨率 ,Matlab的Music算法; 雷达超分辨成像; 提高图像分辨率,Matlab Music算法:雷达超分辨成像,提升图像分辨率
面向农网变电站低成本巡检监督终端研究与实现.pdf
融合Floyd算法优化的改进A星算法:多方向搜索与路径平滑度提升的代码实现,融合floyd算法的改进A星算法路径规划代码 可备注,可以,可依据需求更改地图 %% 改进A*算法 路径规划 % 改进A*算法 1 8个搜索方向变成 5个 提高搜索方向 % 2 无斜穿障碍物顶点 避免发生碰撞 % 3 基于改进floyd双向平滑度优化,删除中间多余节点,减少转折,增加路径的平滑度 % 4 评价函数:f(n)=g(n)+(1-log(P))*h(n) % P表示起始点与目标点之间的障碍率 % = 障碍物的数量 栅格总数 % 其中r为当前点到目标点的距离,R为起始点到目标点的距离。 % 试验对比如下 ,核心关键词:融合Floyd算法;改进A星算法;路径规划代码;搜索方向优化;无斜穿障碍物顶点;双向平滑度优化;评价函数;P值表示障
个人网站 界面优美 代码简单 适合初学者和大学毕业设计。
"深度学习驱动的MIMO雷达目标检测与二维测角技术",使用深度学习进行MIMO 雷达目标检测,二维测角 ,使用深度学习进行MIMO雷达目标检测; MIMO雷达; 目标检测; 二维测角,深度学习助力MIMO雷达目标二维测角检测
tf.data定义高效的输入流水线
基于三菱FX PLC的组态王五层电梯控制系统设计与实现,No.1294 三菱FX PLC基于组态王五层电梯控制系统 ,三菱FX PLC; 组态王; 五层电梯; 控制系统; 编号1294,"三菱FX PLC五层电梯控制系统"
OFDM系统调制下QPSK与16QAM的误码率比较分析程序,OFDM系统在QPSK与16QAM调制下,误码率比较程序 ,OFDM系统; QPSK调制; 16QAM调制; 误码率比较程序,OFDM系统调制下误码率比较程序:QPSK vs 16QAM
,西门子s7-1200plc控制5轴伺服,采用结构化编程,触摸屏采用威纶通,项目实现以下功能, 1.plc程序结构 采用结构化编程,每一功能为模块化设计,功能:自动-手动-单步-暂停-伺服断电保持-报警功能等等。 每个功能块建好后都能无数次调用。 三轴机械手x轴-y轴-z轴取放料脉冲定位控制台达b2伺服。 台达伺服速度模式应用,扭矩模式应用。 2触摸屏程序结构 手动画面-报警画面-资料数据-历史数据-用户管理-配方设置-伺服自动画面-伺服参数-i o监控等。 3电气图纸 主电路,伺服电路,plc输入输出控制电路等等 plc程序结构清晰,层次分明,注释齐全。 触摸屏程序画面精美。 cad制图精美。 都可以作为后续自己项目的参考模版。 参考本案例程序。 可快速掌握西门子1200控制伺服编程技巧,扩展自己的编程逻辑思维。 节省大量不必要花费的时间,可快速上手。 plc程序博途v14 以上都能打开。
da3be767d73d8b8ed90b550558f72b4c.part1
基于MATLAB的3-RPS并联机器人动力学与运动学仿真控制技术研究,利用Simulink与Simscape平台进行仿真分析,MATLAB3-rps并联机器人动力学仿真,运动学仿真控制,simulink simscape ,核心关键词:MATLAB; 3-rps并联机器人; 动力学仿真; 运动学仿真控制; Simulink; Simscape;,MATLAB仿真实验:并联机器人动力学与运动学控制
基于三菱FX2N PLC的五层电梯控制系统设计:全面注释的程序实现与功能详解,No3.05 基于三菱FX2N PLC 五层电梯控制系统设计 程序有全部注释。 编程软件:GX Developer 文件:【源程序文件】【接线电路图】【IO分配表】 实现功能: (1)自动响应层楼召唤信号(含上召唤和下召唤) (2)自动响应轿厢服务指令信号 (3)自动完成轿厢层楼位置显示 (4)自动显示电梯运行方向 #Mitsubishi 三菱 ,三菱FX2N PLC; 五层电梯控制系统设计; 程序注释; 编程软件GX Developer; 源程序文件; 接线电路图; IO分配表; 自动响应层楼召唤信号; 自动完成轿厢层楼位置显示; 自动显示电梯运行方向。,三菱FX2N PLC五层电梯控制系统设计与实现
基于Matlab平台的颜色与纹理综合特征图像检索系统:实现自定义权重与大数据库检索实验,基于matlab的颜色+纹理综合特征的图像检索 本文在平台上实现了这一图像检索系统,实现自定义权重以及综合特征下的图像检索,并在655副图像的大数据库中随机抽取24副图像进行检索实验,得到了较好的效果。 根据用户输入的样本图像与图像库中的图像进行特征匹配,找出与样本图像距离比较小的若干幅图像,并按照图像之间的距离由小到大的顺序显示给用户。 ,基于Matlab的图像检索系统; 颜色纹理综合特征; 自定义权重; 大数据库检索实验; 特征匹配; 图像距离排序,基于Matlab的图像检索系统:颜色纹理综合特征与自定义权重实现