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

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>
            男人的天堂成人在线| 久久久精品日韩欧美| 亚洲精品综合精品自拍| 午夜激情一区| 日韩网站在线观看| 嫩草影视亚洲| 在线精品视频在线观看高清| 午夜一区二区三区不卡视频| 亚洲久久成人| 欧美日韩一区在线| 一区二区三区欧美亚洲| 亚洲日本电影| 久久精品动漫| 精品动漫3d一区二区三区| 欧美有码视频| 欧美一级视频免费在线观看| 国产精品入口| 午夜精品福利在线| 亚洲综合色网站| 国产日韩欧美日韩| 狂野欧美一区| 欧美大片一区| 一本色道久久综合亚洲91| 亚洲精品国产拍免费91在线| 欧美风情在线| 亚洲一区二区精品在线| 亚洲与欧洲av电影| 狠狠色丁香久久综合频道| 欧美88av| 欧美三级视频在线播放| 欧美一级播放| 久久久99免费视频| 亚洲精品国产系列| 99re6热只有精品免费观看| 国产精品va在线播放| 欧美在线观看一区| 久久这里只有| 亚洲男女毛片无遮挡| 欧美影院在线| 亚洲电影专区| 亚洲伦伦在线| 国产精品你懂的在线欣赏| 久久久久久久精| 免费成人高清| 亚洲一区二区三区中文字幕| 亚洲愉拍自拍另类高清精品| 在线观看日韩精品| 夜夜爽av福利精品导航 | 一区二区在线视频播放| 欧美成人r级一区二区三区| 欧美久久电影| 久久精品一区二区三区不卡牛牛 | 玖玖国产精品视频| 一区二区国产日产| 欧美一区91| 日韩亚洲综合在线| 欧美一区二区三区四区在线| 亚洲人成人99网站| 午夜日韩福利| 一区二区三区精品久久久| 欧美在线你懂的| 在线综合亚洲欧美在线视频| 久久成人亚洲| 亚洲欧美日韩国产综合| 蜜臀av国产精品久久久久| 欧美一区国产一区| 欧美日韩免费在线| 亚洲福利视频免费观看| 国产一区美女| 亚洲欧美日韩一区二区三区在线观看| 亚洲人成人99网站| 久久综合九色综合欧美狠狠| 欧美一区二区精品| 欧美性淫爽ww久久久久无| 亚洲激情在线| 亚洲精品中文字| 免费看黄裸体一级大秀欧美| 久久久美女艺术照精彩视频福利播放| 欧美色图首页| 一区二区三区日韩欧美| 一区二区激情视频| 欧美日韩国语| 最新日韩在线| 亚洲精品在线免费| 欧美国产日韩视频| 欧美好骚综合网| 亚洲国产高清一区| 久久久久国产一区二区三区| 欧美在线免费视频| 国产精品一级久久久| 亚洲无线视频| 午夜精品理论片| 国产精品久久九九| 在线视频精品一区| 亚洲一级在线| 国产精品乱码人人做人人爱| 国产精品99久久不卡二区| 中文欧美日韩| 欧美新色视频| 久久成人av少妇免费| 亚洲欧美日韩在线高清直播| 正在播放亚洲一区| 欧美性久久久| 亚洲一级在线| 欧美专区福利在线| 精品动漫3d一区二区三区| 久久综合久久综合这里只有精品| 欧美大片91| 亚洲精品免费在线| 欧美日韩网址| 亚洲欧美成人网| 久久乐国产精品| 亚洲高清久久久| 欧美伦理91i| 午夜激情综合网| 免费在线成人| 中文av一区特黄| 国产日产精品一区二区三区四区的观看方式| 亚洲欧美日韩国产综合在线| 久久久久久久欧美精品| 91久久国产自产拍夜夜嗨| 欧美精品免费在线观看| 亚洲一区二区三区视频| 久久午夜电影网| 中国成人在线视频| 国内揄拍国内精品久久| 欧美国产一区二区| 午夜精品久久久99热福利| 欧美激情一区二区三区成人| 亚洲一区二区精品在线观看| 激情综合激情| 欧美视频一区| 久久人人97超碰国产公开结果 | 一本色道久久99精品综合 | 亚洲视频专区在线| 噜噜噜躁狠狠躁狠狠精品视频| 一区二区三区|亚洲午夜| 国产午夜精品一区二区三区视频| 久久综合久久综合这里只有精品| 在线视频精品一| 亚洲第一精品福利| 久久精品国产69国产精品亚洲| 亚洲麻豆av| 国内精品久久久久影院色 | 久久久999| 亚洲视频999| 亚洲国产精品一区二区第一页 | 玖玖综合伊人| 亚洲性视频网站| 亚洲激情国产精品| 国产日韩在线看| 国产精品99免费看 | 伊人激情综合| 国产精品国产三级国产普通话三级 | 亚洲一区二区三区在线观看视频| 麻豆精品视频在线| 亚洲欧美日韩另类精品一区二区三区 | 国产一区二区三区在线观看精品| 欧美激情第二页| 久久嫩草精品久久久久| 欧美一区二区三区在线观看视频 | 国产精品www色诱视频| 蜜桃精品一区二区三区| 久久久久国产一区二区三区| 性久久久久久| 亚洲综合色视频| 亚洲女人天堂av| 亚洲一区二区免费| 一区二区三区欧美| 亚洲视频在线观看视频| 一本色道久久综合亚洲精品不卡| 亚洲精品三级| 日韩视频专区| 日韩亚洲不卡在线| 日韩网站在线观看| 99亚洲视频| 中文亚洲视频在线| 亚洲制服av| 午夜视频久久久久久| 欧美一级欧美一级在线播放| 香蕉尹人综合在线观看| 久久av一区二区三区漫画| 久久国产精品电影| 久久综合给合久久狠狠狠97色69| 久久精品一区二区三区不卡牛牛| 欧美一区二区视频在线观看| 欧美有码视频| 老司机午夜精品视频| 免费高清在线一区| 免费亚洲电影| 欧美日本精品| 国产精品实拍| 激情综合中文娱乐网| 亚洲国产精品久久久久秋霞蜜臀| 亚洲理论在线观看| 亚洲男人的天堂在线| 久久精品理论片| 免费亚洲一区| 一本一本大道香蕉久在线精品| 亚洲一区视频在线|