涓婚〉涓婏紝緇欏嚭鐨?a >benchmark琛ㄦ槑錛屽湪瀹冪殑紜歡鐜涓嬶紝鎻掑叆涓鐧句竾鏁版嵁浠呴渶涓嶅埌涓縐掔殑鏃墮棿銆?br>
鎴戣闇囨捈浜嗭紝涓轟簡浜茬溂鎵瑙侊紝涔熶負(fù)浜嗗拰鎴戜箣鍓嶅啓鐨?a href="http://www.shnenglu.com/converse/category/6498.html">commoncache搴撹繘琛屾瘮杈冿紝鎴戝喅瀹氬湪鎴戣嚜宸辯殑鏈哄櫒涓婏紝浣跨敤鍚屾牱綾誨瀷錛屽ぇ灝忕殑鏁版嵁錛屽悓鏍風(fēng)殑閲忕駭錛岃繘琛屾彃鍏ユ暟鎹繖涓搷浣滅殑姣旇緝銆?br>
涓嬮潰緇欏嚭鎴戝啓鐨勬祴璇曟枃浠訛細(xì)
閽堝tokyocabinet鐨勶細(xì)
test_unfix_cache.c
/********************************************************************
created: 2008/05/30
filename: test_unfix_cache.c
author: Lichuang
purpose:
*********************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <signal.h>
#include <arpa/inet.h>
#include <tcutil.h>
#include <tchdb.h>
TCHDB *hdb = NULL;
void mainloop();
void createrandstring(char* string, int len);
int isparent = 0;
int main()
{
hdb = tchdbnew();
if (!hdb)
{
printf("create error!\n");
exit(-1);
}
if (!tchdbopen(hdb, "1.hdb", HDBOWRITER | HDBOCREAT))
{
printf("open error!\n");
exit(-1);
}
mainloop();
return 0;
}
#define STRING_LEN 5
void mainloop()
{
char string[STRING_LEN];
int num, i, len;
srand((unsigned)time(NULL) + getpid());
len = STRING_LEN;
for (i = 1; i < 1000000; ++i)
{
memset(string, 0, STRING_LEN);
createrandstring(string, len);
if (!tchdbput2(hdb, string, string))
{
}
else
{
}
}
printf("pid = %d, test done\n", getpid());
}
const char str[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
void createrandstring(char* string, int len)
{
int x, i;
for (i = 0; i < len - 1; ++i)
{
x = rand() % (sizeof(str) - 1);
//x = (i + len) % (sizeof(str) - 1);
string[i] = str[x];
}
string[++i] = str[len % sizeof(str) + 1];
string[i] = '\0';
}
瀵瑰簲鐨凪akefile錛?br>
all:test_unfix_cache.c
gcc -I/usr/local/include test_unfix_cache.c -o test_unfix_cache -L/usr/local/lib -ltokyocabinet -lz -lbz2 -lrt -lpthread -lm -lc
鑰岄拡瀵筩ommoncache鐨勬祴璇曟枃浠舵槸錛?br>
/********************************************************************
created: 2008/05/30
filename: test_unfix_cache.c
author: Lichuang
purpose:
*********************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <signal.h>
#include <arpa/inet.h>
#include "ccache.h"
#include "memory.h"
ccache_t* cache;
void mainloop();
void createrandstring(char* string, int len);
int isparent = 0;
int main()
{
cache = ccache_create(75000, 100, "./testunfixmap", 10, 810, 1);
if (NULL == cache)
{
printf("create_cache error!\n");
return -1;
}
mainloop();
return 0;
}
#define STRING_LEN 5
int cmp_fun(const void* data1, const void* data2, int len)
{
return memcmp(data1, data2, sizeof(char) * len);
}
void mainloop()
{
char string[STRING_LEN];
int i, len;
ccache_data_t data;
srand((unsigned)time(NULL) + getpid());
len = STRING_LEN;
for (i = 1; i < 1000000; ++i)
{
memset(string, 0, STRING_LEN);
createrandstring(string, len);
data.datasize = len;
data.keysize = len;
data.data = (void*)&string;
data.key = (void*)&string;
//printf("i = %d\n", i);
if (0 > ccache_insert(&data, cache, cmp_fun, NULL, NULL))
{
}
else
{
continue;
}
}
printf("pid = %d, test done\n", getpid());
}
const char str[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
void createrandstring(char* string, int len)
{
int x, i;
for (i = 0; i < len - 1; ++i)
{
x = rand() % (sizeof(str) - 1);
//x = (i + len) % (sizeof(str) - 1);
string[i] = str[x];
}
string[++i] = str[len % sizeof(str) + 1];
string[i] = '\0';
}
鍦╟ommoncache鐨勯」鐩唬鐮佺殑test鐩綍涓紝鍚屾牱瀛樺湪涓涓悕涓簍est_unfix_test.c鐨勬枃浠訛紝鏄垜浠ュ墠鍐檆ommoncache鏃舵祴璇曠敤鐨勶紝涓嶈繃鍘熸潵鐨勯偅涓枃浠跺姛鑳借緝澶氾紝涓嶄粎鏈夋彃鍏ユ搷浣滐紝榪樻湁鏌ユ壘錛屾浛鎹㈢瓑鎿嶄綔錛岃繖嬈′負(fù)浜嗘祴璇曪紝鎴戝榪欎釜鏂囦歡榪涜浜嗙簿綆錛屽彧淇濈暀鎻掑叆鏁版嵁鎿嶄綔鐨勯儴鍒嗐備嬌鐢ㄧ殑鏄痗ommoncache涓殑hash錛峳btree緇撴瀯銆?br>
鎬ц兘嫻嬭瘯緇撴灉錛?br>tokyocabinet錛?br>
lichuang@lichuang:/media/e/source/tokyocabinet/test$ time ./test_unfix_cache
pid = 15464, test done
real 0m0.373s
user 0m0.364s
sys 0m0.008s
commoncache錛?br>
lichuang@lichuang:/media/e/source/ccache/bin$ time ./test_unfix_cache
pid = 15514, test done
real 0m0.235s
user 0m0.228s
sys 0m0.004s
鐪嬩笂鏉ワ紝commoncache姣斾箣tokyocabinet榪樼◢濂戒竴浜涳紵
涓嶈繃錛宑ommoncache涓巘okyocabinet榪樻槸鏈夊尯鍒殑錛屽墠鑰呭伐浣滅殑鍖哄煙鏄叡浜唴瀛橈紝鍚庤呮槸紓佺洏鏂囦歡錛屾湁榪欐牱鐨勮〃鐜幫紝紜疄鎯婁漢銆?br>
榪欐姣旇緝錛岃搗鐮佺粰浜嗘垜涓浜涗簺鐨勮嚜淇★紝鎴戠殑commoncache涓嶆瘮涓栫晫涓嫻佺殑鏂囦歡鏁版嵁搴撴ц兘宸殑澶銆?br>涓嬩竴姝ワ紝鎴戞兂緇х畫涓嬮潰鐨勫嚑涓伐浣滐細(xì)
1錛?鍥藉簡鐨勬椂鍊欙紝鏁寸悊鍑轟竴浠絚ommoncache鐨勮璁℃枃妗o紝綆楁槸闃舵鎬х殑涓涓皬緇撱傚彟澶栵紝commoncache鍦ㄦ彃鍏ユ暟鎹殑鏃跺欙紝鏈夋椂浼?xì)鎶ラ敊锛屾垜杩樺緱鏌ユ煡鏄皋Z粈涔堛?br>2錛?鎶界┖瑕佸紑濮嬬爺絀舵枃浠舵暟鎹簱鐨勫疄鐜頒簡錛宼okyocabinet灝辨槸涓涓笉閿欑殑鍙傝冦?br>
鍙﹀錛屽璇村嚑鍙ワ紝涓涓駭鍝佽鎴愬姛錛屼粎浠呮湁鎬ц兘鏄笉澶燂紝鍙淮鎶ゆэ紝鍙浠芥э紝浼樼鐨勫崗璁璁$瓑絳夛紝閮芥槸閲嶈鐨勬寚鏍囥傛垜鎯籌紝commoncache鍙仛鍒頒簡鎬ц兘榪欎竴鐐癸紝鎴戦渶瑕佸湪鍏朵粬鍑犳柟闈㈢戶緇姫鍔涖?br>
鍝︼紝蹇樹簡緇欏嚭鎴戠殑鐜鍙傛暟錛?br>ubuntu9.04,鍐呮牳2.6.18,鍐呭瓨3G錛宨ntel 鍙屾牳CPU銆?br>

]]>