Maison  >  Article  >  développement back-end  >  Faites pivoter automatiquement les collections MongoDb périodiquement

Faites pivoter automatiquement les collections MongoDb périodiquement

WBOY
WBOYavant
2024-02-09 18:30:101043parcourir

定期自动轮换 MongoDb 集合

L'éditeur php Zimo effectue régulièrement une rotation automatique des collections MongoDb, un moyen efficace d'optimiser les performances de la base de données. En alternant régulièrement les collections, vous pouvez éviter la dégradation des performances causée par une croissance excessive des données. Pendant le processus de rotation, les anciennes collections peuvent être archivées ou supprimées, et de nouvelles collections peuvent être créées pour stocker les données les plus récentes. Cela maintient la base de données propre et efficace, améliorant ainsi la vitesse des requêtes et le temps de réponse. La rotation automatique et régulière des collections MongoDb est une stratégie importante pour la gestion des bases de données et revêt une grande importance pour le maintien de la stabilité et de la fiabilité du système.

Contenu de la question

Supposons que j'ai une collection mongo ("resultData"). Je souhaite effectuer une rotation mensuelle de la collection (similaire à la rotation ou à l'archivage des journaux) et renommer automatiquement l'ancienne collection en "{{old_collection_name}}_{{month_year}}".

Cela m'aidera à conserver toutes les données sans augmenter la taille de la collection.

Remarque : j'utilise Golang pour le développement.

Solution

Dans mongodb, une collection n'a pas besoin d'exister avant d'être utilisée : vous pouvez insérer une collection qui n'existe pas encore et elle sera créée automatiquement.

Une solution simple et automatique consiste donc à toujours utiliser une collection dont le nom est généré par le mois en cours. Ainsi, dès qu'un nouveau mois commence (du nom du mois), les documents sont insérés dans une nouvelle collection.

Voici un assistant simple qui implémente cette logique :

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

Ce mois-ci (novembre 2022), cette fonction renvoie une fonction portant le nom resultdata_11_2022 的集合。下个月,返回的集合名称将为resultdata_12_2022.

Utilisez-le :

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

c := getResultColl(db)

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

Astuce : Si vous déménagez l'année précédant le mois, l'ordre alphabétique de la collection sera le même que l'ordre chronologique. Je recommande donc d'utiliser "2006_01"格式(布局)而不是"01_2006".

Notez également qu'il n'y a rien de mal à avoir de nombreux documents dans une collection. Vous pouvez simplement ajouter le mois comme champ au document et filtrer les résultats par mois si nécessaire, il n'y aura pas de ralentissement en utilisant l'index. Vous pouvez même le faire sans ajouter de mois supplémentaires si vous stockez également l'horodatage ou utilisez objectid 作为 _id.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer