web-dev-qa-db-fra.com

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 telles que MySQL ou PostgreSQL et je les combine avec des frameworks MVC tels que 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 le définition officielle ,

une solution évolutive, performante et ouverte source, sans schéma, orienté document base de données.

Je souhaite vraiment être sur Edge et connaître toutes les options que je vais avoir pour un prochain projet et choisir les meilleures technologies.

Dans quels cas, utiliser MongoDB (ou des bases de données similaires) est préférable à une base de données relationnelle "classique"? Et quels sont les avantages de MongoDB par rapport à MySQL en général? Ou du moins, pourquoi est-il si différent?

Si vous avez des indications sur la documentation et/ou des exemples, cela serait également d'une grande aide.

93
Guillaume Flandre

Voici quelques-uns des avantages de MongoDB pour la création d'applications Web:

  1. Un modèle de données basé sur des documents. L'unité de stockage de base est analogue à JSON, aux dictionnaires Python, aux hachages Ruby, etc. Il s'agit d'une structure de données riche capable de contenir des tableaux et d'autres documents. Cela signifie que vous pouvez souvent représenter dans une seule entité une construction qui nécessiterait que plusieurs tables soient correctement représentées dans une base de données relationnelle. Ceci est particulièrement utile si vos données sont immuables.
  2. Capacité de requête profonde. MongoDB prend en charge les requêtes dynamiques sur des documents en utilisant un langage de requête basé sur les documents presque aussi puissant que SQL. 
  3. Aucune migration de schéma. Comme MongoDB est sans schéma, votre code définit votre schéma.
  4. Un chemin clair vers l'évolutivité horizontale.

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

http://try.mongodb.org/

55
Kyle Banker

Les avantages sont nombreux. 

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 aura également d'autres avantages qui apparaîtront à long terme, tels qu'une amélioration de la scallabilité et de la rapidité. 

... Mais gardez à l'esprit qu'une base de données non relationnelle n'est pas meilleure qu'une base de données relationnelle. Si votre base de données a beaucoup de relations et de normalisation, utiliser quelque chose comme MongoDB n'a pas beaucoup de sens. Il s’agit de trouver le bon outil pour le poste.

Pour plus de choses à lire, je vous conseillerais de regarder " Pourquoi je pense que Mongo est pour Databases ce que Rails était pour Frameworks " ou cet article sur le site Web de mongodb. Pour vous enthousiasmer et si vous parlez français, jetez un oeil à cet article en expliquant comment configurer MongoDB à partir de zéro.

Edit: J'ai presque oublié de vous parler de cette diffusion sur rail par Ryan . C'est très intéressant et ça donne envie de commencer tout de suite!

23
marcgg

L'avantage de l'absence de schéma est que vous pouvez vider votre contenu, et personne ne pourra jamais se plaindre de cela, ou pour dire qu'il était faux.

Cela signifie également que tout ce que vous y jetez reste totalement dépourvu de sens après l'avoir fait.

Certains qualifieraient cela de gros désavantage, d’autres pas.

Le fait qu’une base de données relationnelle ait un schéma bien établi est une conséquence du fait qu’elle possède un ensemble bien établi de prédicats d’extension, qui permettent de donner un sens à ce qui est enregistré dans la base de données, et qui sont: également une condition préalable nécessaire pour le faire.

Sans un schéma bien établi, pas de prédicats d'extension, et sans précisions d'extension, aucun moyen pour l'utilisateur de donner un sens à ce qui était bourré.

5
Erwin Smout

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

Postgres (SGBDR)

Postgres est recommandé si vos futures applications ont un schéma compliqué qui nécessite beaucoup de jointures ou si toutes les données ont des relations ou si nous avons une écriture lourde. Postgres est open source, plus rapide, conforme à ACID et utilise moins de mémoire sur disque. Il est également très performant pour le stockage JSON et inclut une sérialisabilité complète des transactions avec 3 niveaux d’isolation de transaction.

Le principal avantage de rester chez 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'autre part, nous pouvons utiliser toutes les fonctionnalités SQL pour d'autres types de données. Le moteur sous-jacent est très stable et gère bien une large gamme de volumes de données. Il fonctionne également sur votre choix de matériel et de système d'exploitation. Postgres fournit des fonctionnalités NoSQL et une prise en charge complète des transactions, stockant des documents JSON avec des contraintes sur les données des champs.

Contraintes générales pour Postgres

Le redimensionnement horizontal de Postgres est considérablement plus difficile, mais réalisable.

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

NO bases de données SQL

Mongo DB (tigre filaire)

MongoDB peut battre Postgres en dimension «à 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 (approximativement) juste une représentation binaire d'un sur-ensemble de JSON. MongoDB stocke les objets exactement tels qu'ils ont été conçus. Selon MongoDB, pour les applications nécessitant beaucoup d’écriture, le nouveau moteur (Wired Tiger) offre aux utilisateurs une performance en écriture jusqu’à 10 fois supérieure (je devrais essayer cela), avec une réduction de 80% de l’utilisation du stockage, ce qui permet de 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 plutôt définis en fonction du comportement et des attentes de l'application.

Les technologies NoSQL autonomes ne répondent pas aux normes ACID car elles sacrifient des protections de données critiques au profit de performances à haut débit pour les applications non structurées. Il n’est pas difficile d’appliquer ACID sur des bases de données NoSQL, mais cela rendrait les bases de données lentes et peu flexibles jusqu’à un certain point. «La plupart des limitations NoSQL ont été optimisées dans les versions et les versions les plus récentes, qui ont largement dépassé ses limitations précédentes».

3
ProgrammerPanda

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

Je pense que cela vaut la peine d’écouter ceux-ci en plus des liens fournis par @marcgg

3
Patrick

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. 

2
AABBCCDD

Les lignes ci-dessous sont é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 un cauchemar pour les développeurs et les administrateurs. Les développeurs doivent s’assurer que que chaque requête renvoie uniquement des documents d'un certain type ou que le code de l'application effectuant une requête puisse gérer les documents de formes différentes. Si nous interrogeons pour des articles de blog, c’est un problème pour éliminer les documents contenant les données de l'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 dit si chaque document est un "écrémé", “Entier” ou “chunky singe” document, il serait beaucoup plus lent à trouver ces trois valeurs dans une seule collection plutôt que d'avoir trois collections séparées et requête pour leurs noms
  3. Regroupement de documents de même nature dans la même collection permet de localiser les données. Obtenir plusieurs articles de blog à partir d'un une collection contenant uniquement des publications nécessitera probablement moins de disque cherche à obtenir les mêmes messages d’une collection contenant messages et données de l'auteur.
  4. Nous commençons à imposer une structure à nos documents lorsque nous créons index. (Cela est particulièrement vrai dans le cas d'index uniques.) Ces index sont définis par collection. En ne mettant que des documents d'un seul type dans la même collection, nous pouvons indexer notre collections plus efficacement
1
Nanhe Kumar

Après une question de bases de données avec stockage textuel), j’ai jeté un coup d’œil à MongoDB et à des systèmes similaires.
Si j'ai bien compris, ils sont supposés être plus faciles à utiliser et à configurer, et beaucoup plus rapidement. Peut-être aussi plus sûr car l'absence de SQL empêche l'injection SQL ...
Apparemment, MongoDB est principalement utilisé pour les applications Web.
En gros, et ils affirment eux-mêmes, ces bases de données ne conviennent pas aux requêtes complexes, à l'exploration de données, etc.

0
PhiLho
  1. MongoDB prend en charge la recherche par champs, recherches d’expressions régulières. Inclut les fonctions de script Java définies par l’utilisateur.
  2. MongoDB peut être utilisé en tant que système de fichiers, tirant parti des fonctionnalités d'équilibrage de charge et de réplication de données sur plusieurs ordinateurs pour stocker des fichiers.
0
user2982063