2015-09-09 1 views
0

Я только начал с mongodb. Я работаю с набором данных 38 ГБ (68 миллионов документов) с ssd stoarge. Но производительность выполняется с индексированием и без индексирования. И его использование так много барана для простого поиска запросов с двумя полями, без использования процессора.Как улучшить производительность mongodb с помощью одного узла с большим набором данных?

Принимает 18 минут, чтобы получить 1,6 миллиона записей. Каков фактор, который помогает улучшить производительность mongodb с помощью единого узла?

Мой документ выглядит следующим образом:

{ "_id" : ObjectId("55e7eec02756dd0f1e693b72"), 
    "categorieId" : 2, 
    "title" : "AntiMalware", 
    "messageValue" : " #\"Antimalware: \"Windows Defender\" is Not Updated and Running\"#", 
    "timestamp" : "8/19/2015 11:06:24 AM", 
    "resultStatusId" : 2, 
    "messageFormat" : "Text", 
    "titleId" : 1, 
    "resultStatus" : "Warning", 
    "antiMalwareName" : "Comodo Antivirus", 
    "categories" : "Security" } 

Мои индексирует находятся на titleId и resultStatusId.

Мой запрос:

db.collection.find({"titleId":21, resultStatusId:1}) 

Explain, выход:

{ 
    "queryPlanner" : { 
     "plannerVersion" : 1, 
     "namespace" : "techHealLogAnalysis.techHealTestLogData", 
     "indexFilterSet" : false, 
     "parsedQuery" : { 
      "$and" : [ 
       { 
        "resultStatusId" : { 
         "$eq" : 1 
        } 
       }, 
       { 
        "titleId" : { 
         "$eq" : 21 
        } 
       } 
      ] 
     }, 
     "winningPlan" : { 
      "stage" : "FETCH", 
      "inputStage" : { 
       "stage" : "IXSCAN", 
       "keyPattern" : { 
        "titleId" : 1, 
        "resultStatusId" : 1 
       }, 
       "indexName" : "titleId_1_resultStatusId_1", 
       "isMultiKey" : false, 
       "direction" : "forward", 
       "indexBounds" : { 
        "titleId" : [ 
         "[21.0, 21.0]" 
        ], 
        "resultStatusId" : [ 
         "[1.0, 1.0]" 
        ] 
       } 
      } 
     }, 
     "rejectedPlans" : [ ] 
    }, 
    "executionStats" : { 
     "executionSuccess" : true, 
     "nReturned" : 1671842, 
     "executionTimeMillis" : 1108805, 
     "totalKeysExamined" : 1671842, 
     "totalDocsExamined" : 1671842, 
     "executionStages" : { 
      "stage" : "FETCH", 
      "nReturned" : 1671842, 
      "executionTimeMillisEstimate" : 177670, 
      "works" : 2143234, 
      "advanced" : 1671842, 
      "needTime" : 0, 
      "needFetch" : 471391, 
      "saveState" : 471391, 
      "restoreState" : 471391, 
      "isEOF" : 1, 
      "invalidates" : 0, 
      "docsExamined" : 1671842, 
      "alreadyHasObj" : 0, 
      "inputStage" : { 
       "stage" : "IXSCAN", 
       "nReturned" : 1671842, 
       "executionTimeMillisEstimate" : 1470, 
       "works" : 1671843, 
       "advanced" : 1671842, 
       "needTime" : 0, 
       "needFetch" : 0, 
       "saveState" : 471391, 
       "restoreState" : 471391, 
       "isEOF" : 1, 
       "invalidates" : 0, 
       "keyPattern" : { 
        "titleId" : 1, 
        "resultStatusId" : 1 
       }, 
       "indexName" : "titleId_1_resultStatusId_1", 
       "isMultiKey" : false, 
       "direction" : "forward", 
       "indexBounds" : { 
        "titleId" : [ 
         "[21.0, 21.0]" 
        ], 
        "resultStatusId" : [ 
         "[1.0, 1.0]" 
        ] 
       }, 
       "keysExamined" : 1671842, 
       "dupsTested" : 0, 
       "dupsDropped" : 0, 
       "seenInvalidated" : 0, 
       "matchTested" : 0 
      } 
     } 
    }, 
    "serverInfo" : { 
     "host" : "instance-7", 
     "port" : 27017, 
     "version" : "3.0.6", 
     "gitVersion" : "1ef45a23a4c5e3480ac919b28afcba3c615488f2" 
    }, 
    "ok" : 1 
} 
+0

Большое использование ОЗУ для MongoDB является нормальным. Он всегда использует столько ОЗУ, сколько доступно для кэширования последних результатов. Чтобы помочь вам улучшить ваш прогноз, вам нужно показать нам, как выглядят ваши документы, какие у вас индексы и какой запрос вы выполняете. – Philipp

+0

Мой документ выглядит так: - {"_id": ObjectId ("55e7eec02756dd0f1e693b72"), "categorieId": 2, "title": "AntiMalware", "messageValue": "# \" Antimalware: \ "Защитник Windows \" Не обновлено и запущено \ "#", "timestamp": "8/19/2015 11:06:24 AM", "resultStatusId": 2, "messageFormat": "Текст", "titleId": 1, "resultStatus" : «Warning», «antiMalwareName»: «Comodo Antivirus», «categories»: «Security»} – user3835987

+0

Мой запрос: - db.collection.find ({"titleId": 21, resultStatusId: 1}) Мои индексы включены «titleId» и «resultStatusId» – user3835987

ответ

2

Системы баз данных с большими наборами данных и высокопроизводительных приложений пропускная способность может оспорить способность одного сервера. Большие наборы данных превышают емкость одного компьютера. Наконец, размеры рабочих наборов, превышающие операционную память системы, усиливают емкость ввода-вывода на дисках. Развертывание осколков для вашего дела может быть действительно полезно. После этого проверьте следующую ссылку.

http://docs.mongodb.org/manual/core/sharding-introduction/

+0

Спасибо за это. Не могли бы вы рассказать мне, как изменить механизм хранения в mongodb? В моем случае я использую MMAPv1, но я хочу использовать WiredTiger. – user3835987

+0

@ пользователь3835987 совершенно нет идеи. Я новичок здесь. Но попробуйте изучить развертывание SHARDS и REPLICATION, которые дадут вам общую сущность использования MongoDB – TharunRaja

Смежные вопросы