青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰的技術博客

感興趣領域:高性能服務器編程,存儲,算法,Linux內核
隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
數據加載中……

commoncache與tokyocabinet插入數據的效率比較

最近tokyocabinet這個數據庫很流行,網上出現很多研究這個玩意兒的文章。在它的主頁上,給出的benchmark表明,在它的硬件環境下,插入一百萬數據僅需不到一秒的時間。

我被震撼了,為了親眼所見,也為了和我之前寫的commoncache庫進行比較,我決定在我自己的機器上,使用同樣類型,大小的數據,同樣的量級,進行插入數據這個操作的比較。

下面給出我寫的測試文件:
針對tokyocabinet的:
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* stringint 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 - 1;



    
for (i = 1; i < 1000000++i)

    {

        memset(
string0, STRING_LEN);

        createrandstring(
string, len);



        
if (!tchdbput2(hdb, stringstring))            

        {

        }

        
else

        {

        }

    }



    printf(
"pid = %d, test done\n", getpid());

}



const char str[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";



void createrandstring(char* stringint 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';

}


對應的Makefile:
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

而針對commoncache的測試文件是:
/********************************************************************
    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* stringint len);

int isparent = 0;

int main()
{
    cache 
= ccache_create(75000100"./testunfixmap"108101);
    
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 - 1;

    
for (i = 1; i < 1000000++i)
    {
        memset(
string0, 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* stringint 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';
}

在commoncache的項目代碼的test目錄中,同樣存在一個名為test_unfix_test.c的文件,是我以前寫commoncache時測試用的,不過原來的那個文件功能較多,不僅有插入操作,還有查找,替換等操作,這次為了測試,我對這個文件進行了精簡,只保留插入數據操作的部分。使用的是commoncache中的hash-rbtree結構。

性能測試結果:
tokyocabinet:
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:
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還稍好一些?
不過,commoncache與tokyocabinet還是有區別的,前者工作的區域是共享內存,后者是磁盤文件,有這樣的表現,確實驚人。

這次比較,起碼給了我一些些的自信,我的commoncache不比世界一流的文件數據庫性能差的太多。
下一步,我想繼續下面的幾個工作:
1) 國慶的時候,整理出一份commoncache的設計文檔,算是階段性的一個小結。另外,commoncache在插入數據的時候,有時會報錯,我還得查查是為什么。
2) 抽空要開始研究文件數據庫的實現了,tokyocabinet就是一個不錯的參考。

另外,多說幾句,一個產品要成功,僅僅有性能是不夠,可維護性,可備份性,優秀的協議設計等等,都是重要的指標。我想,commoncache只做到了性能這一點,我需要在其他幾方面繼續努力。

哦,忘了給出我的環境參數:
ubuntu9.04,內核2.6.18,內存3G,intel 雙核CPU。


posted on 2009-09-20 20:02 那誰 閱讀(4233) 評論(2)  編輯 收藏 引用 所屬分類: ccache

評論

# re: commoncache與tokyocabinet插入數據的效率比較  回復  更多評論   

看你的blog好久了,再不頂真說不過去了:)
2009-09-30 21:57 | nanduo

# re: commoncache與tokyocabinet插入數據的效率比較  回復  更多評論   

內存比磁盤快這么一點也算可以?
2013-10-30 01:17 | ddd
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区冒白浆视频| 亚洲精品韩国| 久久久久亚洲综合| 久久免费黄色| 亚洲经典三级| 日韩一区二区电影网| 欧美网站在线观看| 久久精品一本| 老司机一区二区三区| 亚洲高清视频一区| 夜夜嗨av一区二区三区中文字幕| 国产精品sss| 久久综合久久久久88| 你懂的视频一区二区| 亚洲一区二区三区免费在线观看| 亚洲在线电影| 亚洲黄色av一区| 亚洲天堂av在线免费| 好看不卡的中文字幕| 亚洲免费av片| 好看的av在线不卡观看| 日韩视频一区| 亚洲成人资源网| 亚洲一区二区在线免费观看| 伊人久久成人| 亚洲在线免费| 亚洲区国产区| 一本综合久久| 欧美777四色影视在线| 一区二区三区av| 久久精品二区亚洲w码| 一区二区av| 久久免费视频一区| 欧美一区二区日韩一区二区| 欧美黄色aaaa| 久久亚洲精品一区| 国产精品日韩一区| 亚洲免费精彩视频| 亚洲欧洲日本国产| 久久久久久伊人| 欧美中文在线观看国产| 欧美视频免费在线| 亚洲国产综合在线看不卡| 国产欧美va欧美va香蕉在| 亚洲精品社区| 久久久免费精品| 欧美成人精精品一区二区频| 久久久久久久久久久久久久一区| 欧美特黄一级| 亚洲精品综合| 999在线观看精品免费不卡网站| 欧美一区二区三区的| 亚洲欧美另类国产| 欧美日韩在线电影| 99re6热只有精品免费观看| 亚洲三级色网| 欧美连裤袜在线视频| 亚洲黄色免费电影| 91久久久久久久久| 农村妇女精品| 亚洲日本中文| 亚洲精品女人| 欧美日韩在线第一页| 9人人澡人人爽人人精品| 一区二区高清| 欧美午夜精品电影| 亚洲深夜福利| 午夜日韩电影| 国产一区二区在线观看免费| 欧美一二三区精品| 老司机一区二区| 亚洲国产中文字幕在线观看| 欧美+日本+国产+在线a∨观看| 欧美激情亚洲精品| 亚洲欧洲日产国产网站| 欧美区一区二| 亚洲一区二区三区免费观看| 先锋影音网一区二区| 国内精品免费午夜毛片| 老鸭窝毛片一区二区三区| 91久久嫩草影院一区二区| 亚洲图片欧美一区| 国产精品视频yy9099| 欧美一区1区三区3区公司| 免费不卡在线视频| 99亚洲一区二区| 国产欧美精品日韩区二区麻豆天美| 久久国产精品免费一区| 亚洲国产99精品国自产| 亚洲视频999| 国产一区在线观看视频| 欧美搞黄网站| 性做久久久久久免费观看欧美| 欧美成年人视频网站| 亚洲自拍电影| 亚洲电影免费观看高清完整版在线观看 | av成人免费在线| 国产精品视频yy9299一区| 久久久一区二区三区| 99成人在线| 免费观看在线综合| 午夜精品久久久久久久99水蜜桃| 狠狠色综合色综合网络| 欧美日韩国产精品| 久久精品国产欧美亚洲人人爽| 亚洲激情成人网| 久久久精品久久久久| 中文网丁香综合网| 亚洲国产高清在线观看视频| 欧美午夜精彩| 欧美凹凸一区二区三区视频| 午夜精品区一区二区三| 亚洲欧洲另类| 欧美成人免费大片| 欧美在线一级va免费观看| 9国产精品视频| 在线免费观看日韩欧美| 国产欧美日韩一区二区三区在线| 欧美激情综合| 老鸭窝亚洲一区二区三区| 性感少妇一区| 亚洲综合电影| 在线一区免费观看| 亚洲精品视频二区| 亚洲国语精品自产拍在线观看| 久久亚裔精品欧美| 欧美一级二区| 亚洲欧美日韩天堂| 亚洲一区二区三| 一本久道久久综合狠狠爱| 亚洲人成绝费网站色www| 在线成人激情| 樱花yy私人影院亚洲| 韩国三级在线一区| 国内精品久久久久久久果冻传媒| 国产精品入口| 国产日本欧洲亚洲| 国产一区二区电影在线观看 | 国产伪娘ts一区| 国产三区二区一区久久| 国产精一区二区三区| 国产精品亚洲人在线观看| 国产精品二区二区三区| 欧美天堂亚洲电影院在线观看 | 午夜视频在线观看一区二区三区| 亚洲一区二区在线免费观看视频| 99国产精品久久久久久久成人热| 亚洲黄色影院| 一区二区成人精品 | 亚洲电影免费观看高清完整版在线 | 国外成人网址| 在线观看视频免费一区二区三区| 精品成人久久| 亚洲人体影院| 亚洲午夜久久久| 午夜日韩视频| 久久综合色婷婷| 亚洲国产精品电影| 99热这里只有精品8| 亚洲欧美春色| 麻豆精品精华液| 欧美三日本三级三级在线播放| 国产精品久久久久久久免费软件| 国产精品有限公司| 亚洲福利在线看| 中文有码久久| 久久久蜜桃一区二区人| 亚洲成人在线视频网站| 影院欧美亚洲| 一区二区高清视频| 久久精品国产亚洲5555| 亚洲国产精品久久久久久女王| 中文网丁香综合网| 久久久精品性| 欧美网站大全在线观看| 狠久久av成人天堂| 一本色道精品久久一区二区三区| 香蕉久久夜色精品国产使用方法| 久久久久久网址| 99在线观看免费视频精品观看| 久久成人国产精品| 欧美日韩在线精品| 亚洲二区在线视频| 欧美一区二区精品| 亚洲欧洲三级| 久久电影一区| 国产精品99免视看9| 亚洲国产欧美在线| 欧美一区二区三区四区视频| 亚洲国产精品va在线看黑人动漫| 亚洲欧美一级二级三级| 欧美日本精品一区二区三区| 国产综合一区二区| 亚洲欧美另类中文字幕| 亚洲国产视频一区| 久久久免费精品视频| 国产欧美日韩不卡| 亚洲综合色丁香婷婷六月图片| 欧美电影在线观看| 久久久久网址|