Go ãš Badger#
ååãHDD äžã§ã®åªããæžãèŸŒã¿æ§èœãšæé©ååŸã®åãå ¥ãå¯èœãªèªã¿åãæ§èœã«ãããLSMð²ã¯ Bð²ã®ç«¶äºã®æ¿ããããŒã¿ããŒã¹é åã§äžå®ã®å°äœã確ç«ããŸãããLSMð²é¢é£ã®æè¡ã¯åŠç¿ãããããæžãããããäžŠè¡æ§ãé«ããªã©ã®çç±ãããæ°ããã¿ã€ãã®ããŒã¿ããŒã¹ã¯ LSMð²é¢é£ã®ã¹ãã¬ãŒãžããã¯ãšã³ãã«ç§»è¡ããŠããŸãã
ååã®èšäºã«åŒãç¶ããHDD ã¯å転åŒã§ãããããã©ã³ãã ã¢ã¯ã»ã¹ã®ããã©ãŒãã³ã¹ã¯é 次ã¢ã¯ã»ã¹ã® 100 åé ããªããŸã...
ããããæä»£ãè¶ è¶ããçºæãç»å ŽããŸããïŒ
ããã¯ãäŸ¡æ Œãäžæãç¶ãã寿åœãçãããããšã§äŸ¡æ Œãäžãã SSD ãšããã¹ãã¬ãŒãžã¡ãã£ã¢ã§ãïŒ
ååã®èšäºã§ãLSMð²ã®é«éåã®äž»ãªçç±ã¯æ¬¡ã®ãšããã§ãïŒ
- æ°ããããŒã¿ã¯ãŸãã¡ã¢ãªã«å ¥ã
- ãã£ã¹ã¯ã«é 次æžã蟌ã
- 宿çã«ãã£ã¹ã¯ãæŽçãã
第 3 ã®ã¹ãããã¯ããã£ã¹ã¯ããã®å·ããããŒã¿ã®èªã¿åãéåºŠãæ±ºå®ããŸããããã®ä»£åãšããŠããŒã¿ãã¬ãã«ããšã«åå²ããå¿ èŠããããŸããããšãã°ã10M 㯠1 ã€ã®ã¬ãã«ã§ããã100M ã¯å¥ã®ã¬ãã«ã§ããå°ããã¬ãã«ãã倧ããªã¬ãã«ã«æŽçããããã»ã¹ããã³ã³ãã¯ã·ã§ã³ããšåŒã³ãŸããã»ãšãã©ã® LSM ã¯æ¬¡ã®åŒã䜿çšããŠã¬ãã«ãã¢ããã°ã¬ãŒãããŸãïŒ
sizeof( L+1 ) = 10 * sizeof( L )
1 ã€ã®ã¬ãã«ã«åãŸããããªãæ å ±ãæ ŒçŽããããã«ããã倧ããªã¬ãã«ã«æŽçããå¿ èŠããããŸãããã®ãšãã«ä»ã®ã¬ãã«ãšããŒãžããããšããæžã蟌ã¿ã®å¢å ããšåŒã³ãŸãïŒäœåºŠãæžã蟌ãããïŒã
åæ§ã«ãç¹å®ã®ããŒãæ€çŽ¢ããå Žåããã®ããŒãç°ãªãã¬ãã«ã«æ ŒçŽãããŠããå Žåãå€ãã®åæ°æ€çŽ¢ããããšã«ãªããŸããããããèªã¿èŸŒã¿ã®å¢å ããšåŒã³ãŸãïŒäœåºŠãèªã¿èŸŒãããïŒã
ãããã£ãŠ... æé©åã®äœå°ã¯ãSSD ã®å¹ççãªã©ã³ãã èªã¿åãæ§èœã䜿çšã㊠LSMð²ãæé©åããèªã¿èŸŒã¿ã®å¢å ãšæžã蟌ã¿ã®å¢å ãäœæžããããšã§ãã
ãã ããæžã蟌ã¿ã®å¢å 㯠SSD ã®å¯¿åœãå€§å¹ ã«ççž®ãããããå¹ççãªã©ã³ãã èªã¿åãèœåãå©çšããå Žåã¯æžã蟌ã¿ã®å¢å ãæžããå¿ èŠããããŸãã
Badger ã®ç»å Ž#
åµèšè ïŒç§ã¯ Go ã®ãŠãŒã¶ãŒã§ããç§ã¯ DB ãæžãããã§ããRocksDB ãèŠãŠã¿ããšãã§ãããããããŸãããããªã CGo ãéçºããªããã°ãªããªãã®ã§ããããïŒCGo ãéçºãããšãGoroutine ã pthread ã«ãã£ãŠé ããªããã¡ã¢ãªãªãŒã¯ãçºçããŸããã¯ãœ CïŒç§ãåæããŸãïŒãç§ã¯ Go ã§æžãçŽããŸãïŒç§ãåæããŸãããªããªã RocksDB ã®éçºè 㯠CMake ã®æžãæ¹ããç¥ããŸããïŒã
Badger ã¯æ¬¡ã®æ©èœã®ã¿ãæäŸããŠããŸãã
Get
ãSet
ãDelete
ãIterate
颿°ãããã«ãCompareAndSet
ããã³CompareAndDelete
ã®ã¢ãããã¯æäœã远å ããŸãã
RocksDB ãšæ¯èŒããŠãBadger ã¯æåãããã©ã³ã¶ã¯ã·ã§ã³ã«å¯ŸããŠèæ ®ãè¡ããããŒã¿ããŒã¹ã®æžã蟌ã¿ãããç°¡åã«ããŸãã
Badger ãš HDD äžã® LSMð²ã®éã#
KV ãã¢ãåé¢ããŠä¿åããKey ã LSMð²ã«ä¿åããValue ã WALïŒãã°ïŒã«ä¿åããããšã§ãLSMð²ã®ãµã€ãºã RocksDB ã®ååã«ããããšãã§ããæžã蟌ã¿ã®å¢å ã®ããã©ãŒãã³ã¹æå€±ãäœæžããŸãã2 çªç®ã®ãã€ã³ãã¯ãSSD ã®ã©ã³ãã èªã¿åãæ©èœã䜿çšããŠçŽæ¥ WAL ããå€ãååŸããããšã§ãã
å®è£ ã®è©³çް#
KV ãå¥ã ã«ä¿å#
å
ã® LSMð²ã®äž»ãªã³ã¹ãã¯ãã³ã³ãã¯ã·ã§ã³ãäžã«ãªãã©ã€ã³ã§ãœãŒããè¡ãå¿
èŠããããããã€ãã¬ãŒã·ã§ã³ãçºçããŸãããé垞㯠Key ã®ãœãŒããè¡ãããã®ããã»ã¹ã§ Value ã¯å€æŽãããŸããããã®ãããBadger 㯠Key ãš Value ã®ä¿åãåé¢ããç¡é§ãª Value ã®ãœãŒãã«ããã¡ã¢ãªã®æµªè²»ã倧å¹
ã«åæžããŠããŸãã
第 2 ã«ãBadger 㯠Value ã®äœçœ®ãããã«ã¿ãšã³ã³ãŒãã£ã³ã°ããšåŒã°ãããã€ã³ã¿ã®åœ¢åŒã§ Key ã®å³åŽã«ä¿åããSSD ã« Key ãã©ã®äœçœ®ã® Value ã«å¯Ÿå¿ããŠããããäŒããããšãã§ããŸãããŸããåäžã®ãã¡ã€ã«ã®ãµã€ãºãå¶éããããšã§ãã£ãã·ã¥ã®ããã©ãŒãã³ã¹ãåäžãããŸããããšãã°ã1 ã€ã®ããŒã 16 ãã€ãã§ã1 ã€ã®ãã€ã³ã¿ã 16 ãã€ãã®å Žåã64M ã®ãã¡ã€ã«ã« 200 äžè¡ä»¥äžã® KV ãä¿åã§ããŸãã
æžã蟌ã¿ã®å¢å ãçž®å°#
Value ã®äžéšã LSMð²ã«ä¿åããããµã€ãºãå°ãããªããããValue ã®éšåã¯æžã蟌ã¿ã®å¢å ãåŒãèµ·ããããKey ãä¹±éã«ç§»åããããšããããŸããã
Value ã®ãµã€ãºã 1kb ã§ããã16 ãã€ããããŒã®ãµã€ãºã§ããå Žåãæžã蟌ã¿ã®å¢å ã¯æ¬¡ã®ããã«ãªããŸãã
(10*16 + 1024)/(16 + 1024) ~= 1.14
ã€ãŸãããããã«å¢å ããã ãã§ãð€
ããã¯ããã©ãŒãã³ã¹ã«åæ ãããæžã蟌ã¿é床㯠RocksDB ã® N åã«ãªããŸããN 㯠Value ããã£ã¹ã¯ã«æžã蟌ãŸããæéã«äŸåããŸãã
èªã¿èŸŒã¿ã®å¢å ãçž®å°#
Value ã LSM ã«ãªããããLSM ã®ãµã€ãºãå€§å¹ ã«çž®å°ãããã¬ãã«ã®æ°ãæžå°ããããšãæå³ããŸãããã®çµæãã¡ã¢ãªã«æ ŒçŽãããéšåãå¢ããŸãããã³ãããŒã¯ã«ãããšãRocksDB ã¯å€ã 1kb ã§ããã2200 äžè¡ã®ããŒã¿ãããå ŽåãLSM ããªãŒã« 72GB ã®ããŒã¿ã»ããã䜿çšããŸãããBadger ã¯ããŒãšãªãã»ããã®ã¿ãä¿åãããããããã 1.7G ã®ããŒã¿ã»ããã§æžã¿ãŸãããã¹ãŠãã¡ã¢ãªã«æ ŒçŽãããŠããŸã...
ãã®ãããèªã¿åãé床㯠RocksDB ã® 3.5 åã«ãªããŸã...
ã€ãã¬ãŒã·ã§ã³é床... ãã㯠3.5*N ã§ãã
å ·äœçãªãã³ãããŒã¯ã¯æ¬¡ã®ããã«ãªããŸã#
æåæ°ã®å¶éããããã#
詳现ã¯ãã¡ããåç §ããŠãã ãã
次åäºå...Agate ã®ããå é²çãªæ©èœã«ã€ããŠãèè¿ããã«ã€ã³ã¿ãã¥ãŒãããããããŸããã
Translation: