Я только начал с 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
}
Большое использование ОЗУ для MongoDB является нормальным. Он всегда использует столько ОЗУ, сколько доступно для кэширования последних результатов. Чтобы помочь вам улучшить ваш прогноз, вам нужно показать нам, как выглядят ваши документы, какие у вас индексы и какой запрос вы выполняете. – Philipp
Мой документ выглядит так: - {"_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
Мой запрос: - db.collection.find ({"titleId": 21, resultStatusId: 1}) Мои индексы включены «titleId» и «resultStatusId» – user3835987