ã·ã£ã¼ãã£ã³ã°ã«ãã£ã¦ãã¼ã¿ãã¼ã¹ãåå²ãããã¨ã§ãé常éç¨ã®ä¸¦åå¦çæ§è½ãåä¸ããããã¨ãã§ãããããã ãã§ãªããããã¯ã¢ããä½æãªã©ã®ãä»ã®ã¹ã¬ããããããã¯ããããæä½ã®å½±é¿ãæå°éã«çãããã¨ãã§ããããã®éç¨æ¹æ³ã«ã¤ãã¦èª¬æããã
Tkrzwã®ãã¼ã¿ãã¼ã¹ã®å ¨ã¦ã®ã¯ã©ã¹ã¯ãShardDBMã¨ããã¢ããã¿ã¯ã©ã¹ãä»ãã¦å©ç¨ãããã¨ãã§ãããShardDBMãªå é¨çã«ä»»æã®æ°ã«ãã¼ã¿ãã¼ã¹ãåå²ãã¦ç®¡çããããå©ç¨è ã«ã¨ã£ã¦ã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯å¤ãããªããããªãã¡ééçã«ã·ã£ã¼ãã£ã³ã°ãããã¯ã©ã¹ã§ãããTkrzw-RPCã®ãµã¼ãããã®ShardDBMã使ã£ã¦ããã
å®éã«ãµã¼ããç«ã¦ã¦è¦ãããããã·ã¥ãã¼ã¿ãã¼ã¹ã100åã«åå²ããã·ã£ã¼ãã£ã³ã°ãè¡ããåã ã®ã·ã£ã¼ãã«ã¯200ä¸åã®ãã±ãããæãããåè¨2åãã±ããã®ãã¼ã¿ãã¼ã¹ã«ãããããã«ã追è¨æ´æ°ã¢ã¼ãã§å ç¢æ§ãåä¸ãããã
$ tkrzw_server --async --threads 4 \ "casket.tkh#num_shards=100,num_buckets=1M,update_mode=appending"
ãã®ãã¼ã¿ãã¼ã¹ã«ã1ååã®ã¬ã³ã¼ããæ ¼ç´ããã4ã¹ã¬ããã®åã ã«2500ä¸åãã¤ã®æä½ãè¡ããã100ååã®æä½ããããã§éãè¾¼ããã¨ã«ãããã
$ tkrzw_dbm_remote_perf sequence --set_only --multi 100 --threads 4 --iter 25000000
ãã®æä½ã¯128ç§ã§çµãããRPCã§1å件ã®æ´æ°ããã¦ããã®ã«ããã£ã128ç§ã§çµããã¨ããã®ã¯ãªããªãã®ãã®ã§ã¯ãªããã
æ¬é¡ã¯ããããã ãä¸è¨ã®æä½ã®ç´å¾ã«ããã®ãã¼ã¿ãã¼ã¹ãSynchronizeãããããªãã¡ãå ¨ã¦ã®ãã¼ãã£ãããã¡ãã¹ãã¬ã¼ã¸ï¼SSDï¼ã«æ¸ãè¾¼ã¾ãããã®å®äºãå¾ ã¤ã
$ tkrzw_dbm_remote_util sync --hard
ãã®æä½ã«ã¯ã1.7ç§ã®æéãããã£ããããã·ã£ã¼ãã£ã³ã°ããªãå ´åãå ¨ã¦ã®ãã¼ã¿ãã¼ã¹æä½ã1.7ç§ã®éã¯ãããã¯ããããã¨ã«ãªããããããããã§ã¯100åã«ã·ã£ã¼ãã£ã³ã°ãã¦ããã®ã§ãåã ã®ã·ã£ã¼ãããããã¯ãã¦ããæéã¯1/100ã®0.017ç§ã§ãããã»ã¨ãã©ç¡è¦ã§ããæéã ãã¹ã¬ããããããã¯ããã確çã1/100ã«ãªããããã¾ã§å½±é¿ã軽微ã«ã§ãããªãã1åã«1åSynchronizeãããããªéç¨ãã§ããã ããã
ããã¯ã¢ãããåãããsyncãµãã³ãã³ã㯠"key=value" ã®å½¢å¼ã§ãã©ã¡ã¼ã¿ãéãããã"make_backup" ãéãã¨ãããã¯ã¢ãããã¡ã¤ã«ãä½æãããããã©ã¡ã¼ã¿ã®å¤ã§ããã¯ã¢ãããã¡ã¤ã«ã®æ¥å°¾è¾ãæå®ã§ãããã空ç½ã®å ´åã¯ç¾å¨æ¥æã®YYYYMMDDhhmmsså½¢å¼ãæå®ãããã
$ tkrzw_dbm_remote_util sync "make_backup="
ããã¯3.44ç§ããã£ãã1ã·ã£ã¼ããããã¯0.034ç§ã ããã®å ´åãããªã³ã©ã¤ã³ã§éç¨ãã¦å¤§ä¸å¤«ããã ãã·ã£ã¼ãã£ã³ã°ããªãå ´åã«ã¯BtrFSのスナップショットを使う方法ãªã©ã®å·¥å¤«ãããããªããããããã¯æéã0.034ç§ãªããã®å¿ è¦ã¯ãªãã ããã
ãã¼ã¿ãã¼ã¹ã®åæ§ç¯ï¼Rebuildï¼ã§ããã·ã£ã¼ãã£ã³ã°ã®æ©æµããããTkrzwã®å£²ãæå¥ã®ä¸ã¤ã¯ãä»ã®ã¹ã¬ãããæ¢ããã«åæ§ç¯ãã§ãããã¨ã§ãããããã¨è¿½è¨ã¢ã¼ããçµã¿åãããã¨ãæ§è½ã¨å ç¢æ§ã両ç«ã§ããã詳ããã¯公式文書のTipsãã覧é ãããããã¦ãå®éã«å®è¡ãã¦ã¿ããã
$ tkrzw_dbm_remote_util rebuild
ããã¯74.2ç§ããã£ãã1ã·ã£ã¼ããããã®æéã¯0.7ç§ã¨ãããã¨ã«ãªãããå¦çä¸ãä»ã®ã¹ã¬ããããããã¯ããªãè¨è¨ãªã®ã§ããããã¯æéã¯ã»ã¼ã¼ãã ããã¼ã¿ãã¼ã¹ã®åæ§ç¯ã¯ãã¼ã¿ãã¼ã¹å ¨ä½ã®åçæãä¼´ãã®ã ãããã®éã®æ´æ°ã¯å¤ããã¼ã¿ãã¼ã¹ã¨æ°ãããã¼ã¿ãã¼ã¹ã®ä¸¡æ¹ã«é©ç¨ããããã¤ã¾ããåæ§ç¯ä¸ã®æ´æ°å¦çã®è² è·ã¯2åã«ãªãã®ã ãã100åå²ãã¦å®è¡ããã°ãè² è·ãä¸ããæä½ã®ç¢ºçã1/100ã«ãªããã¾ããã·ã£ã¼ãã£ã³ã°ããªãå ´åã«ã¯åæ§ç¯ã«ã¯å ã®ãã¼ã¿ãã¼ã¹ãã¡ã¤ã«ã¨ã»ã¼åããµã¤ãºã®ä¸æãã¡ã¤ã«ãä½ããããã®ãµã¤ãºã1/100ã«ãªãã¨ããå©ç¹ãããããã®ç¹æ§ã«ãã£ã¦ããã¼ã¿ãã¼ã¹ã®åæ§ç¯ããªã³ã©ã¤ã³ã§å®æçã«è¡ããã¨ãå¯è½ã«ãªãã1æ¥1åå®è¡ãã§ããããã3æéã«1åã¨ãã§ãããã絶対å£ããªã追è¨åãã¼ã¿ãã¼ã¹ã¨ãã¦éç¨ãããã¨ã®æ¬ ç¹ã¯å®æçãªåæ§ç¯ãå¿ è¦ãªãã¨ã ããåæ§ç¯ããããã¯ããã«è¡ãããã¨ã§ãããå æããæå¼·ã«ãªãã®ã ã
å®éã«ãåæ§ç¯å¦çãç¶ãããã¦ããç¶æ ã§ãä»ã®ç«¯æ«ãããã¼ã¿ãã¼ã¹ã®æ¤ç´¢ãæ´æ°ãè¡ã£ã¦ã¿ã¦ã»ããããããã¯ããã«å¦çã§ãããã¨ã確èªã§ããã
$ tkrzw_dbm_remote_util get 00000001 bcdefghi $ tkrzw_dbm_remote_util get 00000002 cdefghaj $ tkrzw_dbm_remote_util set --multi 00000001 yuutei 00000002 miyaou 00000003 kimukou $ tkrzw_dbm_remote_util get --multi 00000001 00000002 00000003 00000001 yuutei 00000002 miyaou 00000003 kimukou
ã·ã£ã¼ãã£ã³ã°ãé§ä½¿ããã¨ããªã³ã¡ã¢ãªãã¼ã¿ãã¼ã¹ã«ãããããã¡ã¤ã«ãã¼ã¿ãã¼ã¹ã§ãããã®ãããªå ç¢æ§ãæããããã¨ãã§ãããTkrzwã®ãªã³ã¡ã¢ãªãã¼ã¿ãã¼ã¹ã«ã¯ãã¡ã¤ã«ãé¢é£ä»ãããã¨ãã§ããããããã¨ãèµ·åæã«ãã®ãã¡ã¤ã«ããã¬ã³ã¼ãã®ãã¼ã¿ãèªã¿è¾¼ã¿ãçµäºæã«æ´æ°ãã¼ã¿ã®ä¸è¨æ»ããè¡ãããã«ãªãããã®æç¹ã§ãã¡ã¢ãªæ¶è²»éãå¤ãã¨ãããã¨ä»¥å¤ã¯ããã¡ã¤ã«ä¸ã®ãã¼ã¿ãã¼ã¹ã¨éè²ãªã使ããã¨ãã§ããã¨è¨ããããããæ§è½ã¯å§åçã«é«ããã¨ã¯ãããããã»ã¹ãOSãçªç¶æ»ããå ´åã«ã¯ã¡ã¢ãªä¸ã®æ´æ°ãã¼ã¿ã¯å¤±ããã¦ãã¾ãã®ã§ããã¡ã¤ã«ãã¼ã¿ãã¼ã¹ã»ã©å ç¢ã¨ã¯ãããªãããã ããSynchronizeã¡ã½ãããå®æçã«å¼ãã§æ´æ°å 容ããã¡ã¤ã«ã«åæãããããã®ãªãã話ã¯å¤ãã£ã¦ããããã¡ã¤ã«ãã¼ã¿ãã¼ã¹ãéç¨ãã¦ããå ´åã§ãSynchronizeãå®æçã«å¼ã¶ãã¨ã¯æ¨å¥¨ãããããããã¯ãããã¤ã¹ã¨åæãããªãã¨ãã¡ã¤ã«ã§ãã£ã¦ããã¼ã¿ã失ãããå¯è½æ§ãããããã ããã®æ§é ã¯ããªã³ã¡ã¢ãªãã¼ã¿ãã¼ã¹ã§ãå¤ãããªãã
Synchronizeãå¼ã¶ã¾ã§ã¯å®å¿ã§ããªãã¨ããç¹ã§ã¯ããã¡ã¤ã«ããªã³ã¡ã¢ãªãåããªã®ã ããªã³ã¡ã¢ãªãã¼ã¿ãã¼ã¹ã®æ¬è³ªçãªåé¡ã¯ãSynchronizeã§ãã¼ã¿å ¨ä½ãæ¸ãåºããã°ãªãããããã«æéãããããã¨ã ãSynchronizeã®å®è¡ä¸ã¯ä»ã®ã¹ã¬ããã¯ãããã¯ããã¦ãã¾ããã·ã£ã¼ãã£ã³ã°ã¯ãã®åé¡ãç·©åãã¦ãããããã¼ã¿ãã¼ã¹ã100åã«åå²ããã°ããããã¯ãããæéã1/100ã«ãªãã®ã ãã¨ãããã¨ã§ããªã³ã¡ã¢ãªãã¼ã¿ãã¼ã¹ãç«ã¦ããããã¡ã¤ã«ã®æ¡å¼µåãã.tkmtãã«ããã¨ããªã³ã¡ã¢ãªã®TinyDBMã®ã¤ã³ã¹ã¿ã³ã¹ãä½ããããã®ãã¡ã¤ã«ãé¢é£ä»ããããã
$ tkrzw_server --async --threads 4 \ "casket.tkmt#num_shards=100,num_buckets=1M"
ããã«ã1å件ã®ã¬ã³ã¼ããæ ¼ç´ãã¦ãããã³ãã³ãã¯ãã¡ã¤ã«ãã¼ã¿ãã¼ã¹ã®å ´åã¨å ¨ãåãã ããããæéãã»ã¼åãã§ã120ç§ã»ã©ã§æ¸ãããã®ãã¼ã¿ãã¼ã¹ã«å¯¾ãã¦ãåããä¸è¿°ã®ã³ãã³ãã§Synchronizeã¡ã½ãããå¼ã¶ã¨ã13ç§ã»ã©ãããã1ã·ã£ã¼ããããã ã¨0.13ç§ã§ããããã¯ããã確çã1%ã§ãããã¨ãèããã°ããªã³ã©ã¤ã³ãµã¼ãã¹ã§ã許容ç¯å²ã§ãããã¨ã¯å¤ãã ããã
ã·ã£ã¼ãæ°ãå¢ããã»ã©ã«ä¸¦åæ§ãä¸ãããªããã·ã£ã¼ãæ°ãååã¨ãä¸åã¨ãã«ããã°ãããããªããã¨æãã ãããå®éã®ã¨ããã300åããããªãæ®éã«å®ç¨ç¯å²ã ãåä¸ããã»ã¹ãéãããã¡ã¤ã«ãã£ã¹ã¯ãªãã¿ã®æ°ã¾ã§ã·ã£ã¼ãæ°ãå¢ãããã¨ãèãããããã¨ã¯ãããCPUã³ã¢æ°ä»¥ä¸ã«ä¸¦åæ§ã¯ä¸ãããªãã®ã§ãé常ã®æ¤ç´¢ãæ´æ°å¦çã®æ§è½åä¸ã¯10ã·ã£ã¼ããããã§é æã¡ã«ãªããSynchronizeãRebuildã®ãããã¯æéãä¸ããããªããã·ã£ã¼ãæ°ã¯å¤ããã°å¤ãã»ã©ããã¨ãããã¨ã«ã¯ãªãããããã¾ãå¤ãã¨ã·ã£ã¼ãæ¯ã®ãªã¼ãã¼ããããé常éç¨ã®æéå¹çã空éå¹çãä¸ãã¦ãã¾ãããã£ã¦ã2åãã1000åã®ç¯å²ãç¾å®çãªã¨ããã ããããã¼ã¿ã®å 容ãã¢ã¯ã»ã¹ãã¿ã¼ã³ã«ãã£ã¦æé©å¤ã¯å¤ãã£ã¦ããã
ã¨ããã§ãSynchronizeãRebuildãªã©ã®æéããããæä½ãgRPCã®ã¯ã¼ã«ã¹ã¬ããã§ãã®ã¾ã¾å¦çããã¨ããã®ã¹ã¬ããèªä½ããããã¯ãããåæAPIã®å ´åã¯ä»ã®ã¯ã¼ã«ã¹ã¬ãããä»ã®ã³ãã¯ã·ã§ã³ãæãã®ã§è¯ãã®ã ããéåæAPIã®å ´åã¯ããããããã«ã¯ãããªããéåæAPIã§ã¯ãåä¸ã®ã¯ã¼ã«ã¹ã¬ãããè¤æ°ã®ã³ãã¯ã·ã§ã³ãæãã®ã§ãã¯ã¼ã«ã¹ã¬ãããé·æéãããã¯ããã¨ããã®ã¯ã¼ã«ã¹ã¬ããã®ãã®ä»ã®ã³ãã¯ã·ã§ã³ã®æä½ããããã¯ãã¦ãã¾ãããã£ã¦ãéåæAPIã®å ´åã«ã¯ãã¯ã¼ã«ã¹ã¬ããããããã«ããã¯ã°ã©ã¦ã³ãã¹ã¬ãããç«ã¦ã¦ãSynchronizeãRebuildãå¼ã¶å¿ è¦ããããTrkzw-RPCã®ææ°çï¼0.7.3ï¼ã§ã¯ãã®å®è£ ãå ¥ãã¦ããã
ã·ã£ã¼ãã£ã³ã°ãæ½ãã¨ã¤ãã¬ã¼ã¿ã®é åºãã©ããªãã®ãæ°ã«ãªã人ãããã ãããããã·ã¥ç³»ã®ãã¼ã¿æ§é ã®å ´åã«ã¯å ã é ä¸åãªã®ã§ãå ¨ã¬ã³ã¼ãã«ä¸åãã¤ã¢ã¯ã»ã¹ã§ããéãã¯åé¡ãªããããªã¼ç³»ã®ãã¼ã¿æ§é ã®å ´åã«ã¯é åºãéè¦ãªã®ã§ãã·ã£ã¼ãã£ã³ã°ããå ´åã§ããã®é åºã¯ä¿æããã¦ã»ããã¨ããã ããã£ã¦ããã¼ãã½ã¼ããããªããæå°ãããã¯æ大ã¬ã³ã¼ããè¿ãç¶ããã¤ãã¬ã¼ã¿ãShardDBMå®è£ ããã¦ããã確èªããããã«ãTreeDBMã10ã·ã£ã¼ãã§éç¨ãããµã¼ããç«ã¦ã¦ã¿ããã
$ tkrzw_server --async --threads 4 \ "casket.tkt#num_shards=10,num_buckets=1M"
ããã«ã1åã¬ã³ã¼ããå ¥ãã¦ãããç§ã®ç°å¢ã§ã¯170ç§ã»ã©ããã£ãããã®ç¶æ ã§ãã00000100ãããã¼ã®ä¸éã¨ããã¬ã³ã¼ãã20ååãåºãã
$ tkrzw_dbm_remote_util list --move jumplowerinc --jump_key 00000100 --items 20 00000100 cbedgfah 00000101 dcfehgbi 00000102 edgfahcj 00000103 fehgbidk 00000104 gbadcfeh 00000105 hcbedgfi 00000106 adcfehgj 00000107 bedgfihk 00000108 edgfahcj 00000109 fehgbidk 00000110 gfahcjel 00000111 hgbidkfm 00000112 ehgjalcn 00000113 fihkbmdo 00000114 gjalcnep 00000115 hkbmdofq 00000116 gnapcret 00000117 hobqdsfu 00000118 apcretgv 00000119 bqdsfuhw
åã ã®ã¬ã³ã¼ãã¯ããã·ã¥é¢æ°ã«ãã£ã¦ã¾ã¡ã¾ã¡ã®ã·ã£ã¼ãã«å ¥ãããã¦ããã®ã«ãã¡ããã¨é åºéãã«ã¬ã³ã¼ããåãåºãã¦ãããæ®éã«èããã¨ãã·ã£ã¼ãã£ã³ã°ã¨ã¬ã³ã¼ãã®é åºã¯ç¸å®¹ããªããã®ã ãããã¼ãã½ã¼ããåã¾ãããã¨ã§ãã¾ããã¨ãã©ã³ã¹ãåã£ã¦ãããã¤ãã¬ã¼ã¿ã®å é¨ã§ã¯ãã¬ã³ã¼ããåãåºãæ¯ã«ã·ã£ã¼ãæ°ã«å¿ããã¹ããªã¼ã ãè¦ç´ ã¨ãããã¼ãæ¨ãåæ§ç¯ãã¦ããã®ã§ãã·ã£ã¼ãæ°ãNã¨ããã¨log Nã®è¨ç®éãããããã¨ã«ãªãããã®çç±ã§ãã·ã£ã¼ãæ°ãå¤ãããããã¨ã¤ãã¬ã¼ã¿ãå¤å°é ããªããã¨ã¯ãã対æ°ã¹ã±ã¼ã«ãªã®ã§ã100åã¨200åã«ã¯15%ã®éããããªãããã©ã
ã¾ã¨ããTkrzw-RPCã«ã¦ããã¼ã¿ãã¼ã¹ã«ã·ã£ã¼ãã£ã³ã°ãæ½ãã¦éç¨ããæ¹æ³ãç´¹ä»ãããã·ã£ã¼ãã£ã³ã°ãã¦ãããªãã©ããªãã¼ã¿ãã¼ã¹å®è£ ã§ã並ååããã®ã§ãããæå³ã§ãã¼ããªã®ãããããªãããå®éã«å½¹ç«ã¤ã®ã ããä»æ¹ãªãã並åå¦çæ§è½ã¯ä¸ãããããã¼ã¿ãã¼ã¹å ¨ä½ããããã¯ããã¯ã管çç³»ã³ãã³ããä½æçã«ã»ã¨ãã©ãããã¯ãããã«å®è¡ã§ããããããã§ãã¦é åºã¢ã¯ã»ã¹æ©è½ã¯å¤±ãããªãã®ã§ããã£ã¡ãè¯ããã¨ãå¤ãããã²ä½¿ã£ã¦ã¿ã¦ã»ããã¨ããã ã
ããã¾ã§ã®éçºã§ããã¼ã¿ãã¼ã¹ãµã¼ãã¹ã¨ãã¦ã®å®ç¨çãªå®è£ ã¯ã§ãã¦ãããæ®éã«ãªã³ã©ã¤ã³ç³»ã·ã¹ãã ã®ããã¯ã¨ã³ãã¨ãã¦ä½¿ããã¬ãã«ã«ãªã£ã¦ããã¨æãããã¨ã¯ãã¬ããªã±ã¼ã·ã§ã³ããªããããä¸çªå¤§å¤ãªãã ãã©ã