1.1 Comment fonctionne une base de données NoSQL

Les bases de données NoSQL utilisent une variété de modèles de données pour accéder aux données et les manipuler. Ces types de bases de données sont optimisés pour les applications gourmandes en données qui nécessitent une faible latence et des modèles de données flexibles. Tout cela est réalisé en assouplissant les exigences strictes de cohérence des données qui sont typiques pour d'autres types de bases de données.

Prenons un exemple de modélisation de schéma pour une simple base de données de livres.

  • Dans une base de données relationnelle, une entrée de livre est souvent divisée en plusieurs parties (ou "normalisée") et stockée dans des tables séparées dont les relations sont définies par des contraintes de clé primaire et étrangère. Dans cet exemple, la table Livres contient les colonnes ISBN , Titre du livre et « ISBN ».et« Auteur »la table Auteur-ISBN, etNom de l'auteuretID auteurles colonnesAuteurstabled'éditionNuméro. Le modèle relationnel est conçu pour maintenir l'intégrité référentielle entre les tables d'une base de données. Les données sont normalisées pour réduire la redondance et sont généralement optimisées pour le stockage.

  • Dans une base de données NoSQL, un enregistrement de livre est généralement stocké sous la forme d'un document JSON. Pour chaque livre ou élément, les valeurs ISBN , Titre du livre , Numéro d'édition , Nom de l'auteur et ID de l'auteur sont stockées sous forme d'attributs dans un seul document. Dans ce modèle, les données sont optimisées pour un développement intuitif et une évolutivité horizontale.

1.2 À quoi peuvent servir les bases de données NoSQL ?

Les bases de données NoSQL sont bien adaptées à de nombreuses applications modernes, telles que les applications mobiles, de jeu et Web, qui nécessitent des bases de données flexibles et évolutives avec des performances élevées et des fonctionnalités riches qui peuvent offrir une convivialité maximale.

  • Flexibilité . En règle générale, les bases de données NoSQL offrent des schémas flexibles, permettant un développement plus rapide et permettant une mise en œuvre incrémentielle. En raison de l'utilisation de modèles de données flexibles, les bases de données NoSQL sont bien adaptées aux données semi-structurées et non structurées.

  • Évolutivité . Les bases de données NoSQL sont conçues pour évoluer à l'aide de clusters matériels distribués, et non en ajoutant des serveurs coûteux et fiables. Certains fournisseurs de services cloud exécutent ces opérations en arrière-plan, fournissant un service entièrement géré.

  • Hautes performances . Les bases de données NoSQL sont optimisées pour des modèles de données et des modèles d'accès spécifiques afin d'obtenir des performances supérieures à celles des bases de données relationnelles.

  • Large fonctionnalité . Les bases de données NoSQL fournissent des API riches et des types de données spécialement conçus pour leurs modèles de données respectifs.

1.3 Types de bases de données NoSQL

Les bases de données NoSQL sont utilisées là où il n'est pas très pratique de stocker des données sous forme de tables. Par conséquent, ils sont stockés dans des formats très différents. Habituellement, il existe 6 principaux types de données de bases de données NoSQL.

BD basée sur des paires clé-valeur

Les bases de données utilisant des paires clé-valeur prennent en charge une séparabilité élevée et fournissent une mise à l'échelle horizontale sans précédent qui n'est pas réalisable avec d'autres types de bases de données. Les bons cas d'utilisation pour les bases de données de valeurs clés sont les applications de jeux, de publicité et d'IoT.

Par exemple, Amazon DynamoDB garantit un fonctionnement stable de la base de données avec un retard ne dépassant pas quelques millisecondes à n'importe quelle échelle. Ces performances robustes ont été la principale raison de la migration de Snapchat Stories vers DynamoDB, car cette fonctionnalité de Snapchat est associée à la plus grande charge d'écriture de stockage.

Document

Dans le code d'application, les données sont souvent représentées sous la forme d'un objet ou d'un document dans un format de type JSON, car il s'agit d'un modèle de données efficace et intuitif pour les développeurs. Les bases de données de documents permettent aux développeurs de stocker et d'interroger des données dans une base de données en utilisant le même modèle de document que celui qu'ils utilisent dans leur code d'application. La nature flexible, semi-structurée et hiérarchique des documents et des bases de données documentaires leur permet d'évoluer avec les besoins des applications.

Le modèle de document fonctionne bien dans les catalogues, les profils d'utilisateurs et les systèmes de gestion de contenu où chaque document est unique et change au fil du temps. Amazon DocumentDB (compatible avec MongoDB) et MongoDB sont des bases de données de documents courantes qui fournissent des API fonctionnelles et intuitives pour un développement agile.

Bases de données de graphes

Les bases de données de graphes facilitent le développement et l'exécution d'applications qui fonctionnent avec des ensembles de données complexes. Des exemples typiques d'utilisation de bases de données de graphes sont les réseaux sociaux, les services de recommandation, les systèmes de détection de fraude et les graphes de connaissances. Amazon Neptune est un service de base de données graphique entièrement géré. Neptune prend en charge le Property Graph and Resource Description Framework (RDF), offrant deux API de graphe parmi lesquelles choisir : TinkerPop et RDF/SPARQL. Les bases de données de graphes courantes incluent Neo4j et Giraph.

BD en mémoire

Souvent, les applications de jeu et de publicité utilisent des classements, un stockage de session et des analyses en temps réel. De telles capacités nécessitent une réponse en quelques microsecondes, alors qu'une forte augmentation du trafic est possible à tout moment.

Amazon MemoryDB pour Redis est un service de base de données en mémoire fiable et compatible avec Redis qui réduit la latence de lecture à quelques millisecondes et offre une durabilité sur plusieurs zones de disponibilité. MemoryDB est spécialement conçu pour des performances et une fiabilité ultra-élevées, il peut donc être utilisé comme base de données principale pour les applications modernes basées sur des microservices.

Amazon ElastiCache est un service de mise en cache en mémoire compatible Redis et Memcached entièrement géré pour servir des charges de travail à faible latence et à haut débit. Des clients comme Tinder qui ont besoin que leurs applications répondent en temps réel utilisent des systèmes de stockage en mémoire plutôt que sur disque. Un autre exemple d'entrepôt de données spécialement conçu est l'accélérateur Amazon DynamoDB (DAX). DAX permet à DynamoDB de lire les données plusieurs fois plus rapidement.

Bases de données de recherche

De nombreuses applications génèrent des journaux pour faciliter le dépannage et la résolution des problèmes par les développeurs. Amazon OpenSearch est un service spécialement conçu pour la visualisation et l'analyse en temps quasi réel des flux de données générés automatiquement en indexant, agrégeant et recherchant des journaux et des métriques semi-structurés.

De plus, Amazon OpenSearch est un service de recherche en texte intégral puissant et performant. Expedia exploite plus de 150 domaines de service Amazon OpenSearch, 30 To de données et 30 milliards de documents pour une variété de cas d'utilisation critiques, de la surveillance opérationnelle et du dépannage au suivi de la pile d'applications distribuées et à l'optimisation des coûts.

1.4 Comparaison des bases de données SQL (relationnelles) et NoSQL (non relationnelles)

NoSQL présente de nombreux avantages, vous devez donc au moins en théorie savoir que l'outil dont vous avez besoin existe déjà avant de l'écrire vous-même. Ci-dessous, je vais donner une comparaison des bases de données NoSQL et SQL :

Charges de travail adaptées

Les bases de données relationnelles sont conçues pour les applications transactionnelles et hautement cohérentes de traitement des transactions en temps réel (OLTP) et sont bien adaptées au traitement analytique en temps réel (OLAP).

Les bases de données NoSQL sont conçues pour fonctionner avec une gamme de modèles d'accès aux données, y compris des applications à faible latence. Les bases de données de recherche NoSQL sont conçues pour l'analyse de données semi-structurées.

Modèle de données

Le modèle relationnel normalise les données et les transforme en tableaux composés de lignes et de colonnes. Un schéma définit de manière rigide les tables, les lignes, les colonnes, les index, les relations entre les tables et les autres éléments de la base de données. Une telle base de données assure l'intégrité des données de référence dans les relations entre tables.

Les bases de données NoSQL fournissent une variété de modèles de données tels que des paires clé-valeur, des documents et des graphiques qui sont optimisés pour des performances et une évolutivité élevées.

Propriétés ACIDES

Les bases de données relationnelles fournissent un ensemble de propriétés ACID : atomicité, cohérence, isolation, fiabilité.

  • L'atomicité exige qu'une transaction soit exécutée dans son intégralité ou pas du tout.
  • La cohérence signifie que dès qu'une transaction est terminée, les données doivent être conformes au schéma de la base de données.
  • L'isolation nécessite que les transactions parallèles s'exécutent séparément les unes des autres.
  • La fiabilité fait référence à la capacité de récupérer le dernier état enregistré après une panne de système inattendue ou une panne de courant.

Les bases de données NoSQL offrent souvent un compromis, assouplissant les exigences rigides des propriétés ACID en faveur d'un modèle de données plus flexible qui permet une mise à l'échelle horizontale. Cela fait de NoSQL un excellent choix pour les cas d'utilisation à bande passante élevée et à faible latence qui nécessitent une mise à l'échelle horizontale au-delà d'une seule instance.

Performance

Les performances dépendent principalement du sous-système de disque. L'optimisation des requêtes, des index et de la structure des tables est souvent nécessaire pour des performances maximales.

Les performances dépendent généralement de la taille du cluster matériel sous-jacent, de la latence du réseau et de l'application appelante.

Mise à l'échelle

Les bases de données relationnelles évoluent généralement en augmentant la puissance de calcul du matériel ou en ajoutant des copies séparées pour les charges de travail de lecture.

Les bases de données NoSQL prennent généralement en charge une séparabilité élevée grâce à des modèles d'accès évolutifs basés sur une architecture distribuée. Cela améliore le débit et offre des performances constantes à une échelle presque illimitée.

API

Les requêtes d'écriture et de récupération de données sont écrites en SQL. Ces requêtes sont analysées et exécutées par une base de données relationnelle.

Les API orientées objet permettent aux développeurs d'applications d'écrire et de récupérer facilement des structures de données. À l'aide de clés de partition, les applications peuvent rechercher des paires clé-valeur, des ensembles de colonnes ou des documents semi-structurés contenant des objets en série et des attributs d'application.