9
votes

MongoDB base64 image vs gridfs

J'utilise mongodb et je veux stocker des vignettes sur mon serveur. Quel est le meilleur? En utilisant des gridfs ou convertir ces images en base64 et les stocker directement dans un document.


1 commentaires

Quelle est la taille finale en k? Les gridfs ne se divisent pas avant que le fichier soit supérieur à 256k. Allez-vous utiliser le fichier final comme binaire ou base64?


3 Réponses :


0
votes

Je vous suggère d'utiliser gridfs . Avec gridfs , vous pouvez profiter de API de repos de MongoDB . Donc, il n'y aura pas de surchauffe pour récupérer des documents à l'aide de l'API de Mongodb. L'API de repos fera tout le travail acharné et vous fera gagner du temps.


0 commentaires

3
votes

Cela dépend vraiment de votre technologie latérale du serveur et de votre préférence personnelle. 10Gen suggère que vous utilisiez des documents sauf si vous stockez des fichiers plus grands que la limite de document (16 Mo). Je suggérerais que vous faites tout ce qui est plus facile, étant donné la langue avec laquelle vous travaillez. Si vous avez d'autres documents pour modéliser après le suivi du document, donnez autrement un coup de gridfs.


0 commentaires

8
votes

Comme toujours, il y a des avantages (dis):

Avantages:

  • Moins de demandes de base de données Si seulement le document + la vignette est nécessaire.
  • moins de demandes client. (bien sûr, vous pourriez récupérer les vignettes de Gridfs et les mettre dans la réponse, mais cela entraînerait une plus grande référence de données de base de données)

    neutre:

    • Les exigences de stockage sont égales

      contre:

      • Vous ne pouvez pas réutiliser facilement la même image d'image dans un autre document, car il n'y a pas d'identifiant à faire référence à. (Pour nous, ce n'est pas un problème, car les réponses du serveur sont comprimées GZIP et que vous ne pouvez pas vraiment dire la différence entre 1 et 5 images égales)

        avec MongoDB et NOSQL Il s'agit de connaître vos cas d'utilisation!

        • Si le lot de vos documents partage la même image, vous devez utiliser des gridfs et simplement fournir des liens vers ces fichiers, car 1. Les données de partage sont plus efficaces et 2. Le client peut cacher la demande d'image et doit simplement la récupérer une fois.

        • Si vos clients auront toujours besoin de la vignette, vous devriez peut-être envisager d'intégrer les fichiers comme base64 dans la réponse. Ceci est particulièrement agréable, si 1. Les images ne sont pas partagées entre les documents et / ou 2. Les images changent souvent et la mise en cache est inutile / impossible.

        • base64 Bien sûr signifie plus de trafic sur le fil, car il a besoin de 8 bits pour transférer 6 bits. I.E. Efficacité de 75%. Cela n'affecte bien sûr que la communication client-serveur, car dans MongoDB, vous pouvez toujours stocker vos données comme champ binaire.

        • Préférez-vous plus de demandes de base de données (= à l'aide de gridfs)? Ou taille de données / documents plus grande sur le fil (= incorporé)?

          ce que nous avons fait:

          Nous utilisons des vignettes incorporées, même si nous avons potentiellement des images en double. Après avoir activé la compression GZIP sur le serveur, la taille du transfert du client-serveur n'a plus d'importance. Mais comme dit auparavant, c'est un compromis: nous avons maintenant moins de demandes de clients et moins de demandes de base de données, mais parce que l'emboîtement facilite la mise en cache des images impossible, nous avons maintenant plus de données sur le fil.

          Conclusion:

          Il n'y a pas de taille unique pour toutes les solutions.


2 commentaires

Pouvez-vous donner un exemple sur la manière dont vous obtenez le lien / URL / chemin de votre fichier après le téléchargement sur Gridfs (cela pourrait vous aider beaucoup)?


Lorsque vous téléchargez un fichier sur Gridfs, MongoDB générera un objet, tout comme pour tout autre document que vous stockez. Les gridfs ne sont pas vraiment une fonctionnalité de MongoDB, il fait généralement partie de votre bibliothèque client de MongoDB. Par exemple: Mongodb.github.io/mongo-java- Driver / 3.5 / Driver / Tutoriels / Gri DFS