94 votes

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é à l'utilisation de bases de données relationnelles comme MySQL ou PostgreSQL, et combiné avec MVC, frameworks comme Symfony, RoR ou Django, et je pense que cela fonctionne 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,

une solution évolutive, de haute performance, ouvrir source, de schéma-libre, orientée document la base de données.

Je suis vraiment intéressé à être sur le bord et que vous voulez être au courant de toutes les options que je vais en avoir pour un prochain projet et choisir les meilleures technologies.

Dans quels cas utiliser MongoDB (ou autres bases de données) est mieux que d'utiliser un "classique" des bases de données relationnelles? 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 des documents et/ou des exemples, il serait d'une grande aide aussi.

56voto

Kyle Banker Points 3402

Voici quelques-uns des avantages de MongoDB pour la création 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. C'est une riche structure de données capable de tenir des tableaux et 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 vos données est immuable.
  2. Profonde de la requête. MongoDB prend en charge les requêtes sur des documents à l'aide d'un document basé sur le langage de requête qui est presque aussi puissant que SQL.
  3. Aucun schéma des migrations. Depuis MongoDB est un schéma gratuit, votre code définit votre schéma.
  4. Un chemin clair d'évolutivité horizontale.

Vous aurez besoin de lire plus à ce sujet et d'en jouer pour se faire une meilleure idée. Voici une démo en ligne:

http://try.mongodb.org/

23voto

marcgg Points 25599

Il ya 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... Pour exemple, voici l'un de mes code du 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

L'ajout d'une clé est juste d'ajouter une ligne de code !

Il y a aussi d'autres avantages qui apparaîtra dans le long terme, comme une meilleure scallability et de la 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 peut faire que 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 prendre un coup d'oeil à "Pourquoi je pense que Mongo est pour les Bases de données que Rails est de des Cadres" ou ce post sur la mongodb site web. Pour obtenir excité et si vous parlez français, prendre un coup d'oeil à cet article expliquant comment mettre en place 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!

5voto

Erwin Smout Points 7499

L'avantage de schéma-free est que vous pouvez vider quelle que soit votre charge est en elle, et jamais personne n'aura aucun motif de se plaindre, ou, pour le dire que c'était mal.

Cela signifie également que, quelle que soit vous vider en elle, reste totalement vide de sens une fois que vous avez fait.

Certains l'étiquette qu'une brute inconvénient, certains autres n'ont pas.

Le fait qu'une base de données relationnelle a mis en place le schéma, est une conséquence du fait qu'il a mis en place un ensemble de extensionnelle des prédicats, qui sont ce qui nous permet de donner un sens à ce qui est enregistré dans la base de données, et qui sont aussi une condition préalable nécessaire pour nous de le faire.

Sans bien établie sur le schéma, pas de extensionnelle des prédicats, et sans extensionnelle precicates, aucun moyen pour l'utilisateur de faire sens de ce qui était en peluche.

3voto

Patrick Points 262

MongoDB a été présenté sur de la SOIE Hebdomadaire de cette semaine http://twit.tv/floss105 Une base de données à l'aide d'un concept similaire, CouchDB qui a été présenté sur un autre fil dentaire une fois par semaine: http://twit.tv/floss36

Je pense que ça vaut l'écoute de ceux en outre les liens fournis par @marcgg

2voto

AABBCCDD Points 59

Tout est une question de compromis. MongoDB est rapide mais pas ACID, il n’a pas de transaction. C'est meilleur que MySQL dans certains cas d'utilisation et pire dans d'autres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X