Question

Divers services de MongoDB mètres par l'utilisation du disque. Quels sont quelques conseils pour économiser l'espace lorsque vous travaillez avec MongoDB?

Merci.

Était-ce utile?

La solution

Cette question est vraiment assez vague. Certaines choses qui peuvent ou peuvent ne pas vous (sans ordre particulier):

Raccourcir bavard noms de champs

Ceci est mieux illustré par un exemple:

{
    surname: "Smith",
    forename: "John",
    location: { grid_e: 100.02, grid_n: 450.08 }
}

Le document précédent pourrait être raccourci en supprimant la verbosité inutile dans les différents noms de champ.

{
    sn: "Smith",
    fn: "John",
    loc: { e: 100.02, n: 450.08 }
}

Cela vous donnera un gain très petit dans l'espace, mais il sera multiplié par la taille de chaque document (nombre de champs) et le nombre de documents (pourrait devenir important si vous avez des millions). Voici un superbe après discuter les avantages et les inconvénients de cette méthode.

Collections plafonnés

collections plafonnés vous permettent de spécifier une limite au nombre de documents que vous souhaitez enregistrer. Il fonctionne d'une manière première en premier sorti (documents les plus anciens seront mis au rebut). Cela est particulièrement vrai si vous vous connectez et que vous souhaitez stocker les documents les plus récents de x, mais les anciens ne sont pas pertinentes.

Il y a quelques mises en garde à l'utilisation des collections plafonnés. Voir la MongoDB docs pour plus de détails.

Tenir compte des relations de vos documents

Les documents peuvent soit avoir des documents intégrés ou relations avec d'autres documents (dans d'autres collections) style étranger clé. Les avantages et les inconvénients de chaque approche sont discuté souvent , mais finalement il est pour vous de choisir l'approche qui fonctionne pour vous.

Prenons l'exemple d'un blog, il se peut que chaque billet de blog a un auteur. Vous pouvez soit intégrer ces informations auteur dans chaque poste, ou vous pouvez choisir de les mettre dans leur propre collection de authors ou users. Cette dernière approche permettrait d'économiser l'espace, surtout si de nombreux utilisateurs font souvent de nombreux postes (plutôt que seulement un ou deux). Sachez que vous encourrez un appel de base de données supplémentaire car il n'y a pas de joint.

Edit: L'expansion sur les relations

Les relations entre les documents peut se faire de deux façons, en plus de les intégrer. Vous pouvez simplement utiliser l'ID du document connexe comme si (réutilisant l'exemple blog ci-dessus):

{
    _id: <whatever>,
    title: "Document Relationships in MongoDB",
    body: "bla bla bla bla",
    // ...
    user_id: <id of the user document>
}

Et dans la collection users, ce document connexe existerait:

{
    _id: <whatever>,
    name: "Mark Embling",
    email: "example@markembling.info",
    ///...
}

Ceci est probablement la plus simple possible approche des relations (en plus de les intégrer), mais il sera à vous de le maintenir au sein de votre propre code tout . Vous aurez besoin de faire l'appel à saisir l'utilisateur correspondant lorsque vous en avez besoin, et de le mettre à jour chaque fois que cela pourrait être nécessaire. Cela dit, je ne vois rien de mal avec cette approche, et ai vu utilisé à quelques reprises.

Une approche similaire est d'utiliser DBRef. Ceci est une méthode plus formelle pour décrire une relation comme celle-ci. Au lieu de simplement mettre l'ID de l'autre document, vous spécifiez un DBRef qui est une sorte de référence à un autre document, formalisé. J'espère que cela à du sens. Les deux approches que je viens de décrire ici sont discuté en détail dans les docs MongoDB. Il est intéressant de noter que les références manuelles prendront (un peu) moins d'espace qu'un DBRef, puisqu'une DBRef détient des informations supplémentaires (éventuellement redondant), comme celle qui est appelée collection. Il a l'avantage d'être supporté nativement par de nombreux pilotes libs, donc il rend votre vie un peu plus facile.

En fin de compte, les méthodes de travail et sont pertinentes dépendent de ce que vous essayez de faire. Considérez les options, le compromis etfaire l'appel pour savoir si ses quelque chose que vous devriez faire. Et l'expérience.

Autres conseils

Essayez d'éviter la duplication des données et éventuellement utiliser une certaine forme de compression si le stockage de grandes quantités de données qui n'a pas besoin d'être consultable.

Je pense que la bonne méthode consiste à utiliser un seul document pour les données relatives

par exemple si vous avez la collection d'utilisateur que vous pouvez donner document à chaque utilisateur et dans ce document d'implant d'autres choses comme avatar ou acl et d'autres choses

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top