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

je suis habitué à utiliser des bases de données relationnelles comme MySQL ou PostgreSQL, et combiné avec des cadres MVC comme Symfony, RoR ou Django, et je pense que ça marche très bien.

mais dernièrement j'ai beaucoup entendu parler de MongoDB qui est une base de données non relationnelle, ou, pour citer la définition officielle ,

évolutive, performante, ouverte source, sans schéma, orientée vers la documentation la base de données.

je suis vraiment intéressé à être à l'écoute et je veux être au courant de toutes les options que je vais avoir pour un prochain projet et choisir les meilleures technologies là-bas.

dans quels cas L'utilisation de MongoDB (ou de bases de données similaires) est-elle préférable à l'utilisation de bases de données relationnelles" classiques"? Et quels sont les avantages de MongoDB vs MySQL en général? Ou au moins, pourquoi est-il si différent?

si vous avez des pointeurs vers la documentation et / ou des exemples, il serait de une grande aide aussi.

93
demandé sur Community 2010-01-22 16:13:08

9 réponses

voici quelques-uns des avantages de MongoDB pour la construction d'applications web:

  1. Un document basé sur le modèle de données. L'unité de base de stockage est analogue à JSON, dictionnaires Python, Ruby, hache, etc. Il s'agit d'une riche structure de données capable de contenir des tableaux et d'autres documents. Cela signifie que vous pouvez souvent de représenter en une seule entité d'une construction qui nécessiterait plusieurs tableaux pour représenter correctement dans un monde relationnel. Ceci est particulièrement utile si votre les données sont immuables.
  2. au plus Profond de la requête. MongoDB prend en charge les requêtes dynamiques sur les documents en utilisant un langage de requête basé sur les documents qui est presque aussi puissant que SQL.
  3. Aucun schéma des migrations. Comme MongoDB est sans schéma, votre code définit votre schéma.
  4. une voie claire vers l'extensibilité horizontale.

vous aurez besoin de lire plus à ce sujet et jouer avec elle pour obtenir une meilleure idée. Voici une démo en ligne:

http://try.mongodb.org /

54
répondu Kyle Banker 2013-03-25 21:25:58

il y a de nombreux avantages.

Par exemple votre schéma de base de données sera plus évolutif, vous n'aurez pas à vous soucier des migrations, le code sera plus agréable à écrire... Par exemple, voici l'un des codes de mon modèle:

class Setting
  include MongoMapper::Document

  key :news_search, String, :required => true
  key :is_availaible_for_iphone, :required => true, :default => false

  belongs_to :movie
end

ajouter une clé, c'est juste ajouter une ligne de code !

il y a aussi d'autres avantages qui apparaîtront à long terme, comme une meilleure scallabilité et vitesse.

... Mais gardez à l'esprit qu'une base de données non relationnelle n'est pas mieux qu'un relationnel . Si votre base de données a beaucoup de relations et de normalisation, il pourrait faire peu de sens d'utiliser quelque chose comme MongoDB. Il s'agit de trouver le bon outil pour le travail.

pour plus de choses à lire je recommande de jeter un oeil à " pourquoi je pense que Mongo est aux bases de données ce que les Rails étaient aux cadres "ou ce post sur la mongodb site web. Pour vous enthousiasmer et si vous parlez Français, jetez un oeil à cet article expliquant comment configurer MongoDB à partir de zéro.

Edit: j'ai presque oublié de vous parler de ce railscast par Ryan . Il est très intéressant et donne envie de commencer tout de suite!

23
répondu marcgg 2017-05-23 12:02:44

l'avantage de schema-free est que vous pouvez décharger ce que votre charge est en elle, et personne n'aura jamais de motif pour se plaindre, ou pour dire que c'était mal.

cela signifie aussi que tout ce que vous y jetez, reste totalement vide de sens après que vous l'avez fait.

certains qualifieraient cela de désavantage, d'autres non.

le fait qu'une base de données relationnelle a un schema, est une conséquence du fait qu'il a un ensemble bien établi de prédictions extensives, qui sont ce qui nous permet d'attacher un sens à ce qui est enregistré dans la base de données, et qui sont également une condition préalable nécessaire pour nous de le faire.

sans un schéma bien établi, aucune prédiction d'extension, et sans précicats d'extension, aucun moyen pour l'utilisateur de faire un sens de ce qui a été fourré dans elle.

5
répondu Erwin Smout 2010-01-22 23:03:15

MongoDB a été présenté sur FLOSS Weekly cette semaine - http://twit.tv/floss105 Une base de données utilisant un concept similaire est CouchDB qui a été présenté sur un autre hebdomadaire FLOSS: http://twit.tv/floss36

je pense que cela vaut la peine d'écouter ceux en plus des liens fournis par @marcgg

3
répondu Patrick 2017-05-23 10:31:26

Mon expérience avec Postgres et Mongo après avoir travaillé avec des bases de données dans mes projets .

Postgres (RDBMS)

Postgres est recommandé si vos futures applications ont un schéma compliqué qui nécessite beaucoup de jointures ou toutes les données ont des relations ou si nous avons l'écriture lourde. Postgres est open source, plus rapide, conforme à L'acide et utilise moins de mémoire sur le disque, et est tout autour de bon performant pour le stockage JSON et comprend pleine serializability de transactions avec 3 niveaux d'isolation de transaction.

le plus grand avantage de rester avec Postgres est que nous avons le meilleur des deux mondes. Nous pouvons stocker des données dans JSONB avec des contraintes, de la cohérence et de la rapidité. D'un autre côté, nous pouvons utiliser toutes les fonctionnalités SQL pour d'autres types de données. Le moteur sous-jacent est très stable et s'adapte bien avec une bonne gamme de volumes de données. Il fonctionne également sur votre choix de matériel et de système d'exploitation. Postgres fournisseurs de NoSQL les capacités avec le soutien de transaction complète, le stockage des documents JSON avec des contraintes sur les données de champs.

Contraintes Générales pour Postgres

graduer les Postgres horizontalement est beaucoup plus difficile, mais faisable.

les opérations de lecture rapide ne peuvent pas être entièrement réalisées avec Postgres.

PAS de Bases de Données SQL

Mongo DB (par câble Tigre)

MongoDB peut battre Postgres dans la dimension de "l'échelle horizontale". Stocker JSON est ce que Mongo est optimisé pour faire. Mongo stocke ses données dans un format binaire appelé BSONb qui est (en gros) juste une représentation binaire d'un super-ensemble de JSON. MongoDB stocke les objets exactement comme ils ont été conçus. Selon MongoDB, pour les applications à forte intensité d'écriture, Mongo dit que le nouveau moteur (Wired Tiger) donne aux utilisateurs une augmentation de 10x de la performance d'écriture (je devrais essayer cela), avec une réduction de 80 pour cent de l'utilisation de stockage, aidant pour réduire les coûts de stockage, obtenir une plus grande utilisation du matériel.

Contraintes Générales de MongoDb

l'utilisation d'un moteur de stockage sans schéma pose le problème des schémas implicites. Ces schémas ne sont pas définis par notre moteur de stockage mais sont définis en fonction du comportement de l'application et des attentes.

Stand-alone NoSQL technologies ne répondent pas aux normes ACID parce qu'ils sacrifient la protection des données critiques en favoriser la performance à haut rendement pour les applications non structurées. Il n'est pas difficile d'appliquer de L'acide sur les bases de données NoSQL, mais cela rendrait la base de données lente et rigide dans une certaine mesure. "La plupart des limitations NoSQL ont été optimisées dans les nouvelles versions et versions qui ont surmonté leurs limitations précédentes dans une large mesure".

3
répondu ProgrammerPanda 2017-03-21 09:17:49

c'est une question de compromis. MongoDB est rapide mais pas acide, il n'a pas de transactions. Il est meilleur que MySQL dans certains cas d'utilisation et pire dans d'autres.

2
répondu AABBCCDD 2010-01-22 22:15:08

Soufflet de Lignes Écrites dans MongoDB: Le Guide Définitif.

il y a plusieurs bonnes raisons:

  1. conserver différents types de documents dans la même collection peut être une cauchemar pour les développeurs et les administrateurs. Les développeurs doivent s'assurer que chaque requête ne renvoie que des documents d'un certain type ou que le code d'application effectuant une requête peut traiter des documents de différentes formes. Si nous sommes la recherche de billets de blog, c'est un problème éliminer les documents contenant des données d'auteur.
  2. il est beaucoup plus rapide d'obtenir une liste de collections que d'extraire un liste des types dans une collection. Par exemple, si nous avions une clé de type dans la collection qui a dit si chaque document était un " skim," "ensemble" ou de la "chunky monkey", document, il serait beaucoup plus lent à trouver ces trois valeurs dans une seule collection de trois des collectes séparées et d'interroger leur les noms de
  3. regroupement de documents de même nature dans une même collection permet la localisation des données. Obtenir plusieurs billets de blog à partir d'un collection contenant seulement des messages aura probablement besoin de moins de disque cherche que d'obtenir les mêmes messages à partir d'une collection contenant des postes et des données d'auteur.
  4. Nous commençons à imposer une structure sur nos documents lorsque nous créons index. (Ceci est particulièrement vrai dans le cas des index uniques.) Ils les index sont définis par collecte. En ne mettant que des documents d'un seul type dans la même collection, nous pouvons indice de notre collections plus efficacement
1
répondu Nanhe Kumar 2014-01-21 05:31:44

après une question de bases de données avec stockage textuel), j'ai regardé MongoDB et des systèmes similaires.

Si j'ai bien compris, ils sont censés être plus facile à utiliser et à installer, et beaucoup plus rapide. Peut-être aussi plus sûr que le manque de SQL empêche L'injection SQL...

Apparemment, MongoDB est utilisé principalement pour des applications Web.

Fondamentalement, et ils déclarent qu'eux-mêmes, ces bases de données ne sont pas adaptés à la complexité requêtes d'extraction de données, etc. Mais ils brillent à extraire rapidement beaucoup de données plates.

0
répondu PhiLho 2010-01-22 13:28:21
  1. MongoDB supporte la recherche par champs, les recherches d'expressions régulières.Inclut les fonctions java script définies par l'utilisateur.
  2. MongoDB peut être utilisé comme un système de fichiers, en profitant de l'équilibrage de charge et des fonctionnalités de réplication de données sur plusieurs machines pour le stockage des fichiers.
0
répondu user2982063 2013-12-18 06:02:34