Ich bin mit MongoDB 3.2 und eine Datensatzgröße von 90 Millionen haben, wo die Dokumentstruktur besteht aus:Langsam Bereich basierte Abfragen in MongoDB
_id
eventReceivedDateTime(Date)
systemName(String)
triggerName(String)
eventStatus (Enum with 4 possible values)
Abfragen ausgeführt werden sollen:
1) Bereich basierend Anfragen mit eventStatus
& eventReceivedDateTime
wie:
db.event_record.find({
"eventStatus": "SENT",
"eventReceivedDateTime": {
"$gt": ISODate("2016-04-19T23:46:30.827Z"),
"$lt": ISODate("2016-04-21T14:18:30.827Z")
}
}).count();
2) Reichweite basierte Abfragen die eventStatus
& eventReceivedDateTime
und _id
und mit Sortierung. (Für Paginierung), wie:
db.event_record.find({
"eventStatus": "SENT",
"eventReceivedDateTime": {
"$gt": ISODate("2016-04-19T23:46:30.827Z"),
"$lt": ISODate("2016-04-21T07:18:30.827Z")
},
"_id": {
"$gt": ObjectId("57173a67e4b09ca56feddddf")
}
}).sort({"_id":1}).limit(10);
3) Bereich basierte Abfragen Einbeziehung eventStatus
, eventReceivedDateTime
, systemName
und triggerName
wie:
db.event_record.find({
"eventStatus":"SENT",
"eventReceivedDateTime": {
"$gt": ISODate("2016-04-19T23:46:30.827Z"),
"$lt": ISODate("2016-04-21T07:18:30.827Z")
},
"systemName": "OMS",
"triggerName": "COD_ORDER"
}).count();
4) Bereich basierte Abfragen Einbeziehung eventStatus
, eventReceivedDateTime
, systemName
, triggerName
und _id
und mit Sortierung. (Für Paginierung), wie:
db.event_record.find({
"eventStatus": "SENT",
"eventReceivedDateTime": {
"$gt": ISODate("2016-04-19T23:46:30.827Z"),
"$lt": ISODate("2016-04-21T07:18:30.827Z")
},
"systemName": "OMS",
"triggerName": "COD_ORDER",
"_id": {
"$gt":ObjectId("57173a67e4b09ca56feddcd6")
}
}).sort({"_id":1}).limit(10);
Jeden Tag werden etwa 3 Millionen Dokumente eingefügt und gelöscht.
Ich habe das aus folgenden Verbindung Indizes:
{'eventStatus':1,'eventReceivedDateTime':1,'_id':1}
{'eventStatus':1,'systemName':1,'triggerName':1,'eventReceivedDateTime':1}
{'eventStatus':1,'systemName':1,'triggerName':1,'eventReceivedDateTime':1,'_id':1}
Ich bin mit 3 Shard Instanzen auf derselben Maschine mit shardkey:
{'eventStatus':1,'eventReceivedDateTime':1}
Mit diesen Konfigurationen mich langsam Ergebnisse für die oben bekommen Abfragen. Bitte schlagen Sie vor, wie Sie die Abfragezeit optimieren/verbessern können.
Edit:
Shard Maschine Spezifikationen:
Cores: 32
RAM: 128g
HD: 160G
Speicher-Engine ist wiredTiger
erklären() für die Abfrage kann an dieser link finden.
1. könnten Sie uns zeigen, erklären Ausführung Stats dump 'db.col.query.erklären ("executionStats") '2. Welche Art von Hardware/Systemspezifikationen haben Sie? 3. Welche Storage Engine wird verwendet? – profesor79
@ profesor79 Ich habe die Informationen hinzugefügt. – user1691461
eine weitere Frage, was ist der Prozessortakt? – profesor79