Heim >Backend-Entwicklung >Golang >MongoDb-Sammlungen regelmäßig automatisch rotieren lassen

MongoDb-Sammlungen regelmäßig automatisch rotieren lassen

WBOY
WBOYnach vorne
2024-02-09 18:30:101091Durchsuche

定期自动轮换 MongoDb 集合

Der PHP-Editor Zimo rotiert regelmäßig und automatisch MongoDb-Sammlungen und ist eine effektive Möglichkeit, die Datenbankleistung zu optimieren. Durch regelmäßiges Rotieren der Sammlungen können Sie Leistungseinbußen durch übermäßiges Datenwachstum vermeiden. Während des Rotationsprozesses können alte Sammlungen archiviert oder gelöscht und neue Sammlungen erstellt werden, um die neuesten Daten zu speichern. Dadurch bleibt die Datenbank sauber und effizient und die Abfragegeschwindigkeit und Antwortzeit werden verbessert. Regelmäßig automatisch rotierende MongoDb-Sammlungen sind eine wichtige Strategie für die Datenbankverwaltung und von großer Bedeutung für die Aufrechterhaltung der Stabilität und Zuverlässigkeit des Systems.

Frageninhalt

Angenommen, ich habe eine Mongo-Sammlung („resultData“). Ich möchte eine monatliche Sammlungsrotation durchführen (ähnlich der Protokollrotation oder Archivierung) und die alte Sammlung automatisch in „{{old_collection_name}}_{{month_year}}“ umbenennen.

Dies wird mir helfen, alle Daten zu behalten, ohne die Sammlung zu vergrößern.

Hinweis: Ich verwende Golang für die Entwicklung.

Problemumgehung

In Mongodb muss eine Sammlung vor der Verwendung nicht vorhanden sein: Sie können eine Sammlung einfügen, die noch nicht vorhanden ist, und sie wird automatisch erstellt.

Eine einfache und automatische Lösung besteht also darin, immer eine Sammlung zu verwenden, deren Name vom aktuellen Monat generiert wird. Sobald also ein neuer Monat beginnt (benannt nach dem Monat), werden die Dokumente in eine neue Sammlung eingefügt.

Hier ist ein einfacher Helfer, der diese Logik implementiert:

func getresultcoll(db *mongo.database) *mongo.collection {
    name := "resultdata_" + time.now().format("01_2006")
    return db.collection(name)
}

Diesen Monat (November 2022) gibt diese Funktion eine Funktion mit dem Namen resultdata_11_2022 的集合。下个月,返回的集合名称将为resultdata_12_2022 zurück.

Verwenden Sie es:

var db *mongo.Database // initialize your Mongo DB

c := getResultColl(db)

if _, err := c.InsertOne(ctx, resultData); err != nil {
    // Handle error
}

Tipp: Wenn Sie das Jahr vor den Monat verschieben, entspricht die alphabetische Reihenfolge der Sammlung der chronologischen Reihenfolge. Daher empfehle ich die Verwendung von "2006_01"格式(布局)而不是"01_2006".

Beachten Sie außerdem, dass es nichts Falsches ist, viele Dokumente in einer Sammlung zu haben. Sie können den Monat einfach als Feld zum Dokument hinzufügen und die Ergebnisse bei Bedarf nach Monat filtern. Bei der Verwendung des Index kommt es zu keiner Verlangsamung. Sie können dies sogar tun, ohne zusätzliche Monate hinzuzufügen, wenn Sie auch den Zeitstempel speichern oder objectid 作为 _id verwenden.

Das obige ist der detaillierte Inhalt vonMongoDb-Sammlungen regelmäßig automatisch rotieren lassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen