What is NoSQL? Databases for a cloud-scale future
L’un des choix les additionally fondamentaux à faire lors du développement d’une software est d’utiliser une base de données SQL ou NoSQL pour stocker les données. Les bases de données conventionnelles, c’est-à-dire les bases de données relationnelles qui utilisent SQL (Structured Question Language) pour les requêtes, sont le produit de décennies d’évolution technologique, de bonnes pratiques et de tests de résistance dans le monde réel. Ils sont conçus pour des transactions fiables et des requêtes ad hoc, les éléments de foundation des applications métier. Mais ils sont également soumis à des restrictions, telles qu’un schéma rigide, qui les rendent moins adaptés à d’autres types d’applications.
Les bases de données NoSQL sont apparues en réponse à ces limits. Les systèmes NoSQL stockent et gèrent les données de manière à permettre une vitesse opérationnelle élevée et une grande flexibilité de la section des développeurs. Beaucoup ont été développés par des entreprises comme Google, Amazon, Yahoo et Facebook qui cherchaient de meilleures façons de stocker du contenu ou de traiter des données pour des web pages World-wide-web massifs. Contrairement aux bases de données SQL, de nombreuses bases de données NoSQL peuvent être mises à l’échelle horizontalement sur des centaines ou des milliers de serveurs.
Cependant, les avantages de NoSQL ont un coût. Les systèmes NoSQL privilégient la vitesse et l’évolutivité Propriétés ACIDES derrière les transactions fiables claims par les bases de données SQL. Et les métaphores utilisées pour travailler avec les données dans les systèmes NoSQL sont également relativement nouvelles, par rapport aux décennies de connaissances institutionnelles construites autour de SQL.
Les bases de données SQL et NoSQL offrent des compromis différents. Bien qu’ils puissent concourir dans le cadre d’un projet spécifique – comme dans lequel choisir pour cette candidature ou ce software – ils sont complémentaires dans l’ensemble. Chacun est adapté à différents cas d’utilisation. La décision n’est pas tant une question de soit/ou qu’il s’agit de savoir quel outil convient le mieux au travail.
NoSQL contre SQL
La différence fondamentale entre SQL et NoSQL n’est pas si compliquée. Chacun a une philosophie différente sur la façon dont les données doivent être stockées et récupérées.
Avec les bases de données SQL, toutes les données ont une composition inhérente. Une base de données conventionnelle telle que Microsoft SQL Server, MySQL, PostgreSQL ou Oracle Databases utilise un schéma— une définition formelle de la composition des données insérées dans la foundation de données. Par exemple, une certaine colonne dans une table peut être limitée aux entiers uniquement. En conséquence, les données enregistrées dans la colonne auront un degré élevé de normalisation. Le schéma rigide d’une base de données SQL permet également d’effectuer relativement facilement des agrégations sur les données, par exemple en combinant les données de deux tables à l’aide de SQL Sign up for
commande.
Avec NoSQL, les données peuvent être stockées sous forme libre ou sans schéma. Toutes les données peuvent être stockées dans n’importe quel enregistrement. Parmi les bases de données NoSQL, vous trouverez quatre modèles courants de stockage des données, qui conduisent à quatre styles courants de systèmes NoSQL :
- Bases de données documentaires (par exemple MongoDB). Les données insérées sont stockées sous la forme de structures JSON sans schéma, ou “paperwork”, où les données peuvent être n’importe quoi, des entiers aux chaînes en passant par du texte de forme libre. Il n’est pas nécessaire de spécifier quels champs, le cas échéant, un document JSON contiendra.
- Magasins clé-valeur (par exemple Redis). Les valeurs de forme libre, des entiers simples ou des chaînes aux documents JSON complexes, sont accessibles dans la foundation de données au moyen de clés, telles que des chaînes.
- Magasins à colonnes larges (par exemple Cassandre). Les données sont stockées dans des colonnes au lieu de lignes comme dans un système SQL conventionnel. N’importe quel nombre de colonnes (et donc de nombreux sorts de données différents) peut être regroupé ou agrégé selon les besoins pour les requêtes ou les vues de données.
- Bases de données de graphes (par exemple Neo4j). Les données sont représentées sous la forme d’un réseau ou d’un graphique d’entités et de leurs relations, où chaque nœud du graphique est un bloc de données de forme libre.
Le stockage de données sans schéma est utile dans les scénarios suivants :
- Vous souhaitez un accès rapide aux données, et vous vous souciez davantage de la rapidité et de la simplicité d’accès que de la fiabilité des transactions ou de la cohérence.
- Vous stockez un grand volume de données et vous ne voulez pas vous enfermer dans un schéma, car la modification ultérieure du schéma pourrait être lente et pénible.
- Vous importez des données non structurées provenant d’une ou de plusieurs resources et vous souhaitez conserver les données dans leur forme d’origine pour une flexibilité maximale.
- Vous souhaitez stocker des données dans une framework hiérarchique, mais vous souhaitez que ces hiérarchies soient décrites par les données elles-mêmes, et non par un schéma externe. NoSQL permet aux données d’être nonchalamment autoréférentielles d’une manière furthermore complexe à imiter pour les bases de données SQL.
Interroger des bases de données NoSQL
Le langage de requête structuré utilisé par les bases de données relationnelles fournit un moyen uniforme de communiquer avec le serveur lors du stockage et de la récupération des données. La syntaxe SQL est hautement standardisée, donc même si les bases de données individuelles peuvent gérer certaines opérations différemment (par exemple, fonctions de fenêtre), les bases restent les mêmes.
En revanche, chaque base de données NoSQL a tendance à avoir sa propre syntaxe pour interroger et gérer les données. CouchDB, par exemple, utilise des requêtes sous forme de JSON, envoyées by means of HTTP, pour créer ou récupérer des files de sa foundation de données. MongoDB envoie des objets JSON by means of un protocole binaire, via une interface de ligne de commande ou une bibliothèque de langage.
Certains produits NoSQL boîte utiliser une syntaxe de form SQL pour travailler avec des données, mais seulement dans une mesure limitée. Par exemple, Apache Cassandra, un magasin à larges colonnes, possède son propre langage de type SQL, le Cassandra Query Language ou CQL. Une partie de la syntaxe CQL est directement situation du playbook SQL, comme le Find
ou INSERT
mots clés. Mais il n’existe aucun moyen natif d’effectuer une Be part of
ou sous-requête dans Cassandra, et donc les mots-clés associés n’existent pas dans CQL.
Architecture sans partage
Un choix de conception commun aux systèmes NoSQL est une architecture « sans partage ». Dans une conception sans partage, chaque nœud de serveur du cluster fonctionne indépendamment de tous les autres nœuds. Le système n’a pas besoin d’obtenir le consensus des autres nœuds pour renvoyer des données à un shopper. Les requêtes sont rapides car or truck elles peuvent être renvoyées à partir du nœud le additionally proche ou le as well as pratique.
Un autre avantage d’un système sans partage est la résilience et l’expansion évolutive. La mise à l’échelle du cluster est aussi basic que de faire tourner de nouveaux nœuds dans le cluster et d’attendre qu’ils se synchronisent avec les autres. Si un nœud NoSQL tombe en panne, les autres serveurs du cluster continueront de fonctionner. Toutes les données restent disponibles, même si moins de nœuds sont disponibles pour répondre aux requêtes.
Notez qu’une conception sans partage n’est pas exclusif aux bases de données NoSQL. De nombreux systèmes SQL conventionnels peuvent être configurés en manner sans partage, comme MySQLbien que cela implique généralement de sacrifier la cohérence au sein du cluster au income des performances.
Limitations NoSQL
Si NoSQL offre tant de liberté et de flexibilité, pourquoi ne pas abandonner complètement SQL ? La réponse very simple est que de nombreuses apps nécessitent toujours les styles de contraintes, de cohérence et de protection que les bases de données SQL fournissent. Dans ces cas, certains « avantages » de NoSQL peuvent se transformer en inconvénients. D’autres restrictions proviennent du fait que les systèmes NoSQL manquent de certaines fonctionnalités que l’on tient pour acquises dans l’espace SQL.
Pas de schéma
Même si vous utilisez des données de forme libre, vous devez presque toujours imposer des contraintes aux données pour les rendre utiles. Avec NoSQL, imposer des contraintes implique de transférer la responsabilité de la base de données vers le développeur de l’application. Par exemple, le développeur peut imposer une structure by way of un système de mappage relationnel d’objet, ou ORM. Mais si vous voulez que le schéma vive avec les données elles-mêmesNoSQL ne le prend généralement pas en charge.
Certaines solutions NoSQL fournissent des mécanismes facultatifs de typage des données et de validation des données. Apache Cassandra, par exemple, a une flopée de forms de données natifs rappelant ceux que l’on trouve dans le SQL conventionnel.
Cohérence éventuelle
Les systèmes NoSQL offrent la possibilité d’échanger une cohérence forte ou immédiate contre une meilleure disponibilité et de meilleures performances. Les bases de données conventionnelles garantissent que les opérations sont atomique (toutes les functions d’une transaction réussissent, ou aucune ne réussit), cohérent (tous les utilisateurs ont la même vue des données), isolé (les transactions ne sont pas en concurrence), et strong (une fois terminés, ils survivront à une panne de serveur).
Ces quatre propriétés, collectivement appelées ACID, peuvent être gérées différemment dans les systèmes NoSQL. Au lieu d’exiger une forte cohérence sur l’ensemble du cluster, ce qui retarderait nécessairement les réponses aux requêtes, vous pouvez opter pour éventuel la cohérence, qui permet de servir les requêtes sans attendre que les dernières écritures soient copiées sur d’autres nœuds du cluster. Les données insérées dans le cluster sont finalement disponibles partout, mais vous ne pouvez pas garantir quand.
Pour certains systèmes NoSQL, vous pouvez choisir l’un des nombreux compromis entre cohérence et vitesse, bien que ce qui est disponible varie d’un produit à l’autre. Azure Cosmos DB de Microsoft, par exemple, vous permet sélectionner un niveau de cohérence par demande, afin que vous puissiez choisir le comportement qui correspond à votre cas d’utilisation. La sémantique des transactions, qui dans un système SQL garantit que toutes les étapes d’une transaction (par exemple, l’exécution d’une vente et réduction des stocks) sont soit terminés soit annulés, sont disponibles dans certains systèmes NoSQL, comme MongoDB.
Verrouillage NoSQL
La plupart des systèmes NoSQL sont conceptuellement semblable, mais mis en œuvre différemment. Chacun a tendance à avoir ses propres métaphores et mécanismes sur la façon dont les données sont interrogées et gérées.
Un effet secondaire de cela est un degré potentiellement élevé de couplage entre la logique de l’application et la foundation de données. Ce couplage n’est pas si mauvais si vous choisissez un système NoSQL et que vous vous y tenez, mais il peut devenir une pierre d’achoppement si vous changez de système en cours de route.
Si vous migrez, par exemple, de MongoDB vers CouchDB (ou vice versa), vous devez faire plus que simplement migrer des données. Vous devez également naviguer entre les différences d’accès aux données et les métaphores programmatiques. En d’autres termes, vous devez réécrire les functions de votre software qui accèdent à la foundation de données.
Compétences NoSQL
Un autre inconvénient de NoSQL est le manque relatif d’expertise. Là où le marché des talents SQL conventionnels est assez vaste, le marché des compétences NoSQL est naissant.
Pour référence, Certainly.com rapporte qu’à partir de 2022, le quantity d’offres d’emploi pour les bases de données SQL conventionnelles – MySQL, Microsoft SQL Server, Oracle Databases, and so forth. – reste supérieur au quantity d’emplois pour MongoDB, Couchbase et Cassandra. La demande d’expertise NoSQL reste une fraction du marché des compétences SQL.
Fusionner SQL et NoSQL
Nous pouvons nous attendre à ce que certaines des différences entre les systèmes SQL et NoSQL disparaissent avec le temps. Déjà, de nombreuses bases de données SQL acceptent désormais les documents JSON comme form de données natif et peuvent effectuer des requêtes sur ces données. Certains ont même des moyens natifs d’imposer des contraintes aux données JSON, afin qu’elles soient traitées avec les mêmes rigueurs que les données conventionnelles en ligne et en colonne.
D’un autre côté, les bases de données NoSQL ajoutent non seulement des langages de requête de type SQL, mais également d’autres fonctionnalités des bases de données SQL traditionnelles, telles que les propriétés ACID de MongoDB.
Une voie probable est que les futures générations de bases de données, ainsi que les futures variations des systèmes de bases de données actuels, chevaucheront les paradigmes et offriront à la fois des fonctionnalités SQL et NoSQL, contribuant à rendre le monde des bases de données moins fragmenté. Par exemple, Azure Cosmos DB de Microsoft utilise un ensemble de primitives sous le capot pour reproduire de manière interchangeable les comportements des deux varieties de systèmes. Google Cloud Spanner mix SQL et une cohérence forte avec l’évolutivité horizontale des systèmes NoSQL.
Pourtant, les systèmes SQL pur et NoSQL pur auront leur place pendant de nombreuses années. Optez pour NoSQL dans les scénarios où la flexibilité de conception, l’évolutivité horizontale et la haute disponibilité sont des considérations in addition importantes qu’une forte cohérence de lecture et d’autres protections communes aux bases de données SQL. Pour de nombreuses applications, ces garanties peuvent valoir la peine d’être échangées contre ce qu’offre NoSQL.
Copyright © 2022 IDG Communications, Inc.