
ããã«ã¡ã¯ ååã®2åã®èšäºã§ã¯ãRAMå ã®DBMSãããŒã¿ã®å®å šæ§ãã©ã®ããã«æäŸãããã«ã€ããŠèª¬æããŸããã ãããšããã§èŠã€ããããšãã§ããŸãã
ãã®èšäºã§ã¯ãRAMã®DBMSããã©ãŒãã³ã¹ã®åé¡ã«è§ŠããããšæããŸãã æå®ãããããŒã«åŸã£ãŠå€ãåçŽã«å€åããå ŽåãæãåçŽãªãŠãŒã¹ã±ãŒã¹ããããã©ãŒãã³ã¹ã®è°è«ãå§ããŸãããã ããã«ç°¡åã«ããããã«ããµãŒããŒéšåãååšããªããã€ãŸã ãããã¯ãŒã¯äžã§ã¯ã©ã€ã¢ã³ããšãµãŒããŒã®å¯Ÿè©±ã¯çºçããŸããïŒãããè¡ã£ãçç±ã¯ããã«æ確ã«ãªããŸãïŒã ãããã£ãŠãDBMSïŒãããåŒã³åºãããšãã§ããå ŽåïŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®RAMã«å®å šã«ãããŸãã
ããŒã¿ããŒã¹ãµãŒããŒããªãå Žåã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªå ã®ããã·ã¥ããŒãã«ã«ããŒãšå€ã®ãã¢ãä¿åããŠããå¯èœæ§ããããŸãã C / C ++ã§ã¯ããã®ããŒã¿æ§é ã¯æ¬¡ã®ããã«ãªããŸãã
std::unordered_map
ãã®æ§é ã®é床ã確èªããããã«ã次ã®å 容ã®
1.cpp
ãã¡ã€ã«ãäœæããŸããã
#include <map> #include <unordered_map> #include <iostream> const int SIZE = 1000000; int main() { std::unordered_map<int,int> m; m.reserve(1000000); long long c = 0; for (int i = 0; i < SIZE;++i) c += m[i*i] += i; std::cout << c << std::endl; }
ããããã³ã³ãã€ã«ããŠå®è¡ããŸããïŒ
g++ -std=c++11 -O3 1.cpp -o 1 MacBook-Air-anikin:Downloads anikin$ time ./1
ãããŠã次ã®çµæãåŸãŸããïŒ
real 0m0.465s user 0m0.422s sys 0m0.032s
ããããäœãåŠã¶ããšãã§ããŸããïŒ ç§ã®èª¿æ»çµæã¯æ¬¡ã®ãšããã§ãã
- ç§ã¯C / C ++ã倧奜ãã§ãã
- ç§ã¯å€ãè¯ãMacBook Airã倧奜ãã§ãïŒå®éãåäœã¯é ããªããŸãããããã¯å¥ã®è©±ã§ãïŒã
-
-O3
æé©åãã©ã°ã䜿çšã-O3
ã 䜿çšããã®ãæãã人ãããŸãããç¡é§ã§ããããããªããšãããã©ãŒãã³ã¹ãäœäžããããã§ãã ãããå®èšŒããããã«ã次ã®ãããªã³ãã³ããå®è¡ããŸãããã
MacBook-Air-anikin:Downloads anikin$ g++ -std=c++11 1.cpp -o 1 MacBook-Air-anikin:Downloads anikin$ time ./1
ãããŠã-O3
ãªãã®çµæ-O3
2åæªãããšã確èªããŠãã ããïŒ
real 0m0.883s user 0m0.835s sys 0m0.033s
- ã»ãšãã©ã®å Žåãã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒã¢ãŒãã§æ©èœããŸããã ã«ãŒãã«ã¢ãŒãã§è²»ããããçãæéã¯ãããããããã·ã¥ããŒãã«çšã®ããŒãžã®äºåå²ãåœãŠïŒãããŠ
-O3
ããã®æéãæé©åããŸããã§ããïŒã mmapã·ã¹ãã ã³ãŒã«ã®å®è¡ãããã³å®è¡å¯èœãã¡ã€ã«ã®ããŠã³ããŒãã«è²»ãããããšèããããŸãã - ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ãçŽ100äžã®ããŒãããã·ã¥ããŒãã«ã«æ¿å ¥ããŸãã ããã§ãåèªãšã¯ãä¹ç®i * iäžã®ãªãŒããŒãããŒã«ãã£ãŠåŒãèµ·ããããç¹°ãè¿ãã®ããã«ãå®éã«ã¯ããã·ã¥ããŒãã«ã«100äžæªæºã®ããŒãååšããå¯èœæ§ãããããšãæå³ããŸãã ãããã£ãŠãæ°ããããŒã¿ãæ¿å ¥ãããšãæ¢åã®ããŒã¿ãæŽæ°ãããŸãã ãã ããããã·ã¥ããŒãã«ã«ã¯æ£ç¢ºã«100äžã®æäœããããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¯100äžåã®ããŒãæ¿å ¥ããçŽ0.5ç§ã§ã·ã£ããããŠã³ããŸãã 1ç§ãããçŽ200äžåã®ããŒãšå€ã®ãã¢ã®æ¿å ¥ãçæãããŸãã
åŸè ã®èŠ³å¯ã¯ç¹ã«èå³æ·±ãã
std::unordered_map
ã§è¡šãããRAMã«ããŒãšå€ã®ãã¢çšã®ã¹ãã¬ãŒãžãšã³ãžã³ãæ¢ã«ããããã®ãããªå€ãè¯ãMacBook Airã®1ã€ã®ã³ã¢ã§æ¯ç§200äžåã®æäœãå®è¡ã§ãããšä»®å®ã§ããŸãã
MacBook-Air-anikin:Downloads anikin$ uname -a Darwin MacBook-Air-anikin.local 13.4.0 Darwin Kernel Version 13.4.0: Mon Jan 11 18:17:34 PST 2016; root:xnu-2422.115.15~1/RELEASE_X86_64 x86_64
æŽæ°ã®ããŒãšå€ã䜿çšããããšã«æ³šæããŠãã ããã æååã䜿çšããããšã¯ã§ããŸããããå²ãåœãŠãšã³ããŒããã¹ãçµæã«åœ±é¿ãäžããããªããšããçç±ã ãã§å®è¡ããŸããã§ããã æååã«å¯Ÿããå¥ã®åŒæ°ïŒ
std::unordered_map<std::string, âŠ>
å Žåãè¡çªã®å¯èœæ§ãé«ããªããããã©ãŒãã³ã¹ãäœäžããŸãã
RAMã®ããã·ã¥ããŒãã«ã¯ã1ã€ã®ã³ã¢ã§1ç§ããã200äžã®æäœãå®è¡ã§ããããšãããããŸãããRAMã®DBMSã«ã€ããŠè©±ããŠããããšãæãåºããŸãã RAMå ã®DBMSãšRAMå ã®ããã·ã¥ããŒãã«ã®éãã¯äœã§ããïŒ DBMSã¯ãµãŒããŒã¢ããªã±ãŒã·ã§ã³ã§ãããããã·ã¥ããŒãã«ã¯ã©ã€ãã©ãªã§ãã DBMSã¯ãããã·ã¥ããŒãã«ãšãã®ä»ã®ãã®ã§ãã ãããŠãããã«ã¯ãå°ãªããšããµãŒããŒèªäœã®ã¹ãã©ãããå«ãŸããŸãã
std::unordered_map<int, int>
åºã¥ããŠãµãŒããŒã¢ããªã±ãŒã·ã§ã³ãäœæããŸãããã çŽ æŽãªã¢ãããŒãã¯æ¬¡ã®ããã«ãªããŸãã
- ã¡ã€ã³ã¹ããªãŒã ã®æ¥ç¶ãåãå ¥ããŸãã
- åä¿¡ããæ¥ç¶ããšã«æ°ããã¹ã¬ãããäœæããŸãïŒãŸãã¯äºåäœæãããã¹ã¬ããã®ããŒã«ãéå§ããŸãïŒã
- åæããªããã£ãïŒãã¥ãŒããã¯ã¹ãªã©ïŒã䜿çšããŠã
std::unordered_map
ãä¿è·ããŸãã - ããŒã¿ã®å®å šæ§ãå¿ããªãã§ãã ãã-åæŽæ°æäœããã©ã³ã¶ã¯ã·ã§ã³ãã°ã«èšé²ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã³ãŒããæžãããšã«é£œã飜ãããããªãã®ã§ããã§ã«ãããè¡ã£ãŠãããšæ³åããŠã¿ãŸãããã ãæ¥ç¶ããšã«åå¥ã®ã¹ã¬ãããïŒMySQLãMariaDBãPostgresãªã©ïŒã®ååã«åºã¥ããŠé 眮ãããä»»æã®ããŒã¿ããŒã¹ãµãŒããŒã䜿çšããŸãã1ã³ã¢ã§æ倧ã§æ°äžã®ã¯ãšãªãå®è¡ã§ããŸãïŒ16ãŸãã¯32ã§ïŒæ žãµãŒããŒã«ãšã£ãŠã¯ã1ç§ããã100äžåã®æäœã«ãªããŸãïŒã ããã¯ããŸããŸãªãã³ãããŒã¯ã§ããç¥ãããŠããŸãã ãããã¯ãŒã¯ã§èŠã€ããããšãã§ããåŸæ¥ã®DBMSã®äžã§æé«ã®ããã©ãŒãã³ã¹ã€ã³ãžã±ãŒã¿ãŒã¯ã1ç§ãããçŽ100äžã®ãªã¯ãšã¹ãã§ããã20ã³ã¢ã®ã³ã³ãã¥ãŒã¿ãŒã§å®è¡ãããMariaDBã«å±ããŸãã 詳现ãªèšç®ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã ç°¡åãªèšç®ã«ãããã³ã¢ããã1ç§ããã5äžã®ãªã¯ãšã¹ããååŸããŸãã ããããäžçæé«ã®ã¹ãã·ã£ãªã¹ãã«ãã£ãŠæé©åãããåžå Žã§æé«ã®DBMSã®1ã€ã¯ã1ã€ã®ã³ã¢ã§1ç§ããã50,000件ã®åçŽãªã¯ãšãªïŒå®éã«ã¯ããŒæ€çŽ¢ïŒã®ã¿ãåŠçããŸãã
50,000ããã³200äž
std::unordered_map
ãšæ¯èŒããå Žåã40åã®å·®ããããŸãã ã©ãã§ããïŒ ããŒã¿æ§é ã«ãµãŒããŒãè¿œå ããŠãä»ã®ã¢ããªã±ãŒã·ã§ã³ã«ãªã¢ãŒãã¢ã¯ã»ã¹ã§ããããã«ããŸãããããã©ãŒãã³ã¹ã40åäœäžããŸããã ïŒç¹°ãè¿ããŸãããããã¯æãåçŽãªæäœã®ãã³ãããŒã¯ã§ããããã¹ãŠããã£ãã·ã¥å ã«ãããDBMSã¯äžçæé«ã®ã¹ãã·ã£ãªã¹ãã«ãã£ãŠèª¿æŽãããæ倧ã¹ã«ãŒãããã«èšå®ãããŠãããDBMSã®ãªãŒããŒããããæå°éã«æããŠããŸããïŒãã«ãã¬ãã«ã¢ãŒããã¯ãã£ãå¿ããŠããã¹ãŠã®ããžãã¹ããžãã¯ãšDBMSããžãã¯ã1ã€ã®ããã»ã¹å ã®1ã€ã®ã¢ããªã±ãŒã·ã§ã³ã«èšè¿°ããæ¹ãé©åã§ãã ãã¡ãããããã¯åè«ã§ããã ããŒã¿ããŒã¹ãµãŒããŒãæé©åããããšããå§ãããŸãã
äžèšã®ã¢ãŒããã¯ãã£ãåãããµãŒããŒããã©ã³ã¶ã¯ã·ã§ã³ãåŠçãããšãã«äœãèµ·ãããã«ã€ããŠã®ã·ã¹ãã ã³ãŒã«ã®ããªãºã ãèŠãŠã¿ãŸãããã
- ãããã¯ãŒã¯ãããªã¯ãšã¹ããèªã¿åããŸãã
- ããã·ã¥ããŒãã«ããã¯ã
- ããã·ã¥ããŒãã«ã®ããã¯ã解é€ããŸãã
- ãã©ã³ã¶ã¯ã·ã§ã³ãã°ã«æžã蟌ã¿ãŸãã
- ãããã¯ãŒã¯ãžã®èšé²ã
èŠæ±ããšã«ãå°ãªããšã5ã€ã®DBMSãžã®ã·ã¹ãã ã³ãŒã«ãåãåããŸãã ååŒã³åºããè¡ãã«ã¯ãã«ãŒãã«ã¢ãŒããéå§ããã³çµäºããå¿ èŠããããŸãã
ã«ãŒãã«ã¢ãŒããéå§ããã³çµäºãããšãã¢ãŒããåãæ¿ãããããçšåºŠã®äœæ¥ãå¿ èŠã«ãªããŸãã 詳现ã¯ãããšãã°ããã§èªãããšãã§ããŸã ã ããã«ãã¢ãŒãã®åãæ¿ãã«ããã³ã³ããã¹ãã®åãæ¿ããçºçããã³ããŒãšé 延ãããã«å€§ãããªãå¯èœæ§ããããŸãã 詳现ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã
ã·ã¹ãã ã³ãŒã«ã®ãã¹ãŠã®æªã瀺ãããã«ïŒç§ã¯æ£ãããç§ã¯ã·ã¹ãã ã³ãŒã«ã倧奜ãã§ãããé ãã®ã§æªçšããªãããã«ããŠããŸãïŒãå¥ã®ããã°ã©ã ãäœæããŸããïŒCã§ïŒïŒ
#include <stdio.h> #include <fcntl.h> #include <unistd.h> int main() { int fd = open(â/dev/zeroâ, O_RDONLY); for (int i = 0; i < 1000000; ++i) { unsigned char c; if (read(fd, &c, 1) == -1) { fprintf(stderr, âerror on read\nâ); break; } } close(fd); return 0; }
ãã®ããã°ã©ã ã¯ããã¡ã€ã«
/dev/zero
ãã100äžãã€ãã®èªã¿åãã®ã¿ãçæã
/dev/zero
ã ãã¹ãçµæã¯æ¬¡ã®ãšããã§ãã
MacBook-Air-anikin:Downloads anikin$ time ./2 real 0m0.639s user 0m0.099s sys 0m0.495s
ãŸããããã°ã©ã ã¯ã»ãšãã©ãã¹ãŠã®æéãã«ãŒãã«ã¢ãŒãã§äœ¿çšããŸãã 次ã«ã1ç§éã«çŽ150äžã®ã·ã¹ãã ã³ãŒã«ãè¡ããŸãã ããã·ã¥ããŒãã«ã®ããã©ãŒãã³ã¹ã¯1ç§éã«çŽ200äžåã§ãã£ãããšãæãåºããŠãã ããã å¥åŠãªããšã«ã èªã¿åãã·ã¹ãã ã³ãŒã«ã¯ããã·ã¥ããŒãã«ãæ€çŽ¢ããããã30ïŒ é ããªããŸãã ãããŠãããã¯ãã®åŒã³åºãã®åçŽãã«ããããããã圌ã¯ãã£ã¹ã¯ãŸãã¯ãããã¯ãŒã¯ã«ã¢ã¯ã»ã¹ãããåã«ãŒããè¿ããŸããã
äžèšã§æžããããã«ãããŒã¿ããŒã¹ãµãŒããŒã䜿çšããå Žåãããã·ã¥ããŒãã«ã«ã¯æ€çŽ¢æäœããšã«å°ãªããšã5ã€ã®ã·ã¹ãã ã³ãŒã«ããããŸãã ããã¯ãã·ã¹ãã ã³ãŒã«ã®å Žåã«å°ãªããšãïŒ5 * 1.3 =ïŒ6.5åã®æéãå¿ èŠã§ããããšãæå³ããŸãïŒ ç¶æ³ãçšåãã¬ãŒã³ã«è»¢éãããšãã·ã¹ãã ã³ãŒã«ã¯85ïŒ ã®çšéã®ããã«ãªããŸãã 85ïŒ ã®çµŠäžçšãæè¿ããŸããïŒ ç²åŸãã100ã«ãŒãã«ã®ãã¡15ã«ãŒãã«ããåãåããªãã£ããïŒ ããã«ã€ããŠèããåŸã èªã¿åã ã æžã蟌ã¿ãããã³ãã®ä»ã®ã·ã¹ãã ã³ãŒã«ã«æ»ããŸãããã ãããã¯ãŒã¯ãããã¡ããã®èªã¿åããLinuxã«ãŒãã«ã§ã®ã¡ã¢ãªãããã¯ã®å²ãåœãŠãå éšã«ãŒãã«æ§é ã®æ€çŽ¢ãšå€æŽãªã©ãããŸããŸãªã¿ã¹ã¯ãå®è¡ããŸãã ãããã£ãŠã85ïŒ ä»¥äžã®çšéã¯å®éã«ã¯éåžžã«å°ãªãèŠããŸãã èŠæ±ãåŠçãããšãã«MySQLãŸãã¯ãã®ä»ã®åŸæ¥ã®DBMSãåŒã³åºãã·ã¹ãã ã®æ°ã確èªããã«ã¯ãLinuxã§straceãŠãŒãã£ãªãã£ã䜿çšã§ããŸãã
ãããã£ãŠãã·ã¹ãã ã³ãŒã«ã¯æªã§ãã ããããå®å šã«æŸæ£ããDBMSããžãã¯å šäœãã«ãŒãã«ã«è»¢éããããšã¯å¯èœã§ããïŒ è¯ãããã«èãããŸãããé£ããã§ãã ãããããããå®çšçãªãœãªã¥ãŒã·ã§ã³ããããŸãã 以äžã®äŸãèŠãŠãã ããã
#include <stdio.h> #include <fcntl.h> #include <unistd.h> int main() { int fd = open(â/dev/zeroâ, O_RDONLY); for (int i = 0; i < 1000; ++i) { unsigned char c[1000]; if (read(fd, &c, 1000) == -1) { fprintf(stderr, âerror on read\nâ); break; } } close(fd); return 0; }
çµæã¯æ¬¡ã®ãšããã§ãã
MacBook-Air-anikin:Downloads anikin$ time ./2 real 0m0.007s user 0m0.001s sys 0m0.002s
ãã®ããã°ã©ã ã¯ä»¥åã®ããã°ã©ã ãšãŸã£ããåãã§ã-
/dev/zero
ãã¡ã€ã«ãã100äžãã€ããã³ããŒããŸã-ãã ããå®è¡æéã¯ããã7ããªç§ã§ã639ããªç§ã®ä»¥åã®çµæããã»ãŒ100åé«éã§ãïŒ ããã¯ã©ã®ããã«å¯èœã§ããïŒ ç§trickã¯ãã·ã¹ãã ã³ãŒã«ã®æ°ãæžããããããããå®è¡ããäœæ¥éãå¢ããããšã§ãã ã·ã¹ãã ã³ãŒã«ãé©åã«äœæ¥ã§ããŒãããã°ãã·ã¹ãã ã³ãŒã«ã¯ããã»ã©æªããªãããšãããããŸãã é話ã«å¯ŸããŠåºå®æéãæ¯æããšãã»ãŒç¡æã§äœ¿çšã§ããŸãã ããã¯å€åœã®éåå°ã«äŒŒãŠããŸãïŒå ¥å Žåžã«å¯ŸããŠ1åæ¯æã-çµæ¥ãã¹ãŠã®ã¢ãã©ã¯ã·ã§ã³ã䜿çšããŸãã ãŸãããŸãã¯äžæ¥ããå°ãå°ãªãïŒãã±ããã®äŸ¡æ Œã¯å€ãããŸããããå¥ã®ã¢ãã©ã¯ã·ã§ã³ã®ç¹ã§ã¯ããå°ãé«äŸ¡ã«ãªããŸãã
ãã®ãããããŒã¿ããŒã¹ãµãŒããŒã®é床ãäžããã«ã¯ãã·ã¹ãã ã³ãŒã«ãæžãããåã³ãŒã«å ã§ããå€ãã®æäœãå®è¡ããå¿ èŠããããŸãã ãããéæããæ¹æ³ã¯ïŒ ãªã¯ãšã¹ããšãã®åŠçãçµã¿åãããŠã¿ãŸãããïŒ
- 1åã®èªã¿åãåŒã³åºãã§ããããã¯ãŒã¯ãã1000件ã®ãªã¯ãšã¹ããèªã¿åããŸãã
- ããã·ã¥ããŒãã«ãããã¯ããŸãã
- 1000件ã®ãªã¯ãšã¹ããåŠçããŸãã
- ããã·ã¥ããŒãã«ã®ããã¯ã解é€ããŸãã
- write / writevã1ååŒã³åºãã ãã§ã1000åã®ãã©ã³ã¶ã¯ã·ã§ã³ããã°ã«æžã蟌㿠ãŸã ã
- 1åã®æžã蟌ã¿åŒã³åºãã§ãããã¯ãŒã¯ã«1000ã®å¿çãæžã蟌ã¿ãŸãã
ãããïŒ ããããã¡ãã£ãšåŸ ã£ãŠãã ãããDBMSã¯éåžžããããã§ãªã¯ãšã¹ããåŠçããŸããïŒå°ãªããšãæ瀺çã«å°ããããªãå ŽåïŒããªã³ã©ã€ã³ã§åäœããŸãïŒãªã¯ãšã¹ããå°çãããšããã«ãDBMSã¯æå°éã®é 延ã§å³åº§ã«ãªã¯ãšã¹ããåŠçããŸãã 圌女ã¯ã1000件ã®ãªã¯ãšã¹ããå°çããã®ãåŸ ã€ããšã¯ã§ããŸããã
ãã®åé¡ã解決ããã«ã¯ïŒ
å ¬å ±äº€éæ©é¢ãèŠãŠã¿ãŸãããã ããã§ããã®åé¡ã¯åäžçŽã«è§£æ±ºãããŸããïŒå幎ã§ã¯ãªãå ŽåïŒã ãã¹ã®ã¹ã«ãŒããããé«ãããããã¹ã®ãã±ããã¯ã¿ã¯ã·ãŒã«ä¹ããããå®ããªããŸãããããã£ãŠã1人ã®ä¹å®¢ã®æ è¡ã®äŸ¡æ Œã¯äœããªããŸãã ãã ãããã¹ïŒãŸãã¯ç¹å®ã®éœåžã«å¿ããŠå°äžéïŒã®é 延ïŒåŸ æ©æéïŒã¯ãå¿ããäžå¿éšã®ã¿ã¯ã·ãŒã®é 延ãšã»ãŒåãã§ãïŒå°ãªããšãããã¥ãŒãšãŒã¯ãã¢ã¹ã¯ã¯ãããªããã«ãªã³ãæ±äº¬ã§ãã®ãã¿ãŒã³ã芳å¯ããŠããŸãïŒã ã©ã®ããã«æ©èœããŸããïŒ
èå¿ãªã®ã¯ã100人ããã¹åã«å°çãããŸã§ãã¹ãåŸ æ©ããªãããšã§ãã éåžžããã¹åã®ä¹å®¢ã¯åžžã«ååã§ãããªããªããäžå¿éšã¯è¡ã®å¿ããéšåã ããã§ãïŒèªã¿èŸŒã¿ïŒäœæ¥è² è·ãé«ãïŒã ãããã£ãŠã1ã€ã®ãã¹ãåæ¢ããä¹å®¢ãä¹ããŠïŒè»å®€ããã£ã±ãã«ãªããŸã§ããŸãã¯åçæã«èª°ãæ®ããªããªããŸã§ïŒç«ã¡å»ããŸãã ãã®åŸã次ã®ãã¹ãç«ã¡äžãããåã³ååãªæ°ã®ä¹å®¢ãè¿ããŸããæåã®ãã¹ã®åºçºãã2çªç®ã®ãã¹ã®å°çãŸã§ã®éã«ãæ°ãã人ãåçæã«çŸããããã§ãã ãã¹ã¯æºè»ãåŸ ã¡ãŸããã ããã¯æå°éã®é 延ã§æ©èœããŸãïŒäººãããŸã-ãããåããé転ããŸããã
DBMSãåãããã«æ©èœããããã«ã¯ããããã¯ãŒã¯ãµãã·ã¹ãã ããã©ã³ã¶ã¯ã·ã§ã³ããã»ããµãããã³ãã£ã¹ã¯ãµãã·ã¹ãã ãç¬ç«ãããã¹ïŒãŸãã¯ãå¿ èŠã«å¿ããŠå°äžéåè»ïŒãšèŠãªãå¿ èŠããããŸãã ãããã®åãã¹ã¯ãä»ã®2ã€ã®ãã¹ã«å¯ŸããŠéåæã«åäœããŸãã ãããŠããããã®ãã¹ã¯ããããããã¹åã«ããã®ãšåãæ°ã®ä¹å®¢ãä¹ããŸãã ååãªä¹å®¢ãããªãå Žå-ãããã¯ããé«ãåºå®æéã®ãã¹ã¯ã»ãšãã©ç©ºãªã®ã§ãããã»ããµã¯éå¹ççã«äœ¿çšãããŸãã äžæ¹ãããã¯äœãåé¡ãªã®ã§ããïŒ æ¢åã®è² è·ã«å®å šã«å¯Ÿå¿ããŸãã ããã»ããµã¯ã1ç§ããã10,000ãªã¯ãšã¹ããš1ç§ããã100äžãªã¯ãšã¹ãã®äž¡æ¹ã§99ïŒ ã§ããŒãã§ããŸãããã©ã¡ãã®å Žåãã·ã¹ãã ã³ãŒã«ã®æ°ãåãã§ãããããå¿çæéãåæ§ã«è¯å¥œã§ãã ãŸãããã®ã€ã³ãžã±ãŒã¿ã¯ãã·ã¹ãã ã³ãŒã«ããšã«è»¢éããããã€ãæ°ãããéèŠã§ãã ããã»ããµã¯åžžã«ããŒããããŸãããé©ãã¹ãããšã«è² è·ã®äžã§ã¹ã±ãŒãªã³ã°ããå®è¡ããã倧容éãšå°å®¹éã®äž¡æ¹ã®è² è·ãåçã«ä¿æããŸãã ã·ã¹ãã ã³ãŒã«ã§å®è¡ãããæäœã®æ°ã100åå€åããå Žåã§ããå¿çæéã¯å®è³ªçã«å€æŽãããŸããã ãã®çç±ã¯ã1ã€ã®ã·ã¹ãã ã³ãŒã«ã®éåžžã«é«ãåºå®äŸ¡æ Œã§ãã
ããããã¹ãŠãæè¯ã®æ¹æ³ã§å®è£ ããæ¹æ³ã¯ïŒ éåæçã«ã Tarantool DBMSã®äŸãèããŠã¿ãŸãããã
- Tarantoolã«ã¯3ã€ã®ã¹ããªãŒã ããããŸãããããã¯ãŒã¯ãæäœããããã®ã¹ããªãŒã ããã©ã³ã¶ã¯ã·ã§ã³ãåŠçããããã®ã¹ããªãŒã ïŒ ãã©ã³ã¶ã¯ã·ã§ã³åŠçã®ç¥èªTXã䜿çšããŸãããPã§ã¯ãªãXãããçç±ã¯èããªãã§ãã ããïŒããã³ãã£ã¹ã¯ãæäœããããã®ã¹ããªãŒã ã§ãã
- ãããã¯ãŒã¯ã¹ã¬ããã¯ããããã¯ãŒã¯ããèŠæ±ãèªã¿åãïŒI / Oããããã¯ããã«ãããã¯ãŒã¯ãããã¡ãŒããèªã¿åãããšãã§ããéã1ã€ã®èŠæ±ã§ãããã1000ãè¶ ãããïŒãTXã«è»¢éããŸãã ãŸãã圌ã¯TXããã®å¿çãåä¿¡ããŠââãããã¯ãŒã¯ã«æžã蟌ã¿ããã±ããã«å«ãŸããå¿çã®æ°ã«é¢ä¿ãªããããã1ã€ã®ãããã¯ãŒã¯ãã±ããã§è¡ããŸãã
- ã°ã«ãŒãã®TXã¹ããªãŒã ã¯ããããã¯ãŒã¯ã§åäœããããã«ã¹ããªãŒã ããåä¿¡ãããã©ã³ã¶ã¯ã·ã§ã³ãã¡ã¢ãªå ã§åŠçããŸãã ã¡ã¢ãªãŒå ã®1ã€ã®ã°ã«ãŒãã®ãã©ã³ã¶ã¯ã·ã§ã³ãåŠçãããšããã£ã¹ã¯ã§äœæ¥ããããã«ãããã¹ããªãŒã ã«è»¢éããŸãã åæã«ãç¹å®ã®ã°ã«ãŒãã«ããã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ããããã«é¢ä¿ãªããã°ã«ãŒãã¯æ¬¡ã ã«è»¢éãããŸãã é»è»ãéããŠãã¹åã«åãã人ã ããã®ããã§ãã æ¥è¿ãããã¹ã¯ããã¹ãŠã®ä¹å®¢ã®åçæãã1人ã®ä¹å®¢ãŸã§ä¹è»ããŸãã 誰ãããã¹ã®åºçºåã«åè»ããããšãã§ããªãã£ãå Žåã次ã®ãã¹ãåŸ ã€å¿ èŠããããŸãã ãã¹ã¯1ããªç§äœåã«åŸ æ©ããŸãããæåŸã®ä¹å®¢ã®åŸãã«èª°ãããªãå Žåã圌ã¯åºçºããŸãã ã°ã«ãŒããåŠçãããšããã£ã¹ã¯ãæäœããããã®ã¹ããªãŒã ã¯ãããTXã¹ããªãŒã ã«è¿ãããã©ã³ã¶ã¯ã·ã§ã³ãã³ããããããã®ã°ã«ãŒãã«å«ãŸãããã¹ãŠã®èŠæ±ããããã¯ãŒã¯ã§æäœããããã®ã¹ããªãŒã ã«è¿ããŸãã
ãã®ããã«ããŠãTarantoolã®ã·ã¹ãã ã³ãŒã«ã®æ°ãå€§å¹ ã«åæžããŸããã ããã§ã¯ãã·ã¹ãã ãã©ã®ããã«åäœããåäžã®ã³ã¢ã§æ¯ç§100äžã®ãã©ã³ã¶ã¯ã·ã§ã³ã«å¯ŸåŠãããã«ã€ããŠè©³ããèªãããšãã§ããŸãã
以äžã®ç»åã¯ãã¯ãŒã¯ãããŒå šäœãæŠç¥çã«ç€ºããŠããŸãã

泚æãæã䟡å€ãããäž»ãªããšã¯ãåã¹ã¬ããã䞊è¡ããŠå®è¡ãããæ®ãã®2ã€ã®äœæ¥ã«å¹²æžããªãããšã§ãã 䞊ååŠçãå€ãè² è·ãé«ãã»ã©ãèŠæ±ããšã®ã·ã¹ãã ã³ãŒã«ãå°ãªããªããã·ã¹ãã ã1ç§ãããã«åŠçã§ããèŠæ±ãå€ããªããŸãã
åæã«ãã¹ã¬ããã¯ä»ã®ã¹ã¬ãããåŸ æ©ããã®ã§ã¯ãªããåã«çŸåšæã£ãŠããäœæ¥ãå®è¡ããã ããªã®ã§ãå¿çæéã¯ååã«ãããŸããããã®éãäœæ¥ã®æ°ããéšåã䞊è¡ããŠæºåãããŠããŸãã
RAMå ã®DBMSã«ã€ããŠã®èšäºãããã«å¢ããŸãã ã楜ãã¿ã«ïŒ
èšäºã®å 容ã«é¢ãããã¹ãŠã®è³ªåã¯ãå ã®danikinã®èè ãã¡ãŒã«ããã³ã¯ã©ãŠããµãŒãã¹Mail.Ru Groupã®ãã¯ãã«ã«ãã£ã¬ã¯ã¿ãŒã«å®ãŠãŠãã ããã