ç£æ»ãã°ã®ã€ãã³ãããŒãã«ã«ãããPostgreSQLã®ããŒãã£ã·ã§ãã³ã°
ç£æ»ãã°åãã® PostgreSQL ããŒãã£ã·ã§ãã³ã°ïŒå°å ¥å¹æã®å€æãããŒãã£ã·ã§ã³ããŒã®éžã³æ¹ã管çç»é¢ã®ãã£ã«ã¿ãä¿æã«äžãã圱é¿ããããããã解説ããŸãã

ãªãã€ãã³ãïŒç£æ»ããŒãã«ãåé¡ã«ãªãã®ã
ã€ãã³ãããŒãã«ãšç£æ»ããŒãã«ã¯èŠãç®ã¯äŒŒãŠããŸãããç®çãç°ãªããŸãã
ã€ãã³ãããŒãã«ã¯èµ·ããããšãèšé²ããŸãïŒããŒãžãã¥ãŒãéä¿¡ãããã¡ãŒã«ãWebhook ã®åŒã³åºãããžã§ãã®å®è¡ãªã©ãç£æ»ããŒãã«ã¯èª°ããã€äœãå€ããããèšé²ããŸãïŒã¹ããŒã¿ã¹å€æŽãæš©éæŽæ°ãæ¯æãæ¿èªãªã©ãå€ãã®å Žåã倿Žåããšã倿ŽåŸãã®è©³çްãå«ãŸããŸãã
ã©ã¡ãã远èšã®ã¿ïŒappend-onlyïŒã§æ¥éã«å¢ããŸããåã ã®è¡ãé »ç¹ã«åé€ããããšã¯å°ãªããæ¯åæ°ããè¡ãå°çããŸããããã¯ã°ã©ãŠã³ããžã§ããå€éšé£æºãå«ãããšãå°ããªãããã¯ãã§ãæ°é±éã§äœçŸäžè¡ãã®ãã°ãèç©ãããããšããããŸãã
æ¥åžžäœæ¥ã§çã¿ãåºãã®ã¯ããã§ãã管çç»é¢ã§ã¯ãæšæ¥ã®ãšã©ãŒããããã®ãŠãŒã¶ãŒã®æäœããšãã£ãçããã£ã«ã¿ãå¿ èŠã§ãããããŒãã«ã倧ãããªããšãã®ãããªåºæ¬ç»é¢ãé ããªããŸãã
ãŸãç®ã«ä»ãçç¶ã¯æ¬¡ã®ãããªãã®ã§ãïŒ
- çãæ¥ä»ç¯å²ã§ããã£ã«ã¿ã«æ°ç§ãããïŒãããã¯ã¿ã€ã ã¢ãŠãããïŒã
- ã€ã³ããã¯ã¹ãè¥å€§åããŠæ¿å ¥ãé ããªããã¹ãã¬ãŒãžã³ã¹ããäžããã
- VACUUM ã autovacuum ã«æéãããããä¿å®ãç®ç«ã€ããã«ãªãã
- ä¿æïŒretentionïŒãå±éºã«ãªãïŒå€ãè¡ã®åé€ãé ããããŒãã«ã«ãããŒããçããã
ããŒãã£ã·ã§ãã³ã°ã¯ãããã«å¯ŸåŠããäžã€ã®ææ®µã§ããç°¡åã«èšãã°ãã²ãšã€ã®å€§ããªããŒãã«ãå€ãã®å°ããªããŒãã«ïŒããŒãã£ã·ã§ã³ïŒã«åããŠãè«ççã«ã¯åãååã§æ±ããããã«ããŸããPostgreSQL ã¯éåžžæéãåºæºã«ã«ãŒã«ãèšå®ããæ°ããè¡ãé©åãªããŒãã£ã·ã§ã³ã«æ¯ãåããŸãã
ãã®ããããŒã ã¯ã€ãã³ãããŒãã«ã«å¯Ÿã㊠PostgreSQL ã®ããŒãã£ã·ã§ãã³ã°ãæ€èšããŸãïŒææ°ã®ããŒã¿ãå°ããªå¡ã«ãŸãšãŸã£ãŠããã°ãã¯ãšãªãæéãŠã£ã³ããŠã ããå¿ èŠãšããå Žåã«äžèŠãªããŒãã£ã·ã§ã³ãã¹ãããã§ããŸãã
ãã ãããŒãã£ã·ã§ãã³ã°ã¯éæ³ã®æ§èœåäžã¹ã€ããã§ã¯ãããŸããããéå»7æ¥éãã®ãããªã¯ãšãªã«å€§ããå¹ããä¿æäœæ¥ãç°¡åã«ããŸãããæ°ããªåé¡ãçãããšããããŸãïŒ
- ããŒãã£ã·ã§ã³ããŒã䜿ããªãã¯ãšãªã¯å€ãã®ããŒãã£ã·ã§ã³ããã§ãã¯ããªããã°ãªããªãã
- ããŒãã£ã·ã§ã³ãå¢ãããšç®¡çãã¹ããªããžã§ã¯ããå¢ããèšå®ãã¹ã®ãªã¹ã¯ãé«ãŸãã
- äžéšã®ãŠããŒã¯å¶çŽãã€ã³ããã¯ã¹ã¯å šããŒã¿ã«ãŸããã£ãŠä¿èšŒãã«ãããªãã
管çç»é¢ãæ¥ä»ãã£ã«ã¿ãšäºæž¬å¯èœãªä¿æã«ãŒã«ã«å€§ããäŸåããŠãããªããããŒãã£ã·ã§ãã³ã°ã¯æå¹ã§ãããããã»ãšãã©ã®ã¯ãšãªãããŠãŒã¶ãŒXã®å šå±¥æŽãæ¢ãããããªãã®ãªããUI ãšã€ã³ããã¯ã¹ãæ éã«èšèšããªãéãåé¡ãæãããšããããŸãã
ãã°ïŒç£æ»ã§ã®å žåçãªã¢ã¯ã»ã¹ãã¿ãŒã³
ã€ãã³ãïŒç£æ»ããŒãã«ã¯äžæ¹åã«å¢ããŠãããŸãïŒäžæ¹åãžãæ¿å ¥ãç¶ç¶ããŠçºçããæŽæ°ã¯ã»ãšãã©ãããŸãããå€ãã®è¡ã¯äžåºŠæžã蟌ãŸãããã®åŸãµããŒãäœæ¥ãã€ã³ã·ãã³ãã¬ãã¥ãŒãã³ã³ãã©ã€ã¢ã³ã¹ãã§ãã¯ã®ãšãã«åç §ãããŸãã
ãã®ã远èšã®ã¿ããšããæ§è³ªãéèŠã§ããæžãèŸŒã¿æ§èœã¯åžžã«æ°ã«ãªãç¹ã§ãæ¿å ¥ã¯äžæ¥äžè¡ãããŸããäžæ¹ã§èªã¿åãã¯äžæçã«éèŠåºŠãå¢ããŸãïŒãµããŒããéçšãçŽ æ©ãçããå¿ èŠãšããå Žé¢ïŒã
ã»ãšãã©ã®èªã¿åãã¯ãã£ã«ã¿ã§ãã管çç»é¢ã§ã¯ãŠãŒã¶ãŒã¯ãããŠãåºãç¯å²ïŒéå»24æéãªã©ïŒããå§ããŠã次ã«ãŠãŒã¶ãŒããšã³ãã£ãã£ãã¢ã¯ã·ã§ã³ã§çµã蟌ã¿ãŸãã
äžè¬çãªãã£ã«ã¿ã¯æ¬¡ã®éãã§ãïŒ
- æéç¯å²
- å®è¡è ïŒãŠãŒã¶ãŒIDããµãŒãã¹ã¢ã«ãŠã³ããIP ã¢ãã¬ã¹ïŒ
- 察象ïŒãšã³ãã£ãã£çš®å¥ïŒãšã³ãã£ãã£IDãäŸïŒOrder #1234ïŒ
- ã¢ã¯ã·ã§ã³çš®å¥ïŒäœæãæŽæ°ãåé€ããã°ã€ã³å€±æãªã©ïŒ
- ã¹ããŒã¿ã¹ãéèŠåºŠïŒæåïŒãšã©ãŒïŒ
æéç¯å²ã¯èªç¶ãªãæåã®åãå£ãã§ãã»ãŒåžžã«ååšããŸãããããã€ãã³ãããŒãã«åãããŒãã£ã·ã§ãã³ã°ã®æ žå¿çãªæŽå¯ã§ãïŒå€ãã®ã¯ãšãªã¯æéã®ã¹ã©ã€ã¹ãæ±ããŠããããã®ä»ã®æ¡ä»¶ã¯ãã®ã¹ã©ã€ã¹å ã®äºæ¬¡ãã£ã«ã¿ã§ãã
ä¿æããŸãéèŠã§ãããã°ã¯ãã£ãã«æ°žç¶çã«æ®ããŸããã詳现ãªã€ãã³ãã 30 æ¥ã 90 æ¥ä¿ç®¡ããŠããåé€ãã¢ãŒã«ã€ããè¡ãããšãå€ãã§ããç£æ»ãã°ã¯èŠä»¶ã«ãã£ãŠã¯ 365 æ¥ä»¥äžã®ä¿æãå¿ èŠãªå ŽåããããŸãããããã§ãå€ãããŒã¿ãããŒã¿ããŒã¹ã«è² è·ããããã«åé€ããäºæž¬å¯èœãªæ¹æ³ã欲ããã¯ãã§ãã
ç£æ»ã«ã¯è¿œå ã®æåŸ ããããŸããéåžžãå±¥æŽã¯äžå€ã§ããã¹ãã§ããã¹ãŠã®èšé²ã¯è¿œè·¡å¯èœïŒwho/what/when ãšãªã¯ãšã¹ããã»ãã·ã§ã³ã®æèïŒã§ãã¢ã¯ã»ã¹ã¯å¶åŸ¡ãããã¹ãã§ãïŒèª°ã§ãã»ãã¥ãªãã£é¢é£ã€ãã³ããèŠãããã¹ãã§ã¯ãªãïŒã
ãããã®ãã¿ãŒã³ã¯ UI èšèšã«ãã®ãŸãŸåæ ãããŸãã人ã ãããã©ã«ãã§æåŸ ãããã£ã«ã¿ïŒæ¥ä»ããã«ãŒããŠãŒã¶ãŒéžæããšã³ãã£ãã£æ€çŽ¢ãã¢ã¯ã·ã§ã³ã®ããããããŠã³ïŒã¯ãããŒãã«ãšã€ã³ããã¯ã¹ããµããŒããã¹ããã®ã§ãããããã§ãªããã°ãã°éãå¢ãããšãã«ç®¡çäœéšãé ããªããŸãã
ããŒãã£ã·ã§ãã³ã°ãèŠåããã©ããã®å€æ
ããŒãã£ã·ã§ãã³ã°ã¯ç£æ»ãã°ã®ããã®ããã©ã«ãã®æé©è§£ã§ã¯ãããŸãããæ¥åžžçãªã¯ãšãªãšå®æçãªã¡ã³ããã³ã¹ãäºãã«å¹²æžãå§ããã»ã©ããŒãã«ã倧ãããªã£ããšãã«äŸ¡å€ãçºæ®ããŸãã
åçŽãªãµã€ãºã®ç®å®ãšããŠã¯ïŒã€ãã³ãããŒãã«ãæ°åäžè¡èŠæš¡ã«éãããèšæž¬ãå§ãã䟡å€ããããŸããããŒãã«ãšã€ã³ããã¯ã¹ãæ°åã®ã¬ãã€ãçŽã«ãªããšãåçŽãªæ¥ä»æ€çŽ¢ã§ãé ããªã£ããäºæž¬äžèœã«ãªã£ããããŸãããã£ã¹ã¯ããèªã¿èŸŒãããŒã¿ããŒãžãå¢ããã€ã³ããã¯ã¹ã®ç¶æã³ã¹ããé«ããªãããã§ãã
æãæç¢ºãªã¯ãšãªäžã®ãµã€ã³ã¯ãé »ç¹ã«å°ããæéã¹ã©ã€ã¹ïŒéå»1æ¥ãéå»1é±ïŒãèŠæ±ããã®ã«ãPostgreSQL ãããŒãã«ã®å€§éšåã«è§ŠããŠããŸã£ãŠããå Žåã§ããæè¿ã®ã¢ã¯ãã£ããã£ç»é¢ãé ãããããã¯æ¥ä»ïŒãŠãŒã¶ãŒãã¢ã¯ã·ã§ã³ã§ãã£ã«ã¿ãããšé ããªããªãèŠæ³šæã§ããã¯ãšãªãã©ã³ã§å€§ããªã¹ãã£ã³ããããã¡èªã¿èŸŒã¿ãåžžã«å€ããªããäœèšãªããŒã¿ãŸã§èªãã§ããå¯èœæ§ããããŸãã
ã¡ã³ããã³ã¹é¢ã®ãµã€ã³ãåããããéèŠã§ãïŒ
- VACUUM ã autovacuum ã«ä»¥åããæéããããã
- autovacuum ãé ãããããã¿ãã«ïŒãããŒãïŒãå¢ããã
- ãã«ãã«ã©ã ã€ã³ããã¯ã¹ãäºæ³ä»¥äžã«æé·ããã
- ã¡ã³ããã³ã¹ãšéåžžãã©ãã£ãã¯ãéãªããšããã¯ç«¶åãç®ç«ã€ããã«ãªãã
éçšã³ã¹ãã¯ããŒã ãããŒãã£ã·ã§ãã³ã°ã«é§ãç«ãŠããã£ããããå§åã§ããããã¯ã¢ããããªã¹ãã¢ãé ããªããã¹ãã¬ãŒãžãå¢ããä¿æãžã§ããé«ã³ã¹ãã«ãªããŸãã倧ã㪠DELETE ã¯ãããŒããšè¿œå ã® VACUUM äœæ¥ãçãããã§ãã
äž»èŠãªãŽãŒã«ããä¿æãã·ã³ãã«ã«ããããšããšãæè¿ã®æéã®ã¯ãšãªãé«éã«ããããšããªããããŒãã£ã·ã§ãã³ã°ã¯çå£ã«æ€èšãã䟡å€ããããŸããããŒãã«ãäžçšåºŠã§ãè¯ãã€ã³ããã¯ã¹ã§ã¯ãšãªãæ¢ã«é«éãªããããŒãã£ã·ã§ãã³ã°ã¯è€éããå¢ãã ããããããŸããã
ã€ãã³ãïŒç£æ»ããŒãã«ã«åãããŒãã£ã·ã§ãã³ã°ã®éžæè¢
ã»ãšãã©ã®ç£æ»ïŒã€ãã³ãããŒã¿ã§ã¯ãæãç°¡åã§å¹æçãªã®ã¯æéã«ããã¬ã³ãžããŒãã£ã·ã§ãã³ã°ã§ãããã°ã¯æéé ã«å°çããã¯ãšãªã¯ãéå»24æéããéå»30æ¥ããšãã£ãæéçªã«éäžããä¿æãæéããŒã¹ã§ããããšãå€ãããã§ããæéããŒãã£ã·ã§ã³ã«ããã°ãå€ãããŒã¿ãåé€ãã代ããã«å€ãããŒãã£ã·ã§ã³ã DROP ããã ãã§æžã¿ã巚倧㪠DELETE ãé¿ããããŸãã
æéã¬ã³ãžã®ããŒãã£ã·ã§ãã³ã°ã¯ã€ã³ããã¯ã¹ãå°ããä¿ãŠãŸããåããŒãã£ã·ã§ã³ãç¬èªã®ã€ã³ããã¯ã¹ãæã€ãããå é±ã ããæ¢ãã¯ãšãªã¯äœå¹Žåãã®å±¥æŽãã«ããŒãã巚倧ãªã€ã³ããã¯ã¹ã蟿ãå¿ èŠããããŸããã
ã»ãã®ã¹ã¿ã€ã«ããããŸããããã°ãç£æ»ã«ã¯åœãŠã¯ãŸãã«ããããšãå€ãã§ãïŒ
- ListïŒããã³ãå¥ïŒã¯ãå°æ°ã®éåžžã«å€§ããªããã³ããããŠãã¯ãšãªã®å€ããç¹å®ããã³ãå ã«åãŸãå Žåã«æå¹ã§ããããã³ãæ°ãäœçŸïœäœåã«ãªããšæ±ãã«ãããªããŸãã
- HashïŒæžã蟌ã¿åæ£ïŒã¯æéãŠã£ã³ããŠã®ã¯ãšãªããªãå Žåã«æžã蟌ã¿ãåçã«åæ£ããç®çã§æå¹ã§ãããä¿æãæç³»åã®é²èЧãé£ããããŸãã
- ãµãããŒãã£ã·ã§ãã³ã°ïŒæéïŒããã³ãïŒã¯åŒ·åã§ããè€éããæ¥éã«å¢ããŸããéåžžã«é«ãã¹ã«ãŒãããã峿 Œãªããã³ãåé¢ãå¿ èŠãªã·ã¹ãã åãã§ãã
æéãéžã¶ãªããé²èЧãšä¿æã®ä»æ¹ã«åã£ãããŒãã£ã·ã§ã³ãµã€ãºãéžãã§ãã ããã倧éã®ããŒã¿ã峿 Œãªä¿æãããå Žåã¯æ¥æ¬¡ããŒãã£ã·ã§ã³ãé©ããŸããäžçšåºŠã®ããªã¥ãŒã ãªãææ¬¡ã管çããããã§ãã
å®çšäŸïŒç®¡çããŒã ãæ¯æã®å€±æãã°ã€ã³ã確èªããéå»7æ¥ã§çµããªããæ¥æ¬¡ã鱿¬¡ããŒãã£ã·ã§ã³ã«ããŠããã°ã¯ãšãªã¯ææ°ã®ããŒãã£ã·ã§ã³ã ããè§Šãããšãå€ããPostgreSQL ã¯æ®ããç¡èŠã§ããŸãã
ã©ã®æ¹æ³ãéžã¶ã«ãããå°æ¥ã®ããŒãã£ã·ã§ã³äœæãé å»¶å°çã€ãã³ãã®åŠçãå¢çïŒæ¥ä»ã®åºåãïŒã§äœãããããšãã£ããéå±ãªéšåããèšç»ããŠããããšãéèŠã§ãããããã®æé ãã·ã³ãã«ãªãããŒãã£ã·ã§ãã³ã°ã®å¹æã¯å€§ãããªããŸãã
é©åãªããŒãã£ã·ã§ã³ããŒã®éžã³æ¹
è¯ãããŒãã£ã·ã§ã³ããŒã¯ãå³é¢äžã®ããŒã¿ã®èŠãç®ã§ã¯ãªããå®éã®èªã¿æ¹ã«åèŽããŸãã
ã€ãã³ããç£æ»ãã°ã§ã¯ããŸã管çç»é¢ãèŠãŠãã ããïŒäººã ãæåã«äœ¿ããã£ã«ã¿ã¯äœã§ããïŒ å€ãã®ããŒã ã§ã¯ãããæéç¯å²ïŒéå»24æéãéå»7æ¥ãã«ã¹ã¿ã æéïŒã§ãããããåœãŠã¯ãŸããªããæéããŒã¹ã®ããŒãã£ã·ã§ãã³ã°ããã£ãšã倧ããäºæž¬ããããå©ç¹ããããããŸãã
ããŒã¯é·æã®çŽæãšèããŠãã ãããäœå¹Žãç¶ããŠå®è¡ããã¯ãšãªåãã«æé©åããããšã«ãªããŸãã
人ã ãæåã«äœ¿ããæåã®ãã£ã«ã¿ãããå§ãã
ã»ãšãã©ã®ç®¡çç»é¢ã¯ãã¿ãŒã³ããããŸãïŒæéç¯å²ïŒãªãã·ã§ã³ã§ãŠãŒã¶ãŒãã¢ã¯ã·ã§ã³ãã¹ããŒã¿ã¹ããªãœãŒã¹ãªã©ãçµæãæ©ãçãããã®ãããŒãã£ã·ã§ã³ããŒã«ããŠãã ããã
çŸå®çãªãã§ãã¯ãã€ã³ãïŒ
- ããã©ã«ããã¥ãŒããæè¿ã®ã€ãã³ãããªããã¿ã€ã ã¹ã¿ã³ãã§ããŒãã£ã·ã§ã³ããã
- ããã©ã«ããã¥ãŒããããããã³ãïŒã¢ã«ãŠã³ãã®ã€ãã³ãããªãã
tenant_idãæå³ãæã€ããšãããããããã³ããåå倧ããå Žåã«éãã - æåã®ã¹ããããåžžã«ããŠãŒã¶ãŒãéžã¶ããªã
user_idã¯é åçã«èŠããããéåžžã¯ç®¡çããããŒãã£ã·ã§ã³ãå€ããªããããã
é«ã«ãŒãinality ã®ããŒã¯é¿ãã
ããŒãã£ã·ã§ãã³ã°ã¯åããŒãã£ã·ã§ã³ãæå³ã®ããããŒã¿å¡ã«ãªãå Žåã«æã广çã§ããuser_idãsession_idãrequest_idãdevice_id ã®ãããªããŒã¯äœåã»äœçŸäžãã®ããŒãã£ã·ã§ã³ãçã¿ãã¡ã¿ããŒã¿ã®ãªãŒããŒããããšéçšã®è€éããæãããã°ãã°ãã©ã³ãã³ã°ãé
ãããŸãã
æéããŒã¹ã®ããŒãã£ã·ã§ã³ã¯ããŒãã£ã·ã§ã³æ°ãäºæž¬å¯èœã§ããæ¥æ¬¡ã鱿¬¡ãææ¬¡ããããªã¥ãŒã ã«åãããŠéžãã§ãã ãããå°ãªãããïŒå¹Žæ¬¡ãªã©ïŒã®å Žåã¯å¹æãå°ãããå€ãããïŒæéæ¯ãªã©ïŒã®å Žåã¯ãªãŒããŒããããæ¥å¢ããŸãã
ã©ã®ã¿ã€ã ã¹ã¿ã³ãã䜿ããïŒcreated_at ãš occurred_at
æéã®æå³ãæç¢ºã«ããŸãããïŒ
occurred_atïŒã€ãã³ãããããã¯ãå ã§å®éã«èµ·ããæå»ãcreated_atïŒããŒã¿ããŒã¹ããããèšé²ããæå»ã
ç£æ»ã§ã¯ããã€èµ·ãããïŒoccurredïŒãã管çè
ã«ãšã£ãŠéèŠãªããšãå€ãã§ãããã ãé
å»¶å°çïŒãªãã©ã€ã³ã¯ã©ã€ã¢ã³ããå詊è¡ããã¥ãŒïŒãçºçããããå Žåãoccurred_at ã¯é
ããŠå°çããããšãããããã®å Žå㯠created_at ã§ããŒãã£ã·ã§ã³ããoccurred_at ãæ€çŽ¢çšã«ã€ã³ããã¯ã¹ããæ¹ãéçšé¢ã§å®å®ããŸããå¥ã®éžæè¢ãšããŠãããã¯ãã£ã«æ¹éãå®ããå€ãããŒãã£ã·ã§ã³ãé
ããŠåãåãã€ãã³ãã蚱容ããèšèšããããŸãã
æéã®ä¿åæ¹æ³ã決ããŠãã ãããäžè¬çã«ã¯ timestamptz ã䜿ããUTC ããœãŒã¹ãªããã¥ã«ãŒã¹ã«ããŠãã¥ãŒåŽã§è¡šç€ºçšã¿ã€ã ãŸãŒã³ã«å€æããã®ãå®å
šã§ããããããããšã§ããŒãã£ã·ã§ã³å¢çãå®å®ãããµããŒã¿ã€ã ã«ããæ··ä¹±ãé¿ããããŸãã
ã¹ããããã€ã¹ãããïŒèšç»ãšããŒã«ã¢ãŠã
ããŒãã£ã·ã§ãã³ã°ã¯çŽ æ©ã調æŽã§ã¯ãªããå°ããªãã€ã°ã¬ãŒã·ã§ã³ãããžã§ã¯ããšããŠæ±ããšæ¥œã§ããç®æšã¯ãç°¡åãªæžã蟌ã¿ãäºæž¬å¯èœãªèªã¿åãã宿çã«ã§ããä¿ææäœãã§ãã
å®çšçãªããŒã«ã¢ãŠãèšç»
-
ããªã¥ãŒã ã«åã£ãããŒãã£ã·ã§ã³ãµã€ãºãéžã¶ã ææ¬¡ããŒãã£ã·ã§ã³ã¯æã«æ°åäžè¡çšåºŠãªãååã§ããæã«æ°åäžè¡ãæ¿å ¥ãããªãã鱿¬¡ãæ¥æ¬¡ããŒãã£ã·ã§ã³ã®æ¹ãã€ã³ããã¯ã¹ãš VACUUM ã®è² è·ãæããããŸãã
-
ããŒãã£ã·ã§ã³åããŒãã«ã®ããŒãšå¶çŽãèšèšããã PostgreSQL ã§ã¯ãŠããŒã¯å¶çŽã¯ããŒãã£ã·ã§ã³ããŒãå«ããå¿ èŠãããå ŽåããããŸãããããããã¿ãŒã³ã¯
(created_at, id)ã®ããã«idãçæããcreated_atãããŒãã£ã·ã§ã³ããŒã«ããããšã§ããããã«ããåŸã§ããã®å¶çŽã¯äœ¿ããªãããšé©ãããšãé¿ããããŸãã -
å°æ¥ã®ããŒãã£ã·ã§ã³ãäºåã«äœæããã ããŒãã£ã·ã§ã³ãç¡ããŠæ¿å ¥ã倱æããäºæ ã¯é¿ããŠãã ãããã©ã®ãããå ãŸã§äœããïŒäŸïŒ2â3ãæå ïŒã決ããŠå®æãžã§ãã«ããŠãããŸãã
-
ããŒãã£ã·ã§ã³ããšã®ã€ã³ããã¯ã¹ã¯å°ããæå³çã«ä¿ã€ã ããŒãã£ã·ã§ãã³ã°ã¯ã€ã³ããã¯ã¹ãç¡æã«ããããã§ã¯ãããŸãããå€ãã®ã€ãã³ãããŒãã«ã§ã¯ãããŒãã£ã·ã§ã³ããŒã«å ããŠ
actor_idãentity_idãevent_typeã®ãããªçŸå®çãªç®¡çç»é¢ãã£ã«ã¿ã«å¯Ÿå¿ãã 1ã2 åã®ã€ã³ããã¯ã¹ãå¿ èŠã§ããã念ã®ãããã®ã€ã³ããã¯ã¹ã¯é¿ããå¿ èŠã«ãªã£ããšãã«æ°ããããŒãã£ã·ã§ã³ã«è¿œå ããå€ãããŒãã£ã·ã§ã³ãããã¯ãã£ã«ããŠãã ããã -
ä¿æã¯è¡åé€ã§ã¯ãªãããŒãã£ã·ã§ã³åé€ã§è¡ãããèšç»ããã 180 æ¥ä¿æãããªããå€ãããŒãã£ã·ã§ã³ã DROP ããæ¹ãéããé·æéã® DELETE ãšãããŒããé¿ããããŸããä¿æã«ãŒã«ãå®è¡è ãæ€èšŒæ¹æ³ãæžãæ®ããŠãã ããã
å°ããªäŸ
ç£æ»ããŒãã«ãé±ã« 500 äžè¡å¢ãããªããcreated_at ã«ãã鱿¬¡ããŒãã£ã·ã§ã³ã劥åœãªåºçºç¹ã§ããå
ã® 8 é±éåã®ããŒãã£ã·ã§ã³ãäœæããåããŒãã£ã·ã§ã³ã« actor_id æ€çŽ¢çšãš entity_id æ€çŽ¢çšã® 2 ã€ã®ã€ã³ããã¯ã¹ãæãããŸããä¿ææéãæ¥ããæãå€ã鱿¬¡ããŒãã£ã·ã§ã³ã DROP ããŸãã
å éšããŒã«ã AppMaster ã§æ§ç¯ããŠãããªããæ©æã«ããŒãã£ã·ã§ã³ããŒãšå¶çŽã決ããŠãããšããŒã¿ã¢ãã«ãšçæã³ãŒããåãåæã«åŸãã®ã§å©ãããŸããAppMaster 㯠appmaster.io ã®ãããªãã©ãããã©ãŒã åãä¿æããŠäœ¿ã£ãŠãã ããã
管çç»é¢ã®ãã£ã«ã¿ã«å¯ŸããŠããŒãã£ã·ã§ãã³ã°ãäœãå€ããã
ããŒãã«ãããŒãã£ã·ã§ã³åãããšã管çç»é¢ã®ãã£ã«ã¿ã¯åãªã UI ã§ã¯ãªããªããŸãããããã¯ãšãªãæ°åã®ããŒãã£ã·ã§ã³ã«è§Šããããäœãæåãèµ°æ»ããããå·Šå³ããäž»èŠèŠå ã«ãªããŸãã
å®åäžã®å€§ããªå€åã¯ïŒæéãã£ã«ã¿ãä»»æã§ãã£ãŠã¯ãããªãããšã§ãããŠãŒã¶ãŒãæ¥ä»ç¯å²ãæå®ããªãæ€çŽ¢ïŒããŠãŒã¶ãŒ X ã®å šãŠãèŠããŠãïŒãèš±ããšãPostgreSQL ã¯ãã¹ãŠã®ããŒãã£ã·ã§ã³ããã§ãã¯ããå¿ èŠãåºãŠããŸããåãã§ãã¯ãéããŠããå€ãã®ããŒãã£ã·ã§ã³ãéããšãªãŒããŒããããçãããŒãžãé ãæããããŸãã
ããå¹ãã«ãŒã«ã¯ïŒãã°ãç£æ»æ€çŽ¢ã§ã¯æéç¯å²ãå¿ é ã«ããŠãããã©ã«ãã¯ãéå»24æéããªã©ã«ããããšã§ããçã«ãå šæéããå¿ èŠãªå Žåã¯ãæå³çãªéžæã«ããŠèŠåãåºããšè¯ãã§ãããã
ãã£ã«ã¿ãããŒãã£ã·ã§ã³ãã«ãŒãã³ã°ã«åããã
ããŒãã£ã·ã§ã³ãã«ãŒãã³ã°ãæå¹ã«ãªãã«ã¯ WHERE å¥ã PostgreSQL ã«ãšã£ãŠå©çšå¯èœãªåœ¢ã§ããŒãã£ã·ã§ã³ããŒãå«ãã§ããå¿
èŠããããŸããcreated_at BETWEEN X AND Y ã®ãããªãã£ã«ã¿ã¯ãããã«ãã«ãŒãã³ã°ãããŸãããã«ãŒãã³ã°ãå£ããã¡ãªãã¿ãŒã³ã¯ãã¿ã€ã ã¹ã¿ã³ããæ¥ä»ã«ãã£ã¹ããããã«ã©ã ã颿°ã§å
ãããããã¯ããŒãã£ã·ã§ã³ããŒãšã¯å¥ã®æéåã§ãã£ã«ã¿ããããšã§ãã
åããŒãã£ã·ã§ã³å ã§ã¯ãã€ã³ããã¯ã¹ã¯å®éã«äººã ã䜿ããã£ã«ã¿ã«åãããã«ããŠãããŠãã ãããå®åäžéèŠã«ãªãçµã¿åããã¯ãæéïŒããã²ãšã€ïŒããã³ãïŒã¯ãŒã¯ã¹ããŒã¹ããŠãŒã¶ãŒãã¢ã¯ã·ã§ã³ããšã³ãã£ãã£IDãã¹ããŒã¿ã¹ïŒã§ããããšãå€ãã§ãã
ãœãŒããšããŒãžããŒã·ã§ã³ïŒæµ ãããŒãžã³ã°ãä¿ã€
ããŒãã£ã·ã§ãã³ã°ã ãã§æ·±ãããŒãžããŒã·ã§ã³ã®é ãã¯è§£æ±ºããŸããã管çç»é¢ãæ°çé ã§ãœãŒããããŠãŒã¶ãŒãããŒãž5000ã«é£ã¶ãããªæäœããããšãOFFSET ã«ããæ·±ãããŒãžã³ã°ã¯å€§éã®è¡ãã¹ãããããããé ããªããŸãã
ãã°ã§ã¯ã«ãŒãœã«åããŒãžã³ã°ïŒããã®ã¿ã€ã ã¹ã¿ã³ãïŒID ããåã®ã€ãã³ããèªã¿èŸŒããïŒã®æ¹ãæ¯ãèããè¯ãã§ããã€ã³ããã¯ã¹ã䜿ããããã巚倧ãªãªãã»ãããé¿ããããŸãã
ããªã»ãããæå¹ã§ããäžè¬çãªéžæè¢ãããã€ãçšæããŠãããšè¯ãã§ãããïŒéå»24æéãéå»7æ¥ã仿¥ãæšæ¥ãã«ã¹ã¿ã ç¯å²ãããªã»ããã¯ãå šãŠãèµ°æ»ããŠããŸãã誀æäœãæžããã管çäœéšãäºæž¬å¯èœã«ããŸãã
ããããééããšèœãšã穎
å€ãã®ããŒãã£ã·ã§ãã³ã°ãããžã§ã¯ãã¯åçŽãªçç±ã§å€±æããŸãïŒããŒãã£ã·ã§ã³èªäœã¯æ©èœããŠããã®ã«ãã¯ãšãªã管çç»é¢ãããã«åãããŠèšèšãããŠããããæåŸ ããã广ãåºãªãã®ã§ããããŒãã£ã·ã§ãã³ã°ã§å¹æãåºãã«ã¯ãå®éã®ãã£ã«ã¿ãšä¿æã«åºã¥ããŠèšèšããŠãã ããã
1) ééã£ãæéã«ã©ã ã§ããŒãã£ã·ã§ã³ããŠããŸã
ãã«ãŒãã³ã°ã¯ WHERE å¥ãããŒãã£ã·ã§ã³ããŒãšäžèŽãããšãã ãèµ·ãããŸããcreated_at ã§ããŒãã£ã·ã§ã³ããŠããã®ã«ç®¡çç»é¢ã event_time ã§ãã£ã«ã¿ããŠãããšãæåŸ
éãã«ããŒãã£ã·ã§ã³ãã¹ãããã§ãããããå€ãã®ããŒã¿ã«è§Šããããšã«ãªããŸãã
2) å°ããããããŒãã£ã·ã§ã³ã倧éã«äœã
æéããšïŒæéåäœïŒã®ããŒãã£ã·ã§ã³ã¯ç¶ºéºã«èŠããŸããããªããžã§ã¯ãæ°ãå¢ãã¯ãšãªãã©ã³ããŒã®è² æ ã管çè² è·ãäžãããŸããæ¥µç«¯ãªæžã蟌ã¿éãšå³æ Œãªä¿æããªãéããæ¥æ¬¡ãææ¬¡ã®æ¹ãéçšã¯æ¥œã§ãã
3) ãã°ããŒãã«ãªäžææ§ãããŸã å¹ããšæã蟌ã
ããŒãã£ã·ã§ã³åãããããŒãã«ã§ã¯äžéšã®ãŠããŒã¯å¶çŽã¯ããŒãã£ã·ã§ã³ããŒãå«ããªããšå
šäœã«å¯ŸããŠä¿èšŒã§ããŸãããããŒã 㯠event_id ãåžžã«äžæã ãšæåŸ
ããŠé©ãããšããããŸããã°ããŒãã«ã«äžæãªèå¥åãå¿
èŠãªã UUID ã䜿ããå¿
èŠãªãã¢ããªåŽã§æŽåæ§ã管çããŠãã ããã
4) 管çç»é¢ãèªç±ã«åºãæ€çŽ¢ãèš±ããŠããŸã
芪åãªæ€çŽ¢ããã¯ã¹ã§ãã£ã«ã¿ãªãæ€çŽ¢ãèš±ããšãããŒãã£ã·ã§ã³åããããã°ããŒãã«ã§ã¯å šããŒãã£ã·ã§ã³ãèµ°æ»ããããšã«ãªããã¡ã§ããã¡ãã»ãŒãžæ¬æãžã®ããªãŒããã¹ãæ€çŽ¢ã¯ç¹ã«å±éºã§ããã¬ãŒãã¬ãŒã«ã远å ããŠæéç¯å²ãå¿ é ã«ããããã©ã«ãç¯å²ãå¶éããŠãã ããã
5) ä¿æèšç»ããªãïŒããŒãã£ã·ã§ã³ã®æ±ããæªå®ïŒ
ããŒãã£ã·ã§ãã³ã°ã¯ä¿æãèªåçã«è§£æ±ºããŸãããèšç»ãç¡ããšå€ãããŒãã£ã·ã§ã³ãæºãŸããã¹ãã¬ãŒãžãèšãã¿ãã¡ã³ããã³ã¹ãé ããªããŸãã
åçŽãªéçšã«ãŒã«ãããã°é²ããŸãïŒçããŒã¿ã®ä¿ææéãå®çŸ©ããå°æ¥ããŒãã£ã·ã§ã³ãèªåäœæããŠå€ãããŒãã£ã·ã§ã³ãåé€ããã€ã³ããã¯ã¹ãäžè²«ããŠé©çšããããŒãã£ã·ã§ã³æ°ãšå¢çæ¥ãç£èŠããæãé ã管çãã£ã«ã¿ãå®ããŒã¿éã§ãã¹ãããããšã§ãã
å®è¡åã®ã¯ã€ãã¯ãã§ãã¯ãªã¹ã
ããŒãã£ã·ã§ãã³ã°ã¯ç£æ»ãã°ã«ãšã£ãŠå€§ããªã¡ãªããããããããŸãããæ¥åžžæ¥åã®æéãå¢ããŸããã¹ããŒã倿Žåã«å®éã®å©ç𿹿³ããã§ãã¯ããŠãã ããã
äž»èŠãªçã¿ãã誰ãããéå»24æéãããä»é±ããéããšç®¡çããŒãžãã¿ã€ã ã¢ãŠããããããšãªããããŒãã£ã·ã§ãã³ã°ã¯é©åã«è¿ãã§ããäž»èŠãªã¯ãšãªãããŠãŒã¶ãŒIDã®å šå±¥æŽãã°ãããªããUI ãå€ããªãéãããŒãã£ã·ã§ãã³ã°ã®å¹æã¯éå®çã§ãã
ããŒã ãæ£æ°ã«ä¿ã€ããã®çããã§ãã¯ãªã¹ãïŒ
- æéç¯å²ãããã©ã«ãã®ãã£ã«ã¿ã§ããããšã å€ãã®ç®¡çã¯ãšãªã¯æç¢ºãªãŠã£ã³ããŠïŒfrom/toïŒãå«ãã¹ãã§ããéæŸçãªæ€çŽ¢ãå€ããã°ãããŒãã£ã·ã§ã³ãã«ãŒãã³ã°ã®å¹æã¯æžããŸãã
- ä¿æã¯è¡åé€ã§ã¯ãªãããŒãã£ã·ã§ã³ã® DROP ã§ç®¡çããããšã å€ãããŒãã£ã·ã§ã³ãç Žæ£ããããšã«æµæããªãã確èªããŠãã ããã
- ããŒãã£ã·ã§ã³æ°ã劥åœã§ããããšã æ¥æ¬¡ã»é±æ¬¡ã»ææ¬¡ã®ã©ãã«ããã幎éãããã®ããŒãã£ã·ã§ã³æ°ãèŠç©ãã£ãŠæ±ºããŠãã ãããå°ãããããšãªãŒããŒããããå¢ãã倧ãããããšå¹æãèããŸãã
- ã€ã³ããã¯ã¹ãå®éã®ãã£ã«ã¿ã«åã£ãŠããããšã ããŒãã£ã·ã§ã³ããŒä»¥å€ã«ãããã䜿ããã£ã«ã¿ã«åãããããŒãã£ã·ã§ã³ããšã®ã€ã³ããã¯ã¹ãå¿ èŠã§ãã
- ããŒãã£ã·ã§ã³ã®èªåäœæãšç£èŠãããŠããããšã å°æ¥ããŒãã£ã·ã§ã³ãäœã宿ãžã§ããããã倱æãæ€ç¥ã§ããä»çµã¿ãå¿ èŠã§ãã
å®çšçãªãã¹ãïŒãµããŒããéçšããŒã ããã䜿ãäžäœ3ã€ã®ãã£ã«ã¿ãèŠãŠããããã®ãã¡2ã€ããæéç¯å²ïŒãã1ã€ãã«ãªã£ãŠãããªããPostgreSQL ã®ã€ãã³ãããŒãã«åãããŒãã£ã·ã§ãã³ã°ã¯çå£ã«æ€èšãã䟡å€ããããŸãã
çŸå®çãªäŸã𿬡ã®å®åçã¹ããã
ãµããŒãããŒã ãåžžã«éããŠããç»é¢ã¯2ã€ïŒ"Login events"ïŒæåïŒå€±æãã°ã€ã³ïŒãš "Security audits"ïŒãã¹ã¯ãŒããªã»ãããããŒã«å€æŽãAPIããŒæŽæ°ïŒã顧客ãäžå¯©ãªåäœãå ±åãããšãããŒã ã¯ãŠãŒã¶ãŒã§çµããçŽè¿æ°æéã確èªãçãã¬ããŒãããšã¯ã¹ããŒãããŸãã
ããŒãã£ã·ã§ãã³ã°åã¯ããã¹ãŠãäžã€ã®å€§ã㪠events ããŒãã«ã«ãããæ¥éã«å¢ããŠåçŽãªæ€çŽ¢ãé
ããªããŸããä¿æãé¢åã§ãïŒå€éãžã§ãã§å€ãè¡ãåé€ããŸããã倧éã® DELETE ã¯æéãããããããŒããçã¿ãéåžžãã©ãã£ãã¯ãšç«¶åããŸãã
event_timeïŒã€ãã³ãçºçæå»ïŒã§ææ¬¡ããŒãã£ã·ã§ã³ãäœã£ãåŸãã¯ãŒã¯ãããŒã¯æ¹åããŸãã管çç»é¢ã§æéãã£ã«ã¿ãå¿
é ã«ããŠããã°ãå€ãã®ã¯ãšãªã¯1ïœ2åã®ããŒãã£ã·ã§ã³ã ããè§ŠããŸããPostgreSQL ã¯éžæç¯å²å€ã®ããŒãã£ã·ã§ã³ãç¡èŠã§ããã®ã§ããŒãžè¡šç€ºãéããªããŸããä¿æãå®åçã«ãªããŸãïŒäœçŸäžè¡ãã® DELETE ãå®è¡ãã代ããã«å€ãããŒãã£ã·ã§ã³ã DROP ããã ãã§ãã
ãã ãããªãŒããã¹ãæ€çŽ¢ã "å šæé" ã«å¯ŸããŠå®è¡ããã®ã¯äŸç¶ãšããŠé£é¡ã§ããIP ã¢ãã¬ã¹ãæŒ ç¶ãšãããã¬ãŒãºãæ¥ä»å¶éãªãã§æ€çŽ¢ãããšãããŒãã£ã·ã§ãã³ã°ã¯å®ãããŸãããå¯ŸåŠæ³ã¯è£œååŽã®æ¯ãèãã«ãããŸãïŒæ€çŽ¢ã®ããã©ã«ããæéãŠã£ã³ããŠã«ãããéå»24æéïŒ7æ¥ïŒ30æ¥ããæç¢ºã«æç€ºããããšã§ãã
æå¹ãªæ¬¡ã®ã¹ãããïŒ
- ãŸã管çç»é¢ã®ãã£ã«ã¿ãããããããã©ã®ãã£ãŒã«ãã䜿ãããã©ããå¿ é ã«ããããæžãåºãã
- é²èŠ§æ¹æ³ã«åãããŒãã£ã·ã§ã³ãéžã¶ãææ¬¡ãåºçºç¹ã«ããããªã¥ãŒã ãå¢ããã鱿¬¡ãžç§»è¡ããã
- æéç¯å²ã第äžçŽã®ãã£ã«ã¿ã«ãããUI ã§ãæ¥ä»ãªãããèš±ããŠãããšé ããªããŸãã
- å®éã®ãã£ã«ã¿ã«åãããŠã€ã³ããã¯ã¹ãæŽãããæéãåžžã«ãããªããæéåªå ã®ã€ã³ããã¯ã¹æŠç¥ãåºæºã«ãªããŸãã
- ããŒãã£ã·ã§ã³å¢çã«åãããä¿æã«ãŒã«ã決ããïŒäŸïŒ13ãæä¿æããŠããããå€ããã®ã¯ DROPïŒã
å éšç®¡çç»é¢ã AppMasterïŒappmaster.ioïŒã§äœããªãããããã®åæãæ©ãã«ã¢ãã«åããŠãã䟡å€ããããŸãïŒæééå®ã®ãã£ã«ã¿ãããŒã¿ã¢ãã«ã®äžéšãšããŠæ±ãã°ããã°å®¹éãå¢ããŠãã¯ãšãªæ§èœãä¿ãããŸãã
ãããã質å
ããŒãã£ã·ã§ãã³ã°ã¯ãäžè¬çãªã¯ãšãªãæéã§çµãããïŒããšãã°ãéå»24æéãããéå»7æ¥éããªã©ïŒå ŽåããããŠããŒãã«ã倧ãããªã£ãŠã€ã³ããã¯ã¹ãã¡ã³ããã³ã¹ãè² æ ã«ãªã£ãŠãããšãã«æãæå¹ã§ããäž»èŠãªã¯ãšãªãããŠãŒã¶ãŒXã®å šå±¥æŽãã®ãããªãã®ãªããUIã§æéãã£ã«ã¿ãŒã匷å¶ããåããŒãã£ã·ã§ã³ã«é©åãªã€ã³ããã¯ã¹ãä»ããªãéããããŒãã£ã·ã§ãã³ã°ã¯ãããéçšè² è·ãå¢ããããšããããŸãã
ãã°ãç£æ»ã§ã¯ãæžã蟌ã¿ãæéé ã«å°çããã¯ãšãªãæéçªããå§ãŸãããšãå€ããä¿ææéãæéããŒã¹ã§ãããããæéã«ããã¬ã³ãžããŒãã£ã·ã§ãã³ã°ãæšæºçã«æãé©ããŠããŸããListïŒããã³ãïŒãHashã¯ç¹æ®ãªã±ãŒã¹ã§æå¹ã§ãããä¿æãæç³»åé²èЧãé£ãããªãããšãå€ãã§ãã
ãŠãŒã¶ãŒãæåã«ãã£ã«ã¿ãããã£ãŒã«ããéžãã§ãã ãããã»ãšãã©ã®ç®¡çç»é¢ã§ã¯æåã®ãã£ã«ã¿ãæéç¯å²ãªã®ã§ãæéããŒã¹ã®ããŒãã£ã·ã§ãã³ã°ãæãäºæž¬ããããéžæã§ããããŒãã£ã·ã§ã³ããŒã®å€æŽã¯å€§ããªãã€ã°ã¬ãŒã·ã§ã³ã«ãªãã®ã§ãé·æçãªçŽæãšããŠèããŠãã ããã
ã¿ã€ã ã¹ã¿ã³ããããã³ãèå¥åã®ããã«ã管çå¯èœãªæ°ã®ããŒãã£ã·ã§ã³ã«ãªãããŒã䜿ããŸããããuser_id ã®ãããªé«ãã«ãŒãinality ã®ããŒã¯ãæ°åã®ããŒãã£ã·ã§ã³ãçã¿åºã管çã³ã¹ããšãã©ã³ããŒè² è·ãå¢ããããé¿ããã¹ãã§ãã
é
å»¶å°çïŒãªãã©ã€ã³ã¯ã©ã€ã¢ã³ããå詊è¡ããã¥ãŒïŒãä¿¡çšã§ããªãå Žå㯠created_at ã§ããŒãã£ã·ã§ã³ããæ¹ãéçšäžå®å®ããŸããã€ãã³ãçºçæå»ã確å®ã§ããã®æéã«äœãèµ·ãããããéèŠãªã occurred_at ã§åå²ããéžæè¢ããããŸããæè¡·æ¡ãšããŠã¯ created_at ã§ããŒãã£ã·ã§ã³ããoccurred_at ãæ€çŽ¢çšã«ã€ã³ããã¯ã¹ããæ¹æ³ããããŸãã
ã¯ããããŒãã«ãããŒãã£ã·ã§ã³ãããšãæéç¯å²ãæå®ããªãæ€çŽ¢ã¯å€ãã®ããŒãã£ã·ã§ã³ãæ€æ»ããå¿ èŠãåºãŠããŸãã管çç»é¢ã§ã¯æéç¯å²ãå¿ é ã«ããããã©ã«ãããéå»24æéãã«ãããªã©ããŠãå šæéæ€çŽ¢ã¯æå³çãªæäœã«éå®ããŠãã ããã
ã¯ããããŒãã£ã·ã§ã³ããŒã颿°ã§ã©ãããããïŒäŸãã°ã¿ã€ã ã¹ã¿ã³ããæ¥ä»ã«ãã£ã¹ãããïŒãããŒãã£ã·ã§ã³ããŒãšã¯å¥ã®æéåã§ãã£ã«ã¿ãããšããŒãã£ã·ã§ã³ãã«ãŒãã³ã°ãå¹ããªããªãããšãå€ãã§ããcreated_at BETWEEN X AND Y ã®ãããªã·ã³ãã«ãªåœ¢ã§æžããšãã«ãŒãã³ã°ã確å®ã«ãªããŸãã
ãã°ãã¥ãŒã®æ·±ã OFFSET ããŒãžããŒã·ã§ã³ã¯é¿ããŠãã ããã代ããã«ã«ãŒãœã«æ¹åŒïŒäŸïŒããã® (timestamp, id) ããåã®ã€ãã³ããèªã¿èŸŒããïŒã䜿ããšã€ã³ããã¯ã¹ãã¬ã³ããªãŒã§ãããŒãã«ã倧ãããªã£ãŠãæ§èœãå®å®ããŸãã
PostgreSQL ã§ã¯ãããŒãã£ã·ã§ãã³ã°ãããããŒãã«ã®äžéšã®ãŠããŒã¯å¶çŽã¯ããŒãã£ã·ã§ã³ããŒãå«ããªããšå
šäœã«å¯ŸããŠä¿èšŒã§ããŸãããå®çšçãªãã¿ãŒã³ãšããŠãããŒãã£ã·ã§ã³ããŒã created_at ã®å Žå㯠(created_at, id) ã®ãããªè€åäžææ§ã䜿ãããå€éšåãèå¥åãšã㊠UUID ã䜿ã£ãŠã¢ããªã±ãŒã·ã§ã³åŽã§æŽåæ§ãä¿ã€æ¹æ³ããããŸãã
ããŒãã£ã·ã§ã³ãèœãšãïŒDROPïŒããšã§å€ãããŒã¿ãåé€ããã®ãæãã·ã³ãã«ã§éãæ¹æ³ã§ããå€§èŠæš¡ãª DELETE ã¯ããªã¥ãŒã ãš VACUUM ã®è² è·ãçããããä¿æã«ãŒã«ã¯ããŒãã£ã·ã§ã³å¢çã«åãããŠèªååããŠããã®ãå®éçšã§ã®ã³ãã§ãã


