dependency injectionã§ä»»æã®ãã¡ã¤ã«å®è£
ãå©ç¨ã§ããTkrzwã ãããã¤ã¬ã¯ãI/Oã®ãã¡ã¤ã«å®è£
ãå種ã®ãã¼ã¿ãã¼ã¹ã«çµã¿è¾¼ãã ã®ã前回ã¾ã§ã®ç©èªã§ãããTkrzw 0.9.18ããªãªã¼ã¹ããã®ã§ãã試ãããã ããããä»åã¯ãå®æããå®è£
ã®æ§è½ã測å®ããããã¤ã¬ã¯ãI/Oãã©ã®ãããå®ç¨ã«ãªãã®ãç¥ãããã ããããã£ãã·ã¥ã®æ´»ç¨ãéè¦æ¦å¿µã«ãªã£ã¦ããã
å ã«ãå ¨ä½ã®èª¬æãéããç¨èªã®æ´çããã¦ããããã4層ã®ç°ãªããã£ãã·ã¥ãé¢ä¿ãã¦ããã®ã§ãä½ã«ã¤ãã¦èªã£ã¦ããã®ããåºå¥ããã®ãéè¦ã ã
- ããã¤ã¹å ãã£ãã·ã¥ : ããã¤ã¹ã®å é¨ã§æè¿ä½¿ããããããã¯ã®å 容ãã¡ã¢ãªç©ºéã«ä¿æããæ©æ§
- ã·ã¹ãã å ãã£ãã·ã¥ : OSã®ä¸é¨ã§ãããã¡ã¤ã«ã·ã¹ãã ã®ä¸ã§ããã¡ã¤ã«å ã®é£ç¶ããé åï¼4096ãã¤ãï¼ãããã¼ã¸ãã¨ãã¦ã¡ã¢ãªç©ºéã«ä¿æããæ©æ§
- ãã¡ã¤ã«å ãã£ãã·ã¥ : ç§ãå®è£ ãããã¡ã¤ã«ã¯ã©ã¹ã®ä¸ã§ããã¡ã¤ã«å ã®é£ç¶ããé åï¼ä»»æã ã512ãã¤ãã¨ã1024ãã¤ãã¨ãï¼ãããã¼ã¸ãã¨ãã¦ã¡ã¢ãªç©ºéã«ä¿æããæ©æ§
- ãã¼ã¿ãã¼ã¹å ãã£ãã·ã¥ : ç§ãå®è£ ãããã¼ã¿ãã¼ã¹ã¯ã©ã¹ï¼B+æ¨ï¼ã®ä¸ã§ãè«ççã«é¢é£ããã¬ã³ã¼ããããã¼ã¸ãã¨ãã¦ã¡ã¢ãªç©ºéã«ä¿æããæ©æ§
ä»åã®å®é¨ã§æ±ããã¼ã¿ãã¼ã¹ã¨ã¢ã¯ã»ã¹ãã¿ã¼ã³ãæ³å®ããã
- HashDBMï¼ããã·ã¥ãã¼ãã«ï¼ã®æ´æ°
- HashDBMï¼ããã·ã¥ãã¼ãã«ï¼ã®æ¤ç´¢
- TreeDBMï¼B+æ¨ï¼ã®æ´æ°
- TreeDBMï¼B+æ¨ï¼ã®æ¤ç´¢
- SkipDBMï¼ã¹ããããªã¹ãï¼ã®æ´æ°
- SkipDBMï¼ã¹ããããªã¹ãï¼ã®æ¤ç´¢
åæä½ã100ä¸åãã¤ãããã¨ã«ããããæ¯åã®æä½ã§1ãã100ä¸ã®æ°å¤ããã©ã³ãã ã«ãã¼ã決ããã¨ã63ä¸ä»¶ãã¦ãã¼ã¯ã«ãªãã27ä¸ä»¶ã¯éè¤ãããæ¢åã®ãã¼ã¨éè¤ããå ´åã«ã¯ä¸æ¸ãããããã£ã¦ãæçµçã«ã¯63ä¸ä»¶ã®ãã¼ã¿ãã¼ã¹ãæ§ç¯ãããããã¼ãã©ã³ãã ãª8ãã¤ãã®æååã§ãå¤ã¯100ãã¤ãã®é©å½ãªæååã«ãããåããã¦108ãã¤ããæ£å³ã®ãã¼ã¿ã«ãªããããã¼ã¿ãã¼ã¹ã®ç¨®é¡ã«ãããããããªã³ãï¼ç®¡çç¨ãã¼ã¿ï¼ãä»ãã®ã§ãåã¬ã³ã¼ãã®ãµã¤ãºã¯120ãã¤ãå¼±ã«ãªãã
ãã¡ã¤ã«ã®å®è£ ã¯ä»¥ä¸ã®ãã®ãæ³å®ããã
- mmap : MemoryMapParallelFileï¼ã¡ã¢ãªãããI/Oï¼
- pos : PositionalParallelFileï¼é常I/Oï¼
- pos-block : PositionalParallelFile+Cacheï¼ãããã¯I/Oï¼
- pos-block-cache : PositionalParallelFile+Cacheï¼ãããã¯I/Oã¨ãã£ãã·ã¥ï¼
- pos-direct : PositionalParallelFile+DirectIOï¼ãã¤ã¬ã¯ãI/Oï¼
- pos-direct-cache : PositionalParallelFile+DirectIO+Cacheï¼ãã¤ã¬ã¯ãI/Oã¨ãã£ãã·ã¥ï¼
ã¾ãããã¤ãç¨èªãåºã¦ããã®ã§ãæ´çããã
- ã¡ã¢ãªãããI/O : mmapã§ç¢ºä¿ä»®æ³ã¡ã¢ãªä¸ã®é åãç´æ¥èªã¿æ¸ãããããã®ä»®æ³ã¡ã¢ãªä¸ã®é åã¯ãã¡ã¤ã«ã·ã¹ãã ã®è²¬ä»»ã§ãã¡ã¤ã«ã®å 容ã«åæãããã
- é常I/O : preadããã³pwriteã使ã£ãé常ã®ãã¡ã¤ã«å ¥åºåããã¡ã¤ã«å ã®çµ¶å¯¾çãªä½ç½®ãæå®ãã¦ã©ã³ãã ã¢ã¯ã»ã¹ã§ãã¦ä¾¿å©ãèªã¿æ¸ãã®å 容ã¯ãã¡ã¤ã«ã·ã¹ãã ã®è²¬ä»»ã§ãã¡ã¤ã«ã®å 容ã«åæãããã
- ãããã¯I/O : preadããã³pwriteã使ã£ããã¡ã¤ã«å ¥åºåã ããèªã¿æ¸ãã®ä½ç½®ããã¼ã¿ãµã¤ãºããããã¯ãµã¤ãºã®åæ°ã«ãªãå¶ç´ããã¡ã¤ã«ãªãã¸ã§ã¯ãã®è²¬ä»»ã§è¨ãããã®ãèªã¿æ¸ãã®å 容ã¯ãã¡ã¤ã«ã·ã¹ãã ã®è²¬ä»»ã§ãã¡ã¤ã«ã®å 容ã«åæãããã
- ãã¤ã¬ã¯ãI/O : ãããã¯I/Oãåæã¨ãã¦ããã¡ã¤ã«ã«O_SYNCãã©ã°ãã¤ãã¦éããã¨ã§ããã¡ã¤ã«ã·ã¹ãã ãä»ããã«ããã¤ã¹ãã©ã¤ãã¨ã®éã§ç´æ¥çã«å ¥åºåãè¡ãã
ä»åã®å®é¨ã®ç®çã¯ãã¤ã¬ã¯ãI/Oã®æ§è½ãç¥ããã¨ã§ãããä»ã®3ã¤ã¯æ¯è¼å¯¾è±¡ã¨ãã¦å®é¨ã«å«ããããã¤ã¬ã¯ãI/Oã使ããªããã ã®ãããã¯I/Oã¯å®éã®ã¦ã¼ã¹ã±ã¼ã¹ã§ã¯ç¡æå³ãªè¨å®ã ããã¦ã¼ã¶ããã»ã¹å ã®æåããã¤ã¬ã¯ãI/Oã¨å ¨ãä¸ç·ã«ãªãã®ã§ãä¸å±¤ã®ãã¤ã¬ã¯ãI/Oæ©æ§ã®ãªã¼ãã¼ããããç¥ãããã®æ¯è¼å¯¾è±¡ã¨ãã¦æé©ãªã®ã ã
ã¬ã³ã¼ãæ°ã63ä¸åã ã¨ã¡ã¢ãªã«ä¹ãåãã®ã§ãmmapãæãé«éã«ãªããé常I/Oãåãçç±ã§é«éã«ãªããã·ã¹ãã ã³ã¼ã«ã®ãªã¼ãã¼ããããä¼´ãããã·ã¹ãã å ãã£ãã·ã¥ãæ´»ç¨ãããããã ããããã¯I/Oã¯é常I/Oã«ç¡é§ãªå¶ç´ãã¤ããã ããªã®ã§ããã¡ã¤ã«å ãã£ãã·ã¥ã使ããªãå ´åãåã«ã·ã¹ãã ã³ã¼ã«ãå¼ã¶åæ°ãå¢ãã¦è»¢éãããã¼ã¿éãå¢ããã ããªã®ã§ãé ããªãããã¤ã¬ã¯ãI/Oã¯ãããã¯I/Oã¨åãæåã ãããã¡ã¤ã«ã·ã¹ãã ã®ã¡ã¢ãªã使ããªãã§æ¯åããã¤ã¹ãã©ã¤ãã®å¿çãå¾ ã¤ãããæ¡å¤ãã«é ããªãããããã¯I/Oã¨ãã¤ã¬ã¯ãI/Oã«ãããããã¡ã¤ã«å ãã£ãã·ã¥ãã¤ããã¨ãã·ã¹ãã ã³ã¼ã«ãå¼ã³åºãã¦å ¥åºåãè¡ãåæ°ãæ¸ããã¾ãã·ã¹ãã å´ã§ã®å¦çãå¹çåããã®ã§ããã£ãã·ã¥ãããããããªãã°ãæ§è½ãæ¹åããããã¡ã¤ã«å ãã£ãã·ã¥ã®å°å ¥ã«ãã£ã¦ã©ã®ç¨åº¦æ§è½ãæ¹åããã®ãã¨ããã®ããä»åã®è¦ã©ããã ã
ãã¡ã¤ã«å ãã£ãã·ã¥ã®æ§é ã¯ååè¿°ã¹ãç·å½¢ãªã¹ãããå¤æ´ãã¦ãåæ¹åé£çµãªã¹ãã¨ããã·ã¥è¡¨ãçµã¿åãããLRUåé¤æ©è½ä»ãã®ãã®ã«å¤ãããããã«ãã£ã¦ãã£ãã·ã¥ãããã¼ã¸ã®æ°ã«é¢ãããä¸å®ã®ãªã¼ãã¼ãããã§åä½ããããã«ãªã£ããã¨ã¯ãã256ãã¼ã¸ãããã£ãã·ã¥ããªãã®ã§ã63ä¸ã¬ã³ã¼ãã®è¦æ¨¡ããèããã¨ãã»ãã®ä¸é¨ã®ãã¼ã¿ãããã¡ã¤ã«å ãã£ãã·ã¥ã«ã¯ä¹ããªããè¨å®ã§å¢ããã®ã¯ç°¡åã ããæ¢ãã¦å®¹éãæãã¦ãå±ææ§ãé常ã«é«ãå ´åã®ã¿ã«ããæå¹ã«åããªãããã«ãã¦ããã
æ¤è¨¼ã¯èªåã®ãã¼ãPCã®Linuxä¸ã§è¡ããçä½ã¯Dellã®XPS 13ã§ã/proc/cpuinfoã«ããã¨ãCPUã¯Intel Core i7ã®1.8Ghzã§ã8ã³ã¢ããããRAMã¯16GBæè¼ãã¹ãã¬ã¼ã¸ã¯NVMeæ¥ç¶ã®SSDã§ãhdparmã«ããã¨ããã¼ãã¦ã§ã¢ã®ãã£ãã·ã¥ããã§16274MB/secã§ããã£ãã·ã¥ãªãã§637MB/secã®æ§è½ãããã転éã®ã¹ã«ã¼ãããã§ãªãã©ã³ãã ã¢ã¯ã»ã¹ã®è½åã®æ¹ã大äºãªã®ã§ãã®æ°å¤ã¯ãã¾ãå½ã¦ã«ãªããªããã©ãã
HashDBMã®å®é¨ãè¡ããä¸è¿°ã®éããã¬ã³ã¼ããµã¤ãºã¯120ãã¤ããããã«ãªãã®ã§ã128ãã¤ãã§ã¬ã³ã¼ããã¢ã©ã¤ã³ã¡ã³ãããããã±ããæ°ã¯ã¬ã³ã¼ãæ°ã®2åã«ããã®ã§ãããã·ã¥å¤ã®è¡çªçã¯30%ã¨ãã«æããããã ããããã®ã·ããªãªãå®ç¾ããã«ã¯ããããªã³ãã³ããå®è¡ããã°ããã
$ ./tkrzw_dbm_perf sequence --path casket.tkh --file mmap-para --random_seed -1 --random_key --size 100 --buckets 2000000 --align_pow 7 --iter 1000000 $ ./tkrzw_dbm_perf sequence --path casket.tkh --file pos-para --random_seed -1 --random_key --size 100 --buckets 2000000 --align_pow 7 --iter 1000000 --cache_buckets $ ./tkrzw_dbm_perf sequence --path casket.tkh --file pos-para --random_seed -1 --random_key --size 100 --buckets 2000000 --align_pow 7 --iter 1000000 --cache_buckets --block_size 512 --padding $ ./tkrzw_dbm_perf sequence --path casket.tkh --file pos-para --random_seed -1 --random_key --size 100 --buckets 2000000 --align_pow 7 --iter 1000000 --cache_buckets --block_size 512 --padding --pagecache $ ./tkrzw_dbm_perf sequence --path casket.tkh --file pos-para --random_seed -1 --random_key --size 100 --buckets 2000000 --align_pow 7 --iter 1000000 --cache_buckets --block_size 512 --direct_io --padding $ ./tkrzw_dbm_perf sequence --path casket.tkh --file pos-para --random_seed -1 --random_key --size 100 --buckets 2000000 --align_pow 7 --iter 1000000 --cache_buckets --block_size 512 --direct_io --padding --pagecache
ã¡ã¢ãªãããI/Oã§ã¯ãåºæ¬çã«ãã¼ã¿ãäºåèªã¿è¾¼ã¿ã¨é 延æ¸ãè¾¼ã¿ã§å¦çãããã®ã§ãã¹ãã¬ã¼ã¸ããã¤ã¹ã«ã¢ã¯ã»ã¹ããåæ°ã¯é常ã«å°ãªããã¡ã¢ãªã«ä¹ãéãã®è¦æ¨¡ã«ããã¦ã¯æéã®ã¢ã¼ãã§ãããé常I/Oã§ã¯ãååã®è¿°ã¹ããã±ãããã£ã·ã¥ãæå¹ã«ããã®ã§ãããã·ã¥å¤ãè¡çªããªãéããåã¬ã³ã¼ãã®æä½ã§å®éã®ãã¡ã¤ã«å ¥åºåã¯1åã§æ¸ãããã ããèªã¿æ¸ãããã¬ã³ã¼ããå±ãã4096ãã¤ãã®é åã¯ãã¼ã¸ã¨ãã¦ã·ã¹ãã å ãã£ãã·ã¥ã«ä¹ããããã®ã§ãããã¤ã¹ã¨ã®ããåãã®åæ°ã¯ããã®è¦æ¨¡ã§ã¯ãã¡ã¢ãªãããI/Oã¨å¤§å·®ãªãã¯ãã ããããã¯I/Oããã¤ã¬ã¯ãI/Oã§ãããã¡ã¤ã«å ãã£ãã·ã¥ã®ä¸ç¨®ã§ãããã±ãããã£ãã·ã¥ãæå¹ã«ããã®ã§ãå®éã®ãã¡ã¤ã«å ¥åºåã¯ãããã·ã¥å¤ãè¡çªããªãéããåã¬ã³ã¼ãã®æä½ã§1åã§æ¸ãããã ããåã¬ã³ã¼ãã®èªã¿æ¸ãå¿ è¦ãªãã¡ã¤ã«ã¢ã¯ã»ã¹ã«ã¤ãã¦ã¯ãã詳細ã«æ¤è¨ããå¿ è¦ãããããã¡ã¤ã«å ãã£ãã·ã¥ã使ããªãå ´åãæä½ã®åæ°ã®åã ãããã¤ã¹ãå©ããã¨ã«ãªãããã®è¦æ¨¡ã ã¨ããã¤ã¹å ãã£ãã·ã¥ããããªãã«å¹ãã¯ãã ããã©ã®ç¨åº¦å½¹ã«ç«ã¤ãã¯å®é¨ãã¦ã¿ãªãã¨ããããªãã
çµæã¯ä»¥ä¸ã®éãã ãåä½ã¯QPSï¼ã¯ã¨ãªæ¯ç§ï¼ã
set | get | |
mmap | 1,118,605 | 1,261,031 |
pos | 490,103 | 793,348 |
pos-block | 324,885 | 728,326 |
pos-block-cache | 445,521 | 610,674 |
pos-direct | 5,323 | 12,769 |
pos-direct-cache | 15,543 | 12,500 |
ã¡ã¢ãªãããI/Oã®ã¹ã«ã¼ãããã100ä¸QPSãè¶ ããã®ã¯ãã¡ã¢ãªã®èªã¿æ¸ãããã¦ããã ããªã®ã§ãå½ç¶ã¨ãè¨ããããããåºæºã¨ãã¦ãä»ã®è¨å®ã®çµæã¯å ¨ã¦ãã¡ã¤ã«ã¯ã©ã¹ã®å±¤ã¨ããããä¸å±¤ã®ãªã¼ãã¼ããããåæ ãã¦ããã¨ã¿ãªãã¦ãããé常I/Oã«ããã¨ãããã ãã§ã¹ã«ã¼ããããåæ¸ãããã·ã¹ãã ã³ã¼ã«ãå¼ã¶ã³ã¹ãã ããããããã¯I/Oã«ããã¨ãããã«æ§è½ãè½ã¡ããããã«ãã¡ã¤ã«å ãã£ãã·ã¥ãã¤ããã¨ãSetã®æ§è½ã ããå°ãæ¹åãããããã¯Setã®éã«ã ããã¡ã¤ã«å ãã£ãã·ã¥ããããªãã«å¹ããã¨ã示åãã¦ãããã§ã¯ãªãGetã®æ§è½ãä¸ããã®ãã¨ããã¨ããã¡ã¤ã«å ãã£ãã·ã¥ã®æ¤ç´¢ã¨æ´æ°ã«ãããã³ã¹ããåå ã§ããã
äºæ³éãããã¤ã¬ã¯ãI/Oã¯é ããæ¡éãã©ãããã3æ¡éãã«é ããããã¦ããã¡ã¤ã«å ãã£ãã·ã¥ãã¤ããã¨Setã®æ§è½ãããªããã·ã«ãªããã¨ãããã£ããããããèªåã®ãã£ãã·ã¥æ©è½ãå®è£ ããç²æãããã¨ãããã®ã ããããã§ãé ãããã¯é ãããããããã®ãSet = 15543 QPSãGet = 12500 QPS ã¨ããçµæããããæ®éã®å®ãSSDã使ã£ã¦ãå±ææ§ãå©ç¨ãããã¡ã¤ã«ã·ã¹ãã ã®ãã£ãã·ã¥ã«ããæ§è½åä¸ãä¸åç¡é§ã«ãªãè¦æ¨¡ã§ã®ããã¼ã¿ãã¼ã¹ã®çã®ã¹ã«ã¼ãããã§ãããããããæ©ãã¢ã«ã´ãªãºã ãã½ããã¦ã§ã¢ãåå¨ããªãã®ã ããã¼ãã¦ã§ã¢ã®æ§è½ã ããã¹ã«ã¼ãããã決ããä¸çã§ããã
ã¨ããã§ãå±ææ§ãä½ãã¯ãã®ããã·ã¥ãã¼ã¿ãã¼ã¹ã®æä½ã§ãªãæ´æ°å¦çã ãããã»ã¹å ã®ãã£ãã·ã¥ãå¹ãã®ã ããããã¢ã©ã¤ã³ã¡ã³ãã128ã§ããããã¯ãµã¤ãºã512ãã¤ãã§ããã°ã1ãããã¯ã«4ã¬ã³ã¼ããæ ¼ç´ãããã ãã£ã¦ã63ä¸ã¬ã³ã¼ãã¯16ä¸ãããã¯ã«æ ¼ç´ããããä»åã®å®è£ ã§ã¯ç´å256ãã¼ã¸ãããã£ãã·ã¥ããªãã®ã§ãã©ã³ãã ãªãããã¯ã«ã¢ã¯ã»ã¹ããã°ããã£ãã·ã¥ã®ãããçã¯ã»ã¼ã¼ãã«ãªãã¯ãã ãããããå®éã«ã¯å¤å°ã®å±ææ§ãããã
æ´æ°å¦çã§ä½ãèµ·ããã®ããèãããã¾ãããã¼ããç®åºããããã·ã¥å¤ã«å¯¾å¿ãããã±ããã調ã¹ã¦è©²å½ã®ã¬ã³ã¼ãã®æç¡ãç¥ããå ¨ã¦ã®ãã±ããã¯ãªã³ã¡ã¢ãªãªã®ã§ããã®æç¹ã§ã¯ãã¡ã¤ã«ã¢ã¯ã»ã¹ã¯ãªãããã¼ãéè¤ããã¬ã³ã¼ããåå¨ãã27ä¸åã¯æ¢åã¬ã³ã¼ãã®é åã®èªã¿åºããè¡ããèªã¿åºããé åã¯ããã«æ°ããã¬ã³ã¼ãã®ãã¼ã¿ã§æ¸ãæããããããã®æä½ã«ã¯ãã£ãã·ã¥ãå¹ããã¬ã³ã¼ããµã¤ãºã¯128ãã¤ããªã®ã§ããã®ã¬ã³ã¼ãã®ãã¼ã¿ãæ¸ãæããéã«ã¯ãå ã«åããããã¯ã®æ¢åãã¼ã¿ãèªã¿è¾¼ãã§ã該å½ã®ã¬ã³ã¼ãã®128ãã¤ããæ¸ãæãã¦ããã512ãã¤ããæ¸ãæ»ãããã£ã¦ãæ¢åã¬ã³ã¼ãã®ä¸æ¸ãã«ã¯ããã£ãã·ã¥ãå¹ããªãå ´åãèªã¿è¾¼ã¿2åã¨æ¸ãè¾¼ã¿1åãçºçããããã£ãã·ã¥ãå¹ãå ´åã«ã¯ãå ã«èªã¿è¾¼ãã ãã¼ã¿ããã®ã¾ã¾ä½¿ãã®ã§ãèªã¿è¾¼ã¿1åã¨æ¸ãè¾¼ã¿1åã«ãªããæ¢åã¬ã³ã¼ãããªã63ä¸ã¬ã³ã¼ãã§ã¯ããã¡ã¤ã«ã®æ«å°¾ã«ã¬ã³ã¼ããæ¸ã足ããããã§æ«å°¾ã¸ã®å±ææ§ãèµ·ããããã£ãã·ã¥ãå¹ããªãå ´åãåã¬ã³ã¼ãã§èªã¿è¾¼ã¿2åã¨æ¸ãè¾¼ã¿1åãçºçããããã£ãã·ã¥ãæå¹ãªå ´åã4ã¬ã³ã¼ãæ¯ã«ã¾ã¨ãã¦æ¸ãè¾¼ã¿1åãçºçããã ãã§ããããã¡ã¤ã«å ãã£ãã·ã¥ä»ããã¤ã¬ã¯ãI/Oã®ã±ã¼ã¹ã§å®éã«ãã°ãåã£ãã¨ããããã¼ã¸ã®èªã¿è¾¼ã¿è¦æ±ã152ä¸åã§ããã®ãã¡84ä¸åã¯æ¢åãã¼ã¸ã®åå©ç¨ã«æåãã¦ããããã¤ã¬ã¯ãI/Oã®èªã¿è¾¼ã¿è¦æ±æ°ã¯66ä¸åãæ¸ãè¾¼ã¿è¦æ±æ°ã¯54ä¸åã§ãã£ããçµè«ã¨ãã¦ãæ´æ°å¦çã«ããã¦ã¯ãã¡ã¤ã«å±¤ã®ãã£ãã·ã¥ã¯ããããå½¹ç«ã¤ã¨ãããã¨ã確ãããããã
æ¤ç´¢å¦çã§ä½ãèµ·ããã®ããèãããã¾ãããã¼ããç®åºããããã·ã¥å¤ã«å¯¾å¿ãããã±ããã調ã¹ã¦è©²å½ã®ã¬ã³ã¼ãã®æç¡ãç¥ããå ¨ã¦ã®ãã±ããã¯ãªã³ã¡ã¢ãªãªã®ã§ããã®æç¹ã§ã¯ãã¡ã¤ã«ã¢ã¯ã»ã¹ã¯ãªãã該å½ã®ã¬ã³ã¼ããåå¨ãã確çã¯63%ã§ãããã¤ã¾ã63ä¸åãããã¯ãã±ããã«æ¸ãè¾¼ã¾ãããªãã»ããã®ãããã¯ã®èªã¿è¾¼ã¿ãè¡ããããã·ã¥å¤ãè¡çªããå ´åã«ã¯èªã¿è¾¼ã¿ã®åæ°ãå¢ããããã¡ã¤ã«å ãã£ãã·ã¥ä»ããã¤ã¬ã¯ãI/Oã®ã±ã¼ã¹ã§å®éã«ãã°ãåã£ãã¨ããããã¼ã¸ã®èªã¿è¾¼ã¿è¦æ±ã84ä¸åã§ããã®ãã¡512åã ãããæ¢åãã¼ã¸ã®åå©ç¨ã«ã¯æåãã¦ããªãã£ããå½ç¶ãªããããã¤ã¬ã¯ãI/Oã®èªã¿è¾¼ã¿è¦æ±æ°ã¯84ä¸åãæ¸ãè¾¼ã¿è¦æ±æ°ã¯0åã§ãã£ããçµè«ã¨ãã¦ãæ¤ç´¢å¦çã«ããã¦ã¯ãã¡ã¤ã«å±¤ã®ãã£ãã·ã¥ã¯å ¨ãå½¹ã«ç«ããªãã¨ãããã¨ã確ãããããã
TreeDBMã®å®é¨ãè¡ããB+æ¨ã®å®è£ ã¯ãããèªä½ããã¼ã¿ãã¼ã¹å ãã£ãã·ã¥ã¨ãã¦æ©è½ãããã¬ã³ã¼ããè©°ãè¾¼ãã ãã¼ã¸ã®ãµã¤ãºã4060ãã¤ããè¶ ããå ´åã«ãã¼ã¸ã®åå²ãè¡ãããããã«ãã¥ã¼ãã³ã°ããããæå¾ å¤ã¨ãã¦2015ãã¤ããã4060ãã¤ãã¾ã§ã®éã®ãµã¤ãºã®ãã¼ã¸ãåä½ã¨ãã¦ãã¼ã¸ã®èªã¿æ¸ããè¡ããããã¢ã©ã¤ã³ã¡ã³ãã¯ããã©ã«ãã®1024ãã¤ããªã®ã§ããããã¯I/Oã«ç±æ¥ããç¡é§ã¯çºçãå¾ãªãããã¢ã©ã¤ã³ã¡ã³ãã®ããã®ããã£ã³ã°ã«ãã空éå¹çã¨æéå¹çã®ç¡é§ã¯ããããã®è¨å®ã ã¨1ãã¼ã¸ã®æ大ã¬ã³ã¼ãæ°ã¯31件ãªã®ã§ã63ä¸ã¬ã³ã¼ãã¯å°ãªãã¨ã2ä¸ãã¼ã¸ã«åå²ããã¦ä¿åããããå®éã«ã¯ãã®2åãããã«ãªãã ãããããããå ¨é¨ãã£ãã·ã¥ã«ä¹ãã¦ãã¾ãã¨å¤§è¦æ¨¡éç¨æã®æåãåç¾ã§ããªãã®ã§ããã£ãã·ã¥ãããã¼ã¸æ°ã1000ãã¼ã¸ã«æããããã®ã·ããªãªã¯ããããªã³ãã³ãã«ãªãã
$ ./tkrzw_dbm_perf sequence --path casket.tkt --file mmap-para --random_seed -1 --random_key --size 100 --max_page_size 4060 --max_cached_pages 1000 --iter 1000000 $ ./tkrzw_dbm_perf sequence --path casket.tkt --file pos-para --random_seed -1 --random_key --size 100 --max_page_size 4060 --max_cached_pages 1000 --iter 1000000 $ ./tkrzw_dbm_perf sequence --path casket.tkt --file pos-para --random_seed -1 --random_key --size 100 --max_page_size 4060 --max_cached_pages 1000 --iter 1000000 --cache_buckets --block_size 1024 --padding $ ./tkrzw_dbm_perf sequence --path casket.tkt --file pos-para --random_seed -1 --random_key --size 100 --max_page_size 4060 --max_cached_pages 1000 --iter 1000000 --cache_buckets --block_size 1024 --padding --pagecache $ ./tkrzw_dbm_perf sequence --path casket.tkt --file pos-para --random_seed -1 --random_key --size 100 --max_page_size 4060 --max_cached_pages 1000 --iter 1000000 --cache_buckets --block_size 1024 --direct_io --padding $ ./tkrzw_dbm_perf sequence --path casket.tkt --file pos-para --random_seed -1 --random_key --size 100 --max_page_size 4060 --max_cached_pages 1000 --iter 1000000 --cache_buckets --block_size 1024 --direct_io --padding --pagecache
ã¡ã¢ãªãããI/Oãé«éãªã®ã¯å½ç¶ã ããæ¯åã®ãã¡ã¤ã«å ¥åºåã§ä½¿ããããã¼ã¿ã大ããåãæ§è½ã®å·®ãå°ãããªãã¯ãã ããã¤ã¬ã¯ãI/Oã¨ãã®ä»ã®æ¹å¼ã®å·®ãç¸å¯¾çã«ã¯å°ãããªãã ãããããã¦ããããã®æ¹å¼ã§ãããã¡ã¤ã«å ãã£ãã·ã¥ã¯æå³ããªãã ãããæéã®ãªã½ã¼ã¹ã§ããã¡ã¢ãªã¯ãã¡ã¤ã«å ãã£ãã·ã¥ã§ãªããã¼ã¿ãã¼ã¹å ãã£ãã·ã¥ã«å²ãå½ã¦ãæ¹ãããã
ä»åã®ã·ããªãªã§ã¯ããã¼ã¿ãã¼ã¹å ãã£ãã·ã¥ã«ä¹ãããã¼ãæ°ãæãã¦ããã®ã§ãçµæçã«å é¨ãã¼ããããã£ãã·ã¥ãããªãããã£ã¦ãæ¯åã®ã¢ã¯ã»ã¹ã§æ«ç«¯ãã¼ãã®ãã¼ã¿ã®ããã®ãã¡ã¤ã«ã¢ã¯ã»ã¹ãçºçããããã®éã«æå¾ å¤ã¨ãã¦3KBç¨åº¦ã®å ¥åºåãçºçãããåºãç¯å²ã«æ¸¡ã£ã¦æ¢åé åãä½åº¦ãæ¸ãæããã®ã§ããã¡ã¤ã«å ãã£ãã·ã¥ã¯å¹ããªãã¯ãã ã100ä¸åã®setããã¦63ä¸ã¬ã³ã¼ããä¿åãããç¶æ ã§ã¯ããã°ã«ããã¨ãå é¨ãã¼ãã®æ°ã¯258åãæ«ç«¯ãã¼ãã®æ°ã¯50354åã«ãªãããã ãã¤ã¾ããæ«ç«¯ãã¼ãã®åãã¼ã¸ã«ã¯å¹³å12.5åãããã®ã¬ã³ã¼ããæ ¼ç´ãããã·ãªã¢ã©ã¤ãºããã¨1600ãã¤ããå°ãè¶ ãããããã®ãã¼ã¿ã«ãªããããã1024ã«ã¢ã©ã¤ã³ã¡ã³ãããã®ã§ãã»ã¨ãã©ã®æ«ç«¯ãã¼ãã¯2048ãã¤ãã®ãã¼ã¿ã¨ãã¦ãã¡ã¤ã«ã«æ ¼ç´ãããã
çµæã¯ä»¥ä¸ã®éãã ãåä½ã¯QPSï¼ã¯ã¨ãªæ¯ç§ï¼ã
set | get | |
mmap | 123,094 | 178,123 |
pos | 73805 | 126,449 |
pos-block | 77,207 | 132,956 |
pos-block-cache | 47,112 | 97,567 |
pos-direct | 1,895 | 4,140 |
pos-direct-cache | 1,326 | 2,657 |
ã¡ã¢ãªãããI/Oãæéã ããé常I/Oããããã¯I/Oãããããé å¼µã£ã¦ããããã¼ã¿ãã¼ã¹å ãã£ãã·ã¥ã®ãã¼ã¸ã®ã¢ã©ã¤ã³ã¡ã³ãã¨ãã¡ã¤ã«ã®ãããã¯ãµã¤ãºãåããªã®ã§ãé常I/Oã¨ãããã¯I/Oã®åä½ã¯ã»ã¼åãã«ãªãããã£ã¦ããã®äºã¤ã®æ§è½ãã»ã¼åããªã®ã¯å½ç¶ã ãããã¦ãäºæ³ããéãããã¡ã¤ã«å ãã£ãã·ã¥ã¯å ¨ãæ§è½åä¸ã«å¯ä¸ããªãããããæ§è½ãå£åããã®ã§ã使ãæå³ãå ¨ãç¡ãã
ããã§ãããã¤ã¬ã¯ãI/Oã¯é ããããã¯ã¨ããããããã·ã¥è¡¨ã¨B+ã®çµæãæ°åããå¤ãããªãã®ãé¢ç½ãã¨ããã ãè¨ç®éã§èããã¨ããã·ã¥è¡¨ã®O(1)ã«å¯¾ãã¦B+æ¨ã®O(log N)ã¯å¤§ããå£ãã¯ãã ããå®éç¨ä¸ã®æ§è½ã¯ãªã¼ãã¼ä¸ã¯å¤ãããªãããªããªãã大è¦æ¨¡ãªãã¼ã¿ãã¼ã¹ã§ãB+æ¨ã®æ«ç«¯ãã¼ã以å¤ã®ãã¼ãã¯ãã¼ã¿ãã¼ã¹å ãã£ãã·ã¥ã«ä¹ãã®ã§ãæ¯åã®æ¤ç´¢ãæ´æ°ã®æä½ã«ããããã¡ã¤ã«ã¢ã¯ã»ã¹ã¯1ç®æã§æ¸ãããã ãã¤ã¾ããã¡ã¤ã«å±¤ã¸ã®ã¢ã¯ã»ã¹ãã¿ã¼ã³ã¯å®ã¯ããã·ã¥è¡¨ã¨ã»ã¼åãã§ããã¼ã¸åä½ã§å ¥åºåãè¡ãåã ã転ééãå¢ããã¨ãããç°ãªãã ãã ãB+æ¨ãèãã人ã¯å大ã ã
æ´æ°å¦çã§ä½ãèµ·ããã®ããèãããæ¢ã«è¿°ã¹ãããã«ãä¸éãã¼ãã®ãã¼ã¿ã¯ã¡ã¢ãªä¸ã«ããã®ã§ããã®æ¨æ§é ã辿ã£ã¦æ«ç«¯ã®ãã¼ããç¹å®ãããããã¦ããããã¡ã¤ã«ããèªã¿åºããèªã¿åºãã¯ãã¡ã¤ã«æä½1åã§æ¸ã¿ãã¢ã©ã¤ã³ã¡ã³ãããããã¼ã¸ãã¼ã¿ãèªã¿åºãã ãã ãæ´æ°ãããæ«ç«¯ãã¼ãã¯é 延æ¸ãè¾¼ã¿ã§å¦çããããããã¼ã¿ãã¼ã¹å ãã£ãã·ã¥ã®ãããçãä½ããã¨ãããããªãçæéã§ãã¡ã¤ã«ã«æ¸ãæ»ããããä¸å®æ°ã®ã¬ã³ã¼ãã追å ããã¦æ«ç«¯ãã¼ããåå²ãããå ´åãæ°ãã«ä½ããããã¼ãã¨ãã®ä¸ä½ã®ä¸éãã¼ãã«ããã©ã°ãç«ã¦ãããé 延æ¸ãè¾¼ã¿ã®å¯¾è±¡ã¨ãªããã¨ã¯ãããã¼ã¸åå²ã®é »åº¦ã¯ã¬ã³ã¼ãåä½ã®æ´æ°åæ°ãããããªãå°ãªããããã·ã¥ãã¼ã¿ãã¼ã¹ã®å ´åã¨åãããã«ãæ°è¦ã®ãã¼ãããã¡ã¤ã«ã«æ¸ãè¾¼ãéã«ã¯ããã¡ã¤ã«ã®æ«å°¾ã®ãããã¯ã«æä½ãéä¸ããããã¡ã¤ã«å ãã£ãã·ã¥ä»ããã¤ã¬ã¯ãI/Oã®ã±ã¼ã¹ã§å®éã«ãã°ãåã£ãã¨ããããã¼ã¸ã®èªã¿è¾¼ã¿è¦æ±ã1164ä¸åã§ããã®ãã¡492ä¸åãæ¢åãã¼ã¸ã®åå©ç¨ã«æåãã¦ããããã¤ã¬ã¯ãI/Oã®èªã¿è¾¼ã¿è¦æ±æ°ã¯377ä¸åãæ¸ãè¾¼ã¿è¦æ±æ°ã¯95ä¸åã§ãã£ãããã£ãã·ã¥ã®ãããçã42%ãããã®ã¯æå¤ã ããããã¯åã«ãã¼ã¿ãã¼ã¹å±¤ã®å®è£ ã®é½åã«èµ·å ãããã®ã§ããããããã¼ãã®ãã¼ã¿ãèªã¿è¾¼ãã¨ãã¦ããã®ãã¼ã¿ã®ãµã¤ãºãäºåã«ã¯ããããªãã®ã§ããã¼ãã®ãããé¨åã ããå ã«èªã¿è¾¼ãã§ãµã¤ãºã調ã¹ã¦ããããã®ãã¼ãå ¨ä½ãèªã¿è¾¼ãã¨ããå®è£ ã«ãªã£ã¦ãããã¤ã¾ãåãé åãäºåº¦èªã¿ãããã¨ãããããã£ãã·ã¥ãæå¹ã®å ´åãäºåº¦ç®ã®èªã¿è¾¼ã¿ã®éã«ã¯ãã£ãã·ã¥ãå¹ãã®ã§ãè¦ããä¸å±ææ§ãããããã«è¦ãã¦ãã¾ãããã®æåã«é¢ãã¦ã¯ãããæ¹åãããã
æ¤ç´¢å¦çã§ä½ãèµ·ããã®ããèãããæ´æ°å¦çã¨å ¨ãåãããã«æä½å¯¾è±¡ã®æ«ç«¯ãã¼ããç¹å®ãã¦èªã¿è¾¼ã¿ã該å½ã®ã¬ã³ã¼ããããã«ããã°ãããå¦çãããã©ã³ãã ã¢ã¯ã»ã¹ã®å ´åãå±ææ§ã®æ¬ å¦ã«ãããã»ã¼æ¯åã®æä½ã§æ«ç«¯ãã¼ãã®ãã¼ã¿ã®èªã¿è¾¼ã¿ãçºçãããä¸è¿°ããéè¤èªã¿åãã®åãå ç®ãããã®ã§ã200ä¸åã®èªã¿åããçºçãããDB層ã®åãã¼ã¸ã¯ãã¡ã¤ã«å±¤ã®2ãã3ãã¼ã¸ã§æ§æãããã®ã§ããã®åæ°ã ããã¡ã¤ã«å ãã£ãã·ã¥ã®èªã¿è¾¼ã¿ãè¡ãããã¡ã¤ã«å ãã£ãã·ã¥ä»ããã¤ã¬ã¯ãI/Oã®ã±ã¼ã¹ã§å®éã«ãã°ãåã£ãã¨ããããã¼ã¸ã®èªã¿è¾¼ã¿è¦æ±ã431ä¸åã§ããã®ãã¡96ä¸åãæ¢åãã¼ã¸ã®åå©ç¨ã«æåãã¦ããããã¤ã¬ã¯ãI/Oã®èªã¿è¾¼ã¿è¦æ±æ°ã¯335ä¸åãæ¸ãè¾¼ã¿è¦æ±æ°ã¯0åã§ãã£ããã ãããäºæ³éãã ã
è¨è¨éãã®å®é¨çµæã«ã¯æºè¶³ãã¦ããããæ¹ãã¦èãã¦ã¿ãã¨ãæé©ãªè¨è¨ã¨ã¯è¨ãé£ãé¨åããããã¨ããããããã¼ãã®ãããã ãèªã¿è¾¼ãã®ãããµããã¾ãããã¼ã¸å ãã£ãã·ã¥ã®æ§é ã«åããã¦ãé£ç¶ãããããã¯ã®èªã¿æ¸ãããããã¯åä½ã§è¤æ°åã«åãã¦èªã¿è¾¼ãã§ããã®ãããµããããã«ããã¼ãã£ãã¼ã¸ãæ¸ãåºãéã«ãé£æ¥ãããããã¯ãã¾ã¨ãã¦ã¯ãªã¼ã³ã¢ããããå¦çãå®è£ ãã¹ãã ã
SkipDBMã®å®é¨ãè¡ããã¹ããããªã¹ãã®æ§ç¯ã¯ã¡ã¢ãªä¸ã®ãããã¡ã¨ä¸éãã¡ã¤ã«ãç¨ãããã¼ã¸ã½ã¼ãã§è¡ããããã¡ã¤ã«ã¢ã¯ã»ã¹ã¯ã·ã¼ã±ã³ã·ã£ã«ã«ããè¡ãããªãããªã®ã§ãSkipDBMã®æ´æ°å¦çã§ä½¿ãããä¸éãã¡ã¤ã«ã§ã¯ãããã¯I/Oããã¤ã¬ã¯ãI/Oã®å®è£ ã¯ãããã¡ã¢ãªãããI/Oãé常I/Oã§å¦çãããæ¤ç´¢ã«é¢ãã¦ã¯ã¹ãããããªããäºåæ¢ç´¢ãè¡ãã®ã§ãã©ã³ãã ã¢ã¯ã»ã¹ã«ãªãããã£ã¦ãæ§ç¯å¾ã®ãã¼ã¿ãã¼ã¹ãã¡ã¤ã«ã¯ãã¤ã¬ã¯ãI/Oã§å©ç¨ã§ããããã«å®è£ ãã¦ããããªããSkipDBMã¯ãã¼ã®éè¤ã許ãã®ã§ãã¬ã³ã¼ãæ°ã¯63ä¸ã§ã¯ãªã100ä¸ã«ãªãã
ã¹ããããªã¹ãã®ãã¥ã¼ãã³ã°ã§æãéè¦ãªã®ã¯ãã¹ãããåä½ã®è¨å®ã§ãããããã©ã«ãã¯4ã§ãããã¯åã¬ã³ã¼ãã平衡æ¨ã®ãã¼ãã¨ã¿ãªããå ´åã«4ã¤ã®æãçãã¦ãããã¨ãæå³ãããã¤ã¾ãé層ãä¸ã¤è¾¿ãæ¯ã«æ¢ç´¢ç¯å²ã4åã®1ã«ãªããéã«è¨ãã°ãå ¨ä½ã®é層ã¯4ãåºã«ããã¬ã³ã¼ãæ°ã®å¯¾æ°ã«ãªãã¨ãããã¨ã ãæ¤ç´¢å¦çã®æå¾ã«ã¯ã4ã¤ã®é£æ¥ããã¬ã³ã¼ãã1ã¤ãã¤è¾¿ããã¨ã«ãªããããã§å±ææ§ãæ大ã«ãªããã¤ã¾ãããã¡ã¤ã«å ãã£ãã·ã¥ã®æ§è½ãæ´»ããã«ã¯ãã¹ãããåä½ã大ããããæ¹ããããå°ãªãã¨ããåä¸ã®ãããã¯å ã«åã¾ãã¬ã³ã¼ãã®æ°ä»¥ä¸ã«ã¯ããæ¹ããããä»åã¯ããããã¯ãµã¤ãºã1024ã«ããããããããã¨1ãããã¯ã«8åãããã®ã¬ã³ã¼ããå ¥ããæ«ç«¯ã§2ãããã¯ã®ã·ã¼ã±ã³ã·ã£ã«ã¢ã¯ã»ã¹ãè¡ãããã¨ããã°ãã¹ãããåä½ã¯16ããããè¯ããã ãããããã¨ã16ãåºã«ãã100ä¸ã¬ã³ã¼ãã®å¯¾æ°ã¯4.81ãªã®ã§ã5é層ã®å¹³è¡¡æ¨ãä½ããããã¨ã«ãªãããã®ã·ããªãªã¯ããããªã³ãã³ãã«ãªãã
$ ./tkrzw_dbm_perf sequence --path casket.tks --file mmap-para --random_seed -1 --random_key --size 100 --step_unit 16 --max_level 5 --iter 1000000 $ ./tkrzw_dbm_perf sequence --path casket.tks --file pos-para --random_seed -1 --random_key --size 100 --step_unit 16 --max_level 5 --iter 1000000 $ ./tkrzw_dbm_perf sequence --path casket.tks --file pos-para --random_seed -1 --random_key --size 100 --step_unit 16 --max_level 5 --iter 1000000 --block_size 1024 --padding $ ./tkrzw_dbm_perf sequence --path casket.tks --file pos-para --random_seed -1 --random_key --size 100 --step_unit 16 --max_level 5 --iter 1000000 --block_size 1024 --padding --pagecache $ ./tkrzw_dbm_perf sequence --path casket.tks --file pos-para --random_seed -1 --random_key --size 100 --step_unit 16 --max_level 5 --iter 1000000 --block_size 1024 --direct_io --padding $ ./tkrzw_dbm_perf sequence --path casket.tks --file pos-para --random_seed -1 --random_key --size 100 --step_unit 16 --max_level 5 --iter 1000000 --block_size 1024 --direct_io --padding --pagecache
SkipDBMã§ãã¹ããããªã¹ãã®ãã¼ã¿ãã¼ã¹å ãã£ãã·ã¥ãå®è£ ããã¦ãããããã¯æ ¹ã«è¿ãä¸ä½ãã¼ãã®ã¿ããã£ãã·ã¥ããå®è£ ã«ãªã£ã¦ãããéã«è¨ãã°ãæ«ç«¯ã«è¿ããã¼ãã¯ãã£ãã·ã¥ãããªããããããã¹ããããªã¹ãã使ã£ãäºåæ¢ç´¢ã¨ããã¢ã«ã´ãªãºã ã®ç¹æ§ä¸ãæ¤ç´¢å¦çã®çµç¤ã¯ä½ç½®ãè¿ãã¬ã³ã¼ãã«é£ç¶çã«ã¢ã¯ã»ã¹ããã®ã§ãåä¸æä½å ã§ã®ã¢ã¯ã»ã¹ãã¿ã¼ã³ã®å±ææ§ã¯ãããªãã«ãããã¤ã¾ããä¸ä½ãã¼ãã¯è¤æ°ã®æä½ã«ã¾ããã£ã¦å±ææ§ãããã®ã§ãã¼ã¿ãã¼ã¹å ãã£ãã·ã¥ãæå¹æ´»ç¨ãããä¸ä½ãã¼ãã¯åä¸æä½å ã§ã®å±ææ§ãé«ãã®ã§ãã¡ã¤ã«å ãã£ãã·ã¥ãæå¹æ´»ç¨ãããã¨ããããã§ãããå®ã®ã¨ããããã¡ã¤ã«å ãã£ãã·ã¥ã®å®è£ ã決æããã®ã¯SkipDBMããã¤ã¬ã¯ãI/Oã¢ã¼ãã§ãå®ç¨çãªé度ã§å©ç¨ã§ããããã«ããããã§ããã
çµæã¯ä»¥ä¸ã®éãã ãåä½ã¯QPSï¼ã¯ã¨ãªæ¯ç§ï¼ã
set | get | |
mmap | 399,456 | 210,161 |
pos | 264,601 | 103,596 |
pos-block | 211,099 | 93,662 |
pos-block-cache | 313,009 | 142,370 |
pos-direct | 4,935 | 1,169 |
pos-direct-cache | 115,116 | 5,194 |
æ¯åº¦ã®ãã¨ãªããã¡ã¢ãªãããI/Oãæéã ãé常I/Oããããã¯I/Oã§ã®æ§è½å£åã¯HashDBMã¨åç¨åº¦ã§ãããSkipDBMã®ãã¼ã¿ãã¼ã¹å±¤ã§ã¯ã¢ã©ã¤ã³ã¡ã³ãã¯ãªããã¬ã³ã¼ãã®ãµã¤ãºã§ãã120ãã¤ãããããåä½ã¨ããã©ã³ãã ã¢ã¯ã»ã¹ãè¡ãããããã£ã¦ãã¢ã©ã¤ã³ã¡ã³ãã¯ããã128ãã¤ãåä½ã«è¨å®ããHashDBMã®å®é¨çµæã¨ä¼¼ãæãã«ãªãã®ã¯ç´å¾ããããé常I/Oã¨ãããã¯I/Oã®çµæãæ¯è¼ããã¨ããããã¯I/Oã使ã£ã¦ãå©ç¹ã¯ãªãããããã»ã©ãªã¼ãã¼ãããã¯å¤§ãããªããã¨ããããããããã¯I/Oã«ãã¡ã¤ã«å ãã£ãã·ã¥ã使ãã¨æ§ç¯ãæ¤ç´¢ãé«éåãããä¸è¿°ããããã«ãæ§ç¯æã«ãä¸éãã¡ã¤ã«ã®èªã¿æ¸ãã¯ã·ã¼ã±ã³ã·ã£ã«ã¢ã¯ã»ã¹ã§è¡ãããããæ¤ç´¢æã«ãæ«ç«¯ãã¼ãã¯ã·ã¼ã±ã³ã·ã£ã«ã¢ã¯ã»ã¹ã§èªã¿åãããã®ã§ããã®çµæã¯ç´å¾ã®ãããã®ã ã
ããã¦ããã¯ããã¤ã¬ã¯ãI/Oã¯é ãããããããã¡ã¤ã«å ãã£ãã·ã¥ãæå¹ã«ããã¨ãæ§ç¯ã115116 QPSãæ¤ç´¢ã 5194 QPSã¨ããå®ç¨çãªæ§è½ã§å©ç¨ã§ããããã«ãªããçè«çã«ã¯ããã©ãã¤ãç´ã®è¦æ¨¡ã®ãã¼ã¿ãã¼ã¹ã§ããããªã«å¤ãããªãæ¤ç´¢æ§è½ã«ãªãã¯ããªã®ã§ãã¹ããããªã¹ãã¯ãã¯ã大è¦æ¨¡ãªãã¼ã¿ãã¼ã¹ã«åãã¦ããã¨è¨ãããã ããããæ´æ°ããã§ããªãã¨ããã®ãçã«çã ãããããåãã£ã¦ä½¿ãåã«ã¯ããã¡ã便å©ã ããã¤ã¬ã¯ãI/Oãªãã·ã¹ãã å ãã£ãã·ã¥ãæ±ããªãã®ã§ãè¶ å¤§è¦æ¨¡ãªãã¼ã¿ãã¼ã¹ãããããé«æ§è½ãªã¹ãã¬ã¼ã¸ä¸ã§éç¨ããã«ã¯æé©ãªå½¢æ ã¨ãè¨ããããã¼ã¿ãã¤ãã³ã°ã¨ãã«ããã£ã¦ã¤ãã ã
ãªããæ§ç¯æã®ãã¡ã¤ã«å ãã£ãã·ã¥ã®ãã°ãè¦ãã¨ããã¼ã¸ã®èªã¿è¾¼ã¿è¦æ±ã¯117ä¸åã§ããã®ãã¡106ä¸åã¯åå©ç¨ã«æåãã¦ãããã·ã¼ã±ã³ã·ã£ã«ã¢ã¯ã»ã¹ã¯åããããã¯ã«é£ç¶ãã¦ã¢ã¯ã»ã¹ããã®ã§ãå±ææ§ã極ãã¦é«ããªããæ¤ç´¢æã«ã¯ããã¼ã¸èªã¿è¾¼ã¿ã®è¦æ±ã¯948ä¸åã§ããã®ãã¡754ä¸åã¯åå©ç¨ã«æåãã¦ããããã¡ããäºæ³éãã§ãæ¤ç´¢æä½ã®çµç¤ã§èµ·ããã·ã¼ã±ã³ã·ã£ã«ã¢ã¯ã»ã¹ã®å¹çåã«æåãã¦ããã
ã¾ã¨ãããã¤ã¬ã¯ãI/Oã使ã£ã¦ã·ã¹ãã å ãã£ãã·ã¥ãåé¿ããå ´åã§ãããã¡ã¤ã«å ãã£ãã·ã¥ã管çãããã¡ã¤ã«å®è£ ã使ãã¨ãã¹ã«ã¼ããããåä¸ããå ´åããããç¹ã«ãHashDBMã®æ§ç¯ã¨ãSkipDBMã®æ§ç¯ããã³æ¤ç´¢ã§å¤§ããªå¹æãããããã¤ã¬ã¯ãI/Oã¯ç©æ¥µçã«ä½¿ããã®ã§ã¯ãªããã大è¦æ¨¡ãªãã¼ã¿ãã¼ã¹ã§ã¯ãã¤ã¬ã¯ãI/Oã使ããããå¾ãªããã¨ãããããã¼ã¿ãã¼ã¹ãã¡ã¤ã«ã®ãµã¤ãºãæããã«å®ã¡ã¢ãªã«ä¹ãåãè¦æ¨¡ãªãã¡ã¢ãªãããI/Oã使ãã¹ãã§ããããæªããå ´åã«ã¯é常I/Oã使ãã¹ãã ãããã¦ããã¼ã¿ãã¼ã¹ãã¡ã¤ã«ã®ãµã¤ãºãå®ã¡ã¢ãªã®ãµã¤ãºã®ä½åããã£ã¦ãã·ã¹ãã å ãã£ãã·ã¥ã®ãããçãæå¾ ã§ããªããã¨ãæãããªå ´åã«ã¯ããã¤ã¬ã¯ãI/Oã使ããããå¾ãªããHashDBMã¨SkipDBMããã¤ã¬ã¯ãI/Oã§éç¨ããå ´åããã¡ã¤ã«å ãã£ãã·ã¥ãæå¹ã«ãã¦æã¯ãªããTreeDBMã§ã¯ãã¼ã¿ãã¼ã¹å ãã£ãã·ã¥ãååã«åãã®ã§ãã¡ã¤ã«å ãã£ãã·ã¥ã使ãå©ç¹ã¯ãªãã
ããã«ãã¦ãããã¤ã¬ã¯ãI/Oã使ã£ãå®é¨ããã¯å¦ã¶ãã¨ãå¤ããã·ã¹ãã å ãã£ãã·ã¥ããä¸è©±ããã¦ããããããã§æ®æ®µã¯ãã¡ã¤ã«å ¥åºåã®é ãã«æ°ã使ããã¨ã¯ãã¾ããªããããã¤ã¬ã¯ãI/Oã使ãã¨å«ã§ãæ°ä»ãããããä¸è¦ãªå ¥åºåãè¡ã£ã¦ããããããã¯å¦å®ãªæ§è½å£åã¨ãã¦ç¾ããããã«ãªãã常ã«è¨ç®éãæèãã¦è¨è¨ã¨å®è£ ãé²ããã®ãã¾ã¨ããªããã°ã©ãã§ããããå±ææ§ã¨ããæ¦å¿µãå¿ãã¡ããããªããªã¨æ¹ãã¦æã次第ã ã