Quelles sont les différences entre NoSQL et un SGBDR traditionnel?
Au cours des derniers mois, NoSQL a été fréquemment mentionné dans les actualités techniques. Quelles sont ses caractéristiques les plus importantes par rapport à un SGBDR traditionnel? À quel niveau (physique, logique) les différences se produisent-elles?
Quels sont les meilleurs endroits pour utiliser NoSQL? Pourquoi?
NoSQL signifie "non seulement SQL" et signifie généralement que la base de données n'est pas une base de données relationnelle, qui a été très populaire au cours des dernières décennies.
La raison pour laquelle NoSQL a été si populaire ces dernières années est principalement parce que, lorsqu'une base de données relationnelle se développe à partir d'un serveur, elle n'est plus aussi simple à utiliser. En d'autres termes, ils ne sont pas très évolutifs dans un système distribué. Tous les grands sites que vous avez mentionnés Google, Yahoo, Facebook et Amazon (je ne sais pas grand-chose sur Digg) ont beaucoup de données et stockent les données dans des systèmes distribués pour plusieurs raisons. Il se peut que les données ne tiennent pas sur un seul serveur ou qu'il existe des exigences de haute disponibilité .
Les propriétés d'un système distribué peuvent être décrites par le CAP Theorem . Des trois propriétés, vous ne pouvez en avoir que deux au maximum:
Amazon Dynamo utilise cohérence éventuelle pour se rapprocher pour obtenir les trois propriétés. Le document Dynamo: magasin de valeurs-clés hautement disponible d'Amazon vaut la peine d'être lu lors de l'apprentissage des bases de données NoSQL et des systèmes distribués. Amazon Dynamo a les propriétés A et P.
Google adopte une approche différente avec BigTable , qui a les propriétés C et A.
Comme je l'ai écrit au début, il existe de nombreux autres types de bases de données NoSQL, conçues pour différentes exigences. Par exemple. des bases de données graphiques comme Neo4j , des bases de données de documents comme CouchDB et des bases de données multimodèles/objets comme OrientDB .
Enfin, je voudrais dire que les bases de données relationnelles resteront populaires. Ils sont très flexibles et maintenables. Mais ce n'est pas toujours le meilleur choix.
NoSQL est un terme très large et est généralement appelé "non seulement SQL". Le terme est en train de tomber en disgrâce dans la communauté non SGBDR.
Vous constaterez que la base de données NoSQL a peu de caractéristiques communes. Ils peuvent être grossièrement divisés en quelques catégories:
C'est une énorme question, mais il est assez bien répondu dans ce Survey of Distributed Databases .
Pour une réponse courte:
Les bases de données NoSQL peuvent se passer de diverses parties d'ACID afin de réaliser certains autres avantages - tolérance de partition, performances, répartir la charge ou évoluer de manière linéaire avec l'ajout de nouveau matériel.
Quant à savoir quand les utiliser - cela dépend entièrement des besoins de votre application.
NoSQL est une sorte de base de données qui n'a pas de schéma fixe comme un RDBMS traditionnel. Avec les bases de données NoSQL, le schéma est défini par le développeur au moment de l'exécution. Ils n'écrivent pas d'instructions SQL normales sur la base de données, mais utilisent à la place une API pour obtenir les données dont ils ont besoin. Les bases de données NoSQL peuvent généralement évoluer facilement sur différents serveurs physiques sans avoir besoin de savoir sur quel serveur se trouvent les données que vous recherchez.
Cependant, il y a des compromis à faire pour toute cette flexibilité: les bases de données NoSQL manquent de fonctionnalités par rapport aux systèmes RDBMS comme SQL Server, Oracle, DB2, MySQL, etc. Il n'y a pas de Service Broker, de journalisation des transactions, de packages ETL, etc.
NoSQL n'est pas quelque chose de nouveau. Il existe en fait depuis 50 à 60 ans. À l'époque, il s'appelait COBOL. Même idée exacte, juste un groupe différent est venu avec.
La suppression de la configuration relationnelle, des clés primaires et étrangères et des frais supplémentaires liés au maintien de la sécurité transactionnelle, vous permet souvent d'augmenter considérablement les performances. Cependant, cela n'est pas unique aux nouvelles bases de données/banques de données, car par exemple MySQL a été réglé pour fonctionner aux "niveaux NoSQL" en contournant les couches.
En bref, vous pouvez souvent obtenir des performances impressionnantes si vous acceptez de prendre le risque de perdre des données. La plupart des systèmes NoSQL le font. Par exemple, MongoDB met en scène les changements de données à écrire quand cela est pratique. Les données elles-mêmes sont sûres et sécurisées pour les transactions, mais conservées dans un stockage volatile (mémoire). Si vous perdez de l'énergie, vous ne pouvez pas être sûr à 100% que vous n'avez pas perdu de données ou que vous n'avez pas de données corrompues.
C'est un compromis entre sécurité et performance.
Un bon point de départ est le entrée Wikipedia . Essentiellement, en reliant les données d'une table à une autre, vous stockez des choses sous forme de paires de valeurs clés et il n'y a pas de schéma de base de données, elles sont plutôt gérées dans le code.
Quelques sites utilisent simultanément NoSQL et les serveurs SGBDR typiques, mais pour stocker des données différentes. Vous n'avez donc pas à choisir l'un ou l'autre.
J'ai beaucoup travaillé sur la base de données MongoDB NoSQL et Oracle.
Schéma
La base de données SQL possède son propre schéma prédéfini pour stocker des données structurées.
Dans la base de données NoSQL, il n'y a pas de schéma prédéfini, ici le schéma est l'élément le plus dynamique basé sur les éléments de données.
Évolutivité
Les bases de données SQL sont évolutives verticalement, ce qui signifie que si nous voulons mettre à l'échelle la base de données SQL de base, nous devons donner un coup de pouce matériel sur lequel le système SGBD est installé. C'est là que ça va parfois pour la limitation de l'évolutivité.
Les bases de données NoSQL sont évolutives horizontalement, ce qui signifie que si nous voulons le faire évoluer, nous devons ajouter plus de nœuds et créer un réseau de distribution en fonction de nos propres besoins et de la puissance requise. Voilà comment ils réduisent la charge sur la base de données
Récupération des données
Dans les bases de données SQL, pour définir et manipuler des données, nous pouvons utiliser SQL (Structured Query Language), qui est très puissant de nos jours.
En termes de base de données NoSQL, les requêtes se concentrent sur la collection et les documents. Parfois, il est appelé UnQL (Unstructured Query Language). Ceci est encore en phase d'évolution, il varie donc d'un fournisseur à l'autre de la base de données NoSQL.
Pour en savoir plus sur les principales différences, mon blog: Différence entre la base de données SQL et NoSQL