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

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

對Berkeley DB的性能進行的部分測試

 

 環境說明:

    所有的數據插入的都是Key=int,Value=int,在循環中遞增的.

    本機NTFS的默認簇大小為4K.

    本機配置僅僅影響絕對值.相對值是可比較的:

        OS=WinXP SP2;RAM=1G;CPU=AMD Athlon 64 X2 Dual 5000+;Disk=160G 

    測試的實際數據量為:300*10000*2*sizeof(int)/1024/1024~=22.89MByte

    下面所有的測試結果的單位都是秒.

    編譯器:C++ builder 6.0(使用bcb編譯BDB源碼,形成LIB庫后,直接鏈接到測試程序中.沒有測試DLL的形式.)

    BDB版本:4.6.21.NC

 

  測試頁尺寸對讀寫性能的影響:

    記錄數量 =300 緩存尺寸=0M

讀寫\頁尺寸

1K

2K

4K

8K

16K

32K

B+

94.94

84.83

82.73

97.16

142.67

232.11

HASH

346.16

320.41

288.36

295.19

599.66

867.03

B+

4.22

4.06

3.86

3.91

3.80

3.78

HASH

8.25

7.94

5.42

5.41

4.99

4.88

結論:頁尺寸與文件系統的簇大小相同時,寫入性能最佳,讀取性能中等.

0M緩存的時候,B+的性能要比HASH好得多.

 

 

  測試cache緩存大小對讀寫性能的影響:

    記錄數量=300  頁尺寸=4K   真實數據量=22.89MByte 數據庫文件大小=80M

讀寫\緩存

0M

10M

20M

40M

80M

160M

320M

B+

85.06

88.66

133.31

164.81

15.31 

15.34

15.27

HASH

292.91

224.47

180.76

95.28

20.11

20.06

20.05

B+

3.98

4.17

4.86

9.56

3.83 

3.81

3.80

HASH

5.53

5.83

5.83

8.16

5.20

5.08

5.16

 

    記錄數量=600  頁尺寸=4K   真實數據量=45.78MByte 數據庫文件大小=160M

讀寫\緩存

0M

40M

80M

160M

320M

B+

259.39

1198.27

1017.94

34.59 

34.30 

HASH

1889.32

1279.95

563.12

40.67

40.89

B+

7.89

14.02

22.84

7.97 

8.03 

HASH

11.17

16.81

11.66

10.39

10.88

 

結論:

    對于緩存大于數據庫文件尺寸的時候,沒有太多可說的,操作都在內存中,速度非常快

    對于大數據量的讀取,兩組對比都比較清晰的說明了一點:緩存的大小對讀取記錄的性能影響不是很大.

    對于大數據量的寫入,緩存對性能的影響就非常可觀了,基本可以肯定的是,HASH庫緩存越大寫入速度越快而奇怪的是,B+庫在緩存不足的時候,性能反而比0緩存時還要差很多!!

    總的來說,在我的這些測試中,B+HASH數據庫的性能差異很大.

    對于緩存大于物理內存的情況未做測試,估計對性能不會有好的影響,畢竟在這種情況下,效率的瓶頸都是在磁盤的IO.

測試的核心代碼如下:

 

Cpp代碼 clip_image001 clip_image003clip_image004

  1. #include <db_cxx.h>  
  2. #define DATABASE    "access.db"  
  3. //tcount=記錄數為多少萬次,DbType=數據庫類型,psize=頁尺寸K,csize=緩存尺寸M  
  4. void run(int tcount,DBTYPE DbType,size_t psize,size_t csize)  
  5. {  
  6.     remove(DATABASE);  
  7.     Db db(0, 0);  
  8.  
  9.     db.set_errpfx("AccessExample");  
  10.     db.set_pagesize(1024*psize);  
  11.     db.set_cachesize(0, 1024*1024*csize, 0);  
  12.     db.open(NULL, DATABASE, NULL, DbType, DB_CREATE|DB_THREAD, 0664);  
  13.  
  14.     int testcount=10000*tcount;  
  15.     size_t tick1=GetTickCount();  
  16.     for (int i=0;i<testcount;i++)  
  17.     {  
  18.         Dbt key(&i,sizeof(int));  
  19.         Dbt data(&i,sizeof(int));  
  20.         db.put(0, &key, &data, DB_NOOVERWRITE);  
  21.     }  
  22.       
  23.     printf("插入結束 %d 萬記錄,全部用時:%.2f\r\n",tcount,(GetTickCount()-tick1)/(float)1000);  
  24.     tick1=GetTickCount();  
  25.     try 
  26.     {  
  27.         Dbc *dbcp;  
  28.         db.cursor(NULL, &dbcp, 0);  
  29.         Dbt key;  
  30.         Dbt data;  
  31.         while (dbcp->get(&key, &data, DB_NEXT) == 0)  
  32.         {  
  33.             key.get_data();  
  34.             data.get_data();  
  35.         }  
  36.         dbcp->close();  
  37.         printf("遍歷結束 %d 萬記錄,全部用時:%.2f\r\n",tcount,(GetTickCount()-tick1)/(float)1000);  
  38.         db.sync(0);  
  39.     }  
  40.     catch (DbException &dbe) {}  
  41.     db.close(0);  
#include <db_cxx.h>
#define DATABASE "access.db"
//tcount=記錄數為多少萬次,DbType=數據庫類型,psize=頁尺寸K,csize=緩存尺寸M
void run(int tcount,DBTYPE DbType,size_t psize,size_t csize)
{
 remove(DATABASE);
 Db db(0, 0);
 
 db.set_errpfx("AccessExample");
 db.set_pagesize(1024*psize);
 db.set_cachesize(0, 1024*1024*csize, 0);
 db.open(NULL, DATABASE, NULL, DbType, DB_CREATE|DB_THREAD, 0664);
 
    int testcount=10000*tcount;
    size_t tick1=GetTickCount();
 for (int i=0;i<testcount;i++)
    {
  Dbt key(&i,sizeof(int));
  Dbt data(&i,sizeof(int));
  db.put(0, &key, &data, DB_NOOVERWRITE);
    }
    
    printf("插入結束 %d 萬記錄,全部用時:%.2f\r\n",tcount,(GetTickCount()-tick1)/(float)1000);
    tick1=GetTickCount();
 try
    {
  Dbc *dbcp;
  db.cursor(NULL, &dbcp, 0);
  Dbt key;
  Dbt data;
  while (dbcp->get(&key, &data, DB_NEXT) == 0)
        {
   key.get_data();
   data.get_data();
  }
  dbcp->close();
        printf("遍歷結束 %d 萬記錄,全部用時:%.2f\r\n",tcount,(GetTickCount()-tick1)/(float)1000);
        db.sync(0);
 }
 catch (DbException &dbe) {}
 db.close(0);
}

 

分享到: clip_image005clip_image006

關于一些中文分詞器

評論

4 h_rain 2009-02-22  

結論:頁尺寸與文件系統的簇大小相同時,寫入性能最佳,讀取性能中等.

緩存用盡后,性能的瓶頸就在于磁盤IO.
BDB
內部對IO進行了優化,每次操作都是對"頁尺寸"字節進行處理,就是說,讀寫10字節或100字節的時候,其實都是在"頁尺寸"這么大的內存上進行讀寫,之后一次性將一個頁寫入磁盤.你給定的頁尺寸是8k,ntfs默認的""大小是4k,所以這樣的操作要跨簇進行,效率就低了.

建議根據文件系統的""大小設置BDB"頁尺寸".
這樣的話,耗時基本是定長的了.

3 peter_wu 2009-02-20  

觀察任務管理器,發現速度快的時候,cache還沒有用完,沒有IO操作。當內存不再增長,cache用完的時候,IO開始大量讀取和寫入,速度開始下降。原來如此啊。

2 peter_wu 2009-02-20  

插入一個周期,10w 用時 0.00
插入一個周期,10w 用時 0.92
插入一個周期,10w 用時 1.09
插入一個周期,10w 用時 1.11
插入一個周期,10w 用時 1.14
插入一個周期,10w 用時 1.16
插入一個周期,10w 用時 1.19
插入一個周期,10w 用時 1.14
插入一個周期,10w 用時 1.19
插入一個周期,10w 用時 1.20
插入一個周期,10w 用時 1.20
插入一個周期,10w 用時 1.28
插入一個周期,10w 用時 1.22
插入一個周期,10w 用時 1.17
插入一個周期,10w 用時 1.20
插入一個周期,10w 用時 1.19
插入一個周期,10w 用時 1.20
插入一個周期,10w 用時 1.26
插入一個周期,10w 用時 1.24
插入一個周期,10w 用時 1.16
插入一個周期,10w 用時 1.17
插入一個周期,10w 用時 1.38
插入一個周期,10w 用時 1.19
插入一個周期,10w 用時 1.20
插入一個周期,10w 用時 1.16
插入一個周期,10w 用時 1.19
插入一個周期,10w 用時 1.17
插入一個周期,10w 用時 1.22
插入一個周期,10w 用時 1.17
插入一個周期,10w 用時 1.20
插入一個周期,10w 用時 1.22
插入一個周期,10w 用時 1.28
插入一個周期,10w 用時 1.19
插入一個周期,10w 用時 1.33
插入一個周期,10w 用時 1.19
插入一個周期,10w 用時 1.23
插入一個周期,10w 用時 1.22
插入一個周期,10w 用時 1.20
插入一個周期,10w 用時 1.22
插入一個周期,10w 用時 1.23
插入一個周期,10w 用時 1.42
插入一個周期,10w 用時 1.22
插入一個周期,10w 用時 1.19
插入一個周期,10w 用時 1.27
插入一個周期,10w 用時 5.84
插入一個周期,10w 用時 9.52
插入一個周期,10w 用時 14.03
插入一個周期,10w 用時 15.39
插入一個周期,10w 用時 16.44
插入一個周期,10w 用時 20.39
插入結束 500 萬記錄,全部用時:156.05
遍歷結束 500 萬記錄,全部用時:14.11
請按任意鍵繼續. . .

1 peter_wu 2009-02-20  

我改了下代碼,發現一個問題,隨著時間推移,插入效率下降嚴重,請問是為什么。

Java代碼 clip_image001 clip_image003clip_image004

  1. #include <db_cxx.h>    
  2. #include <Windows.h>  
  3. #define DATABASE    "access.db"    
  4. void run(int tcount,DBTYPE DbType,size_t psize,size_t csize)  ;  
  5. void main(int argc,char * argv[])  
  6. {  
  7.     run(500,DB_BTREE,8,100);  
  8. }  
  9.  
  10.  
  11. //tcount=記錄數為多少萬次,DbType=數據庫類型,psize=頁尺寸K,csize=緩存尺寸M    
  12. void run(int tcount,DBTYPE DbType,size_t psize,size_t csize)    
  13. {    
  14.     remove(DATABASE);    
  15.     Db db(0, 0);    
  16.  
  17.     db.set_errpfx("AccessExample");    
  18.     db.set_pagesize(1024*psize);    
  19.     db.set_cachesize(0, 1024*1024*csize, 0);    
  20.     db.open(NULL, DATABASE, NULL, DbType, DB_CREATE|DB_THREAD, 0664);    
  21.  
  22.     int testcount=10000*tcount;    
  23.     size_t tick1=GetTickCount();    
  24.  
  25.     DWORD inlinetick=tick1;  
  26.     for (int i=0;i<testcount;i++)    
  27.     {    
  28.         Dbt key(&i,sizeof(int));    
  29.         Dbt data(&i,sizeof(int));    
  30.         db.put(0, &key, &data, DB_NOOVERWRITE);    
  31.         if (i%100000==0)  
  32.         {  
  33.             printf("插入一個周期,10w 用時 %.2f \n",(GetTickCount()-inlinetick)/(float)1000);  
  34.             inlinetick=GetTickCount();  
  35.         }  
  36.     }    
  37.  
  38.     printf("插入結束 %d 萬記錄,全部用時:%.2f\r\n",tcount,(GetTickCount()-tick1)/(float)1000);    
  39.     tick1=GetTickCount();    
  40.     try    
  41.     {    
  42.         Dbc *dbcp;    
  43.         db.cursor(NULL, &dbcp, 0);    
  44.         Dbt key;    
  45.         Dbt data;    
  46.         while (dbcp->get(&key, &data, DB_NEXT) == 0)    
  47.         {    
  48.             key.get_data();    
  49.             data.get_data();    
  50.         }    
  51.         dbcp->close();    
  52.         printf("遍歷結束 %d 萬記錄,全部用時:%.2f\r\n",tcount,(GetTickCount()-tick1)/(float)1000);    
  53.         db.sync(0);    
  54.     }    
  55.     catch (DbException &dbe) {}    
  56.     db.close(0);    
  57. }   

 

posted on 2011-08-28 16:22 肥仔 閱讀(3841) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲经典自拍| 一卡二卡3卡四卡高清精品视频 | 亚洲精品国产精品久久清纯直播| 欧美顶级艳妇交换群宴| 国产女人18毛片水18精品| 亚洲与欧洲av电影| 欧美在线视频一区二区| 国产亚洲综合精品| 久久精品国产清高在天天线| 欧美成人69av| 一区二区免费看| 国产精品婷婷午夜在线观看| 亚洲综合第一页| 欧美va天堂| 亚洲人成网站在线播| 亚洲国产精品久久人人爱蜜臀 | 久久精品视频在线观看| 亚洲精品在线三区| 久久久久五月天| 亚洲婷婷综合色高清在线 | 一区二区欧美激情| 香蕉av福利精品导航| 在线看视频不卡| 欧美性一区二区| 老鸭窝亚洲一区二区三区| 一区二区高清在线| 欧美一区二区黄色| 亚洲主播在线观看| 久久中文字幕导航| 国产精品九九| 欧美三级网址| 欧美精品一二三| 久久久精品网| 欧美色另类天堂2015| 国产在线日韩| 国产一区二区三区视频在线观看 | 亚洲精品一二| 久久手机精品视频| 久久亚洲视频| 国产精品丝袜白浆摸在线| 亚洲娇小video精品| 久久精品99久久香蕉国产色戒 | 亚洲欧美综合网| 性感少妇一区| 亚洲精品日本| 欧美大片免费| 欧美激情aⅴ一区二区三区| 久久香蕉国产线看观看av| 欧美精品一区在线观看| 欧美激情精品久久久六区热门| 欧美在线三区| 一区二区三区日韩欧美精品| 欧美成人国产va精品日本一级| 国产日韩亚洲欧美精品| 国产欧美另类| 亚洲综合精品| 久久精品国产久精国产一老狼| 亚洲精品欧美日韩| 欧美成人资源| 亚洲欧洲一区二区在线观看| 亚洲精品一区二区在线观看| 国产精品视频精品| 日韩一级在线观看| 亚洲欧美一区二区激情| 99在线精品视频| 午夜一区二区三区不卡视频| 欧美一区二区三区视频免费播放| 欧美日韩在线电影| 国产一区二区日韩精品| 亚洲一区中文| 中文av一区二区| 久色成人在线| 亚洲人成网在线播放| 欧美顶级艳妇交换群宴| 欧美国产第二页| 中国成人在线视频| 一区二区三区四区精品| 国产精品你懂的在线| 最新成人在线| 亚洲精品视频免费观看| 欧美日韩一级黄| 午夜在线精品| 久久久久国产精品一区二区| 欧美日精品一区视频| 亚洲综合电影| 欧美一级精品大片| 亚洲精品国产精品国自产在线 | 亚洲欧美一区二区视频| 久久综合色88| 一本色道久久88精品综合| 久久蜜臀精品av| 免播放器亚洲| 国语自产在线不卡| 亚洲一区二区精品在线| 欧美成人激情视频| 欧美国产视频在线| 午夜精品一区二区三区在线视| 午夜精品久久久久久久久| 在线免费日韩片| 在线视频精品一| 最新国产成人在线观看| av成人免费在线| 一区一区视频| 欧美影院成人| 日韩午夜在线视频| 欧美大片在线观看| 午夜精品成人在线| 久久伊伊香蕉| 国产精品美女xx| 麻豆成人综合网| 亚洲欧美99| 亚洲裸体视频| 久久久精品动漫| 欧美综合国产精品久久丁香| 能在线观看的日韩av| 亚洲精品一区中文| 亚洲欧美日韩在线播放| 日韩午夜激情| 免费成年人欧美视频| 久久综合给合久久狠狠狠97色69| 欧美亚洲网站| 亚洲直播在线一区| 欧美欧美天天天天操| 毛片一区二区三区| 国产欧美日韩一区二区三区在线| 日韩香蕉视频| 在线视频亚洲一区| 欧美精品首页| 女人色偷偷aa久久天堂| 国产尤物精品| 校园激情久久| 欧美在线精品一区| 国产日韩欧美a| 性欧美长视频| 久久久久久久久岛国免费| 麻豆九一精品爱看视频在线观看免费 | 国产欧美一区视频| 亚洲伊人久久综合| 午夜欧美精品| 国产欧美69| 欧美一区二区三区免费观看| 亚洲欧美日韩在线一区| 亚洲欧美久久久久一区二区三区| 9色porny自拍视频一区二区| 欧美福利一区二区三区| 亚洲国产精品精华液2区45| 亚洲高清久久| 亚洲欧洲视频在线| 国产精品一级| 欧美激情按摩在线| 日韩视频中午一区| 欧美日韩国产丝袜另类| 欧美亚洲视频一区二区| 国产精品乱人伦中文| 午夜免费电影一区在线观看| 午夜亚洲福利| 影音国产精品| 亚洲午夜在线观看| 伊人久久男人天堂| 六月婷婷久久| 日韩一二三在线视频播| 午夜精品国产精品大乳美女| 国产日韩精品一区观看| 久久久国产一区二区| 亚洲高清激情| 国产在线不卡| 久久亚洲影音av资源网| 亚洲国产精品久久久久秋霞蜜臀| 亚洲美女毛片| 国产亚洲精品一区二555| 免费成人你懂的| 亚洲性线免费观看视频成熟| 久久躁日日躁aaaaxxxx| 一区二区三区高清在线| 国产一级精品aaaaa看| 亚洲一区在线观看视频 | 亚洲精品中文字幕在线| 国产精品www| 美女图片一区二区| 亚洲专区一二三| 亚洲高清视频在线观看| 午夜日韩福利| 日韩视频在线永久播放| 国产一区二区三区在线观看网站| 欧美国产大片| 欧美一区二区大片| 一区二区三区蜜桃网| 欧美高清一区| 久久久久亚洲综合| 香蕉av777xxx色综合一区| 亚洲精选视频在线| 一区二区三区在线高清| 国产精品一区二区三区久久久 | 这里是久久伊人| 亚洲国产成人久久| 国产欧美日韩在线播放| 国产精品扒开腿做爽爽爽视频| 麻豆久久精品| 久久久蜜臀国产一区二区| 亚洲特色特黄|