2016-09-10 1 views
2

Je suis novice en ce qui concerne certains concepts de MongoDB, comme la stratégie d'allocation. Actuellement, j'utilise la version MongoDB-3.2.2, j'utilise la même version avec Windows 32 bits et 64 bits ainsi que . Selon les documents Mongo la stratégie d'allocation par défaut est "PowerOf2Sizes" et ce qui est mieux pour les opérations d'insertion/mise à jour/suppression. J'ai l'exigence suivante: Je stocke mes journaux dans un tableau en tant que document. Donc au départ, j'ai commencé à insérer un journal dans le tableau et ensuite je mettrai à jour le même tableau dans le document avec no.of entrées du journal. J'insère et met à jour le tableau dans le document. Ici, j'utilise un moteur 32 bits (MMAPV1) et un moteur 64 bits (Wired Tiger). Selon ma compréhension des documents Mongo, je n'ai pas besoin de définir un facteur de remplissage (par stratégie d'allocation) à 64 bits pour éviter le mouvement du document. J'ai seulement besoin de définir le facteur de remplissage (via la stratégie d'allocation) pour 32 bits (moteur de stockage MMAP v1).Utiliser efficacement la stratégie d'allocation de MongoDB

Est-ce que n'importe quel corps pourrait me dire comment puis-je utiliser la stratégie d'allocation pour mon exigence ci-dessus? Ou ma compréhension est-elle correcte?

+0

S'il vous plaît laissez-moi savoir Si tous les détails sont manqués puis downvote, sinon aucun organisme sait quel est le problème dans la requête –

Répondre

-1

MongoDB a une limite de 16 Mo/document. Donc, votre solution peut ne pas fonctionner dans des serevers de production en temps réel avec un bon trafic. Beacuse le document sera épuisé quand un bug de la proktion commence à le remplir rapidement.

Le document ci-dessous vous aidera à concevoir le back-end et à apporter de l'évolutivité.

https://docs.mongodb.com/ecosystem/use-cases/storing-log-data/

0

J'ai une très bonne vidéo pour répondre à votre question. Ceci est d'architecte MongoDB et vous aidera à analyser vos besoins

https://youtu.be/9nYFnlM4vYw


Good Day

0

Dans le stockage wiredTiger il n'y a pas de rembourrage nécessaire au stockage ne soit pas linéaire comme dans MMapV1 où nous obtenir un problème de fragmentation dû au mouvement du document jusqu'à la fin (ou partout où se trouve l'espace vide disponible).

Si vous savez déjà que votre document va être assez grand et que vous ne voulez pas le mouvement, la stratégie d'allocation est d'insérer votre document avec un champ avec un gros texte poubelle puis d'appeler une mise à jour avec $ unset ce champ de texte qui supprimera le texte de la corbeille, de sorte que votre document a déjà un plus grand espace et le mouvement de celui-ci est peu probable que les données se développent plus loin. Cependant, il y a une limite de 16 Mo par document, ce qui est assez bon, donc pour maintenir un niveau sain, vous pouvez appeler $ push avec $ slice comme -50 (ou plus), cela garantira que votre tableau n'a que 50 derniers journaux.

S'il s'agit de journaux, la collecte avec cap est une bonne stratégie, mais elle fonctionnera lorsque chaque journal est un document distinct, ce qui n'est pas le cas de votre conception.

+0

Merci pour votre réponse. Je stocke les entrées de journal dans un tableau (un document) jusqu'à 10mb.Il y a une restriction du niveau de l'application pour stocker jusqu'à 10 Mo d'entrées de journal. mais à chaque création du document, il commencera à insérer avec une entrée de journal, après cela il mettra à jour le même document jusqu'à ce qu'il atteigne 10MB.Dois-je définir un facteur de remplissage pour cela dans le cas du moteur de stockage MMAPV1. –

+0

J'ai deux réponses pour votre scénario, si votre taille de bloc de journal est petite, il est préférable de définir un facteur de remplissage défini, mais il semble que vous ne pouvez définir que 4 fois la taille du document initial. alors un facteur de remplissage de 12 kb est inutile quand on sait qu'il va finalement atteindre 10Mo. Mais la taille initiale du document d'insertion est de 800kb alors 3200KB va certainement aider dans le facteur de remplissage, plus d'ici https://groups.google.com/forum/#!topic/mongodb-user/ZubUGYryFnI. –

+0

Maintenant, deuxième est de ne pas s'inquiéter à ce sujet, MMapV1 utilise la taille allocationOf2 chaque fois qu'il se développe. ce qui signifie que si l'espace pour le document est 2mb et que votre document croise 2 mb, il sera alloué 4mb et quand il traverse 4mb, il sera réalloué 8mb et ainsi de suite, le catch ici est une fois qu'il traverse 8mb l'espace alloué sera 16 Mo alors que vous utiliseriez 10 Mo, donc 6 Mo seraient inutilisés en raison de vos restrictions d'application. En conclusion, je dirais mettre une chaîne fictive de taille 1mb avec un facteur de remplissage de 4,0 sur la collecte, puis désélectionner cette chaîne, il va limiter le mouvement beaucoup –