MongoDB Timeseries -Abfragen, die den Index nicht verwenden und übermäßig lange dauernJava

Java-Forum
Anonymous
 MongoDB Timeseries -Abfragen, die den Index nicht verwenden und übermäßig lange dauern

Post by Anonymous »

Ich habe eine große Timeseries -Sammlung mit Millionen von Dokumenten, die als "Ereignisse" bezeichnet werden, die die folgende Struktur haben < /p>

Code: Select all

{
"_id": {"$oid": "123456"},
"class": "...",
"event_data": {...},
"ts": {"$date": "2025-01-01T01:00:00.000Z"}
}
mit Indizes im Feld TS sowohl aufsteigend als auch absteigend. Ich versuche eine Anfrage auszuführen, um die Dokumente zwischen zwei Zeitstempeln mit Java zu ziehen. Gefällt mir: < /p>

Code: Select all

ZonedDateTime lowerBound = ...;
ZonedDateTime upperBound = ...;

var query = Query.query(new Criteria().andOperator(
Criteria.where("ts").gte(lowerbound.toInstant().toEpochMilli()),
Criteria.where("ts").lt(upperbound.toInstant().toEpochMilli()),
)

var result = mongoTemplate.find(query, Events.class)
< /code>
Diese Abfrage funktioniert ... schließlich nach 20 Minuten, da sie die gesamten Sammlungen nicht mit den Indizes scannt. Wenn ich Intellijs Debugger verwende, kann ich sehen, dass die Abfrage wie folgt formatiert wird: < /p>
Query: { "$and" : [{ "ts": { "$gte" : 1733852133000}}. { "ts" : { "$lt": 1733853933000}} ] }
< /code>
, was ich in den Code der MongoDB -Konsole als solcher übersetzt habe: < /p>
db.events.find({
"$and": [
{ "ts": { "$gte": 1733852133000}},
{ "ts": { "$lt": 1733853933000}},
]
})
Ausführen dieses Nachahms, was genau im Java -Code passiert, funktioniert technisch, aber die gesamte Sammlung scannt, was ich weiter erkennen kann, ob eine do a .explain () und nur den Collscan -bühne sehen kann.

Code: Select all

db.events.find({
"$and": [
{ "ts": { "$gte": new Date("2025-01-01T01:00:00Z)}},
{ "ts": { "$lt": new Date("2025-01-02T01:00:00Z)}},
]
})
, was auch mit dem Ausführen von .explain () übereinstimmt, da ich den Fetch und ixscan Stufen sehen kann. Wie kann ich meinen Java -Code in die zweite Version übersetzen lassen und tatsächlich die Indexierung verwenden, die wir vorhanden haben? /> [*] Hinzufügen eines Hinzufügens ("TS_1") < /code>, um die Verwendung eines Index zu erzwingen. Wenn Sie dies in der MongoDB -Konsole ausführen, entspricht es Fehler mit Hinweise, die angegeben sind, nicht einem vorhandenen Index , der völlig falsch ist, da ich den Index beim Ausführen von .getIndexes () sehen kann. Das Ausführen in Java -Code scheint das gleiche Problem zu haben wie zuvor, wo es einen Collscan

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post