web-dev-qa-db-fra.com

Quand utiliser MongoDB

J'écris une application qui n'a pas nécessairement besoin de capacités de mise à l'échelle car elle ne collectera pas de grandes quantités de données au début. (Cependant, si j'ai de la chance, je pourrais éventuellement suivre la route.)

J'exécuterai mon serveur Web et ma base de données sur la même boîte (pour l'instant).

Cela dit, je recherche la performance et l'efficacité.

La partie principale de mon application sera le chargement d'articles de blog. En utilisant un SGBDR (MySQL), je ferai 6 requêtes (2 des requêtes étant jointes), juste pour charger une seule page d'article de blog.

select blog
select blog_album
select blog_tags
select blog_notes
select blog_comments (join with users)
select blog_author_participants (join with users)

Cependant, avec MongoDB je peux dénormaliser et aplatir 6 tables en seulement 2 tables/collections et minimise mes requêtes à potentiellement une seule requête 1,

users
blogs
    ->blog_album
    ->blog_tags        
    ->blog_notes
    ->blog_comments
    ->blog_author_participants

Maintenant, avec le schéma MongoDB, il y aura une certaine redondance des données. Cependant, l'espace sur le disque dur est moins cher que les processeurs/serveurs.

1.) Serait-ce un bon scénario pour utiliser MongoDB?

2.) Bénéficiez-vous uniquement des performances en utilisant MongoDB lorsque vous évoluez au-delà d'un seul serveur?

3.) Y a-t-il des risques de durabilité en utilisant MongoDB? J'entends qu'il y a un risque de perte de données lors des insertions - car les insertions sont écrites en mémoire d'abord, puis dans la base de données.

4.) Cela devrait-il m'empêcher d'utiliser MongoDB en production?

47
dez

Cependant, avec MongoDB, je peux dénormaliser et aplatir 6 tables en seulement 2 tables/collections et minimiser mes requêtes à potentiellement une seule requête

Mais vous pouvez facilement interroger MySQL pour 6 tables d'informations sur un seul article de blog avec une seule instruction SQL correctement conçue.

cependant, l'espace disque dur est moins cher que le processeur/les serveurs.

Si les performances et la mise à l'échelle sont une priorité, vous devrez vous préoccuper d'avoir suffisamment de RAM pour tout ranger dans la mémoire principale et suffisamment de cœurs de processeur pour exécuter les requêtes. Une matrice RAID 10 de niveau entreprise est une exigence , ne vous méprenez pas, mais dès que votre logiciel de base de données (MongoDB ou MySQL) doit analyser un index qui ne peut pas entrer dans la mémoire principale, vous serez dans un monde de douleur en supposant une grande base de données active.: )

J'aime MongoDB, mais sa grande force dans mon esprit est la carte/réduire et son orientation documentaire. Vous n'avez besoin d'aucune de ces fonctionnalités. MySQL est testé dans le temps dans les déploiements à grande échelle et prend en charge le partitionnement (mais je dirais que votre base de données devrait être de l'ordre de 50 à 100 Go avant de pouvoir réaliser un gain substantiel du partitionnement par rapport à un serveur unique (plus une sauvegarde passive) avec tonnes (64 Go +) de RAM. Je dirais également que si les performances sont vraiment un problème, MySQL serait préférable car vous auriez un contrôle suprême sur vos index.

Cela ne veut pas dire que MongoDB n'est pas de haute performance, mais sa place ne sert probablement pas de blogs. Votre préoccupation concernant les inserts est également valable. MongoDB n'est pas un système ACIDE . Google transactions dans les deux systèmes et comparer.

22
MDaubs

Vous utiliseriez MongoDB lorsque vous avez un cas d'utilisation qui correspond à ses points forts.

Avez-vous besoin d'un magasin de documents sans schéma? Non, vous avez un schéma stable.

Avez-vous besoin d'un partage automatique? Non, vous n'avez pas de besoins de données ou de budget extraordinaires pour une mise à l'échelle horizontale du matériel.

Avez-vous besoin de cartographier/réduire le traitement des données? Pas pour quelque chose comme un blog.

Alors pourquoi envisagez-vous même cela?

32
Dan Grossman

Voici une bonne explication: http://mod.erni.st/nosql-if-only-it-was-that-easy/

Le dernier paragraphe le résume:

Sur quoi vais-je construire ma prochaine application? Probablement Postgres. Vais-je utiliser NoSQL? Peut être. Je pourrais également utiliser Hadoop et Hive. Je pourrais tout garder dans des fichiers plats. Je vais peut-être commencer à pirater Maglev. J'utiliserai tout ce qui est le mieux pour le travail. Si j'ai besoin de rapports, je n'utiliserai aucun NoSQL. Si j'ai besoin de mise en cache, j'utiliserai probablement Tokyo Tyrant. Si j'ai besoin d'ACIDity, je n'utiliserai pas NoSQL. Si j'ai besoin d'une tonne de compteurs, j'utiliserai Redis. Si j'ai besoin de transactions, j'utiliserai Postgres. Si j'ai une tonne d'un seul type de documents, j'utiliserai probablement Mongo. Si j'ai besoin d'écrire 1 milliard d'objets par jour, j'utiliserais probablement Voldemort. Si j'ai besoin d'une recherche en texte intégral, j'utiliserais probablement Solr. Si j'ai besoin d'une recherche plein texte de données volatiles, j'utiliserais probablement Sphinx.

12
gusridd

NoSQL vs RDBMS: pommes et oranges?

Je vous conseille de lire un peu ce qu'est NoSQL et ce qu'il fait avant de décider si vous pouvez l'utiliser. Vous ne pouvez pas prendre une base de données normale et la transformer en une chose NoSQL comme ça. La façon dont vous travaillez avec les données est complètement différente.

NoSQL a définitivement ses utilisations. Mais ce n'est certainement pas la réponse à tout. Le principal avantage de NoSQL est le modèle de données facilement modifiable.

7
Wolph

Avantages de l'utilisation de mongodb (selon Moshe Kaplan publié dans dzonearticle )

  1. Conception sans schéma
  2. Évolutivité dans la gestion des octets de données Tera
  3. ReplicaSet rapide avec fonction de haute disponibilité
  4. Le sharding permet une croissance linéaire et évolutive sans épuisement du budget
  5. Prise en charge d'une charge d'écriture élevée
  6. Utilisation de la localité des données pour le traitement des requêtes

MongoDB répond aux exigences de Consistency & Partitioning en théorie CAP (cohérence, disponibilité et partitionnement)

Questions SE connexes:

Quels sont les avantages d'utiliser une base de données sans schéma comme MongoDB par rapport à une base de données relationnelle?

Quand à Redis? Quand à MongoDB?

5
Ravindra babu