{"id":264595,"date":"2015-08-31T03:43:02","date_gmt":"2015-08-30T23:43:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=264595"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=264595","title":{"rendered":"\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0432\u0441\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0441 MongoDB"},"content":{"rendered":"<p>     \t<img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/3d7\/138\/f13\/3d7138f13e884a458527bd3a07202f12.png\" align=\"left\"\/>\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 MongoDB \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u043b\u0430 \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u0441\u0440\u0435\u0434\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0422\u043e \u0438 \u0434\u0435\u043b\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u044f\u043a\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043a\u0430\u043a \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043c\u043e\u043b\u043e\u0434\u043e\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u044b\u043a\u0438\u043d\u0443\u043b \u043d\u0430 \u0441\u0432\u0430\u043b\u043a\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u0420\u0421\u0423\u0411\u0414, \u0432\u0437\u044f\u043b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 MongoDB, \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u043b \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0435\u0451, \u0438 \u043a\u0430\u043a \u0432\u0441\u0435 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0430\u043b\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e. \u0414\u0430\u0436\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0440\u043e\u044f\u0442 \u0441\u0432\u043e\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043d\u0430 Mongo (<a href=\"https:\/\/www.meteor.com\/\">Meteor.js<\/a> \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440).<\/p>\n<p>  \u041f\u043e \u0434\u043e\u043b\u0433\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 3 \u0433\u043e\u0434\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 MongoDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0411\u0414, \u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0441 MongoDB \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043c\u0430\u043d\u0443\u0430\u043b\u0430\u0445, \u0438 \u043a \u0447\u0435\u043c\u0443 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0440\u0435\u0448\u0438\u0442\u0435 \u0432\u0437\u044f\u0442\u044c MongoDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0411\u0414 \u0432 \u0432\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u043c\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u0430\u043f \ud83d\ude42<\/p>\n<p>  \u0412\u0441\u0435 \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u043d\u0438\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/api.mongodb.org\/python\/\">PyMongo<\/a> \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MongoDB \u0438\u0437 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Python. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u043c\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>PyMongo, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 Failover \u0438 AutoReconnect exception<\/h2>\n<p>  \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u043c\u0430\u043d\u0443\u0430\u043b\u0430\u0445 \u0440\u0430\u0432\u043d\u043e \u043a\u0430\u043a \u0438 \u0432 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430\u0445 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u0447\u0442\u043e Mongo \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 failover \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0412 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445, \u043f\u0440\u0438\u0447\u0435\u043c \u0434\u0430\u0436\u0435 \u0432 <a href=\"https:\/\/youtu.be\/iEnioS8n254?t=1139\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u0443\u0440\u0441\u0430\u0445 \u043e\u0442 10gen<\/a>, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0445\u043e\u0441\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 mongod \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044e, \u0430 \u043f\u043e\u0442\u043e\u043c kill-\u043d\u0443\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u0442\u043e \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0435 \u043f\u043e\u0440\u0443\u0448\u0438\u0442\u0441\u044f, \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0442\u0435\u0440 \u043f\u0435\u0440\u0435\u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043a. \u0418 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0430\u043a \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u2026 \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 localhost-\u0435! \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0436\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0432\u0441\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0430\u0447\u0435.<\/p>\n<p>  \u0412\u043e\u0442 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0440\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0441 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 Amazon-\u0435. \u041f\u043e\u0434\u043d\u0438\u043c\u0435\u043c 5\u0442\u044c small \u043c\u0430\u0448\u0438\u043d \u2014 3 \u043f\u043e\u0434 \u0431\u0430\u0437\u044b, \u0438 2 \u043f\u043e\u0434 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b writer \u0438 reader \u2014 \u043e\u0434\u0438\u043d \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0431\u0430\u0437\u0443, \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u0445 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p>  \u0411\u0435\u0440\u0435\u043c CentOS 6.x, \u0441\u0442\u0430\u0432\u0438\u043c \u043d\u0430 \u043d\u0435\u0433\u043e mongodb \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0440\u0435\u043f, \u0441\u0442\u0430\u0432\u0438\u043c supervisor. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 mongod \u0432 supervisor-\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"bash\"># 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 <\/code><\/pre>\n<p>  \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044e:  <\/p>\n<pre><code class=\"bash\"># mongo --port 27017 &gt; rs.initiate({      _id: 'abc',      members: [        {_id: 0, host:'db1:27017'},        {_id: 1, host:'db2:27017'},        {_id: 2, host:'db3:27017'}      ]   }) <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0446\u0435\u0441\u0441 <b>writer.py<\/b> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"python\">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 <\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0430 \u0432\u044b\u0448\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0435\u0436\u0435\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0431\u0430\u0437\u0443.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <b>reader.py<\/b>:  <\/p>\n<pre><code class=\"python\">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=[(&quot;time&quot;, pymongo.DESCENDING)])         print '[', datetime.datetime.utcnow(), ']', 'read:', res     except Exception, e:         print '[', datetime.datetime.utcnow(), ']', 'error'         print e <\/code><\/pre>\n<p>\u0410 \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0435\u0436\u0435\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u0431\u0430\u0437\u044b.<\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b <b>writer.py<\/b> \u0438 <b>reader.py<\/b> \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438, \u0430 \u043f\u043e\u0442\u043e\u043c \u0431\u0435\u0440\u0435\u043c \u0438 stop-\u0430\u0435\u043c \u043c\u0430\u0448\u0438\u043d\u0443 \u0441 Primary-\u043d\u043e\u0434\u043e\u0439 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 Amazon-\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/652\/0b3\/17e\/6520b317e3b24d43a5068f024d3ad981.jpg\"\/><\/p>\n<p>  \u0427\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438 \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435? \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 MongoDB \u0440\u0435\u043f\u043b\u0438\u043a\u0441\u0435\u0442 &#8216;abc&#8217; \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0438\u0437\u0431\u0440\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e \u0434\u043b\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 <b>writer.py<\/b> \u0438 <b>reader.py<\/b>, \u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0435 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u0438 (\u0442.\u0435. \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0435 \u0432\u0441\u0435 \u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0445\u043e\u0441\u0442\u0435), \u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0430\u043a \u0432\u0441\u0435 \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0412 \u043d\u0430\u0448\u0435\u043c \u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b <b>writer.py<\/b> \u0438 <b>reader.py<\/b> \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043f\u043e\u0432\u0438\u0441\u0430\u044e\u0442 \u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0432\u0435\u0448\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u043f\u043e\u0448\u043b\u0435\u0442\u0435 \u0438\u043c \u0441\u0438\u0433\u043d\u0430\u043b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f (\u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u043d\u043e\u0432\u044b\u0439 primary \u0443\u0436\u0435 \u0432\u044b\u0431\u0440\u0430\u043d \u0438 \u0430\u043a\u0442\u0438\u0432\u0435\u043d).  <\/p>\n<pre><code class=\"bash\">[ 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 &quot;write.py&quot;, line 18, in &lt;module&gt;    'type': random.randint(1, 5)  File &quot;\/usr\/lib64\/python2.6\/site-packages\/pymongo\/collection.py&quot;, line 409, in insert    gen(), check_keys, self.uuid_subtype, client)  File &quot;\/usr\/lib64\/python2.6\/site-packages\/pymongo\/message.py&quot;, line 393, in _do_batched_write_command    results.append((idx_offset, send_message()))  File &quot;\/usr\/lib64\/python2.6\/site-packages\/pymongo\/message.py&quot;, line 345, in send_message    command=True)  File &quot;\/usr\/lib64\/python2.6\/site-packages\/pymongo\/mongo_replica_set_client.py&quot;, line 1511, in _send_message    response = self.__recv_msg(1, rqst_id, sock_info)  File &quot;\/usr\/lib64\/python2.6\/site-packages\/pymongo\/mongo_replica_set_client.py&quot;, line 1444, in __recv_msg    header = self.__recv_data(16, sock)  File &quot;\/usr\/lib64\/python2.6\/site-packages\/pymongo\/mongo_replica_set_client.py&quot;, line 1432, in __recv_data    chunk = sock_info.sock.recv(length) KeyboardInterrupt <\/code><\/pre>\n<p>  \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043d\u0435 \u0441\u0430\u043c\u0430\u044f \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u0430\u044f \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438? \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 PyMongo \u0438 MongoDB \u0432 \u0441\u0432\u043e\u0435\u043c web-\u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u0442\u043e \u0432\u0435\u043b\u0438\u043a\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 python-\u0445\u043e\u0437\u044f\u0439\u0441\u0442\u0432\u043e \u0443 \u0432\u0430\u0441 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u043f\u043e\u0434 <a href=\"https:\/\/uwsgi-docs.readthedocs.org\/en\/latest\/\">uwsgi<\/a>, \u0430 \u0432 <a href=\"https:\/\/uwsgi-docs.readthedocs.org\/en\/latest\/\">uwsgi<\/a> \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c <a href=\"http:\/\/uwsgi-docs.readthedocs.org\/en\/latest\/FAQ.html#what-is-harakiri-mode\">harakiri mode<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0431\u044c\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043f\u043e timeout-\u0443\u2026 \u041d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043a\u0430\u043a-\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0438\u0434\u043e\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b. \u0412 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 <b>reader.py<\/b> \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c:  <\/p>\n<pre><code class=\"python\">con = pymongo.MongoReplicaSetClient('db1:27017,db2:27017,db3:27017', replicaSet='abc') <\/code><\/pre>\n<p>\u043d\u0430  <\/p>\n<pre><code class=\"python\">con = pymongo.MongoReplicaSetClient('db1:27017,db2:27017,db3:27017', replicaSet='abc', socketTimeoutMS=5000, read_preference=pymongo.ReadPreference.SECONDARY_PREFERRED) <\/code><\/pre>\n<p>  \u0410 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 <b>writer.py<\/b>:  <\/p>\n<pre><code class=\"python\">con = pymongo.MongoReplicaSetClient('db1:27017,db2:27017,db3:27017', replicaSet='abc') <\/code><\/pre>\n<p>\u043d\u0430  <\/p>\n<pre><code class=\"python\">con = pymongo.MongoReplicaSetClient('db1:27017,db2:27017,db3:27017', replicaSet='abc', socketTimeoutMS=5000) <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c. \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0432 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0441 \u0432\u044b\u0440\u0443\u0431\u0430\u043d\u0438\u0435\u043c Primary \u043d\u043e\u0434\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <b>reader.py<\/b> \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043d\u0438 \u0432 \u0447\u0435\u043c \u043d\u0435 \u0431\u044b\u0432\u0430\u043b\u043e (\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a Secondary-\u043d\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439), \u0430 \u0432\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <b>writer.py<\/b> \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u0443 \u0443\u0439\u0434\u0435\u0442 \u0432 \u0430\u0441\u0442\u0440\u0430\u043b \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0442\u0438\u043f\u0430 <b>AutoReconnect<\/b>:  <\/p>\n<pre><code class=\"bash\">[ 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 <\/code><\/pre>\n<p>  \u041e\u043f\u044f\u0442\u044c-\u0442\u0430\u043a\u0438 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0437\u0434\u043e\u0440\u043e\u0432\u043e \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0447\u0438\u0432\u0430\u044f, \u0443\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0434\u0430\u0443\u043d \u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u0443 (\u043f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u0438, \u0442\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u0432 \u043d\u0435\u0442 \u2014 \u0432\u0441\u0435 \u0433\u043b\u0430\u0434\u043a\u043e), \u043d\u043e \u044d\u0442\u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e\u0435 \u0437\u043b\u043e \u0438 \u043e\u0431 \u044d\u0442\u043e\u043c <a href=\"http:\/\/docs.mongodb.org\/manual\/faq\/replica-sets\/#how-long-does-replica-set-failover-take\">\u0434\u0430\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>:  <\/p>\n<blockquote><p>It varies, but a replica set will select a new primary within a minute.<br \/>  It may take 10-30 seconds for the members of a replica set to declare a primary inaccessible. This triggers an election. During the election, the cluster is unavailable for writes.<br \/>  The election itself may take another 10-30 seconds.  <\/p><\/blockquote>\n<p>\u041d\u043e \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0438 \u043a \u043e\u0448\u0438\u0431\u043a\u0430\u043c AutoReconnect. \u041a\u0430\u043a \u0432\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c, \u043c\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 5\u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u0441\u043e\u043a\u0435\u0442. \u0415\u0441\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 5\u0442\u044c \u0441\u0435\u043a\u0443\u043d\u0434 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 PyMongo \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0442 \u0431\u0430\u0437\u044b \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430, \u0442\u043e \u043e\u043d \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u043f\u043b\u0435\u0432\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443. \u041d\u0435 \u0441\u0430\u043c\u043e\u0435 \u043a\u043b\u0430\u0441\u0441\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u0432\u0434\u0440\u0443\u0433 \u0431\u0430\u0437\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0438\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0447\u0435\u043d\u044c \u0442\u044f\u0436\u0435\u043b\u044b\u0439 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 5\u0442\u0438 \u0441\u0435\u043a\u0443\u043d\u0434 (\u043a\u0430\u043a\u0430\u044f-\u043d\u0438\u0431\u0443\u0434\u044c \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0448\u0435\u0440\u0441\u0442\u0438\u0442 \u0432\u0441\u044e \u0431\u0430\u0437\u0443). \u0421\u0430\u043c\u044b\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u043f\u043e\u0447\u0435\u043c\u0443 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0441\u0430\u043c \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u043b AutoReconnect Error. \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u2014 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u2014 \u0432\u0434\u0440\u0443\u0433 \u201c\u043b\u0435\u0433\u201d \u043d\u0435 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0430 \u0432\u0435\u0441\u044c \u0440\u0435\u043f\u043b\u0438\u043a\u0441\u0435\u0442. \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u2014 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b! \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 AutoReconnect \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043b\u0438 \u0435\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. \u042d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u0437\u0432\u0443\u0447\u0438\u0442 \u0434\u043b\u044f \u0431\u0430\u0437\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430 \u043c\u0438\u0440\u043e\u0432\u043e\u0435 \u0433\u043e\u0441\u043f\u043e\u0434\u0441\u0442\u0432\u043e, \u043d\u043e \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0430\u043a, \u0438 \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448 \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0441\u043a\u0440\u0438\u043f\u0442 <b>writer.py<\/b> \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"python\">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(), \u2026. }      # 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 <\/code><\/pre>\n<p>\u041d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c <a href=\"http:\/\/emptysqua.re\/blog\/save-the-monkey-reliably-writing-to-mongodb\/\">\u0441\u0442\u0430\u0442\u044c\u044f \u0432 \u0431\u043b\u043e\u0433\u0435<\/a> \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 PyMongo, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u044f \u0432 <a href=\"https:\/\/jira.mongodb.org\/browse\/PYTHON-197\">JIRA MongoDB<\/a><\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 Global lock<\/h2>\n<p>  \u041e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0439 \u043a\u0430\u043c\u0435\u043d\u044c MongoDB. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0442\u043e, \u0437\u0430 \u0447\u0442\u043e \u043c\u043e\u043d\u0433\u0443 \u043a\u0440\u0438\u0442\u0438\u043a\u0443\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e. \u041f\u043e\u0434 \u0443\u0434\u0430\u0440 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u043e \u0433\u0440\u0443\u043f\u043f\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0422\u043e \u0435\u0441\u0442\u044c \u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u044f\u0436\u0435\u043b\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 update-\u043e\u0432 \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430\u0447\u0438\u043d\u0430\u044f <a href=\"http:\/\/docs.mongodb.org\/manual\/release-notes\/2.2\/#concurrency-improvements\">\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 2.2<\/a> \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u043b\u0430\u0441\u044c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u043f\u0440\u0438\u0441\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043b\u043e\u043a (lock yielding), \u0430 \u0442\u0430\u043a \u0436\u0435 \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0438 \u043b\u043e\u043a \u0441 \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 mongod \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0411\u0414. \u0412 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 3.0 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u0441 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a WiredTiger \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c\u0441\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430, \u0430 \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0431\u0430\u0437\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u0432 \u0434\u0432\u0438\u0436\u043a\u0435 MMAPv1.<\/p>\n<p>  \u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b <a href=\"https:\/\/github.com\/StraNNiKK\/mongodb-performance-tests\">\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a<\/a>, \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0441 global lock. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c git pull \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0432\u0441\u0435 \u044d\u0442\u0438 \u0442\u0435\u0441\u0442\u044b \u0443 \u0441\u0435\u0431\u044f.  <\/p>\n<ul>\n<li>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c 1 000 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0444\u0438\u0433)<\/li>\n<li>\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f 5 000 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e 5 000 000 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0431\u0430\u0437\u0435. \u041a\u0430\u0436\u0434\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u043b\u0435\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/li>\n<li>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 1 000 \u0437\u0430\u0434\u0430\u0447 \u2014 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0432\u0441\u0435\u0445 5 000 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/li>\n<li>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0435\u0439 \u043e\u0442 1\u0433\u043e \u0434\u043e 30\u0442\u0438 (\u043e\u043f\u044f\u0442\u044c-\u0442\u0430\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0444\u0438\u0433) \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0434\u0438\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0441\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u0443\u043b \u0437\u0430\u0434\u0430\u0447.<\/li>\n<li>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438. \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 MongoDB.<\/li>\n<li>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043d\u0430 MySQL 5.5 (InnoDB). \u0418 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/li>\n<\/ul>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043d\u0430 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435 Amazon-\u0430 \u0442\u0438\u043f\u0430 <a href=\"https:\/\/aws.amazon.com\/ru\/ec2\/instance-types\/\">c3.2xlarge<\/a> (vCPU 8, 15 Gb RAM) \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c SSD-\u0434\u0438\u0441\u043a\u043e\u043c \u043f\u043e\u0434 \u0431\u0430\u0437\u044b (500 Gb, 4000 iOPS)<\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e MongoDB 2.6 \u0438 \u0432\u0435\u0440\u0441\u0438\u044e MongoDB 3.0 (MMAPv1, \u043d\u0435 WiredTiger), \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u0445\u043e\u0442\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 30\u0442\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 worker-\u043e\u0432 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 MongoDB 3.0 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432\u0441\u0435 \u0436\u0435 \u0441\u043b\u0435\u0433\u043a\u0430 \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435. \u041a\u0441\u0442\u0430\u0442\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u043a\u043e\u0439 <b>mongostat<\/b> \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u043b\u043e\u043a\u0430, \u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0448\u043a\u0430\u043b\u0438\u0432\u0430\u0442\u044c:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f MongoDB 2.6 \u0438 MongoDB 3.0 MMAPv1<\/b><\/p>\n<div class=\"spoiler_text\">\u0412 15\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432:<br \/>  <a href=\"https:\/\/habrastorage.org\/files\/c1b\/a66\/9a5\/c1ba669a52204a5185d5e958800d851d.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c1b\/a66\/9a5\/c1ba669a52204a5185d5e958800d851d.png\"\/><\/a><br \/>  \u0412 30\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432:<br \/>  <a href=\"https:\/\/habrastorage.org\/files\/dde\/59c\/243\/dde59c243d6f4bb9a051c2ed99cad66a.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/dde\/59c\/243\/dde59c243d6f4bb9a051c2ed99cad66a.png\"\/><\/a><br \/>  mongostat:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/ea9\/2ed\/d19\/ea92edd19f1d4d28bef805ca70f88437.jpg\"\/>  <\/div>\n<\/div>\n<p>  \u041f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 MongoDB 3.0 MMAPv1 \u0438 MongoDB 3.0 WiredTiger \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u0447\u0442\u043e \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443\u0435\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f WiredTiger:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f MongoDB 3.0 MMAPv1 \u0438 MongoDB 3.0 WiredTiger<\/b><\/p>\n<div class=\"spoiler_text\">\u0412 15\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432:<br \/>  <a href=\"https:\/\/habrastorage.org\/files\/2c5\/9c3\/ddc\/2c59c3ddc75e4fb3aa927ed3e34fcba3.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/2c5\/9c3\/ddc\/2c59c3ddc75e4fb3aa927ed3e34fcba3.png\"\/><\/a><br \/>  \u0412 30\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432:<br \/>  <a href=\"https:\/\/habrastorage.org\/files\/df9\/fb7\/559\/df9fb755991c4750973aa0fc89adef1c.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/df9\/fb7\/559\/df9fb755991c4750973aa0fc89adef1c.png\"\/><\/a>  <\/div>\n<\/div>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0440\u0430\u0432\u043d\u0438\u043c MongoDB 3.0 WiredTiger \u0438 MySQL 5.5. \u0411\u0430\u0437\u0430 MySQL \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u0435, \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0442\u0435\u0441\u0442 \u043d\u0430 PostgreSQL. \u0412\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0430\u0437\u043e\u0439 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430\u0445. \u0422\u0430\u043a \u0447\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043b\u0438\u0448\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0432 \u0435\u0433\u043e \u043e\u0442 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 <a href=\"https:\/\/github.com\/StraNNiKK\/mongodb-performance-tests\/blob\/master\/mongodb_performance_tests\/adapters\/abstract.py#L6\">AbstractDBAdapter<\/a> \u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0432 \u0432\u0441\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 PostgreSQL.<br \/>  \u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u0443 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u2014 \u0437\u0430\u043d\u044f\u0442\u0438\u0435 \u043d\u0435\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0435 \u0438 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0435. \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f MongoDB \u2014 \u0442\u043e \u0442\u0443\u0442 \u0443\u0432\u044b \u0432\u0441\u0435 \u043f\u043b\u043e\u0445\u043e. \u0411\u0430\u0437\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0442\u044e\u043d\u0438\u0442\u0441\u044f, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0443. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f MongoDB \u2014 \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u043e\u0434 \u0431\u0430\u0437\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0430\u0437\u0430 \u0441\u0430\u043c\u0430 \u0440\u0435\u0448\u0438\u0442, \u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0435\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u043a\u0430\u043a\u0438\u0435 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0434\u0438\u0441\u043a. \u0412 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u0445 \u044f \u0441\u043b\u044b\u0448\u0430\u043b \u043c\u043d\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0435\u0451 \u0443\u043c\u0435\u0449\u0430\u043b\u0438\u0441\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0436\u0435 \u0441 MySQL \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043c\u0430\u0441\u0441\u0430, \u0438 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430:  <\/p>\n<pre><code class=\"bash\">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 <\/code><\/pre>\n<p>\u0418 \u0432\u043e\u0442 \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<br \/>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u0430 \u043d\u0430 MySQL \u2014 \u043e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u0434\u0430\u0447 \u043f\u0440\u0438 \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0438 \u0447\u0438\u0441\u043b\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432-worker-\u043e\u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"bash\">...  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  \u2026  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  \u2026  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  <\/code><\/pre>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435 \u2014 \u0438 \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0438. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 MySQL \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a\u043e\u043b\u0435\u0431\u043b\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 0.001-0.5 \u0441\u0435\u043a \u0438 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a \u043f\u0440\u0438 15\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u0445, \u0442\u0430\u043a \u0438 \u043f\u0440\u0438 30, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 MongoDB WiredTiger \u043f\u0440\u0438 15\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e 1.5 \u0441\u0435\u043a\u0443\u043d\u0434, \u0430 \u043f\u0440\u0438 30 \u2014 \u0434\u043e 2.5 \u0441\u0435\u043a\u0443\u043d\u0434:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f MongoDB 3.0 WiredTiger \u0438 MySQL 5.5 InnoDB<\/b><\/p>\n<div class=\"spoiler_text\">\u0412 15\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432:<br \/>  <a href=\"https:\/\/habrastorage.org\/files\/bd0\/4ea\/61f\/bd04ea61f08a42349e16897391e5132b.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/bd0\/4ea\/61f\/bd04ea61f08a42349e16897391e5132b.png\"\/><\/a><br \/>  \u0412 30\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432:<br \/>  <a href=\"https:\/\/habrastorage.org\/files\/b21\/790\/e14\/b21790e149bd41f59248bbb3d1fb11e1.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b21\/790\/e14\/b21790e149bd41f59248bbb3d1fb11e1.png\"\/><\/a>  <\/div>\n<\/div>\n<p>  \u041a\u0430\u043a\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?<\/p>\n<p>  \u041b\u0438\u0447\u043d\u043e \u044f \u0432\u0438\u0436\u0443 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c MongoDB:  <\/p>\n<ul>\n<li>\u0441\u0445\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u043e\u0440\u043e\u0448\u043e \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e \u201c\u0442\u043e\u043b\u0441\u0442\u044b\u0445\u201d \u0441\u043b\u0430\u0431\u043e \u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/li>\n<li>\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438<\/li>\n<li>\u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438. <\/li>\n<\/ul>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u043b\u0438\u0441\u044c \u0447\u0430\u0441\u0442\u043e. \u0421 \u044d\u0442\u0438\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 (\u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0435 \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u0435\u0451 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u043d\u043a\u0442). \u041f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u043d\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f. MongoDB \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0431\u043b\u043e\u043a \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u043a\u0430\u043a \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0438 \u043f\u0440\u0438 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430. \u041f\u043e \u043c\u043e\u0438\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f\u043c \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 2.6 \u044d\u0442\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f <a href=\"http:\/\/docs.mongodb.org\/master\/reference\/command\/repairDatabase\/#dbcmd.repairDatabase\">repairDatabase<\/a> \u043d\u0430 \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0435\u0439 \u0431\u0430\u0437\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 2 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0440\u0430\u0437\u0430 (!). \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 2.6 \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u0442\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u0435\u0430\u043b\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0438\u0441\u043a\u0430 \u043f\u043e\u0434 \u043d\u043e\u0432\u044b\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b (\u043e\u043f\u0446\u0438\u044f <a href=\"http:\/\/docs.mongodb.org\/master\/release-notes\/2.6\/#storage\">usePowerOf2Sizes<\/a>) \u2014 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043f\u043e\u0434 \u043d\u043e\u0432\u044b\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0430\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0440\u0430\u043d\u044c\u0448\u0435, \u043d\u043e \u0437\u0430\u0442\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0430\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e. \u0410 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 3.0 \u0434\u043b\u044f \u0434\u0432\u0438\u0436\u043a\u0430 MMAPv1 \u043f\u043e\u0448\u043b\u0438 \u0435\u0449\u0435 \u0434\u0430\u043b\u044c\u0448\u0435 \u0438 \u0435\u0449\u0435 \u0440\u0430\u0437 <a href=\"http:\/\/docs.mongodb.org\/master\/core\/storage\/#power-of-2-allocation\">\u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u043f\u0440\u0435\u0430\u043b\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a>, \u043e\u0434\u043d\u0430\u043a\u043e \u0435\u0451 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u043c\u043d\u0435 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u043a\u0430 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. \u0427\u0442\u043e \u0436\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u0434\u0432\u0438\u0436\u043a\u043e\u043c WiredTiger \u0432 \u043f\u043b\u0430\u043d\u0435 \u043f\u0440\u0435\u0430\u043b\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0438\u0441\u043a\u0430, \u0435\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u044f \u0442\u043e\u0436\u0435 \u043d\u0435 \u0437\u043d\u0430\u044e. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0430\u044f-\u043b\u0438\u0431\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0432\u043e\u0434\u0443 \u2014 \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \ud83d\ude42     \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/265747\/\"> http:\/\/habrahabr.ru\/post\/265747\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t<img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/3d7\/138\/f13\/3d7138f13e884a458527bd3a07202f12.png\" align=\"left\"\/>\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 MongoDB \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u043b\u0430 \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u0441\u0440\u0435\u0434\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0422\u043e \u0438 \u0434\u0435\u043b\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u044f\u043a\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043a\u0430\u043a \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043c\u043e\u043b\u043e\u0434\u043e\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u044b\u043a\u0438\u043d\u0443\u043b \u043d\u0430 \u0441\u0432\u0430\u043b\u043a\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u0420\u0421\u0423\u0411\u0414, \u0432\u0437\u044f\u043b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 MongoDB, \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u043b \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0435\u0451, \u0438 \u043a\u0430\u043a \u0432\u0441\u0435 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0430\u043b\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e. \u0414\u0430\u0436\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0440\u043e\u044f\u0442 \u0441\u0432\u043e\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043d\u0430 Mongo (<a href=\"https:\/\/www.meteor.com\/\">Meteor.js<\/a> \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440).<\/p>\n<p>  \u041f\u043e \u0434\u043e\u043b\u0433\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 3 \u0433\u043e\u0434\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 MongoDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0411\u0414, \u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0441 MongoDB \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043c\u0430\u043d\u0443\u0430\u043b\u0430\u0445, \u0438 \u043a \u0447\u0435\u043c\u0443 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0440\u0435\u0448\u0438\u0442\u0435 \u0432\u0437\u044f\u0442\u044c MongoDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0411\u0414 \u0432 \u0432\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u043c\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u0430\u043f \ud83d\ude42<\/p>\n<p>  \u0412\u0441\u0435 \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u043d\u0438\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/api.mongodb.org\/python\/\">PyMongo<\/a> \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MongoDB \u0438\u0437 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Python. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u043c\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-264595","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264595","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=264595"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264595\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=264595"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=264595"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=264595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}