
ã€ãªã€ã»ã³ã¹ã¢ããã£ã³ã¹ããŒïŒ ãã€ãããã€ãªã³ã ïŒ
ãªããžããªã§ã®äœæ¥ã«ã¯äžè¬çãªãšã©ãŒãããããããã®ãšã©ãŒã¯æå³çã«ããããçºæãããã®ã§ã¯ãããŸãããããªã¢ãŒãããŒã¿ããŒã¹ãµããŒãã§å€ãã®äœæ¥ãè¡ã£ãŠãããããåã«ããããåéããŸãã å€ãã®å Žåãã客æ§ãããåãã§ãã ãããŠãåéãããã®ã«å¯ŸããŠäžçš®ã®è©äŸ¡ãè¡ããŸãã ä»æ¥ã¯ãããã®ããšã«ã€ããŠã話ããŸãã
Ilya KosmodemyanskyïŒãã¹ãŠã®ã¹ãã¬ãŒãžã«å ±éããããšãããã€ããããŸãããç§ãã¡ã¯äž»ã«PostgreSQLã§äœæ¥ããŠãããããPostgreSQLã«åºæã®ããã€ãã®äºæã«ã€ããŠèªç¶ã«èšåããŸãã ãŸããPostgreSQLã¯äŒçµ±çã«Webäžã§å€ã䜿çšãããŠããŸããã
ãšãã°ã©ããšããŠã次ã®ãã®ãåŒçšã§ããŸãã

ãšã¬ã¯ãããã¯ã¹ã®å Žåãšåæ§ã«ã2çš®é¡ã®åé¡ããããŸããäœåãªæ¥è§Šãããå ŽæããŸãã¯å¿ èŠãªå Žæã«æ¥è§Šããªãå Žæã§ãã ããŒã¿ããŒã¹ã¯åã話ã§ãã 人ã ãããŒã¿ããŒã¹ã«ä¿åããªããã®ïŒåçããå®å šã«é©ãã¹ããã®ãŸã§ãããããããã«ä¿åãã¹ãã§ã¯ãããŸããã ãããã¯ãéã«ãä¿åãã¹ããã®ãããŒã¿ããŒã¹ã«ä¿åããªããããããŸããã ãããã®ã«ã¯1ã€ã®ãã£ãã·ã¥ã䜿çšãããå¥ã®ç®çã«ã¯å¥ã®ãã£ãã·ã¥ã䜿çšããã3çªç®ã®ãã£ãã·ã¥ã«ã¯NoSQLã¹ãã¬ãŒãžãªã©ã䜿çšãããããã§ãã ãããŠãããããããŒã¿ããŒã¹ã®ã©ããã«ããæ¹ãè¯ãã§ãããã ãããŠãã£ãšäŸ¡å€ããããŸãã
ãããã®ããšãå®éã«ç°¡åã«èŠãŠã¿ãŸãããã ãããã®åé¡ã¯ããããã®åé¡ã®æ·±å»åºŠã®é ã«ããã»ã©å€ãã¯é åºä»ããããŠããŸããããããã§ãããææ¡ããŸãã
å 責äºé ãšããŠïŒããã€ãã®ãããŒãªã³ã°ããããŸãã ãã¶ãç§ã¯ã©ãããžé²ãŸãªãã§ãããã ããªããããã«ã€ããŠéå±ãªè©±ããããšãïŒãç·ã¯ãã®ããã«ãããããªãïŒãããããŠããã¡ããã誰ããèšãïŒãããããšåœŒãã¯ãããããã ææ ãçŸãããšã人ã¯æ¬¡ã®ããã«èŠããŸãã ã©ããªæãè ããã®ããã«æžããŠããŸããïŒã gitãéããããã«-ta damïŒ æšæ¥ãããæžããã®ã¯èª°ã§ããïŒ ãã®åŸãããããèšæ¶ãããŸãã
ãŸããæåã®åé¡ã®1ã€ãåç §ããŠãã ããã

ãããŠæåã®ãã®ã¯ãéåžžã«ãŸããªæ©äŒã«ãã芳å¯ããªãããã§ãã ããããããã®åé¡ãOracleãšDB2ã§çºçããããšã¯ã»ãšãã©ãããŸãããã¹ã±ãŒãªã³ã°ãããåããŒãã«ã¯è«å€§ãªè²»çšããããããã§ãã ãã ããããã¯ç©ºæ³ã®éé¿ãå¶éããŸãããWebã§ç¹ã«äœ¿çšãããããã§ã¯ãããŸããã ãããŠããªãŒãã³ãœãŒã¹ã§ãç¡æã®ãã®ã§-ãã è¡ãæ¹æ³ã§ãïŒ ããã«ãPostgreSQLã§ã¯çµ¶å¯Ÿã«å¿ èŠã§ã¯ãããŸãããMySQLã§ã¯ããã«ç¹åŸŽçã§ãç¹ã«NoSQLã§ã¯ç¹ã«å¿ èŠã§ãã
人ã ã¯ã¹ã±ãŒãªã³ã°ã奜ãã§ãããªããªãã¹ã±ãŒãªã³ã°ã¯è¯ãããã§ãã圌ãã¯ããã«ã€ããŠæ¬ã«æžããŠããŸãã ãè¯ãããšããçç±ã ãã§ã ãªãè¯ãã®ã-説æã§ãã人ã¯ã»ãšãã©ããŸãããããã«ã¯ããã€ãã®ç°ãªãåé¡ããããŸãã
ç¹ã«ç¹åŸŽçãªã®ã¯ãéå»10幎éã§ããã¹ãŠãã¹ã±ãŒã«ã¢ãŠããããã¹ãã§ããã決ããŠã¹ã±ãŒã«ã¢ãããããã¹ãã§ã¯ãªããšããããšãåžžã«èããŠããããšã§ãã ã¹ã±ãŒã«ã¢ãããã²ã©ãã®ã§ïŒ
ãã以æ¥ãçºæãããŠä»¥æ¥ãã³ã³ãã¥ãŒã¿ãŒã¯ãã匷åã«ãªããŸããã ã¿ã¹ã¯ãæé·ããŸããããã¿ã¹ã¯ã¯åŒ·åãªã³ã³ãã¥ãŒã¿ãŒã»ã©ã«ã¯æé·ããŸããã§ããã
客芳çãªçç±ã§ããã°ããŒã¿ãæ±ã人ãããŸãã圌ãã¯ãããã³ã³ã©ã€ããŒããäœããåŒãåºãç©çåŠè ã§ãã ãããã¯ãæãç 究ããç©çåŠè ã§ãã 圌ãã¯éºäŒåãç 究ããçç©åŠè ã§ãã ãããã¯ã³ã³ãã¥ãŒã¿ãŒã²ãŒã ãäœæããã²ãŒã ã¹ã¯ãªããã®éçºãäžååãªäººïŒå®å®ã®ååãããå€ãã®èŠçŽ ãæã€ããšãå€ãïŒã§ããããããæ©èœããã¯ãã ãšèããŠããŸãã
倧éã®ããŒã¿ãæ¬åœã«å¿ èŠã§ã1å°ã®ãã·ã³ã«åãŸããªã客芳çãªã¿ã¹ã¯ã¯ããããããã§ãã ãã¶ããããçš®ã®èšŒåžååŒæãšãã®ãããªãã®ã
ãããã£ãŠãååãšããŠãç¹ã«æåããã¹ã±ãŒãªã³ã°ããã®ã¯ããŸãè¯ããªãå¯èœæ§ããããŸãã å®éã®ãšãããå žåçãªã±ãŒã¹ã¯ããããã©ã®ããã«çºçããããããè¿ããããç解ã§ããããã«ããããšã§ãã

å€ãã®äººãç§ãã¡ã®ãŠã§ããµã€ãã䜿çšããããšã«ããŸããã éåžžãå ±ååµæ¥è ã®1人ãšããŒã±ãã£ã³ã°ãè¡ããšãã©ãã ãã®è² è·ããããããèšç»ãããšãã«ãéåžžã®ããã°ã©ããŒã¯äžåºŠã«100ã«åå²ã§ããŸãã ãããããããããªããããªãã¯ããã«ã€ããŠäœããããæºåãã§ããŠããã¯ãã§ãã åœç¶ã®ããšãªããã人ã ã¯ããã«ã¹ã±ãŒãªã³ã°ã«ã€ããŠèãããããŠç§ã¯ãããããææå°æ©ã®ã¹ã±ãŒãªã³ã°ã«ã€ããŠããèããŸãã
å žåçãªç©èªã ãµã€ãã«100äžäººã®ã¢ã¯ãã£ããŠãŒã¶ãŒãããã®ã§ããã®ãŠãŒã¶ãŒã®äœææ¥ãŸã§ã«ããããå ±æããŸãã ãããŠããªããŠãŒã¶ãŒãäœæãããæ¥ä»ãŸã§ã«ïŒ ããã¯ç§ãã¡ã«ãšã£ãŠãšãŠãå¿ èŠã ãšæãããããã§ãã å®éããã®ãããªã±ãŒã¹ã¯ããŸããŸãªå ŽåããããŸãããããã¯ãã®1ã€ã§ãã
ãã®çµæããã°ãããããšãå€ãã®åé¡ãçºçããŸãã ãŠãŒã¶ãŒã¯å®å šã«ç¬ç«ããŠããããã§ã¯ãªããããããšãã°ããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®ããçš®ã®ãããµããã¿ã¹ã¯ãåéããããã«ãå人ãšåããã·ã³äžã«ããå Žåã¯ãç¹å¥ãªãµãŒãã¹ãªã©ãå¿ èŠã§ãã å®éããã£ããããã®ä»ã®çžäºå¯Ÿè©±ã§ã¯ãå¿ ç¶çã«ãŠãŒã¶ãŒãå¥ã®ãã·ã³ã«äœãã§ããããšãå€æãããå°çãããŸããã ããžãã¯å šäœã§ããã«è€éã«ãªãããµããŒããããã«è€éã«ãªããŸãã
ããªãåã«ããããããžã§ã¯ãã§ãPostgreSQLãæèŒãã10å°ã®ãã·ã³ãé 眮ããå ŽåïŒå€ãã®ç¹ã§ãŸã é«éã§ã¯ãããŸããïŒããããã®ãã·ã³ã¯èšç»ãããè² è·ãã³ã¹ãã«èããèœåãåããŠããå¿ èŠããããšæããŸããã æ¯èŒããŠãèŠãã Oracleãšã³ã¿ãŒãã©ã€ãºã©ã€ã»ã³ã¹ãè³Œå ¥ãã倧ããªãã£ãããããåãããã£ã¹ã¯ã¢ã¬ã€ã«é 眮ããã ãã§ããéãæã£ãŠã°ãããŠå®ããªããŸããã ãã®ãããªå ŽåããããŸãã ããŒã¿ããŒã¹ãããè¯ãæ©èœãå§ããã®ã§ãä»ã§ã¯ãã®äž»é¡ã«ã€ããŠã¯ç°¡åã§ãã ãã¹ãŠ-OracleãMySQLãPostgreSQLã®äž¡æ¹ãéå»10幎éã«ããã£ãŠéåžžã«å€§ããªé²æ©ãéããŸããã
ããããããã«å€§ããªåé¡ãçºçããŸãã çªç¶ãå šäœãèŠãããšãã§ãã100å°ã®ãã·ã³ã®ãã¡ãã¢ã¯ãã£ãã«ãªã£ãŠãããã·ã³ã¯ãããã§ãã æ°ãã«ç»é²ããããŠãŒã¶ãŒã¯ãç§ãã¡ã®ãµã€ãã§ã®ç掻ãã¿ãŒã³ã«èµ·å ããŠãäžåäžã«æŽ»åããŠããŸãã ã€ãŸããé·ãéç»é²ããŠããã€ãã®ãã·ã³ã«èœã¡çãããŠãŒã¶ãŒã¯ãããã«å¿ããŠäœããããè»ã®ã³ã¹ããããããŸãã
ãã1ã€åé¡ããããŸãããã·ã³ãç«ã£ãŠããå Žåããã£ãã·ã¥ã¯ãŠã©ãŒã ã¢ãããããŸããã ããŒã¿ããŒã¹ã¯ããã£ã¹ã¯ããã§ã¯ãªããã£ãã·ã¥ããããŒã¿ãè¿ããšãããé«éã«åäœããŸãã ãããã£ãŠãããããŠãŒã¶ãŒã«é¢ããããŒã¿ãååŸããããšãããªã¯ãšã¹ãã1æéã«1åå±ããšãå®ç§ãªã¿ã€ãã³ã°ããã¯ã»ã©é ãå ŽåããŠã©ãŒã ã¢ãããããªãããããããè¡ãããã«ãªã¯ãšã¹ããæ°åé ããªãããšãããããŸãããã£ãã·ã¥ããã¹ãŠãããŸãæ©èœããŸããã
100å°ã®è»ãé éããã€ã³ãã©ã¹ãã©ã¯ãã£ã«é©åãªå€æŽãå ããäœåäžèœãªã·ã¹ãã ãåãåã£ããããããã«ããçŽãå¿ èŠããããšããåé¡ããããŸãã
ãããŠãäžè¬çã«ããã®ã±ãŒã¹ã¯ã¯ããã«åºãã§ãã æåã«åœŒãã¯ç Žçã«äžã€ã®éµãèŠãŸããããããŠåœŒãã¯å®éã«ã¯å®å šã«ç°ãªãäœããããå¿ èŠãããããšã«æ°ã¥ããŸããã ãããããããçŽãå§ããŸããã WebãåããŠããã¿ãŒã²ããã§ãããå®éãèšèšãããéãæ¡ä»¶ãå€åãããããããäžåºŠå¥ã®æ¹æ³ã§å¿ èŠã§ããããšãããããŸããã
ãããã£ãŠãç§ã®å žåçãªã¢ããã€ã¹ã¯ãæåã«éåžžã®ãªã¬ãŒã·ã§ãã«ããŒã¹ã§1å°ã®ãã·ã³ã®ãªãœãŒã¹ãŸã§æ¡å€§ãããã®ããŒã¹ã§ã©ãã«å°éãããã確èªããããšã§ãã 次ã«ããã®è»ã®ã¢ããã°ã¬ãŒãã«ãããè²»çšãšããããã¡ãã·ã§ããã«ãªããŒããŠã§ã¢ã§ããè¯ããããéãçããããšãã§ããéé¡ãããããèšç®ããŸãã ãããŠããããèšç®ããåŸããã®åŸã®ã¿ã¹ã±ãŒãªã³ã°ã«ã€ããŠæ±ºå®ããŸãã
ãããŠããã®ã¢ãããŒãã¯å®éã«ã¯è€æ°ã®ãããžã§ã¯ããç¯çŽããŸããããªããªããæ©ââãããã¹ã±ãŒãªã³ã°ã¯å€ãã®ããŒã ãªãœãŒã¹ãšå€ãã®ãéãå¿ èŠãšããçµå±ã¯ããé«äŸ¡ã§æªããªãã ãã ããã§ãã

2çªç®ã®ãã€ã³ãã¯ãã©ã³ãã³ã°ã§ãååé«ãã ãããã¯ããŒãããã®ããã°ããŒã¿ãã®ã±ãŒã¹ã§ãã äŒæ¥ã¯ãåžžæããŒã¿ããæã¡ãããšèããŠããŸãã å žåçãªã¹ããŒãªãŒ-ããã€ãã®çµ±èšãèæ ®ããåéããŸããããŠãŒã¶ãŒã¢ã¯ãã£ããã£ãã¿ã€ã ã€ã³ãã³ããªãäžè¬çã«ã¯ç¥ããŸããã å®éãããã«ã¯æ°ããããŒã¿ãããã®ã§ãããããã®éèšã®ã¿ãå¿ èŠã§ããããã¯ãå æ¥ãå é±ãæåŸã®1æéã§ãã ãã以å€ã¯ãã¹ãŠäºåã«èšç®ãããåäœã§ãã ãããŠããããã®ãŠãããã幎ã«1ååéèšããå¿ èŠããããŸãã ä»ã®ã±ãŒã¹ã§ã¯ããããã¯ãŸã£ããæ°ããããªãããšãããããŸããããæ°ãã©ãã€ããä¿æããŠãããããåã«ããã«æšªããã£ãŠããŸããã ããã¯ãäžè¯ããã°ããŒã¿ã®å žåçãªäŸã§ãã
ãã®ã¿ã¹ã¯ãããžãã¹ã«èª¬æããã®ã¯ããã°ã©ããŒã®ã¿ã¹ã¯ã§ããããžãã¹ãããŒã¿ã倱ããåæãèšç®ããªããšããææã¯å®å šã«æçœã ããã§ãã ããŒã¿ã¯ãéã§ããã¹ãŠãã·ã³ãã«ã§ãã ããããåæã«ã4ãã©ãã€ããä¿æãã代ããã«ãããŸããŸãªèå³æ·±ãããšãè¡ãããšãã§ããŸãã ããŒã¿ãæ£ããã¢ãŒã«ã€ãã§ããçããŒã¿ãã¢ãŒã«ã€ããã·ã³ã®ã©ããã«ä¿åããããšãã§ãããããå¿ èŠã«å¿ããŠããããã«åºã¥ããŠéèšãåèšç®ã§ããŸããããã¯ãçªç¶æ°ããéèšãå¿ èŠã«ãªã£ãå Žåã«ãçµ±èšãªã©ã«äœ¿çšããŸãã ãããããã®çµæãå°çããã°ããã®ãããããŒã¿ã¯4ãã©ãã€ãã§ã¯ãªã100ã®ã¬ãã€ããå æãããããæ±ãã®ãã¯ããã«ç°¡åã«ãªããŸãã
ããã«ãå€ãã®ããŒã¿ããŒã¹ãããšãã°åãPostgreSQLã«ã¯ããããå¯èœã«ããå€ãã®èªåããŒã«ããããŸãã ããšãã°ãPL /ãããã·ã䜿çšãããšãã¢ãŒã«ã€ããããããŒã¿ããªã¢ãŒããã·ã³ã«è»¢éããå¿ èŠã«å¿ããŠããããããŒã¿ããã«ããŠããµã³ãã«ãè¿ãããšãã§ããŸãã
ãããè¡ãã«ã¯å€ãã®æ¹æ³ããããŸããããã®ç¶æ³ã§ã¯ããããŸãã¯ãã®ã¢ãŒã«ã€ããšãããããŒã¿ãžã®ããŒãã£ã·ã§ã³åãéåžžã«åœ¹ç«ã¡ãŸãã æ°ååã®ãµã€ãºã®ããŒã¿ââããŒã¹ãéçšããããã«ã¯ããã®ããŒã¿ã®å€§éšåãæ¬ç©ã§ããå Žåã90ïŒ ã¯å¿ èŠãããŸãã-åžžã«èŠçã§ããããã®å¿ èŠã¯ãããŸããã

圌ãã¯æ®éçãªã¢ãããŒãã䜿çšããã®ã奜ãã§ãã Entity-Attribute-Valueã¯ãäžè¬ã«ãDBAã«ãšã£ãŠçœé£ã§ãã ããã°ã©ããŒã¯èšèšã«éåžžã«èå³ãããããã§ãã ãã¹ãŠãæ®éçã§ãããããäœãæ°ãããã®ãè¿œå ããå¿ èŠãããå ŽåãããŒãã«ã®æ§é ãå€æŽããå¿ èŠã¯ãããŸããããæ°ããã¿ã€ãã®å±æ§ãè¿œå ããæ°ããå±æ§ãç»é²ããããã«æ°ããå€ãå ¥ããããšãã§ããŸãã
è¯ãã䟿å©ãçŽ æŽãããã§ãããçµæãšããŠãããã¯ãã¹ãŠå·šå€§ãª3ã€ãŸãã¯4ã€ã®ïŒã¿ã€ããããå ŽåïŒããŒãã«ã«æé·ããŸãã ãããŠãããªãã®ããŒã¿ã¯ãã¹ãŠããã«ãããããªãã¯åžžã«ãããã«åå ããŠããŸãã åæã«ãå®éã«ã¯ããããã®JOINãäœããã®åœ¢ã§æé©åããããšã¯éåžžã«å°é£ã§ãããªããªãããã®ãããªç¶æ³ã§ã¯ãããçš®ã®ãããã¹ããã«ããŒã¿ãå«ãŸããŠããå¯èœæ§ãé«ãããã§ãã ããšãã°ãããããç°ãªãã¿ã€ãã«é 眮ããããšã¯é£ããããã®ãããªããŒã¿ã®ã€ã³ããã¯ã¹äœæå¹çã¯ãå¥ã ã®ãªã¬ãŒã·ã§ãã«ããŒãã«ã«ä¿æããå Žåãããæ¡éãã«å°ãããªãããã§ãã
ããã«ããããäœã®å±æ§ãªã®ããææ¡ããããã«ã©ãã ãã®ããã¥ã¡ã³ããä¿æããå¿ èŠããããæ³åã§ããŸããã ããã§ããç¹ã«åççãªèª¬æãããã°ããªã¬ãŒã·ã§ãã«ã¹ããŒãèªäœãããçšåºŠææžåãããŸãã EAVã§ã¯ãé©åãªããã¥ã¡ã³ãããªããã°ããŸã£ããç¶æ³ããŸã£ãããªãããã®ããã«ç解ããããšã¯ã§ããŸããã
ãã®çµæãEAVãæ§æãããã®ã¯äžè¬ã«ãã³ã¢ããšåŒã°ããŸãã å®å šã«åäœããªããªããããªç¶æ ã«ãªããšãèªããããªååãcoreãã«ååãå€æŽãããŸãã ãããŠãããã¯ãã¹ãŠç°ãªãã¢ã€ãã¢ã§éã¿ä»ãããå§ããŸããå®éã«ã¯ãéæ£èŠåãããããŒã¿ãä¿åããããããå°ãªããšãäœããã®çš®é¡ã®è¿ éãªã¢ã¯ã»ã¹ãå¯èœã«ãªããŸãã
ãã®çµæãèšèšã®åæã®ç°¡çŽ åããäœãæ®ã£ãŠããŸããã ããã¯ãã£ãããšãã²ã©ãæ©èœãããã®ã¹ããŒã ã®å€æŽã¯ãå€ãã®å Žåãç°ãªã人ã ãç©äºã®éšéã«ãã£ãŠãæžããããå®å šã«ç¬ç«ããã°ãã°ãã®æã«æã蟌ãŸããªããã°ãªããŸããããã®çµæãããã«è¿°ã¹ãç®æšãå¹æçã«éæã§ããŸããã

ORMã§ãåãã§ãã ç§ã¯é·ãããªããŒã«è¡ããããããŸãããORMãæã£ãŠããã®ã¯è¯ãããšã§ãæªãããšã§ããããŸãããDBAãšããŠç§ã¯ORMãå«ãã§ãã ååãšããŠãORMã§äœãããã°ãããããã¿ã€ãããããšããé¡æãç解ããŠããŸãããå®éã«ã¯ãå¥åŠãªçŸè±¡ãå§ãŸããŸãã ORMã¯ããŒã¿ããŒã¹ã®é床ãå€§å¹ ã«äœäžãããããšãç解ããŠããããã¬ãŒã³SQLã§äžéšã®ã¯ãšãªãããçŽãå§ããŠããŸãã ããã«è¯ãããšã«ãé©åãªã¯ãšãªãäœæããããã«ORMããã¬ãŒãã³ã°ããŠã¿ãŠãã ããã ããã¯ãäžè¬çã«ã²ã©ãããšã§ãã ORMã«ãã£ãŠçæããããªã¯ãšã¹ãã«åæ°ãæã£ãŠå¥®éãããããæ£ããæžãæ¹æ³ãç¥ã£ãŠãã人ãèŠãããšããããŸãã 圌ã¯ãã§ã«ãªã¯ãšã¹ããããŠããŠããããæ£ããæžããã ãããŠåœŒã¯ãORMãåãã¿ã€ãã®ãªã¯ãšã¹ããçæãããããæ£åžžã«åäœããããã«ORMããã¬ãŒãã³ã°ããããšããŸããã ããã®ç¡æå³ããå®å šã«æããã«ãªããŸãã
ããã«ãååãšããŠãããšãã°ããããã¯ã«é¢ããå¥ã®ã¬ããŒããèªãããšãã§ããŸãããORMãã¢ã¯ã»ã¹ããSQLã¯ãšãªãã°ã§æšæž¬ããŸããããã ããïŒäžã®ã¹ã©ã€ãïŒã¯äœã§ããïŒ äžè¬ã«ãå€ãã®ORMã¯ããã«ãã£ãŠçœªãç¯ããŸãã ãããããã®INãéåžžã«å€§ããªãµã€ãºã«ãªãå¯èœæ§ãããããšãä»ãå ãããšãã»ãšãã©ã®å ŽåãDjangoã¯ãããšåãã«ãªããŸãã Ruby on Railsã§ã¯ããããã¯çããªããŸãã
å®éã®ãšãããORMã¯å€ãã®æ¹æ³ã§æšæž¬ã§ããŸããããã®ããšã¯äžè¬çã«éåžžã«æªãããšã§ãã ãªãã§ïŒ ãã®ãªã¹ãã¯äœã§ãæ§ããŸããããã ãªããã£ãã€ã¶ã¯ããããã©ãåŠçãããããŸã£ããç¥ããŸããã ãããäœããã®çš®é¡ã®JOINã«çœ®ãæããããå Žåãã©ãã«ããŠãåäœããå¯èœæ§ãæãé«ããªããŸãã äœããã®åœ¢ã§æé©åã§ããŸãã éåžžã«æ±ããããã³ã°ããªããã°ããã®INã§äœãã§ããŸããã ãããŠORMã§ïŒ ããçšåºŠããã¹ãŠã®èŠæ±ã¯ãã®ããã«è¡ãããŸãã
ã€ãŸããã¯ãããæ°ã«å ¥ãã®ORMã®ãããã¿ã€ããäœæããŠãã ããããã ãããããã«ãããé ããæ©ããããããã«ãããäžå¿«ã§æªããªãããšãç解ããå¿ èŠããããŸãã ãããŠããã©ãŒãã³ã¹ã®é¢ã§ã¯ãäž»ãªãã®ã¯æªãã§ãã

ããã°ããŒã¿ã«é¢ããçŽç²ãªpostgresã®ããšã次ã«ç€ºããŸãã PostgreSQLã«ã¯ãã®ãããªèªåããã¥ãŒã æ©èœããããŸãã PostgreSQLã¯ãæ¿å ¥ãããšæ¿å ¥ããæŽæ°ãããšæ¿å ¥+åé€ããŸãã åæã«ãåé€ãåé€ã§ã¯ãªããåã«ã¹ã³ãŒãããã¿ãã«ãåé€ããã ãã§ãã
ãããŠãéåžžã«æçåãããããŒãã«ãååŸããŸãã ã¿ãã¬ããã®å®éã®å®éã®å€ã¯100,000ã§ããå¯èœæ§ããããæ°çŸäžåã®é¢é£æ§ã®ãªãã¿ãã«ãå«ãŸããŠãããšããçç±ã ãã§ãããçš®ã®å°çã®ã¬ãã€ãã®éãããããŸãã 圌ãã¯ãã é転ããããŒã¿ããŒã¹ãå žåçãªããã°ããŒã¿ã®äŸã«å€ããŸãã
åœç¶ãããã«äœãèšå®ãããŠããªãå Žåããã¹ãŠãããŸãæ©èœããªãå Žåããããæªçšãã人ã ã®æåã®åå¿ã¯æ¬¡ã®ãšããã§ãããèªåããã¥ãŒã ããªãã«ããŸãããïŒ å®è¡æéãæãé·ãããã»ã¹ã§ããããããã¹ãŠã«å¹²æžããŸããã€ã³ããã¯ã¹ãè¿œå ããããšã¯ã§ããŸãããautovacuumãããŒãã«ãééããå ŽåãDDLãå®è¡ããå¿ èŠã¯ãããŸããã ãªãã«ããŸãããïŒã
ããã¯éåžžã«äžååã«çµãããããã«å¿ããŠãããªãã¯ããã«ã€ããŠãããã話ãããšãã§ããŸãã
autovacuumã®å¯ŸåŠæ¹æ³ãšå¯ŸåŠæ¹æ³ã«é¢ããæšå¥šäºé ã®ãªãã¡ã¬ã³ã¹ã次ã«ç€ºããŸãã äž»ãªããšã¯ãçµæã絶察ã«æªããã®ã§ãäœããã®æ¹æ³ã§ããããªãã«ããå¿ èŠããªãããšã§ãã æ¬åœã«å¿ èŠã®ãªãæç³»åããŒã¿ã䜿çšãããããããããã«äœ¿ãããããã°ããŒã¿ãååŸããããŒã¿ããŒã¹ã®ã¹ããŒã¹ãå æããŸãã

ãåå ããã®ã¯æªã§ãïŒã ç§ã¯ãããç§ã®é ã®ã©ãããæ¥ãã®ãã芳å¯ããŠããŸãã ããšãã°ãé·ãéä»ã®ããŒãžã§ã³3ã§MySQLã䜿çšããŠãã人ã ã¯ãå€ãã®å ŽåãJOINã¯æªã§ãããšããèããæã£ãŠããŸãã
ããã§äœãèšããŸããïŒ JOINã¯è¯ãã§ãã ãªããªã¬ãŒã·ã§ãã«ã¢ãã«ãããã»ã©æåããŠããã®ã§ããïŒ é¢ä¿ã¢ãã«ã¯ãæªç¥ã®ãã®ã®ããã«ããã®ãããªåŸæ¹ã®ãã®ã§ãããšèããããšããããŸããïŒ ã¹ããŒãã¬ã¹ã®NoSQLãç»å ŽããŠã¿ããªãåããšããæèŠã誰ããèããããšããããšæããŸãã çºçããŸããã
ãªãã§ïŒ ããŒã¿ã¯1ã€ã®æ¹æ³ã§äŸ¿å©ã«ä¿åãããŸã-ãã£ã¹ã¯äžã®ãããã¯ã®åœ¢ã§ãå¥ã®æ¹æ³ã§ãã§ããã°ããé«ãã¬ãã«ã§ååŸããã®ã䟿å©ã ããã§ãã ãããã£ãŠãç°ãªãããŒãã«ãªã©ããé«ã¬ãã«ã®æ¹æ³ã§ããŒã¿ãååŸããå Žåãæé©åãè¡ãã«ã¯ãªã¬ãŒã·ã§ãã«ã¢ãã«ãéåžžã«äŸ¿å©ã§ãã ãããŠããªã¬ãŒã·ã§ãã«ã¢ãã«ã䜿çšããå Žåããããæ倧éã«æŽ»çšããå¿ èŠããããŸãã
JOINã®ä»£ããã«äœãã§ããŸããïŒ ãšãŠãç°¡åã§ãã ç§ãã¡ã¯ããæ°ã«å ¥ãã®ããã°ã©ãã³ã°èšèªãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãããã¯ãšã³ã-ã©ãã§ã-2æãŸãã¯3æã®ãã¬ãŒãããããŒã¿ãåã蟌ã¿ãŸãã å®éããããã¯ãã§ã«ã¢ããªã±ãŒã·ã§ã³ã«ååšããã¹ããŒã¹ãå æãããªã©ããŠããŸãããããã®ãã¬ãŒãã¯ç°¡åã«å€§ãããªãå¯èœæ§ããããŸãã ã€ãŸããå®éã«ã¯æåŸã«10è¡ãååŸããå¿ èŠãããã巚倧ãªã·ãŒããåŒãåºããŸãã
ãããŠãæäœæ¥ã§JOINãè¡ããŸãããã®ãããªãæäœæ¥ã«ããæ¥æ²¡ãã§ãã æåã«ãµã€ã¯ã«ãæ©ãå§ãããããé ãããšã«æ°ã¥ããããã§ããçš®ã®ããã·ã¥ã¢ã«ãŽãªãºã ãçºæãå§ããŸãã
å®éãããã«ãµã€ãºã®ã©ã€ãã¢ãã«ã®èžæ°ãšã³ãžã³ããªã©ã®ããŒã¿ããŒã¹ãçºæãå§ããŠããŸãã ããã§ãããªããã£ãã€ã¶ãŒã¯JOINã¢ã«ãŽãªãºã ïŒãã¹ããããã«ãŒããããã·ã¥ãããŒãžããŸãã¯ãã®ä»ã®ãã©ã¡ãŒã¿ãŒïŒãéžæããããã«ãã©ã¡ãŒã¿ãŒã®æã«é¢ããæ å ±ãåéãããããããæªãã§ãããã ããã°ã©ãã³ã°èšèªã§ã¯ããã¹ãŠèªåã§æžãçŽããŸãã ãããŠãããã¯ãªãã§ããïŒ
ãããã誰ããããèŠãããšããªã人ã¯ããŸããïŒ ãŸã£ããã«ïŒ ä»ã®èª°ããå°ãªããšãäžåºŠã¯ã©ããã§ããã«äŒã£ãã , -.
, . SQL â . , , JOIN , , .

â . Slony? PostgreSQL , , , , Slony, . , . trigger based , .
, , , ( , ), - .
PostgreSQL , , : Shipping Log' Hot Standby', Slony, Londiste PgQ, , . , , , Shipping' Log'. , , - , - .
, , - . , . â . , . , , - - , , , -. - . , , , -, .
, - , - , , .
, , , SQL. , - , , - , , SQL. , , , , .
- â . , â , , , , . â . , SQL statement', , , 8- , , redo . , , slave . , . . , .

, , .
, EXPLAIN. , , . , , . , , , , production 100 . , , , , , , , - . .
, Highload++ Junior 2016 . â 2016 YouTube.
, â , workload . , , , . - , , , , , . , , - , .
, , - production DBA. â . , , , , , «, », , - . ããã¯ééã£ãŠããŸãã
, - , , , - . , PostgreSQL pg_stat_statements, , â : , ; .
, , « ». , . production, , .

Java-. pretending to be smart. , â - , - .
Java. Java , , Java' , , , . . , , , . , , â . , . : 10 . , 10 . 10 .
? , , . Ì . , .
â . . : , . â . ãªã« ãªãã§ïŒ
DBA , ? ( - , â PostgreSQL , , BEGIN, EXPLAIN ANALYZE ROLLBACK, ) . , . â .
, , , . . . , , , Python' , .
, , , , , , , , / .

, , . , .
, - , , . â , . -. , - - ? . - , - .. , ? . æããã«ã
EXPLAIN - , , ETL, - - , , â - ?
, . , : , - , - ; . , , - . , .
count(*), , - , . .
. , , . , . PostgreSQL , , , - , , , .
â . , 261 526 , , , 15 . , ?
count(*) â . count(*) â Seq Scan ( PostgreSQL), . count(*) . 20 ? , .
? ?
. . SQL- -, ! . , , - . . , , , , , . .
: «Know your data!» , .
- ( - Oracle , , Orace , SQL- ..; , â !) : « , SQL-?». : « , , ».
, , , , , , , , . , PostgreSQL , , .
. . ããããšã .
: , autovacuum . append-only, ?
: . .
, .
-, , . . , append , , .
-, pg_catalog, . . autovacuum, . - pg_class , . , .
. , - , , , autovacuum . , , , 90% autovacuum, autovacuum performance , , . .
: . , ?
: , , , , , , . : , , , , . .
: , . . ? , - , , - . - , , «», , - , - . , .
PL/Proxy , , , ? - ?
: . -, â - , , , , . « ».
, . â , , .
concurrency , â , â . , , .
, , , PL/Proxy. , , , , , . ãã®æè¡ã¯äœã§ããïŒ , , , PL/Proxy, , PL/pgSQL, . , , . , Microsoft. .
, , VIEW UNION' , , , , PL/Proxy. , , , WHERE, , . â PL/Proxy , , , UNION . , .
: , , - - ? ? ?
: , , , , , , .
, , . , â . . . , - , . : SSD , , , - .
, «» â , , , , .
, PostgreSQL - , â , , 30 , - , â , , . . .
, , , - workload. , , UTP-, master. - , , , , , , , .
, . , . â , , UTP, , , . .
: , . PL/Proxy foreign data wrapper? ?
: foreign data wrapper, . PL/Proxy , , autocommit, , RPC, . foreign data wrapper â , -, , -, , , .
Foreign data wrapper PostgreSQL . , , â , .
, foreign data wrapper , foreign data wrapper , .
: PL/Proxy , ?
: , , , , .
: : , - shared storage - OCFS2, OCFS2 read-only .
: . , - table space - , latency, .
: ?
: , table space ? , read-only. - table space, page, , .
: Oracle - ?
: . Oracle RAC, .
: - ORM? ORM, ? production ? ?
: , , . -. , ORM , -, ORM, , â . .
, ORM , SQL â , Java , , . « ». , , , .
: , ORM, ; , ORM, . , - ORM . , 90% , ORM, .
, â , ORM , â , , . . â , SQL , , , - .
ORM . - , , . , , , â , .
â . -, , . . - .
» hydrobiont
» ik@postgresql-consulting.com
â HighLoad++ Junior .
, , HighLoad++ Junior HighLoad++ .
? â 5 6 ? .
( :) â , , highload-. â .
, Project1917 (http://project1917.ru/), Nginx+MySQL+Laravel+AngularJS . , highload â , ( ) .
: HTTP- , , HTTP- , , MySQL .
, , ! !