
çŽ3幎éãç§ã¯ãMongoDBãã¡ã€ã³ããŒã¿ããŒã¹ãšããŠäœ¿çšããããã€ãã®ãããžã§ã¯ããéçºããã³ãµããŒãããŠããŸããããã®èšäºã§ã¯ãMongoDBã®ç§ã®æèŠã§ã¯ãããã¥ã¢ã«ã«æžãããŠããã»ã©åçŽã§ã¯ãªãçç±ãšãããªããçªç¶MongoDBãããªãã®æ°ãããã¡ãã·ã§ããã«ãªã¹ã¿ãŒãã¢ããã®ã¡ã€ã³ããŒã¿ããŒã¹ãšããŠæ¡çšããããšã«æ±ºããå Žåãæºåãã§ããŠããã¯ãã§ã:-)
以äžã«èª¬æãããã¹ãŠã¯ãPythonããã°ã©ãã³ã°èšèªã®MongoDBãæäœããããã®PyMongoã©ã€ãã©ãªã䜿çšããŠåçŸã§ããŸãã ãã ããä»ã®ããã°ã©ãã³ã°èšèªã§ä»ã®ã©ã€ãã©ãªã䜿çšããŠããå Žåãåæ§ã®ç¶æ³ãçºçããå¯èœæ§ãæãé«ããªããŸãã
PyMongoããã§ã€ã«ãªãŒããŒãšAutoReconnectäŸå€ã®åé¡
ã»ãšãã©ãã¹ãŠã®ããã¥ã¢ã«ãããã³ã€ã³ã¿ãŒãããäžã®å€æ°ã®èšäºã§ãMongoã¯çµã¿èŸŒã¿ã®ã¬ããªã±ãŒã·ã§ã³ã¡ã«ããºã ã«ãããããã«ãã§ãŒã«ãªãŒããŒããµããŒããããšèšãããŠããŸãã ããã€ãã®èšäºã§ã¯ã 10genã®å ¬åŒã³ãŒã¹ã§ãã£ãŠãã1ã€ã®ãã¹ãã«è€æ°ã®mongodããã»ã¹ããããã€ãããããã®éã§ã¬ããªã±ãŒã·ã§ã³ãæ§æããããã»ã¹ã®1ã€ã匷å¶çµäºãããšãã¬ããªã±ãŒã·ã§ã³ã¯å€±æãããæ°ãããã¹ã¿ãŒãåéžããããã¹ãŠã倧äžå€«ã§ãã ãããŠããã¯æ¬åœã«åäœããŸã...ãããããŒã«ã«ãã¹ãã§ã®ã¿ïŒ çŸå®ã«ã¯ãç¶æ³ã¯å°ãç°ãªããŸãã
Amazonã§ä»®æ³ãã·ã³ãè©ŠããŠãããšããŸãããã 5å°ã®å°ããªãã·ã³ïŒããŒã¹çšã«3å°ãã©ã€ã¿ãŒãšãªãŒããŒçšã®ãã¹ãããã»ã¹çšã«2å°ïŒãäžããŠã¿ãŸãããã1å°ã¯ç¶ç¶çã«ããŒã¿ããŒã¹ã«å€ãæžã蟌ã¿ããã1å°ã¯å€ãèªã¿åããŸãã
CentOS 6.xã䜿çšããæšæºã®æ åœè ããmongodbãé 眮ããã¹ãŒããŒãã€ã¶ãŒãé 眮ããŸãã ã¹ãŒããŒãã€ã¶å ã®åmongodããã»ã¹ã®æ§æã¯æ¬¡ã®ãšããã§ãã
# touch /etc/supervisord.d/mongo.conf [program:mongo] directory=/mnt/mongo command=mongod --dbpath /mnt/mongo/ --logappend --logpath /mnt/mongo/log --port 27017 --replSet abc
ã¬ããªã±ãŒã·ã§ã³ãæ§æããŸãã
# mongo --port 27017 > rs.initiate({ _id: 'abc', members: [ {_id: 0, host:'db1:27017'}, {_id: 1, host:'db2:27017'}, {_id: 2, host:'db3:27017'} ] })
writer.pyããã»ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
import datetime, random, time, pymongo con = pymongo.MongoReplicaSetClient('db1:27017,db2:27017,db3:27017', replicaSet='abc') cl = con.test.entities while True: time.sleep(1) try: res = cl.insert({ 'time': time.time(), 'value': random.random(), 'title': random.choice(['python', 'php', 'ruby', 'java', 'cpp', 'javascript', 'go', 'erlang']), 'type': random.randint(1, 5) }) print '[', datetime.datetime.utcnow(), ']', 'wrote:', res except pymongo.errors.AutoReconnect, e: print '[', datetime.datetime.utcnow(), ']', 'autoreconnect error:', e except Exception, e: print '[', datetime.datetime.utcnow(), ']', 'error:', e
ãªã¹ããããããããã«ãäžèšã®ã¹ã¯ãªããã¯æ¯ç§å€ãããŒã¿ããŒã¹ã«ä¿åããããšããŸãã
ãããŠããããreader.pyããã»ã¹ã§ãã
import datetime, time, random, pymongo con = pymongo.MongoReplicaSetClient('db1:27017,db2:27017,db3:27017', replicaSet='abc') cl = con.test.entities while True: time.sleep(1) try: res = cl.find_one({'type': random.randint(1, 5)}, sort=[("time", pymongo.DESCENDING)]) print '[', datetime.datetime.utcnow(), ']', 'read:', res except Exception, e: print '[', datetime.datetime.utcnow(), ']', 'error' print e
ãããŠããã®ã¹ã¯ãªããã¯æ¯ç§ããŒã¿ããŒã¹ããå€ãèªã¿åãããšããŸãã
writer.pyãšreader.pyã®ããã»ã¹ã䞊è¡ããŠéå§ããAmazonã³ã³ãœãŒã«ã®ãã©ã€ããªããŒãã§ãã·ã³ãååŸããã³åæ¢ããŸãã

è«ççã«äœãèµ·ããã¹ãã§ããïŒ MongoDBããã¥ã¡ã³ãã«ãããšããabcãã¬ããªã±ãŒãã¯æ°ãããŠã£ã¶ãŒããåéžæããå¿ èŠããããããã¯ã¹ã¯ãªããwriter.pyããã³reader.pyã«å¯ŸããŠééçã«çºçããå¿ èŠãããããã±ãŒã«ã§ãã¹ãããå ŽåïŒã€ãŸãã3ã€ã®ããã»ã¹ãã¹ãŠãåããã¹ãã«ãããã€ããå ŽåïŒãããã¯æ¬åœã«ããã§ããããŠç¶ããŠããŸãã ç§ãã¡ã®å Žåãã¹ã¯ãªããwriter.pyãšreader.py㯠ãäžæä¿¡å·ãéä¿¡ãããŸã§ïŒæ°ãããã©ã€ããªããã§ã«éžæããã¢ã¯ãã£ãã«ãªã£ãŠããå Žåã§ãïŒåã«ãã³ã°ãããã®ãããªäžæåæ¢ç¶æ ã®ãŸãŸã«ãªããŸãã
[ 2015-08-28 21:57:44.694668 ] wrote: 55e0d958671709042a4918b5 [ 2015-08-28 21:57:45.696838 ] wrote: 55e0d959671709042a4918b6 [ 2015-08-28 21:57:46.698918 ] wrote: 55e0d95a671709042a4918b7 [ 2015-08-28 21:57:47.703834 ] wrote: 55e0d95b671709042a4918b8 [ 2015-08-28 21:57:48.712134 ] wrote: 55e0d95c671709042a4918b9 ^CTraceback (most recent call last): File "write.py", line 18, in <module> 'type': random.randint(1, 5) File "/usr/lib64/python2.6/site-packages/pymongo/collection.py", line 409, in insert gen(), check_keys, self.uuid_subtype, client) File "/usr/lib64/python2.6/site-packages/pymongo/message.py", line 393, in _do_batched_write_command results.append((idx_offset, send_message())) File "/usr/lib64/python2.6/site-packages/pymongo/message.py", line 345, in send_message command=True) File "/usr/lib64/python2.6/site-packages/pymongo/mongo_replica_set_client.py", line 1511, in _send_message response = self.__recv_msg(1, rqst_id, sock_info) File "/usr/lib64/python2.6/site-packages/pymongo/mongo_replica_set_client.py", line 1444, in __recv_msg header = self.__recv_data(16, sock) File "/usr/lib64/python2.6/site-packages/pymongo/mongo_replica_set_client.py", line 1432, in __recv_data chunk = sock_info.sock.recv(length) KeyboardInterrupt
ããã¯ãããã«ãã©ãŒã«ããã¬ã©ã³ããšããŠã·ã¹ãã ãé 眮ããã·ã¹ãã ã«é©ããç¶æ³ã§ã¯ãªãããšã«åæããŸããïŒ ãã¡ããããã®äŸã¯å°ãèªåŒµãããŠããŸã-ããšãã°ãWebãããžã§ã¯ãã§PyMongoãšMongoDBã䜿çšããŠããå ŽåãPythonãã¡ãŒã å šäœãuwsgiã®äžã§å®è¡ããã ã¿ã€ã ã¢ãŠãã§ã¹ã¯ãªãããç¡å¹ã«ããäœããã®ãã©ããªã¢ãŒãã uwsgiã§æ§æãããŠããå¯èœæ§ããããŸã- y ...ããããããã§ããã³ãŒãå ã®ãã®çš®ã®ç¶æ³ãäœããã®æ¹æ³ã§ã€ã³ã¿ãŒã»ããããããšæããŸãã ãããè¡ãã«ã¯ãã¹ã¯ãªãããå€æŽããå¿ èŠããããŸãã reader.pyã¹ã¯ãªããã§ã¯ã 次ã®ãã®ã眮ãæããå¿ èŠããããŸã ã
con = pymongo.MongoReplicaSetClient('db1:27017,db2:27017,db3:27017', replicaSet='abc')
ã«
con = pymongo.MongoReplicaSetClient('db1:27017,db2:27017,db3:27017', replicaSet='abc', socketTimeoutMS=5000, read_preference=pymongo.ReadPreference.SECONDARY_PREFERRED)
ã¹ã¯ãªããwriter.py㧠ïŒ
con = pymongo.MongoReplicaSetClient('db1:27017,db2:27017,db3:27017', replicaSet='abc')
ã«
con = pymongo.MongoReplicaSetClient('db1:27017,db2:27017,db3:27017', replicaSet='abc', socketTimeoutMS=5000)
æçµçã«ã¯äœãåŸãããŸããã ãã©ã€ããªããŒããåæžããŠå®éšãç¹°ãè¿ããåŸ ã reader.pyããã»ã¹ã¯äœãèµ·ãããªãã£ãããã«åäœãç¶ããŸãïŒãã®äŸã§ã¯å€æŽãããŠããªãã»ã«ã³ããªããŒããåç §ããŠããããïŒãã writer.pyããã»ã¹ã¯ã¹ããŒäžã«çŽ1åéã¢ã¹ãã©ã«ãã¬ãŒã³ã«ç§»åããŸãAutoReconnectã®ãããªãšã©ãŒïŒ
[ 2015-08-28 21:49:06.303250 ] wrote: 55e0d75267170904208d3e01 [ 2015-08-28 21:49:07.306277 ] wrote: 55e0d75367170904208d3e02 [ 2015-08-28 21:49:13.313476 ] autoreconnect error: timed out [ 2015-08-28 21:49:24.315754 ] autoreconnect error: No primary available [ 2015-08-28 21:49:33.338286 ] autoreconnect error: No primary available [ 2015-08-28 21:49:44.340396 ] autoreconnect error: No primary available [ 2015-08-28 21:49:53.361185 ] autoreconnect error: No primary available [ 2015-08-28 21:50:04.363322 ] autoreconnect error: No primary available [ 2015-08-28 21:50:13.456355 ] wrote: 55e0d79267170904208d3e09 [ 2015-08-28 21:50:14.459553 ] wrote: 55e0d79667170904208d3e0a [ 2015-08-28 21:50:15.462317 ] wrote: 55e0d79767170904208d3e0b [ 2015-08-28 21:50:16.465371 ] wrote: 55e0d79867170904208d3e0c
ç¹°ãè¿ãã«ãªããŸããããã©ãŒã«ããã¬ã©ã³ãã«èšå®ãããã·ã¹ãã ã1åéåæ¢ããã®ã¯ããã»ã©ã¯ãŒã«ã§ã¯ãããŸããïŒãã±ãŒã«ã§ãã¹ãããå Žåãã¿ã€ã ã¢ãŠãã¯ãããŸãã-ãã¹ãŠã¹ã ãŒãºã§ãïŒããããã¯é¿ããããªãæªã§ãããããã¥ã¡ã³ãã«ãèšèŒãããŠããŸã ïŒ
ããŸããŸã§ãããã¬ããªã«ã»ããã¯1å以å ã«æ°ãããã©ã€ããªãéžæããŸãããã ããäŸãšAutoReconnectãšã©ãŒã«æ»ããŸãã ãããããæ³åã®ãšããããœã±ããã«5ç§ã®ã¿ã€ã ã¢ãŠããèšå®ããŸãã 5ç§åŸã«PyMongoãã©ã€ããŒãããŒã¿ããŒã¹ããå¿çãåä¿¡ããªãå Žåãæ¥ç¶ããªã»ãããããšã©ãŒãåãåºããŸãã æãã¯ãŒã«ãªãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸãã-çªç¶ããŒã¿ããŒã¹ãéè² è·ã«ãªãããèŠæ±ãéåžžã«å€§ãããªããå®äºãããŸã§ã«5ç§ä»¥äžããããŸãïŒããŒã¿ããŒã¹å šäœã«åœ±é¿ãäžããäœããã®éçŽæ©èœïŒã æãéèŠãªè³ªåã¯ãAutoReconnect Errorãçºçããããšãããããšããã©ã€ããŒèªäœããªã¯ãšã¹ãã®åèµ·åãè©Šè¡ããªãçç±ã§ãã æåã®çç±-ãã©ã€ããŒã¯å®éã«äœãèµ·ãã£ãã®ãããããªã-çªç¶1ã€ã®ããã»ã¹ããã¬ã€ããŠã³ããããã®ã§ã¯ãªããã¬ããªã±ãŒãå šäœãã 2çªç®ã®çç±ã¯éè€ã§ãïŒ AutoReconnectãšã©ãŒãçºçãããšããã©ã€ããŒã¯ããŒã¿ãæžã蟌ãããšãã§ããã倱æããããç¥ããŸããã ããã¯äžççã«æ¯é çã§ãããšäž»åŒµããããŒã¹ã«ãšã£ãŠã¯å°ãå¥åŠã«èãããŸãããå®éã«ã¯æ£ããåäœããããã«ã¯ã writer.pyã¹ã¯ãªããã次ã®ããã«æžãæããå¿ èŠããããŸãã
ã¬ããªã«ã»ããã®ã¡ã³ããŒãã¢ã¯ã»ã¹ã§ããªããã©ã€ããªã宣èšããã®ã«10ã30ç§ãããå ŽåããããŸãã ããã«ãããéžæãããªã¬ãŒãããŸãã éžåºäžãã¯ã©ã¹ã¿ãŒã¯æžã蟌ã¿ã«äœ¿çšã§ããŸããã
éžæèªäœã¯ããã«10ã30ç§ãããå ŽåããããŸãã
import datetime, time, random, pymongo from pymongo.objectid import ObjectId con = pymongo.MongoReplicaSetClient('db1:27017,db2:27017,db3:27017', replicaSet='abc', socketTimeoutMS=5000) cl = con.test.entities while True: time.sleep(1) data = { '_id': ObjectId(), âŠ. } # Try for five minutes to recover from a failed primary for i in range(60): try: res = cl.insert(data) print '[', datetime.datetime.utcnow(), ']', 'wrote:', res break except pymongo.errors.AutoReconnect, e: print '[', datetime.datetime.utcnow(), ']', 'autoreconnect error:', e time.sleep(5) except pymongo.errors.DuplicateKeyError: break
ãŸããPyMongoéçºè
ã®1人ã®ããã°ã«ãã®ãããã¯ã«é¢ããèšäºãããã JIRA MongoDBã§ã®å°ããªè°è«ããããŸãã
ã°ããŒãã«ããã¯ã®åé¡
MongoDBã®å€§ããªèœãšãç©Žã ããã¯ããããMonguãæãæ¹å€ãããŠãããã®ã§ãã ããã¥ã¡ã³ãã®ã°ã«ãŒãã«å¯ŸããŠå®è¡ããã倧èŠæš¡ãªæäœã¯ãæ»æã«ãããããŸãã ã€ãŸãã倧ãŸãã«èšãã°ã倧èŠæš¡ãªããã¥ã¡ã³ãã°ã«ãŒãã«å¯Ÿããããã€ãã®éãæŽæ°æäœã«ãããããã©ãŒãã³ã¹ã®åé¡ãçºçããä»ã®ãªã¯ãšã¹ãã®å®è¡ããããã¯ãããå¯èœæ§ããããŸãã ãã¡ããã ããŒãžã§ã³2.2ãã ãããã¯ãäžããããšïŒããã¯ã®è²æ©ïŒãåŠã¶ãšç¶æ³ã¯ãããã«æ¹åããmongodããã»ã¹ã¬ãã«ããéžæããããŒã¿ããŒã¹ã®ã¬ãã«ã«ããã¯ã転éããŸããã æ°ããããŒãžã§ã³3.0ã§ã¯ãäœæè ã¯ã代æ¿ã®WiredTigerãšã³ãžã³ãžã®ç§»è¡ã«ãããMMAPv1ãšã³ãžã³ã®ããã«ããã¥ã¡ã³ãã¬ãã«ã§ããã¯ã䜿çšããããŒã¿ããŒã¹ãå®å šã«ãããã¯ããªããããç¶æ³ãæ¹åããå¿ èŠããããšäž»åŒµããŸãã
ã°ããŒãã«ããã¯ã®ç¶æ³ãèŠèŠåããããã®å°ããªãã³ãããŒã¯ãäœæããŸããã å¿ èŠã«å¿ããŠãgit pullãå®è¡ããŠãããããã¹ãŠã®ãã¹ããèªåã§å®è¡ã§ããŸãã
- 1,000人ã®ãŠãŒã¶ãŒãèæ ®ããŸãïŒå€ã¯æ§æã«ãã£ãŠå€æŽã§ããŸãïŒ
- åãŠãŒã¶ãŒã«ã¯5,000ã®ããã¥ã¡ã³ãããããŸãã ã€ãŸããããŒã¿ããŒã¹å ã®ææžã¯ããã500äžã§ãã åããã¥ã¡ã³ãã«ã¯ãããŒã«å€ãæ ŒçŽãããã£ãŒã«ããå«ãŸããŠããŸãã
- ãã¹ãããã»ã¹ã¯ãåãŠãŒã¶ãŒã«1ã€ãã€ã1,000ã¿ã¹ã¯ã®äžŠåå®è¡ã§ãã åã¿ã¹ã¯ã¯ã5,000ã®ãã¹ãŠã®ãŠãŒã¶ãŒããã¥ã¡ã³ãã®ããŒã«ãã£ãŒã«ããæŽæ°ããŠããŸãã
- ãã¹ãäžã«ã1ãã30ã«å¢å ããŸãïŒããã§ããèšå®ã䜿çšããŠå€ãå€æŽã§ããŸãïŒãã¿ã¹ã¯ããŒã«ãåæã«ãã£ããã£ãã競åããã»ã¹ã®æ°ãå¢ãããŸãã
- åã¿ã¹ã¯ã®å®è¡æéãç¯çŽããŸãã ã°ã©ãã£ãã¯ãæ§ç¯ããŠããŸãã MongoDBã®ç°ãªãããŒãžã§ã³ã®ãã¹ãçµæãæ¯èŒããŸãã
- å¥ã®æ¹æ³ãšããŠãMySQL 5.5ïŒInnoDBïŒã§åæ§ã®ã¿ã¹ã¯ãæ€èšããŠãã ããã ãããŠçµæãæ¯èŒããŸãã
ãã¹ãã®çµæã次ã®ããšãèµ·ãããŸããã
MongoDB 2.6ã®ããŒãžã§ã³ãšMongoDB 3.0ã®ããŒãžã§ã³ïŒWiredTigerã§ã¯ãªãMMAPv1ïŒãæ¯èŒãããšãçµæã«å€§ããªéãã¯ãããŸããããMongoDB 3.0ã䜿çšãã30ã®åæã¯ãŒã«ãŒããã»ã¹ã®å Žåãã¯ãšãªã®å®è¡æéã¯ãŸã å°ãçããªããŸãã ãšããã§ããã¹ãäžã«ãmongostat ãŠãŒãã£ãªãã£ã§ããã¯ã®å²åã調ã¹ããšã å±æ ¹ãééããŸã ã
MongoDB 2.6ãšMongoDB 3.0 MMAPv1ãæ¯èŒããçµæ
MongoDB 3.0 MMAPv1ãšMongoDB 3.0 WiredTigerãæ¯èŒãããšãçµæã¯åçã«ç°ãªããŸããããã¯ãWiredTigerã䜿çšããå Žåãããã¯ã倧éæäœã®é床ã«äžãã圱é¿ãå®éã«ã¯ã¯ããã«å°ãªãããšã瀺ããŠããŸãã
MongoDB 3.0 MMAPv1ãšMongoDB 3.0 WiredTigerãæ¯èŒããçµæ
次ã«ãMongoDB 3.0 WiredTigerãšMySQL 5.5ãæ¯èŒããŸãã MySQLããŒã¿ããŒã¹ã¯ãåã ã®èšå®ããã®ã¿éžæãããŸããã 誰ãã欲æ±ãããå Žåã¯ãPostgreSQLã§åæ§ã®ãã¹ããè¡ãããšãã§ããŸãã ããŒã¿ããŒã¹ãæäœãããã¹ãŠã®ããžãã¯ã¯ãç¹å¥ãªã¢ããã¿ãŒã§ã«ãã»ã«åãããŸãã ãã®ãããã¯ã©ã¹ãèšè¿°ããAbstractDBAdapteræœè±¡ã¯ã©ã¹ããç¶æ¿ããPostgreSQLãæäœããããã®ãã¹ãŠã®æœè±¡ã¡ãœããããªãŒããŒã©ã€ãããã ãã§ãã
ãåãã®ããã«ãç®±ããåºããŠããã«ããŒã¹ããã¹ãããããšã¯æ©ç¥ããã§ç¡æå³ãªç·Žç¿ã§ãã MongoDBã«ã€ããŠã¯ãæ®å¿µãªããããã¹ãŠãæªãã§ãã ããŒã¹ã¯å®éã«ã¯èª¿æŽãããŠããããèšå®ã¯æå°éã§ãã MongoDBã®äž»ãªååã¯ãããŒã¿ããŒã¹ã«å¥ã®ãµãŒããŒãå²ãåœãŠãããšã§ãããã®åŸãããŒã¿ããŒã¹èªäœããã¡ã¢ãªã«ä¿åããããŒã¿ãšãã£ã¹ã¯ã«ãã³ãããããŒã¿ã決å®ããŸãã ããã€ãã®ãœãŒã¹ã§ã¯ããµãŒããŒã«ã€ã³ããã¯ã¹ãåããã®ã«å°ãªããšãååãªç©ºãã¡ã¢ãªãå¿ èŠã ãšããæèŠãèããŸããã MySQLã®å Žåãå€ãã®èšå®ãããããã³ãããŒã¯ãéå§ããåã«ã次ã®èšå®ãè¡ãããŸããã
ãããŠçµæã¯ããã«ãããŸããmax_connections = 10000 query_cache_limit = 32M query_cache_size = 1024M innodb_buffer_pool_size = 8192M innodb_log_file_size = 512M innodb_thread_concurrency = 16 innodb_flush_log_at_trx_commit = 2 thread_cache = 32 thread_cache_size = 16
MySQLã§ãã¹ããå®è¡ãããšãã«æåã«æ³šç®ããã®ã¯ãã¯ãŒã«ãŒããã»ã¹ã®æ°ãå¢ããŠããã¹ãŠã®ã¿ã¹ã¯ã®åèšå®è¡æéãå€ãããªãããšã§ãã
... Run test with 5 proceses Test is finished! Save results Full time: 20.7063720226 Run test with 6 proceses Test is finished! Save results Full time: 19.1608040333 Run test with 7 proceses Test is finished! Save results Full time: 19.0062150955 ⊠Run test with 15 proceses Test is finished! Save results Full time: 18.5613899231 Run test with 16 proceses Test is finished! Save results Full time: 18.4244360924 ⊠Run test with 29 proceses Test is finished! Save results Full time: 16.8106219769 Run test with 30 proceses Test is finished! Save results Full time: 19.3497707844
2çªç®-ããã¯ãã¡ããã°ã©ãã£ãã¯ã§ãã MySQLã®å Žåãã¯ãšãªã®å®è¡æéã¯0.001ã0.5ç§ã§å€åãã15ã®åŠçããã»ã¹ãš30ã®äž¡æ¹ã§åžžã«å€åããŸãããMongoDB WiredTigerã®å Žåã15ã®ããã»ã¹ã§ã¯ã¯ãšãªã®å®è¡æéã1.5ç§ã«éããæ倧2.5ç§ïŒ
MongoDB 3.0 WiredTigerãšMySQL 5.5 InnoDBãæ¯èŒããçµæ
ããããã©ã®ãããªçµè«ãå°ãåºãããšãã§ããŸããïŒ
å人çã«ããããžã§ã¯ãã§MongoDBã䜿çšã§ããå Žåãç§ã¯æ¬¡ã®ãã¿ãŒã³ãèŠãŸãïŒ
- ããŒã¿ã¹ããŒãã¯ããåããççµåããã¥ã¡ã³ãã®æŠå¿µã«ããé©åããŸã
- ãã©ã³ã¶ã¯ã·ã§ã³ã®äžè¶³ã¯ãããã¥ã¡ã³ãæäœã®ååæ§ã«ãã£ãŠè£ãããŸã
- ã¢ããªã±ãŒã·ã§ã³ã®ããžãã¹ããžãã¯ã¯ãããã¥ã¡ã³ãã«å¯Ÿããå€æ°ã®å€§èŠæš¡ãªæäœãæå³ãããã®ã§ã¯ãããŸããã
ãŸããããã¥ã¡ã³ãã¯é »ç¹ã«åé€ããªãããšããå§ãããŸãã å¥ã®å°ããªåé¡ãããã«é¢é£ããŠããŸãïŒå¥ã®æ®µèœã«å ¥ããªãããšã«ããŸããïŒã ããã¥ã¡ã³ããåé€ãããšãã空ããã£ã¹ã¯å®¹éã¯è§£æŸãããŸããã MongoDBã¯ãã£ã¹ã¯äžã®ãããã¯ã空ããšããŠããŒã¯ããæ©äŒãããã°ããã®ãããã¯ãæ°ããããã¥ã¡ã³ãã«äœ¿çšããŸãã ç§ã®èŠ³å¯ã«ãããšãããŒãžã§ã³2.6ããåã§ã¯ããã®æŠç¥ã¯éåžžã«éå¹ççã§ããããªããªãã repairDatabaseãé·å¯¿åœããŒã¿ããŒã¹ã§å®è¡ãããåŸãããŒã¿ãšã€ã³ããã¯ã¹ã®ãµã€ãºã2åïŒïŒïŒä»¥äžåæžããããšãã§ããããã§ãã ããŒãžã§ã³2.6以éãæ°ããã³ã¬ã¯ã·ã§ã³ã§ã¯ãããã©ã«ãã§ãæ°ããããã¥ã¡ã³ãçšã«ãã£ã¹ã¯ãäºåã«å²ãåœãŠãããã«æ°ããæŠç¥ã䜿çšããå§ããŸããïŒ usePowerOf2Sizesãªãã·ã§ã³ïŒ-ãã®äœ¿çšã®çµæãæ°ããããã¥ã¡ã³ãã«å²ãåœãŠãããã¹ããŒã¹ã®ãµã€ãºã¯ä»¥åãããå°ã倧ãããªããŸããããããã¥ã¡ã³ããåé€ããåŸã®ç©ºãã¹ããŒã¹ã¯ããå€ããªããŸããå¹æçã«ã ãããŠãMMAPv1ãšã³ãžã³ã®ããŒãžã§ã³3.0ã§ã¯ãããã«é²ãã§ã å±éåã®æŠç¥ãããäžåºŠå€æŽããŸããããå®çšŒåç°å¢ã§ã®æå¹æ§ããŸã è©äŸ¡ã§ããŠããŸããã ãã£ã¹ã¯ã®äºåå±éã«é¢ããŠWiredTigerãšã³ãžã³ã«äœãèµ·ããããæ£çŽãªãšãããç§ãç¥ããŸããã ããã«é¢ããæ å ±ãããã°-ã³ã¡ã³ãã«æžããŠãã ãã:-)