Eine Reorganisation in MongoDB bezieht sich auf das Neuordnen oder Optimieren von Daten innerhalb der Datenbank, um die Performance zu verbessern, Speicherplatz freizugeben oder die Datenverteilung in einem Cluster auszugleichen. Hier sind die wichtigsten Aspekte der Reorganisation:
repairDatabase)Die repairDatabase-Operation defragmentiert Daten und
gibt ungenutzten Speicherplatz zurück.
db.runCommand({ repairDatabase: 1 })Vorteile: - Reduziert Fragmentierung. - Gibt Speicherplatz frei.
Einschränkungen: - Kann nicht auf Sharded Collections angewendet werden. - Blockiert die Datenbank während der Ausführung.
Index-Fragmentierung kann die Abfrageperformance beeinträchtigen. Ein Neuaufbau eines Indexes behebt dies.
db.collection.dropIndex("indexName")
db.collection.createIndex({ fieldName: 1 })Alternativ kann der Index mit compact reorganisiert
werden (nur WiredTiger):
db.runCommand({ compact: "collectionName" })Hinweis: Die compact-Operation
erfordert ausreichenden Speicherplatz und ist ressourcenintensiv.
In einem Sharded Cluster können Daten ungleichmäßig verteilt sein. Der Balancer sorgt für die automatische Reorganisation der Daten über die Shards.
sh.setBalancerState(true)sh.moveChunk("db.collection", { shardKey: value }, "destinationShard")Eine manuelle Methode zur Reorganisation ist das Exportieren und erneute Importieren der Daten.
Exportieren der Daten:
mongodump --db databaseName --out /backupPathLöschen der Collection/Datenbank:
db.collection.drop()Importieren der Daten:
mongorestore --db databaseName /backupPath/databaseNameZur automatischen Bereinigung alter oder nicht mehr benötigter Daten kann ein TTL-Index verwendet werden.
db.collection.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 })mongostat und mongotop, um
den Erfolg der Reorganisation zu bewerten.