é±ã®äœæ¥äžãã¯ã©ãŠãå ã®ãã¹ãŠã®VLSIãµãŒãã¹ãã1æ¥ããã110å件以äžã®ã¬ã³ãŒããåãåãã3æ¥éä¿åããŸããåæã«å æãããã¹ããŒã¹ã®ç·éã¯32 Tbãè¶ ããŸããã ããã¯ãã¹ãŠãPostgreSQL 9.6ã§8å°ã®ãµãŒããŒãåŠçããŸãã åãµãŒããŒã«ã¯ã24ã®ã³ã¢ã16 GBã®RAMãããã³4ã€ã®1 TB SSDãã©ã€ãããããŸãã
誰ããããå¿ èŠãšããŸããïŒ
åœç€Ÿã®ãµãŒãã¹ã¯ã40ïŒ Pythonã50ïŒ C ++ã9ïŒ SQLã1ïŒ Javascriptã§èšè¿°ãããŠããŸãã 200ãè¶ ãããµãŒãã¹ããããŸãããå€ãã®å ŽåãããŸããŸãªçš®é¡ã®åé¡ïŒç»é²æžã¿ãšã©ãŒã®åæãè«ççãªåé¡ã®åæïŒãè¿ éã«æŽçããå¿ èŠããããŸãã äœæ¥ãç£èŠããã ãã§ãæå³ããã·ããªãªã«åŸã£ãŠãã¹ãŠãé²è¡ããŠãããã©ããã確èªããå¿ èŠãããå ŽåããããŸãã ç°çš®ã°ã«ãŒãã¯ãéçºè ããã¹ã¿ãŒããµãŒããŒç®¡çè ãå Žåã«ãã£ãŠã¯ç®¡çè ãªã©ããã¹ãŠããã®ããã«ããŠå®çŸã§ããŸãã ãããã£ãŠãããããã¹ãŠã®ã°ã«ãŒãã«ç解ã§ããããŒã«ãå¿ èŠã§ãã ç¬èªã®ãã®ã³ã°ã·ã¹ãã ããŸãã¯WebãµãŒãã¹ãžã®httpãªã¯ãšã¹ãããã¬ãŒã¹ããã·ã¹ãã ãäœæããŸããã ããã¯äžè¬çãªãã®ã³ã°ã®æ®éçãªãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸããããäœæ¥ã¢ãã«ã«é©ããŠããŸãã å®éã«ãã°ã衚瀺ããããšã«å ããŠãåéããããŒã¿ã®ä»ã®çšéããããŸã-ããã«ã€ããŠã¯æ¬¡ã®ã»ã¯ã·ã§ã³ã§è©³ãã説æããŸãã
ãã°ã®ä»ã®ã¢ããªã±ãŒã·ã§ã³
WebãµãŒãã¹ãžã®httpãªã¯ãšã¹ãã¯ãåæã®äŸ¿å®äžãã³ãŒã«ããªãŒãšããŠæ瀺ã§ããŸãã ç°¡ç¥åãããšããã®ããªãŒã¯æ¬¡ã®ããã«è¡šãããšãã§ããŸãã
ãµãŒãã¹Aã®ãªã¯ãšã¹ã
|- ã¹ã¬ãããã³ãã©ãŒçªå·1
| |-SQLããŒã¿ããŒã¹ã¯ãšãªX
| |- å éšãµãã¯ãšãª1
| | |-Redis Yãžã®ãªã¯ãšã¹ã
| | |-åæHTTPãµãŒãã¹èŠæ±B
| |- å éšãµãã¯ãšãª2
| | |-SQLããŒã¿ããŒã¹ã¯ãšãªX
| | |-åæHTTPãµãŒãã¹èŠæ±C
|- ã¹ããªãŒã çªå·2
|-éåæãµãŒãã¹èŠæ±W
ç»é¢ã¬ããŒãã¯å³ãåç §ããŠãã ããã 1ããã®ãããªæšãè¡šããããéåŒã«è©±ãã åããŒãã§ãå®è¡ã«ããã£ãæéã芪ããã®å²åã衚瀺ãããŸãã ãªã¯ãšã¹ãã§ããã«ããã¯ãæ€çŽ¢ã§ããŸãã ãªã³ã¯ã䜿çšãããšãä»ã®ãµãŒãã¹ã®ãµãã¯ãšãªã®ãã°ã衚瀺ã§ããŸãã ã¬ããŒãã¯éââåžžã«äŸ¿å©ã§ãã»ãŒç¬æã«äœæãããŸãã ãã¡ãããã³ãŒã«ããªãŒã«äœçŸäžãã®ã¬ã³ãŒããå«ãŸããå Žåã¯äŸå€ããããŸãïŒããã§ããããã€ããããŸãïŒã ããã§ã¯ããã»ã¹ã«æéãããããŸãããããªãŒå ã®ãšã³ããªã¯æ倧500äžä»¶ååŸã§ããŸãã ãã®ã¬ããŒãã¯ããžã§ããããã¡ã€ãªã³ã°ã®ç®çã§æããã䜿çšãããããããã·ã³ã°ã«ã³ãŒã«ãããã¡ã€ãªã³ã°ããšåŒã³ãŸãã
ç»åã¯ã¯ãªãã¯å¯èœã§ããŠã§ããã©ãŠã¶ã®çŸåšã®ã¿ãã§éããŸãã
å³ 1.åäžã®åŒã³åºãã®ãããã¡ã€ãªã³ã°
åäžã®åŒã³åºãã§ã¯ãªããåãçš®é¡ã®åŒã³åºãã®çµ±èšãµã³ãã«ã§äžè¬çãªã¯ãšãªã®ãããã¡ã€ãªã³ã°ãå®è¡ããå¿ èŠãããå ŽåããããŸãã ãããè¡ãããã«ããã®ãããªåŒã³åºãã1ã€ã®ããªãŒã«çµåãããã®ããŒããšèã芪åŒã³åºãã®æéã®ïŒ ã§ã®é¢ç©ãæã€æ£æ¹åœ¢ã®åœ¢ã§è¡šç€ºããã¬ããŒãããããŸãã å³ã®ç»é¢ãåç §ããŠãã ããã 2
ç»åã¯ã¯ãªãã¯å¯èœã§ããŠã§ããã©ãŠã¶ã®çŸåšã®ã¿ãã§éããŸãã
å³ 2.è€æ°ã®ãµã³ãã«åŒã³åºãã®ãããã¡ã€ãªã³ã°
ãããã¯ãŒã¯é 延ã®ååšããã£ããã§ããã¬ããŒãããããŸãã ããã¯ããµãŒãã¹Aãå¥ã®ãµãŒãã¹Bã«èŠæ±ãéä¿¡ããå¿çã100ããªç§ã§åä¿¡ããããµãŒãã¹Bã®èŠæ±ã10ããªç§å®è¡ããã90ããªç§ãã©ããã§æ¶ããå Žåã§ãã ãã®æ¬ èœæéããã©ã°ããšåŒã³ãŸãã é 延ã¬ããŒãç»é¢ã以äžã®å³ã«ç€ºããŸãã 3ã
å³ 3.ãã°ã¬ããŒã
ãããã®ãã°ã¬ããŒãã«å ããŠãä»ã®ã¬ããŒãã䜿çšããŸããããããã¯ç¹å®ã®ã¬ããŒãã»ã©åºãã¯ãããŸããã
ãã¹ãŠã®ä»çµã¿
WebãµãŒãã¹ã¯ããã¢ã«äŸåããªãããŒãã§æ§æãããŠããŸãã åãµãŒãã¹ããŒãã¯ãå¶åŸ¡ããã»ã¹ãšããã€ãã®ã¯ãŒã¯ããã»ã¹ã§æ§æãããŠããŸãã å¶åŸ¡ããã»ã¹ã¯ãã¯ã©ã€ã¢ã³ãã®http-requestsãåãå ¥ããŠåŠçåŸ ã¡ã®ãã¥ãŒã«å ¥ããã¯ã©ã€ã¢ã³ãã«å¿çãéä¿¡ããŸãã ã¯ãŒã¯ãããŒã¯ãå¶åŸ¡ããã»ã¹ãã¥ãŒãããªã¯ãšã¹ããååŸããå®éã®åŠçãå®è¡ããŸãã PostgreSQLããŒã¿ããŒã¹ãå¥ã®WebãµãŒãã¹ãRedisãªã©ã«ã¢ã¯ã»ã¹ã§ããŸãã
å³ 4.ããã»ã¹ã¬ãã«ã§ã®WebãµãŒãã¹ããŒãã®ã¢ãŒããã¯ãã£
ãµãŒãã¹ãžã®åãªã¯ãšã¹ãã«ã¯æ¬¡ã®å±æ§ã»ãããããããããããã°ã«æžã蟌ãå¿ èŠããããŸãã
- ãªã¯ãšã¹ãã®äžæã®ååãããµãŒãã¹ã¡ãœããããšåŒã³ãŸã
- ãªã¯ãšã¹ããæçµçã«å°çãããµãŒãã¹ããŒã
- ã€ãã·ãšãŒã¿ãŒIPãèŠæ±ãã
- ãŠãŒã¶ãŒã»ãã·ã§ã³ID
- èŠæ±ã«ã¹ã±ãŒãã®UUIDïŒèŠæ±ã«ã¹ã±ãŒãã¯ããµãŒãã¹ã®å€éšããã®1ã€ã®èŠæ±ãä»ã®ãµãŒãã¹ãžã®äžé£ã®èŠæ±ãçæãããšãã§ãïŒ
- ãµãŒãã¹ããŒãã®ãªã¯ãšã¹ãçªå·-ãµãŒãã¹ãåèµ·åããããšããªã¯ãšã¹ãçªå·ã¯ãªã»ãããããŸã
- ãªã¯ãšã¹ããåŠçããã¯ãŒã¯ãããŒã®çªå·
ã¯ãšãªå ã§ããŸããŸãªã€ãã³ããçºçããŸããPostgreSQLãRedisãlickHouseãRabbitMQãžã®åŒã³åºããä»ã®ãµãŒãã¹ãžã®åŒã³åºãããµãŒãã¹ã®å éšã¡ãœãããžã®åŒã³åºãã ãããã®ã€ãã³ãã次ã®å±æ§ã§èšé²ããŸãã
- ã€ãã³ããçºçããæ¥æïŒããªç§åäœïŒ
- ã€ãã³ãã®ããã¹ãã¯æãéèŠãªéšåã§ãããä»ã®å±æ§ã«é©åããªããã¹ãŠã®ãã®ãããã«æžã蟌ãŸããŸãïŒSQLã¯ãšãªã®ããã¹ããRedisãžã®åŒã³åºãã³ãã³ããå¥ã®ãµãŒãã¹ããã®åŒã³åºãã®ãã©ã¡ãŒã¿ãŒãRabbitMQãä»ããéåæåŒã³åºãã®ãã©ã¡ãŒã¿ãŒãªã©
- ããªç§ã®ã€ãã³ãæé
- ã€ãã³ããçºçããã¹ããªãŒã çªå·
- ããã»ããµãã£ãã¯-åãæ¥ä»ãšæå»ãæ倧ããªç§ã®ç²ŸåºŠãæã€ã€ãã³ãã®ã·ãŒã±ã³ã¹ã決å®ããããã«å¿ èŠ
- ã€ãã³ãã¿ã€ãïŒæ£åžžãèŠåãŸãã¯ãšã©ãŒ
ãããã£ãŠãããŒã¿æ§é ã¯äžå³ã®ããã«æåã®è¿äŒŒã«èŠããŸãã
å³5 ãã°ãä¿åããããã®åºæ¬æ§é ã®æåã®ããŒãžã§ã³
ããã«åçã§ïŒ
ãµãŒãã¹ - ãµãŒãã¹ã®ååãæã€ããŒãã«ããããã®ããã€ããæ°çŸããããŸã
ServiceNode-ãµãŒãã¹ããŒããæã€ããŒãã«ãæ°åã®ã¬ã³ãŒããå«ãŸããè€æ°ã®ããŒãã1ã€ã®ãµãŒãã¹ã«é¢é£ä»ããããšãã§ããŸã
ã¡ãœãã - ã¡ãœããã®ååãæã€ããŒãã«ãæ°åããããŸã
ãã° -ãã°-å®éã«ã¯ãèŠæ±ããŒã¿ãšãã®ã€ãã³ããæžã蟌ãŸããã¡ã€ã³ããŒãã«ã ããŒãã«ã¯ãã¯ãšãªã§å€§ããªããŒãã«ãçµåããã®ã«æéãç¡é§ã«ãããäœåãªã€ã³ããã¯ã¹ãä¿æããªãããã«ãæå³çã«éæ£èŠåãããŠããŸãã ããšãã°ãã¯ãšãªå±æ§ãå¥ã®ããŒãã«ã«é 眮ã§ããŸãããããŒã¿ãè¿œå ããã³ååŸããããžãã¯ã¯ããè€éã«ãªããŸãã UUIDãšãŠãŒã¶ãŒã»ãã·ã§ã³èå¥åãäœæããããšã¯å¯èœã§ããããã£ãŒã«ãããšã«æ°ããããŒãã«ã®æ°ãããã£ãŒã«ãã«ã€ã³ããã¯ã¹ãäœæãããã°ããŒãã«ã«å€éšããŒã䜿çšããŠã€ã³ããã¯ã¹ãäœæããæ°ããããŒãã«ã«äžèŠãªãã©ã€ããªããŒãäœæããå¿ èŠããããŸãã
WebãµãŒãã¹ã¯ãhttpãnginxïŒãã©ã³ã·ã³ã°çšïŒãä»ããŠãã°ãéä¿¡ããŸãã ãµãŒãã¹ãã°ã®ããŒãã¯ããããåŠçããããŒã¿ããŒã¹ã«æžã蟌ã¿ãŸãã ã¹ããŒã ã以äžã«ç€ºããŸãã
å³ 6.ãã°ãµãŒãã¹ã«ãã°ãéä¿¡ããããã®ã¹ããŒã
å³7ã¯ãã¢ã¹ã¯ã¯ãµãŒãã¹ã®fix-osr-bl17.unix.tensor.ruããŒãã«ãªã¯ãšã¹ããèšé²ãããç»é¢ã瀺ããŠããŸãã èŠæ±ã¯ãVLSIãPerform ActionããšåŒã°ãããã®çªå·ã¯15155ã§ããUUIDã¯æäŸããŸãããèŠæ±ã®ååã®äžã«è¡šç€ºãããŸãã æåã¯ãã[m] [start] EdoâEDOCertCheckAttorneyããšãã圢åŒã®ã¡ãã»ãŒãžãæã€ã¬ã³ãŒãã§ããããã¯ãåŒæ°ã®ãªããµãŒãã¹ã®å éšã¡ãœãããžã®åŒã³åºãã®éå§ã€ãã³ãã®åºå®ã§ãã ããã«ç¶ããŠã2çªç®ã®ãµãã³ãŒã«ã[m] [start] Document.Incoming / 1ïŒ234394;ïŒããå€234394ã®1ã€ã®åŒæ°ãšãšãã«éå§ãããŸãã次ã«ããã£ãã·ã³ã°ãµãŒãã¹ã®ããŒãããåŒã³åºããè¡ãããè¡ã¯ãã®[[rpc call] ...ãªã©
ç»åã¯ã¯ãªãã¯å¯èœã§ããŠã§ããã©ãŠã¶ã®çŸåšã®ã¿ãã§éããŸãã
å³ 7.ããŒããfix-osr-bl17.unix.tensor.ruãã®ãVLSI.FollowActionãã¡ãœããã«å¿ãããã°ç»é¢ã®ç»é¢
ååšããŠãã1幎åã®éããã®ããŒã¿ããŒã¹ãšãµãŒãã¹ã¹ããŒã ã¯å€§ããªå€æŽãåããŠããŸããã ã©ã®ãããªåé¡ã«ééããŸãããïŒ æåã«ã1ã€ã®ããŒã¿ããŒã¹ã«æžã蟌ã¿ãè¡ããŸããããæåã®æ°æ¥ãã次ã®äºå®ã«ééããŸããã
- INSERTã䜿çšããŠéåžžã®æ¹æ³ã§ããŒã¿ããŒã¹ã«æžã蟌ãããšã¯ã§ãããCOPYåœä»€ã®ã¿ã«åãæ¿ããŸããã
- å€ãããŒã¿ãDELETEãä»ããŠéåžžã®æ¹æ³ã§åé€ããã®ã¯éçŸå®çã§ãããTRUNCATEã«åãæ¿ããŸããã ãã®åœä»€ã¯ãããŒãã«å šäœã«å¯ŸããŠååã«è¿ éã«åäœãããã¡ã€ã«ãã»ãŒãŒããµã€ãºã«åãæšãŠãŸãã ãã ããç¡é¢ä¿ãªããŒã¿ã®ã¿ãåé€ãããããã«ãæã®åæ¥ã«ç¬èªã®ããŒãã«ã»ã¯ã·ã§ã³ãçšæããå¿ èŠããããŸããã ãšã«ããTRUNCATEã«ã¯äžå¿«ãªç¬éã1ã€ãããŸã-PostgreSQLãµãŒããŒããã¬ãŒãäžã®ã©ããã¢ã©ãŠã³ãããã»ã¹ãé²ãããã«èªåããã¥ãŒã ãéå§ããããšã決å®ããå ŽåãTRUNCATEã¯ã©ããã¢ã©ãŠã³ããé²ãããã®èªåããã¥ãŒã ãçµäºãããŸã§å®è¡ããããããªãã®æéåäœããŸãã ãããã£ãŠãã¯ãªãŒãã³ã°ã®åã«ããã®ããã»ã¹ãæã¡ãŸãã
- ãã©ã³ã¶ã¯ã·ã§ã³ãã°ã¯å¿ èŠãããŸãããCREATEUNLOGGEDã䜿çšããŠããŒãã«ãäœæãå§ããŸããã
- ãã£ã¹ã¯ãžã®åææžã蟌ã¿ã¯äžèŠã§ã-fsync = offããã³full_page_writes = offãå®è¡ããŸãããããã¯èš±å®¹ãããŸãããã¡ããããã£ã¹ã¯ã«ããããŒã¿ããŒã¹ã®åæ¢ã¯å¯èœã§ãããéåžžã«ãŸãã§ãã
ãããã®æäœã¯ãPostgreSQLãµãŒããŒãããªããããªãŒããŒã¯ããã¯ããŸããã synchronous_commitããã³commit_delayãã©ã¡ãŒã¿ãå€æŽããããšããŸãããããã®å Žåããããã¯ããã©ãŒãã³ã¹ã«é¡èãªåœ±é¿ãäžããŸããã§ããã
æã®åæ¥ããšã«ããŒãã«ãããŒã¿ã»ã¯ã·ã§ã³ã«åå²ãããšãæ°ããããŒã¿ããŒã¹ã¹ããŒã ã¯æ¬¡ã®ããã«ãªããŸãã
å³ 8.æ¯æã®ããŒãã«ãåããããŒã¹ã®ã¹ããŒã
æéããã€ã«ã€ããŠããã°ã®ããªã¥ãŒã ã絶ããå¢å€§ããŠããããã1ã€ã®ããŒã¿ããŒã¹ã«ããŒã¿ãä¿åã§ããªããªããŸããã ãŸãããã°ãµãŒãã¹ã®æåã®ãããã¿ã€ãã¯ãåæ£ããŒãžã§ã³çšã«ããçŽãããŸããã ããã§ããã°ãµãŒãã¹ã®åããŒããããã€ãã®ããŒã¿ããŒã¹ã®1ã€ã«æžã蟌ã¿ãã©ãŠã³ãããã³ã¢ã«ãŽãªãºã ã«åŸã£ãŠèšé²ã®ããŒã¹ãéžæããŸããã åå䟿å©ã§ããã çµ±èšçã«ãåããŒã¿ããŒã¹ã¯åãè² è·ãåããè² è·ã¯æ°Žå¹³æ¹åã«ã¹ã±ãŒãªã³ã°ãããããŒã¿ããŒã¹äžã®ããŒã¿ããªã¥ãŒã ã¯GB以å ã«äžèŽããŸããã 1ã€ã®PostgreSQLãµãŒããŒã®ä»£ããã«ã5ããã°ã«å¯ŸããŠæ©èœããããã«ãªããŸããããã°ãµãŒãã¹ã®ããŒãã®ã¹ããŒã ã¯æ¬¡ã®ããã«ãªããŸããã
å³ 9.è€æ°ã®ããŒã¿ããŒã¹ã䜿çšãããã°ãµãŒãã¹ã®ã¹ããŒã
å³ãããåãµãŒãã¹ããŒããè€æ°ã®ããŒã¿ããŒã¹ãžã®æ¥ç¶ãä¿æããŠããããšãããããŸãã ãã¡ããããã®ãããªã¹ããŒã ã«ã¯æ¬ ç¹ããããŸãã ããŒã¹ã«é害ãçºçããå ŽåããŸãã¯ããã«ãã«ãªã£ãå ŽåããµãŒãã¹å šäœãæ©èœããªããªããŸããã æ°ãããµãŒãã¹ããŒããè¿œå ãããšãPostgreSQLãµãŒããŒãžã®æ¥ç¶æ°ãå¢å ããŸããã
å€æ°ã®æ¥ç¶ãä»ããŠåãããŒãã«ã«åæã«æžã蟌ããšãããã¯ã®æ°ãå€ããªããæžã蟌ã¿ããã»ã¹ãé ããªããŸãã ããŒã¹ãããã®æ¥ç¶æ°ã®å¢å ã¯ãTRANSACTON MODEã¢ãŒãã§pgBouncerã䜿çšããŠå¶åŸ¡ã§ããŸãã ãã ããå¥è·¡ã¯ãããŸããããã®å Žåããªã¯ãšã¹ããå®äºããæéã¯ãããã«é·ããªããŸãã ããã§ããäœæ¥ã¯è¿œå ã®ãªã³ã¯ãçµç±ããŸãã ããŠãTRANSACTONã¢ãŒãã§ã¯ãããŒã¿ããŒã¹ãžã®æ¥ç¶ãé »ç¹ã«åãæ¿ããããŸããããããæé©ãªæ¹æ³ã§äœæ¥ã«åœ±é¿ãäžããããšã¯ãããŸããã
ç§ãã¡ã¯ãã®ãªãã·ã§ã³ã«ãã1幎éåãçµã¿ãæçµçã«ã¯1ã€ã®ãµãŒãã¹ããŒããpgBouncerã䜿çšããã«1ã€ã®ããŒã¿ããŒã¹ãšçŽæ¥é£æºããã¹ããŒã ã«ç§»è¡ããŸããã 2åã®å¹æãããããã®æç¹ã§ããã«3ã€ã®æ ç¹ãè¿œå ããã8ã€ã®æ ç¹ããããŸãããä»æ¥ãŸã§çããŠããç§ãã¡ã¯éåžžã«å€ãããŸãã
ãã®ã¹ããŒã ãããããã«ããã€ãã®ãã©ã¹ãåŸãŸããã æ°ããããŒããè¿œå ãããŠããããŒã¿ããŒã¹ãžã®æ¥ç¶æ°ã¯å¢å ããŸããã ããŒã¿ããŒã¹ãéåãå§ãããšãnginxã¯ä»ã®ãµãŒãã¹ããŒãã«è² è·ãåæ£ããŸãã
å³ 10.çŸåšã®ãã°ãµãŒãã¹ã¹ããŒã ïŒ1ã€ã®ããŒã-1ã€ã®ããŒã¿ããŒã¹
ããã«ãPostrgeSQLãµãŒããŒã®æé«ã®ããã©ãŒãã³ã¹ãå®çŸããCentos 7ã§å®è¡ããããã«ããããã©ã€ã³ã¹ã±ãžã¥ãŒã©ãŒãã€ã³ã¹ããŒã«ããŸããã ãŸããããŒãã£ãã£ãã·ã¥ã®ãµã€ãºãåæžããŸããã ãã®ãã©ã¡ãŒã¿ãŒã¯vm.dirty_background_bytesã§ããããã£ãã·ã¥ã®ãµã€ãºãèšå®ããŸããã·ã¹ãã ã¯ããã£ãã·ã¥ã®ãµã€ãºãèšå®ããŠãã·ã¹ãã ããã£ã¹ã¯ã«ãã©ãã·ã¥ããããã¯ã°ã©ãŠã³ãããã»ã¹ãéå§ããŸãã ããªã¥ãŒã ã倧ããããå ŽåãããŒã¯è² è·ããã£ã¹ã¯ã«å°éããŸã-å¹³æ»åãããããã«ãã©ã¡ãŒã¿ãŒãéžæããå¿ èŠããããŸãã
ããã©ãŒãã³ã¹ã®åé¡ã«å ããŠãã¹ãã¬ãŒãžã¹ããŒã¹ã®äžè¶³ãšããæ·±å»ãªåé¡ããããŸãã çŸåšã32 TBã®è²»çšãããããŸãã ããã§3æ¥éã¯ååã§ãã ãã ãããã°èšé²ã§æ°åã®ããŒã¯ããŒã¹ããçºçããããšãããããã®å Žæã¯ããæ©ãçµäºããŸãã ã¹ããŒã¹ãå¢ããããšãªãããã«å¯ŸåŠããæ¹æ³ã¯ïŒ ç§ãã¡ã¯æ¬¡ã®ããã«ã¿ã¹ã¯ãå®åŒåããŸããã詳现ãæãªãããŸãããå°ãªããšãããã€ãã®ãã°ãæ®ãå¿ èŠããããŸãã
ããã«åŸã£ãŠã1æ¥ãããã®ãã°ããŒãã«ã3ã€ã®ããŒãã«ã«åå²ããŸããã æåã¯0æéãã8ãŸã§ã®æéã2çªç®ã¯8ãã16ãŸã§ã3çªç®ã¯16ãã24ãŸã§ã®æéã®ããŒã¿ãä¿åããŸãã ãããã®åããŒãã«ã¯ãããã«3ã€ã®ã»ã¯ã·ã§ã³ã«åå²ãããŸããã ã»ã¯ã·ã§ã³ã¯ããã°ã®3ã€ã®éèŠåºŠã¬ãã«ã«å¯Ÿå¿ããŠããŸãã æåã®ã¬ãã«ã«ã¯ããªã¯ãšã¹ãã®ãã¡ã¯ãããã®æéïŒè©³çŽ°ãªãïŒãããã³ãªã¯ãšã¹ãäžã«çºçãããšã©ãŒã®ãã¡ã¯ãã«é¢ããåºæ¬æ å ±ãæ ŒçŽãããŸãã 2çªç®ã®ã¬ãã«ã«ã¯ããµãã³ãŒã«ãšSQLã¯ãšãªã«é¢ããæ å ±ãæ ŒçŽãããŸãã 3çªç®ã®ã¬ãã«ã«ã¯ãæåã®2ã€ã«å«ãŸããŠããªããã¹ãŠã®ãã®ãæ ŒçŽãããŸãã ãã°ãµãŒãã¹ããŒãã¯ãèšé²çšã«æ®ã£ãŠãã空ãé åã15ïŒ æªæºã§ããããšãèªèãããšã3çªç®ã®ã¬ãã«ã§æãå€ãã»ã¯ã·ã§ã³ã®ã¯ãªãŒãã³ã°ãéå§ããŸãã é²é³ããã®ã«ååãªã¹ããŒã¹ãã§ãããŸã§ç¶ããŸãã 3çªç®ã®ã¬ãã«ã®ã»ã¯ã·ã§ã³ããªããªã£ãŠãããŸã ååãªã¹ããŒã¹ããªãå Žåã¯ã2çªç®ã®ã¬ãã«ã®ã»ã¯ã·ã§ã³ã®ã¯ãªãŒãã³ã°ãæåã®ææªã®å Žåã«éå§ãããŸãããããã¯çºçããŠããŸããã
ãã以åã¯ããã°ã®èšé²ã«ã€ããŠã§ããããåŸã§èªãããã«èšé²ãè¡ããŸãã äžè¬ã«ãèªã¿åãã®ããã«ãæéã«å¿ããŠãããŒãã«ã®å¿ èŠãªã»ã¯ã·ã§ã³ãèšç®ãããã¯ãšãªã«ä»£å ¥ãããŸãã ã»ã¯ã·ã§ã³ãæäœããPostgreSQLã®çŸåšã®ã¡ã«ããºã ã¯åäœäžèœã§äžäŸ¿ã§ãã䜿çšããŸããã ãã°ãžã®ã¯ãšãªã®çµæã¯ã©ã®ããã«èŠããããå³ã«ç€ºããŸããã 7.ãªã¯ãšã¹ãã®åºæ¬èŠä»¶ïŒ
- ããã¯å¯èœãªéãé«éã§ãªããã°ãªããŸãã
- ã¯ãšãªã®çµæã¯ããã²ãŒã·ã§ã³ã«ãªããŸã
äž¡æ¹ã®èŠä»¶ãæºããããšã¯100ïŒ äžå¯èœã§ãããèŠæ±ã®80ïŒ ã«å®è£ ã§ããŸãã ãããç§ãã¡ãããããšã§ãã LogããŒãã«ã®11ã®ã€ã³ããã¯ã¹ã«é©åããçŽ20ã®ã¯ãšãªãããã¡ã€ã«ãå€æããŸããã æ®å¿µãªãããã€ã³ããã¯ã¹ã¯ãšã³ããªã®è¿œå ãé ãããã¹ããŒã¹ãçã¿ãŸãã ãã®ããŒãžã§ã³ã§ã¯ããããã®ã€ã³ããã¯ã¹ã¯ããŒã¿ã®å Žæã«å¹æµããå Žæãåãå»ããŸãã
ãã°ãåä¿¡ããããã«ãŠãŒã¶ãŒãæå®ããæéå šäœã®ããŒã¿ãéžæããããšã¯ãããŸãããããã¯éå¹ççã§ãã å€ãã®å Žåãã¯ãšãªã®æåãŸãã¯æåŸã®ããŒãžã衚瀺ããã ãã§ååã§ãã ãŸãã«ããŠãŒã¶ãŒã¯æ¬¡ã®ããŒãžã«ç§»åã§ããŸãã äŸã䜿çšããŠããã°éžæã¢ã«ãŽãªãºã ãæ€èšããŠãã ããã 1ããŒãžã«500ã¬ã³ãŒãã®åºåã§1æéã®ããŒã¿ããªã¯ãšã¹ãããŸãããïŒ
æåã«ã1 msã®æéã¯ãšãªãäœæãããã¹ãŠã®ãã°ããŒã¿ããŒã¹ãšäžŠè¡ããŠè©Šè¡ããŸãã ãã¹ãŠã®ããŒã¿ããŒã¹ããçµæãåãåã£ãåŸããªã¯ãšã¹ããçµåãããã®ããŒã¿ãæéã§ãœãŒãããŸãã 500ã¬ã³ãŒããèç©ãããªãå Žåã1ããªç§ã·ããããæéã2åã«å¢ãããŠã衚瀺ã«å¿ èŠãª500ã¬ã³ãŒããåéãããŸã§æé ãç¹°ãè¿ããŸãã
å€ãã®å Žåããã®åçŽãªã¢ã«ãŽãªãºã ã§ããŒã¿ããã°ããååŸã§ããŸãã ãã ããæéå šäœã§æ°çŸäžä»¶ã®ã¬ã³ãŒããéžæã§ãããã£ã«ã¿ãªã³ã°æ¡ä»¶ãããããã®äžã®ããã€ããå¿ èŠãšããå Žåãããšãã°ããã°ã€ãã³ãã®ãã¡ãã»ãŒãžããã£ãŒã«ãã§ç¹å®ã®ããã£ãã«èŠãããªãè¡ãæ¢ããŠããå Žåãçµæã¯ããã«ã¯è¿ãããŸããã
ãã¹ãŠããã©è²ã§ããïŒ æ®å¿µãªããããã¹ãŠã§ã¯ãããŸãã...é·æéã«ããã£ãŠçµæãåŸãããªãããã«ã¯ãšãªãèšèšãããã®ãããªã¯ãšãªãããŒã¿ããŒã¹ãµãŒããŒã«å ¥åããŠãããããæ©èœããªãããã«ããããšãã§ããŸãã ããã¯å éšçã«äœ¿çšããããããæå³çãªãããã¯ãé€å€ããŸã-ãã®ãããªäººã ãç°¡åã«èšç®ããã©ã³ãã ãªãããã¯ã®ã¿ãæ®ããŸãã PostgreSQLã³ãã³ããSET LOCAL statement_timeout TO ...ãã«ãããã¯ãšãªã®ã¿ã€ã ã¢ãŠãã«ãã£ãŠäºæ ãã身ãå®ããŸãã1ã€ã®ããŒã¿ããŒã¹ã«å¯Ÿãããã¹ãŠã®ã¯ãšãªã®åèšæéã«ã¯1200ç§ã®æéãäžããããŸãã ããŒã¿ããŒã¹ãžã®æåã®ã¯ãšãªã«ã¯1200ç§ã2çªç®ã«ã¯1200ç§ãæåã®ã¯ãšãªã«è²»ãããæéãåŒããã¿ã€ã ã¢ãŠããªã©ãèšå®ãããŸããæéã«éã«åããªãã£ãå Žåã¯ããã£ã«ã¿ãªã³ã°æ¡ä»¶ãçµã蟌ãããã«ãšã©ãŒãè¿ãããŸãã
ä»ã®ãã°ã¹ãã¬ãŒãžã·ã¹ãã ã«ã¢ã¯ã»ã¹ããããšãã
ClickHouseã®ãã°ã®ä¿åã«çå£ã«åãçµã¿ãŸããã MergeTreeãšã³ãžã³ãšé£æºããŸããã äºåãã¹ãã¯çŽ æŽããããã·ã¹ãã ãå®çšŒååã«å±éããŸããã ããã§ã¯èšé²é床ã«é¢ãã質åã¯ãŸã£ãããããŸããã§ãã-ä¿ç®¡å Žæã§ã®ã²ã€ã³ã¯æ倧7åã§ããã 2ã€ã®ClickHouseããŒããããŒã¿ãåŠçããããããã20ã³ã¢ãš64 GBã®ã¡ã¢ãªãåããŠããŸããã ã¡ãªã¿ã«ãéçšåã®PostgreSQLã¯èŠä»¶ãå°ãæ§ããã§ããµãŒããŒããã8ã³ã¢ãš32 GBã®ã¡ã¢ãªããããŸããã ããããClickHouseã®ã¹ãã¬ãŒãžã®æžå°ãè³ããããšããŠããPostgreSQLã«æ¯ã¹ãŠClickHouseãžã®èªã¿åãèŠæ±ãå€å°äœäžããããšãèš±ãçšæãã§ããŠããŸããã
ClickHouseãµãŒããŒãžã®ããŒã¿éžæèŠæ±ã®æ°ãç¹å®ã®æ°ãè¶ ãããšããã«ããããã¯æ¥æ¿ã«æžéããŸããã ãããæã¡è² ããããšã¯ã§ããŸããã§ããã ClickHouseã¯æŸæ£ãããªããã°ãªããŸããã§ããã ãããããèªã¿åãèŠæ±ãé ããªãçç±ã¯ãClickHouseããŒãã«ã«äœæã§ããã€ã³ããã¯ã¹ã1ã€ã ãã ã£ãããã§ãã å€ãã®ãã°ã¯ãšãªãããã¡ã€ã«ããã®ã€ã³ããã¯ã¹ã«é©åãããããŒã¿ã®èªã¿åããé ããªããŸããã
ClickHouseã«å ããŠã圌ãã¯ElasticSearchãçãã1ã€ã®PostgreSQLãã°ããŒã¿ããŒã¹ããæ¬çªïŒã4TbïŒã®ããŒã¿ã泚ã蟌ã¿ãŸãããããã¯ãPostgreSQLã«æ¯ã¹ãŠçŽ15ïŒ ã®å©çããããããŸããããšã©ã¹ãã£ãã¯ã§ã
èè ïŒã¢ã¬ã¯ã»ã€ã»ãã¬ã³ãã£ãšã