ãªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ã§ã® MVCC ã®ä»çµã¿
ãªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ã«ããããã«ãããŒãžã§ã³åæå®è¡å¶åŸ¡ (MVCC) ã®æŠå¿µãäž»èŠãªããŒã¿ããŒã¹ ã·ã¹ãã ãžã®ãã®å®è£ ãããã³ããŒã¿ã®äžè²«æ§ã確ä¿ããŠããã©ãŒãã³ã¹ãåäžãããæ¹æ³ã«ã€ããŠåŠã³ãŸãã

ãã«ãããŒãžã§ã³åæå®è¡å¶åŸ¡ (MVCC) ã®æŠèŠ
ææ°ã®ããŒã¿ããŒã¹ ã·ã¹ãã ã§ã¯ãè€æ°ã®ãã©ã³ã¶ã¯ã·ã§ã³ãåæã«çºçããç°å¢ã§ããŒã¿ã®äžè²«æ§ãšããã©ãŒãã³ã¹ã確ä¿ããããã«åæå®è¡æ§ãéèŠã§ãã ãªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ã®åæ å®è¡æ§ã管çããããã®å¹ççãªææ³ã® 1 ã€ã¯ãMultiversion Concurrency Control (MVCC) ã§ãããã®ã¢ãããŒãã§ã¯ãã¬ã³ãŒãã®å¥ã ã®ããŒãžã§ã³ãç¶æããããããèªã¿åãè ã¯é²è¡äžã®æžãèŸŒã¿æäœã«ãã£ãŠãããã¯ãããããšãªããäžè²«ããããŒã¿ããŒã¹ã®ã¹ãããã·ã§ããã«ã¢ã¯ã»ã¹ã§ããŸãã
MVCC ã¯ãæç€ºçãªããã¯ã䜿çšããã«è€æ°ã®ããŒãžã§ã³ã®ã¬ã³ãŒããäœæããããšã§ç«¶åã解決ããããã«ããããã¯ã®ç«¶åãæžå°ããããã©ãŒãã³ã¹ãåäžããŸããããã¯ãããŒã¿ã®å€æŽãé »ç¹ã«è¡ãããé«ãã©ã³ã¶ã¯ã·ã§ã³ããã³é«åæå®è¡ç°å¢ã§ã¯ç¹ã«éèŠã§ãã MVCC ã¯ãä»ã®åæãã©ã³ã¶ã¯ã·ã§ã³ã®ãã¥ãŒã«åœ±é¿ãäžããããšãªãããã©ã³ã¶ã¯ã·ã§ã³ããã©ã³ã¶ã¯ã·ã§ã³æã«æå¹ãªã¬ã³ãŒã ããŒãžã§ã³ã®ã¿ã«ã¢ã¯ã»ã¹ã§ããããã«ããããšã§ãããŒã¿ããŒã¹ã®äžè²«æ§ã確ä¿ããŸãã
MVCC ã¯ãŒã¯ãããŒ: ã¬ã³ãŒãã®äœæãæŽæ°ãåé€
MVCC ãã©ã®ããã«åäœããããçè§£ããããã«ããã®åæå®è¡å¶åŸ¡æè¡ãå®è£ ããã·ã¹ãã ã§ã¬ã³ãŒããäœæãæŽæ°ãåé€ããããã»ã¹ãèŠãŠãããŸãã
- ã¬ã³ãŒãã®äœæ: æ°ããã¬ã³ãŒããããŒã¿ããŒã¹ã«æ¿å ¥ããããšãMVCC ã¯ãã®ã¬ã³ãŒãã«äžæã®ãã©ã³ã¶ã¯ã·ã§ã³ ID ãå²ãåœãŠãŸãããã® ID ã¯ãã©ã€ããµã€ã¯ã«å šäœã«ããã£ãŠã¬ã³ãŒãã®ããŒãžã§ã³ã远跡ããããã«äœ¿çšãããŸãã
- ã¬ã³ãŒãã®æŽæ°: ã¬ã³ãŒãæŽæ°ã®å ŽåãMVCC ã¯ãç°ãªããã©ã³ã¶ã¯ã·ã§ã³ãç«¶åããããšãªãåãã¬ã³ãŒãã倿Žã§ããããšãä¿èšŒããŸãããã©ã³ã¶ã¯ã·ã§ã³ãã¬ã³ãŒããæŽæ°ããããšãããšãããŒã¿ããŒã¹ ã·ã¹ãã ã¯æ°ããããŒãžã§ã³ã®ã¬ã³ãŒããäœæããããã«ãã©ã³ã¶ã¯ã·ã§ã³ã® ID ãå²ãåœãŠãŸããã¬ã³ãŒãã®å ã®ããŒãžã§ã³ã¯å€æŽãããªããããä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ãã¢ã¯ã»ã¹ã§ããããã«ãªããŸããæ°ããããŒãžã§ã³ã®ã¬ã³ãŒãã¯ãæŽæ°ãã©ã³ã¶ã¯ã·ã§ã³ãšããã®ãã©ã³ã¶ã¯ã·ã§ã³ã®å®äºåŸã«éå§ãããå°æ¥ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«å¯ŸããŠã®ã¿æå¹ã§ãã
- ã¬ã³ãŒãã®åé€: ãã©ã³ã¶ã¯ã·ã§ã³ãã¬ã³ãŒããåé€ããå ŽåãMVCC ã¯ããŒã¿ããŒã¹ããã¬ã³ãŒããçŽæ¥åé€ããŸããã代ããã«ã(ãã©ã³ã¶ã¯ã·ã§ã³ã® ID ãåé€ããŒã«ãŒãšããŠå²ãåœãŠãããšã§) ã¬ã³ãŒããå逿žã¿ãšããŠããŒã¯ããä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ããã¢ã¯ã»ã¹ã«äœ¿çšã§ãã以åã®ã¬ã³ãŒãã®ããŒãžã§ã³ãç¶æããŸãããã¹ãŠã®ã¢ã¯ãã£ããªãã©ã³ã¶ã¯ã·ã§ã³ãåé€ãããã¬ã³ãŒãã«ã¢ã¯ã»ã¹ããå¿ èŠããªããªããšãMVCC ã·ã¹ãã ã¯ã¬ããŒãžãåéããããŒã¿ããŒã¹ããã¬ã³ãŒããæ°žä¹ ã«åé€ããŸãã
ããŒã¿ããŒã¹ ã·ã¹ãã ã¯ãè€æ°ã®ããŒãžã§ã³ã®ã¬ã³ãŒããšããããã®ãã©ã³ã¶ã¯ã·ã§ã³ ID ãä¿æããããšã§ãããŸããŸãªãã©ã³ã¶ã¯ã·ã§ã³ã®ããŒãºã«åãããããŒã¿ã®äžè²«ããã¹ãããã·ã§ãããæäŸã§ããŸããã¢ã¯ãã£ããªãã©ã³ã¶ã¯ã·ã§ã³ã¯ããã©ã³ã¶ã¯ã·ã§ã³éå§æã«æå¹ãªææ°ã®ã¬ã³ãŒã ããŒãžã§ã³ã«ã¢ã¯ã»ã¹ããæç€ºçãªããã¯ãå¿ èŠãšããã«äžè²«æ§ãšã·ãªã¢ã«åãä¿èšŒããŸãã

MVCC ã®é·æãšçæ: ããã©ãŒãã³ã¹ãšäžè²«æ§ã®ãã©ã³ã¹
MVCC ã«ã¯ãåæå®è¡æ§ã®åäžãããã©ãŒãã³ã¹ã®æé©åãªã©ãããã€ãã®å©ç¹ããããŸãããããã€ãã®å¶éããããŸãããªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ ã·ã¹ãã ã§ MVCC ã䜿çšããããšã®é·æãšçæã«ã€ããŠèª¬æããŸãã
MVCC ã®å©ç¹
- åæå®è¡æ§ã®åäž: MVCC ã§ã¯ãããŒã¿ã®ã¯ãªãŒã³ãªã¹ãããã·ã§ãããæäŸããããšã§ãè€æ°ã®ãã©ã³ã¶ã¯ã·ã§ã³ãåæã«å®è¡ã§ããŸããããã«ããããã¯ã®ç«¶åã軜æžããããã©ã³ã¶ã¯ã·ã§ã³ãäžå¿ èŠã«ãããã¯ãããã®ãé²ããŸãã
- æé©åãããããã©ãŒãã³ã¹: æç€ºçãªããã¯ã®å¿ èŠæ§ãåé¿ããããšã§ãMVCC ã¯ããé«éãªèªã¿åãããã³æžãèŸŒã¿æäœãå¯èœã«ããŸããããã«ãããç¹ã«åæå®è¡æ§ã®é«ãç°å¢ã§ããã©ãŒãã³ã¹ãæé©åãããŸãã
- åé¢ã®åäž: MVCC ã¯ãåãã©ã³ã¶ã¯ã·ã§ã³ã®éå§æéã«åãããã¹ãããã·ã§ãããé ä¿¡ããããšã§ãåæãã©ã³ã¶ã¯ã·ã§ã³éã®åé¢ãå®çŸããŸããããã«ãããä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®ããŒã¿è¡šç€ºã«åœ±é¿ãäžããããšãªãããã©ã³ã¶ã¯ã·ã§ã³ãç¬ç«ããŠäžè²«ããŠåäœã§ããããã«ãªããŸãã
MVCCã®æ¬ ç¹
- ã¹ãã¬ãŒãž ãªãŒããŒãããã®å¢å : MVCC ã§ã¯åã¬ã³ãŒãã®è€æ°ã®ããŒãžã§ã³ãç¶æããå¿ èŠããããããã¹ãã¬ãŒãž ãªãŒããŒããããå¢å ããå¯èœæ§ããããŸãããã ããã¹ãã¬ãŒãžãšã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã®ã¡ã«ããºã ãæé©åããããšã§ããã®ãªãŒããŒãããã蚱容å¯èœãªã¬ãã«ãŸã§æžããããšãã§ããŸãã
- è€éãªã¬ããŒãž ã³ã¬ã¯ã·ã§ã³: MVCC ã«ãã£ãŠäœæãããå€ãã¬ã³ãŒã ããŒãžã§ã³ã管çããã«ã¯ãé«åºŠãªã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ ã¡ã«ããºã ãå¿ èŠã§ããããã«ãããç¹ã«ãã©ã³ã¶ã¯ã·ã§ã³ã®å€ãç°å¢ã§ã¯ãããŒã¿ããŒã¹ ã·ã¹ãã ãããçšåºŠè€éã«ãªãå¯èœæ§ããããŸãã
- ç¹å®ã®ã·ããªãªã§ã®äžè²«æ§ä¿èšŒã®äœäž: MVCC ã¯ãç¹å®ã®å Žåã«äžè²«æ§ä¿èšŒã®äœäžã«ã€ãªããå¯èœæ§ããããŸãããã®ãããªç¶æ³ã¯éåžžãèªã¿åã/æžã蟌ã¿ã®ç«¶åãçºçããå ŽåããŸãã¯ããŒã¿ããŒã¹ ã·ã¹ãã ãèªã¿åãã³ãããåé¢ã¬ãã«ãèªã¿åãéã³ãããåé¢ã¬ãã«ãªã©ãããåŒ±ãæŽåæ§ä¿èšŒãæäŸããåé¢ã¬ãã«ã䜿çšããŠããå Žåã«çºçããŸããããã§ããMVCC ã®æ°å€ãã®å©ç¹ãèæ ®ãããšãããã¯äžè¬ã«èš±å®¹ã§ãããã¬ãŒããªãã§ãã
MVCC ã«ã¯ããã€ãã®èª²é¡ãšè€éãã䌎ããŸãããåæå®è¡æ§ã管çããããŒã¿ã®äžè²«æ§ã確ä¿ãããªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ã®ããã©ãŒãã³ã¹ãåäžãããããã®å¹æçãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã MVCC ãçè§£ããŠé©åã«å®è£ ããããšã§ãéçºè ãšããŒã¿ããŒã¹ç®¡çè ã¯ãŠãŒã¶ãŒã«ã·ãŒã ã¬ã¹ã§å¹ççãªããŒã¿ããŒã¹ ãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã
MVCC ã䜿çšããäžè¬çãªãªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ ã·ã¹ãã
ããã€ãã®äžè¬ç㪠ãªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ç®¡çã·ã¹ãã (RDBMS) ã¯ã åæå®è¡æ§ãšããã©ãŒãã³ã¹ã®æé©åãåäžãããããã« MVCC ãå©çšããŠããŸããããã§ã¯ãMVCC ãå®è£ ããåºã䜿çšãããŠããã·ã¹ãã ã®ããã€ãã®æŠèŠã瀺ããŸãã
PostgreSQL
äž»èŠãªãªãŒãã³ãœãŒã¹ ãªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ ã·ã¹ãã ã® 1 ã€ã§ãã PostgreSQL ã¯ããã©ã³ã¶ã¯ã·ã§ã³ã广çã«åé¢ããåæå®è¡æ§ãæé©åããããŒã¿ã®äžè²«æ§ã確ä¿ããããã« MVCC ããµããŒãããŠããŸãã PostgreSQL ã¯ãèªã¿åããã©ã³ã¶ã¯ã·ã§ã³ãšæžã蟌ã¿ãã©ã³ã¶ã¯ã·ã§ã³ãåé¢ãããã©ã³ã¶ã¯ã·ã§ã³ããšã«ç°ãªãããŒã¿ ã¹ãããã·ã§ãããç¶æããã¹ãããã·ã§ããå颿è¡ã䜿çšããŸãããã®ã¢ãããŒãã«ãããããã¯ã®ç«¶åã軜æžãããè€æ°ã®ãã©ã³ã¶ã¯ã·ã§ã³ãé å»¶ãªãåæã«å®è¡ã§ããããã«ãªããŸãã
MySQL (InnoDB ã¹ãã¬ãŒãž ãšã³ãžã³)
MySQL ãã人æ°ã®ãããªãŒãã³ãœãŒã¹ã®ãªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ ã·ã¹ãã ã§ãã MyISAM ã®ããã©ã«ãã®ã¹ãã¬ãŒãž ãšã³ãžã³ã¯ MVCC ããµããŒãããŠããŸããããInnoDB ã¹ãã¬ãŒãž ãšã³ãžã³ãã»ãšãã©ã®ãŠãŒã¹ã±ãŒã¹ã§æšå¥šãããŠãããããã©ãŒãã³ã¹ãšåæå®è¡æ§ãåäžãããããã« MVCC ãå®è£ ããŠããŸãã InnoDB ã䜿çšããå ŽåãMySQL ã¯è€æ°ã®ããŒãžã§ã³ã®ã¬ã³ãŒããç¶æããŠèªã¿åããšæžã蟌ã¿ã®åææäœãå¯èœã«ãããããããã¯ã®ç«¶åãæžå°ããããã©ãŒãã³ã¹ãåäžããŸãã
ãªã©ã¯ã«
æåãªåçšããŒã¿ããŒã¹ ã·ã¹ãã ã® 1 ã€ã§ãã Oracle Database ã¯ãMVCC ãæ¡çšããŠããŒã¿ã®äžè²«æ§ãç¶æããããã©ãŒãã³ã¹ãåäžãããŸãã Oracle ã¯ãèªã¿åããšæžã蟌ã¿ã®äžè²«æ§ã¡ã«ããºã ãçµã¿åãããŠäœ¿çšââããèªã¿åãè ã«ããŒã¿ã®äžè²«ããã¹ãããã·ã§ãããæäŸã§ãããšåæã«ãæžã蟌ã¿è ãä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ããããã¯ããããšãªãããŒã¿ã倿Žã§ããããã«ããŸãã
Microsoft SQL Server (ã¹ãããã·ã§ããåé¢ã¬ãã«)
Microsoft SQL Server ãèåãªåçš RDBMS ã§ããããã©ã«ãã§ã¯ MVCC ã䜿çšããŸããããMVCC ã¢ãã«ãæå¹ã«ããã¹ãããã·ã§ããåé¢ã¬ãã«ããµããŒãããŠããŸããã¹ãããã·ã§ããåé¢ã䜿çšããããšã«ãããSQL Server ã¯ããŸããŸãªããŒãžã§ã³ã®ããŒã¿è¡ãç¶æã§ãããããããã¯ç«¶åã軜æžãããããã©ãŒãã³ã¹ãåäžããåæèªã¿åãããã³æžãèŸŒã¿æäœãå¯èœã«ãªããŸãã
AppMasterã䜿çšãã MVCC : åæå®è¡å¶åŸ¡ã®æŽ»çš
AppMaster ã® ããŒã³ãŒã ãã©ãããã©ãŒã ã䜿çšãããšãéçºè ã¯ãåæå®è¡å¶åŸ¡ãããã©ãŒãã³ã¹ã®æé©åã« MVCC ã䜿çšããã¢ããªã±ãŒã·ã§ã³ãªã©ããªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ãšã·ãŒã ã¬ã¹ã«é£æºã§ããã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã MVCC ã®æ©èœãèªèãããããã广çã«æŽ»çšããããšã¯ãããã©ãŒãã³ã¹ãé«ããã¹ã±ãŒã©ãã«ã§å¹ççãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã

AppMasterã®ããžã¥ã¢ã«éçºããŒã«ã䜿çšãããšãéçºè ã¯ããŒã¿ ã¹ããŒãã®ã¢ãã«åãšèšèšã REST API ã® äœæããªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ãšã·ãŒã ã¬ã¹ã«é£æºãã Web ããã³ã¢ãã€ã« ã¢ããªã±ãŒã·ã§ã³ ã€ã³ã¿ãŒãã§ã€ã¹ã®èšèšãè¡ãããšãã§ããŸãã AppMaster ã§çæãããã¢ããªã±ãŒã·ã§ã³ã¯ãPostgreSQL ãšäºææ§ã®ããããŒã¿ããŒã¹ããã©ã€ã㪠ããŒã¿ ã¹ãã¬ãŒãžãšããŠäœ¿çšã§ãããããéçºè 㯠PostgreSQL ã§ MVCC ã䜿çšã§ããŸãã
AppMasterã®ãã©ãããã©ãŒã ã¯ãGo (golang) ã§ã®ããã¯ãšã³ã ã¢ããªã±ãŒã·ã§ã³ã Vue3 ãã¬ãŒã ã¯ãŒã¯ã䜿çšãã Web ã¢ããªã±ãŒã·ã§ã³ãAndroid ã®å Žå㯠Kotlin ãšJetpack Compose ãiOS ã®å Žåã¯SwiftUIã䜿çšããã¢ãã€ã« ã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ ã³ãŒããçæããŸããããžãã¹ ããžãã¯ãå¹ççã«å®è£ ããããšãã¢ããªã±ãŒã·ã§ã³ã¯åæå®è¡å¶åŸ¡ã«å¯Ÿãã MVCC ã®å©ç¹ã掻çšããªãããããã©ãŒãã³ã¹ãé«ãæé©åãããæ¹æ³ã§ããŒã¿ããŒã¹ãšå¯Ÿè©±ã§ããŸãã
å°æ¥ã®ãã¬ã³ããšã€ãããŒã·ã§ã³
ããŒã¿ããŒã¹ç®¡çã®äžçã¯ç¶ç¶çã«é²åããŠãããMVCC ã¯åŒãç¶ããã®é²æ©ã®æåç·ã«ããç¶ããŸããææ°ã®ããŒã¿ããŒã¹ ãã¯ãããžãŒã§ã¯ãããã€ãã®éèŠãªãã¬ã³ããšé©æ°ã MVCC ãšãã®ã¢ããªã±ãŒã·ã§ã³ã®å°æ¥ã圢äœã£ãŠããŸãã
- ææ°ã®ããŒã¿ããŒã¹ ãã¯ãããžã«ããã MVCC: MVCC ã¯ãäŸç¶ãšããŠææ°ã®ããŒã¿ããŒã¹ç®¡çã·ã¹ãã ã®äžå¿çãªæ©èœã§ããããŒã¿éãå¢å€§ããåæå®è¡å¶åŸ¡ã®å¿ èŠæ§ãããéèŠã«ãªãã«ã€ããŠãããŒã¿ããŒã¹ ãã³ããŒã¯ MVCC å®è£ ã®åŒ·åã«æè³ããŠããŸããé«ã¹ã«ãŒãããç°å¢ã§ã MVCC ã®å¹çæ§ãç¶æã§ããããã«ãæ°ããã¢ã«ãŽãªãºã ãšæé©åãéçºãããŠããŸãã
- ã¹ã±ãŒã©ããªãã£ãšåæ£ã·ã¹ãã ãžã®åœ±é¿: ã¹ã±ãŒã©ããªãã£ã¯ã仿¥ã®ããŒã¿éçŽåã¢ããªã±ãŒã·ã§ã³ã«ãããäž»ãªæžå¿µäºé ã§ãã MVCC ã¯åæå®è¡æ§ãæ¬è³ªçã«ãµããŒãããŠããããã忣ããŒã¿ããŒã¹ ã·ã¹ãã ã«æé©ã§ããçµç¹ã倧éã®ããŒã¿ãåŠçããããã«åæ£ã¢ãŒããã¯ãã£ãæ¡çšããããšãå¢ããŠãããããMVCC ã¯åæ£ããŒãéã§ããŒã¿ã®äžè²«æ§ãšåé¢ãç¶æããããã®åºç€ãæäŸããŸããããã¯ãå°ççã«è€æ°ã®å Žæããåæã«ããŒã¿ã«ã¢ã¯ã»ã¹ããŠå€æŽããå¿ èŠãããã·ããªãªã§ã¯ç¹ã«éèŠã§ãã
- MVCC ãžã®é²åããã¢ãããŒã: MVCC ã¯ãã®äŸ¡å€ã蚌æããŠããŸãããé²è¡äžã®ç ç©¶ãšé©æ°ã«ãããæ°ããã¢ãããŒããšæé©åã®éçºãè¡ãããŠããŸããããŒã¿ããŒã¹ ãšã³ãžãã¢ã¯ãç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã«å¯ŸåŠããããã©ãŒãã³ã¹ã埮調æŽããããã«ãã¹ãããã·ã§ããåé¢ãã·ãªã¢ã«åå¯èœãªã¹ãããã·ã§ããåé¢ãªã©ã® MVCC ã®ããªãšãŒã·ã§ã³ãæ€èšããŠããŸãããããã®é²åããã¢ãããŒãã«ããã匷åãªããŒã¿äžè²«æ§ãšé«ãåæå®è¡æ§ã®ãã©ã³ã¹ãåããããŒã¿ããŒã¹ã倿§ãªã¢ããªã±ãŒã·ã§ã³èŠä»¶ã«é©å¿ã§ããããã«ãªããŸãã
å¹çãã¹ã±ãŒã©ããªãã£ãé©å¿æ§ãžã®åãçµã¿ãããªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ã«ããã MVCC ã®å°æ¥ãç¹åŸŽã¥ããŸããããŒã¿ã®éãšè€éããå¢å€§ããäžãMVCC ã¯ããŒã¿ããŒã¹ ã·ã¹ãã ã®åºç€ã§ããç¶ããããŒã¿ã®æŽåæ§ã確ä¿ããææ°ã®ã¢ããªã±ãŒã·ã§ã³ã®èŠæ±ããµããŒãããŸããé²åããã¢ãããŒããæ¡çšãã忣ç°å¢ã«ããã MVCC ã®åŒ·ã¿ã掻çšããããšã«ãããããŒã¿ããŒã¹é åã¯ç¶ç¶çãªé©æ°ãšæ¹åã«åããããšãã§ããŸãã
çµè«
ãã«ãããŒãžã§ã³åæå®è¡å¶åŸ¡ (MVCC) ã¯ãããŒã¿ã®äžè²«æ§ã確ä¿ããããã¯ç«¶åã軜æžããè€æ°ã®åæãã©ã³ã¶ã¯ã·ã§ã³ãååšããã·ããªãªã®ããã©ãŒãã³ã¹ãæé©åããããã®ããªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ç®¡çã·ã¹ãã ã«ãããéèŠãªæè¡ã§ãã PostgreSQLãMySQL (InnoDB)ãOracleãMicrosoft SQL Server (ã¹ãããã·ã§ããåé¢ã¬ãã«) ãªã©ã®ããã€ãã®ããç¥ãããããŒã¿ããŒã¹ ã·ã¹ãã ã¯ãäžŠè¡æ§ç®¡çãåäžãããããã« MVCC ãå®è£ ããŠããŸãã
ãªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ãšå¯Ÿè©±ããã¢ããªã±ãŒã·ã§ã³ãéçºããå ŽåãMVCC ã®æ©èœãçè§£ããã¢ããªã±ãŒã·ã§ã³ããããã®æ©èœã確å®ã«æŽ»çšã§ããããã«ããããšãéèŠã§ãã AppMasterã®no-codeãã©ãããã©ãŒã ã䜿çšãããšãMVCC 察å¿ããŒã¿ããŒã¹ãšå¹ççã«é£æºã§ããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããå€§èŠæš¡ãªæåä»å ¥ãå¿ èŠãšããã«æé©åãããããã©ãŒãã³ã¹ãšåæå®è¡å¶åŸ¡ãæäŸã§ããŸãã
ãããã質å
ãã«ãããŒãžã§ã³åæå®è¡å¶åŸ¡ (MVCC) ã¯ãè€æ°ã®ãã©ã³ã¶ã¯ã·ã§ã³ãåæã«å®è¡ããéã«ããŒã¿ã®äžè²«æ§ã確ä¿ããããã«ãªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ã§äœ¿çšãããå¹ççãªåæå®è¡å¶åŸ¡ææ³ã§ããã¬ã³ãŒãã®å¥ã ã®ããŒãžã§ã³ãç¶æãããããæžãèŸŒã¿æäœã«ãã£ãŠãããã¯ãããããšãªããèªã¿åãæäœãäžè²«ããã¹ãããã·ã§ããã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã
MVCC ã¯ãè€æ°ã®ããŒãžã§ã³ã®ã¬ã³ãŒããããŒã¿ããŒã¹ã«ä¿æããããšã«ãã£ãŠæ©èœããŸãããã©ã³ã¶ã¯ã·ã§ã³ã«ã¯äžæã® ID (ãã©ã³ã¶ã¯ã·ã§ã³ ID) ãå²ãåœãŠããããã©ã³ã¶ã¯ã·ã§ã³ã®éå§æã«éå§ãããŸãããã©ã³ã¶ã¯ã·ã§ã³ãã¬ã³ãŒããäœæãæŽæ°ããŸãã¯åé€ãããšãããŒã¿ããŒã¹ã¯ãã®ã¬ã³ãŒãã®æ°ããããŒãžã§ã³ãäœæãããã©ã³ã¶ã¯ã·ã§ã³ã® ID ã§ã¿ã°ä»ãããŸãããªãŒããŒã¯ããã©ã³ã¶ã¯ã·ã§ã³ã®éå§æéã«åºã¥ããŠé©åãªããŒãžã§ã³ãèªã¿åãããšã§ãäžè²«æ§ã®ããã¹ãããã·ã§ããã«ã¢ã¯ã»ã¹ã§ããŸãã
MVCC ã®äž»ãªå©ç¹ã«ã¯ãåæå®è¡æ§ã®åäžãããã©ãŒãã³ã¹ã®æé©åãããã¯ç«¶åã®è»œæžããã©ã³ã¶ã¯ã·ã§ã³éã®åé¢ã®åäžãªã©ããããŸãã MVCC ã䜿çšãããšããªãŒããŒã¯ã©ã€ã¿ãŒã«ãã£ãŠãããã¯ãããããšãªãããŒã¿ã®äžè²«ããã¹ãããã·ã§ããã«ã¢ã¯ã»ã¹ã§ãããŸããã®éãå¯èœã§ããããã«ãããããã¯ã®ç«¶åãæžå°ããããå€ãã®åæãã©ã³ã¶ã¯ã·ã§ã³ãå¯èœã«ãªããæçµçã«ããŒã¿ããŒã¹ ã·ã¹ãã å šäœã®ããã©ãŒãã³ã¹ãåäžããŸãã
MVCC ã«ã¯å€ãã®å©ç¹ããããŸãããããã€ãã®æ¬ ç¹ããããŸããããã«ã¯ãã¬ã³ãŒãã®è€æ°ã®ããŒãžã§ã³ãç¶æããããšã«ããã¹ãã¬ãŒãž ãªãŒããŒãããã®å¢å ãå€ãããŒãžã§ã³ãåé€ããããã®è€éãªã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ãå«ãŸããŸãããŸããå Žåã«ãã£ãŠã¯ãèªã¿åããšæžã蟌ã¿ã®ç«¶åãçºçããå ŽåããŸãã¯èªã¿åãã³ãããããã³èªã¿åãéã³ãããåé¢ã¬ãã«äžã®äžè²«æ§ä¿èšŒã®äœäžãå«ãŸããŸãã
PostgreSQLãMySQL (InnoDB ã¹ãã¬ãŒãž ãšã³ãžã³ã䜿çš)ãOracleãMicrosoft SQL Server (ã¹ãããã·ã§ããåé¢ã¬ãã«ã䜿çš) ãªã©ãããã€ãã®äžè¬çãªãªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ ã·ã¹ãã ã§ã¯ããã«ãããŒãžã§ã³åæå®è¡å¶åŸ¡ (MVCC) ã䜿çšãããŠããŸãã
AppMasterã®ãã©ãããã©ãŒã ã䜿çšãããšãéçºè ã¯ãMVCC ã䜿çšãããã®ãå«ããªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ãšã·ãŒã ã¬ã¹ã«å¯Ÿè©±ããã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã AppMaster MVCC ã®åæå®è¡å¶åŸ¡ãšããã©ãŒãã³ã¹ã®æ©èœãæå€§éã«æŽ»çšããªãããã¢ããªã±ãŒã·ã§ã³ãããŒã¿ããŒã¹ãšå¹ççã«å¯Ÿè©±ã§ããããã«ããæé©åãæäŸããŸãã


