June 9, 2023

Branches Tech

Engagé pour la qualité technologique

What is NoSQL? Databases for a cloud-scale future

11 min read

L’un des choix les as well as fondamentaux à faire lors du développement d’une application est d’utiliser une foundation 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 assessments 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 purposes métier. Mais ils sont également soumis à des constraints, telles qu’un schéma rigide, qui les rendent moins adaptés à d’autres forms d’applications.

Les bases de données NoSQL sont apparues en réponse à ces constraints. 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 portion des développeurs. Beaucoup ont été développés par des entreprises comme Google, Amazon, Yahoo et Fb qui cherchaient de meilleures façons de stocker du contenu ou de traiter des données pour des web-sites Net 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 promises 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 application – ils sont complémentaires dans l’ensemble. Chacun est adapté à différents cas d’utilisation. La décision n’est pas tant une query 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 Database 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 foundation 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 Be a part of 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 forms courants de systèmes NoSQL :

  1. Bases de données documentaires (par exemple MongoDB). Les données insérées sont stockées sous la forme de buildings JSON sans schéma, ou “files”, 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 doc JSON contiendra.
  2. 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 base de données au moyen de clés, telles que des chaînes.
  3. 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.
  4. 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, motor vehicle 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 sources et vous souhaitez conserver les données dans leur forme d’origine pour une flexibilité maximale.
  • Vous souhaitez stocker des données dans une construction 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 plus 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 foundation 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 using HTTP, pour créer ou récupérer des paperwork de sa base de données. MongoDB envoie des objets JSON via un protocole binaire, by means of une interface de ligne de commande ou une bibliothèque de langage.

Certains produits NoSQL boîte utiliser une syntaxe de sort 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 sort SQL, le Cassandra Query Language ou CQL. Une partie de la syntaxe CQL est directement problem du playbook SQL, comme le Choose ou INSERT mots clés. Mais il n’existe aucun moyen natif d’effectuer une Join 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 client. Les requêtes sont rapides car or truck elles peuvent être renvoyées à partir du nœud le furthermore proche ou le plus 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 uncomplicated 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 method sans partage, comme MySQLbien que cela implique généralement de sacrifier la cohérence au sein du cluster au gain des performances.

Restrictions NoSQL

Si NoSQL offre tant de liberté et de flexibilité, pourquoi ne pas abandonner complètement SQL ? La réponse basic est que de nombreuses apps nécessitent toujours les varieties de contraintes, de cohérence et de defense que les bases de données SQL fournissent. Dans ces cas, certains « avantages » de NoSQL peuvent se transformer en inconvénients. D’autres constraints 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 foundation de données vers le développeur de l’application. Par exemple, le développeur peut imposer une framework by means 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 demand.

Certaines methods 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 styles 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 get-togethers 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 long lasting (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 furthermore 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 events de votre software qui accèdent à la base 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 important, le marché des compétences NoSQL est naissant.

Pour référence, Without a doubt.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 on. – reste supérieur au volume 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 paperwork JSON comme sort 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, de sorte 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 form 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 versions 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 styles de systèmes. Google Cloud Spanner merge 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 spot 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 as well as importantes qu’une forte cohérence de lecture et d’autres protections communes aux bases de données SQL. Pour de nombreuses apps, ces garanties peuvent valoir la peine d’être échangées contre ce qu’offre NoSQL.

Copyright © 2022 IDG Communications, Inc.