Article de reference

NoSQL

NoSQL (un terme familier devenu officiel, signifiant « pas seulement SQL » ou « non relationnel ») désigne un type de base de données qui stocke et récupère les données différem...

SQL » ou « non relationnel ») désigne un type de base de données qui stocke et récupère les données différemment de la structure tabulaire traditionnelle des bases de données relationnelles . Contrairement à ces dernières, qui organisent les données en lignes et en colonnes comme une feuille de calcul, les bases de données NoSQL utilisent une structure de données unique – telle que des paires clé-valeur , des colonnes larges , des graphes ou des documents – pour contenir les informations. Cette conception non relationnelle, ne nécessitant pas de schéma fixe , s’adapte facilement à la gestion de grands ensembles de données, souvent non structurés . Les systèmes NoSQL sont parfois appelés « pas seulement SQL » car ils peuvent prendre en charge des langages de requêtes similaires à SQL ou fonctionner en parallèle avec des bases de données SQL dans des configurations polyglottes et persistantes , où plusieurs types de bases de données sont combinés. Les bases de données non relationnelles remontent à la fin des années 1960, mais le terme « NoSQL » a émergé au début des années 2000, sous l'impulsion des besoins des entreprises du Web 2.0 comme les plateformes de médias sociaux.

Les bases de données NoSQL sont populaires dans le domaine du Big Data et des applications web en temps réel en raison de leur conception simple, de leur capacité à évoluer sur des clusters de machines (appelée mise à l'échelle horizontale ) et du contrôle précis qu'elles offrent sur la disponibilité des données . Ces structures peuvent accélérer certaines tâches et sont souvent considérées comme plus adaptables que les tables de bases de données classiques. Cependant, de nombreux systèmes NoSQL privilégient la vitesse et la disponibilité à la cohérence stricte (conformément au théorème CAP ), en utilisant la cohérence éventuelle : les mises à jour finissent par atteindre tous les nœuds, généralement en quelques millisecondes, mais peuvent entraîner de brefs délais d'accès aux données les plus récentes, appelés lectures obsolètes . Bien que la plupart ne prennent pas entièrement en charge les transactions ACID , certaines, comme MongoDB , les intègrent comme fonctionnalité clé.

Les obstacles à une adoption plus large des bases de données NoSQL incluent leur utilisation de langages de requêtes de bas niveau au lieu de SQL, l'impossibilité d'effectuer des jointures ad hoc entre tables, le manque d'interfaces standardisées et les investissements importants déjà réalisés dans les bases de données relationnelles. Certains systèmes NoSQL risquent de perdre des données suite à des erreurs d'écriture ou autres, bien que des fonctionnalités comme la journalisation anticipée des modifications (WAL ), une méthode permettant d'enregistrer les modifications avant leur application, puissent contribuer à prévenir ce risque. Pour le traitement transactionnel distribué sur plusieurs bases de données, le maintien de la cohérence des données représente un défi tant pour les systèmes NoSQL que relationnels, car les bases de données relationnelles ne peuvent pas imposer de règles liant des bases de données distinctes, et peu de systèmes prennent en charge à la fois les transactions ACID et les normes X/Open XA pour la gestion des mises à jour distribuées. Les limitations de l'environnement d'interface sont surmontées grâce aux protocoles de virtualisation sémantique, ce qui permet aux services NoSQL d'être accessibles à la plupart des systèmes d'exploitation .

Histoire

Lecteur Last.fm
Lecteur Last.fm

Le terme NoSQL a été utilisé par Carlo Strozzi en 1998 pour désigner sa base de données relationnelle open source légère, Strozzi NoSQL, qui n'exposait pas l'interface standard du langage SQL (Structured Query Language ), mais restait relationnelle. Son SGBDR NoSQL se distingue du concept général de bases de données NoSQL apparu vers 2009. Strozzi suggère que, puisque le mouvement NoSQL actuel « s'éloigne complètement du modèle relationnel, il aurait donc été plus justement appelé "NoREL" », signifiant « non relationnel ».

Johan Oskarsson, alors développeur chez Last.fm , a réintroduit le terme NoSQL début 2009 lorsqu'il a organisé un événement pour discuter des « bases de données distribuées open source non relationnelles ». Le nom tentait d'étiqueter l'émergence d'un nombre croissant de magasins de données distribués non relationnels, y compris les clones open source de Bigtable / MapReduce de Google et de DynamoDB d'Amazon .

Types et exemples

Il existe différentes manières de classer les bases de données NoSQL, avec différentes catégories et sous-catégories, dont certaines se chevauchent. Ce qui suit est une classification non exhaustive par modèle de données, avec des exemples :

TaperExemples notables de ce type
cache clé-valeurApache Ignite , Couchbase , Coherence , eXtreme Scale , Hazelcast , Infinispan , Memcached , Redis , Velocity
magasin clé-valeurAzure Cosmos DB , ArangoDB , Amazon DynamoDB , Aerospike , Couchbase , ScyllaDB
Magasin clé-valeur (à cohérence éventuelle)Azure Cosmos DB , Oracle NoSQL Database , Riak , Voldemort
Magasin clé-valeur (ordonné)FoundationDB , InfinityDB , LMDB , MemcacheDB
Magasin TupleApache River , GigaSpaces , Tarantool , TIBCO ActiveSpaces, OpenLink Virtuoso
TriplestoreAllegroGraph , MarkLogic , Ontotext-OWLIM , base de données Oracle NoSQL , Profium Sense, serveur universel Virtuoso
Base de données objetObjectivity/DB , Perst , ZODB , db4o , GemStone/S , InterSystems Caché , JADE , ObjectDatabase++ , ObjectDB , ObjectStore , ODABA , Realm , OpenLink Virtuoso , Versant Object Database , API de base de données indexée
Magasin de documentsAzure Cosmos DB , ArangoDB , BaseX , Clusterpoint , Couchbase , CouchDB , DocumentDB , eXist-db , Google Cloud Firestore , IBM Domino , MarkLogic , MongoDB , RavenDB , Qizx, RethinkDB , Elasticsearch , OrientDB
Magasin à larges colonnesAzure Cosmos DB , Amazon DynamoDB , Bigtable , Cassandra , Google Cloud Datastore , HBase , Hypertable , ScyllaDB
Base de données multi-modèles nativeArangoDB , Azure Cosmos DB , OrientDB , MarkLogic , Apache Ignite , Couchbase , FoundationDB , Oracle Database , AgensGraph
Base de données graphiquesAzure Cosmos DB , AllegroGraph , ArangoDB , Apache Giraph , GUN (Graph Universe Node) , InfiniteGraph , MarkLogic , Neo4J , OrientDB , Virtuoso
Base de données multivaluéeBase de données D3 Pick , moteur de stockage extensible (ESE/NT), InfinityDB , InterSystems Caché , base de données jBASE Pick , logiciel Rocket mvBase , logiciel Rocket mvEnterprise , Northgate Information Solutions Reality (base de données Pick/MV d'origine), OpenQM, OpenInsight (Windows) et Advanced Revelation (DOS) de Revelation Software, UniData Rocket U2 , UniVerse Rocket U2

magasin clé-valeur

tableau associatif (également appelé dictionnaire ou map) comme modèle de données fondamental. Dans ce modèle, les données sont représentées sous forme d'une collection de paires clé-valeur, chaque clé possible n'apparaissant qu'une seule fois dans la collection.

Le modèle clé-valeur est l'un des modèles de données non triviaux les plus simples, et les modèles de données plus riches sont souvent implémentés comme une extension de celui-ci. Le modèle clé-valeur peut être étendu à un modèle discrètement ordonné qui conserve les clés dans l'ordre lexicographique . Cette extension est puissante sur le plan du calcul, car elle permet de récupérer efficacement des plages de clés spécifiques .

Les bases de données clé-valeur peuvent utiliser des modèles de cohérence allant de la cohérence éventuelle à la sérialisabilité . Certaines bases de données prennent en charge l'ordonnancement des clés. Il existe diverses implémentations matérielles ; certains utilisateurs stockent leurs données en mémoire vive (RAM), tandis que d'autres les stockent sur des disques SSD ou des disques durs (HDD).

Magasin de documents

XML , YAML et JSON , ainsi que des formats binaires comme BSON . Dans la base de données, les documents sont référencés par une clé unique qui les identifie. Une autre caractéristique essentielle d'une base de données orientée documents est la présence d'une API (interface de programmation) ou d'un langage de requête permettant de récupérer les documents en fonction de leur contenu.

Les différentes implémentations proposent différentes manières d'organiser et/ou de regrouper les documents :

  • Collections
  • Étiquettes
  • Métadonnées non visibles
  • hiérarchies de répertoires

Par rapport aux bases de données relationnelles, les collections peuvent être considérées comme analogues aux tables et les documents comme analogues aux enregistrements. Cependant, elles diffèrent : chaque enregistrement d’une table possède la même séquence de champs, tandis que les documents d’une collection peuvent avoir des champs totalement différents.

Graphique

graphe composé d'éléments reliés par un nombre fini de relations. Parmi ces données, on peut citer les relations sociales , les réseaux de transport en commun, les cartes routières, les topologies de réseaux, etc.

Bases de données graphiques et leur langage de requête
NomLangue(s)Notes
AgensGraphZéroBase de données graphiques multi-modèles
AllegroGraphSPARQLMagasin de triplets RDF
Amazon NeptuneGremlin , SPARQLBase de données graphiques
ArangoDBAQL, JavaScript , GraphQLSGBD multi-modèle : document , base de données graphe et magasin clé-valeur
Azure Cosmos DBDiablotinBase de données graphiques
DEX/SparkseeC++ , Java , C# , PythonBase de données graphiques
FlockDBScalaBase de données graphiques
GUN (nœud de l'univers graphique)JavaScriptBase de données graphiques
IBM Db2SPARQLAjout du magasin de triplets RDF dans DB2 10
Graphique infiniJavaBase de données graphiques
JanusGraphJavaBase de données graphiques
MarkLogicJava , JavaScript , SPARQL , XQueryBase de données de documents multi-modèles et entrepôt de triplets RDF
Neo4jZéroBase de données graphiques
Virtuose OpenLinkC++ , C# , Java , SPARQLHybride entre intergiciel et moteur de base de données
OracleSPARQL 1.1Ajout du triple stockage RDF dans la version 11g
OrientDBJava , SQLBase de données de documents et de graphes multi-modèles
HIBOUJava , SPARQL 1.1Magasin de triplets RDF
Sens ProfiumJava , SPARQLMagasin de triplets RDF
Graphique RedisZéroBase de données graphiques
Sqrrl EnterpriseJavaBase de données graphiques
TerminusDBJavaScript, Python , datalogMagasin de triplets RDF et magasin de documents open source

Performance

Les performances des bases de données NoSQL sont généralement évaluées à l'aide du débit , mesuré en opérations par seconde. Cette évaluation doit prendre en compte des critères de référence pertinents , tels que les configurations de production, les paramètres des bases de données, le volume de données prévu et la charge de travail simultanée des utilisateurs .

Ben Scofield a classé différentes catégories de bases de données NoSQL comme suit :

Modèle de donnéesPerformanceÉvolutivitéFlexibilitéComplexitéIntégrité des donnéesFonctionnalité
magasin clé-valeurhauthauthautaucunfaiblevariable (aucune)
Magasin organisé en colonneshauthautmodéréfaiblefaibleminimal
Magasin axé sur les documentshautvariable (élevé)hautfaiblefaiblevariable (faible)
Base de données graphiquesvariablevariablehauthautfaible à moyenthéorie des graphes
Base de données relationnellevariablevariablefaiblemodéréhautalgèbre relationnelle

Les comparaisons de performances et d'évolutivité sont le plus souvent effectuées à l'aide du benchmark YCSB .

Gestion des données relationnelles

La plupart des bases de données NoSQL ne prenant pas en charge les jointures dans les requêtes, leur schéma doit généralement être conçu différemment. Il existe trois techniques principales pour gérer les données relationnelles dans une base de données NoSQL. (Voir jointure de tables et prise en charge ACID pour les bases de données NoSQL qui prennent en charge les jointures.)

Requêtes multiples

Au lieu de récupérer toutes les données en une seule requête, il est courant d'effectuer plusieurs requêtes pour obtenir les données souhaitées. Les requêtes NoSQL sont souvent plus rapides que les requêtes SQL traditionnelles ; le coût de requêtes supplémentaires peut donc être acceptable. Si un nombre excessif de requêtes s'avère nécessaire, l'une des deux autres approches est plus appropriée.

Mise en cache, réplication et données non normalisées

Au lieu de se limiter au stockage des clés étrangères, il est courant de stocker les valeurs étrangères elles-mêmes avec les données du modèle. Par exemple, chaque commentaire de blog peut inclure le nom d'utilisateur en plus de son identifiant, permettant ainsi d'accéder facilement au nom d'utilisateur sans avoir à effectuer une nouvelle recherche. Cependant, lorsqu'un nom d'utilisateur change, il faudra le modifier à de nombreux endroits dans la base de données. Cette approche est donc plus adaptée lorsque les lectures sont beaucoup plus fréquentes que les écritures.

Données d'imbrication

Avec les bases de données documentaires comme MongoDB, il est courant de regrouper davantage de données dans un nombre réduit de collections. Par exemple, dans une application de blog, on peut choisir de stocker les commentaires au sein du document « article », afin d'obtenir tous les commentaires en une seule requête. Ainsi, dans cette approche, un seul document contient toutes les données nécessaires à une tâche spécifique.

ACID et rejoignez le soutien

Une base de données est considérée comme prenant en charge les propriétés ACID (atomicité, cohérence, isolation, durabilité) ou les opérations de jointure si sa documentation l'indique. Toutefois, cela ne signifie pas nécessairement que cette fonctionnalité est pleinement prise en charge, comme c'est le cas pour la plupart des bases de données SQL.

Base de donnéesACIDERejoint
AérospikeApache IgniteArangoDBAmazon DynamoDBCouchbaseCouchDBIBM Db2InfinityDBLMDBMarkLogicMongoDBOrientDBDynamoDB , MongoDB , Cassandra , Couchbase , HBase et Redis, présentent des comportements variés lors de l'interrogation de champs non indexés. Nombre d'entre elles effectuent une analyse complète de la table ou de la collection pour ces requêtes, en appliquant des opérations de filtrage après la récupération des données. Cependant, les bases de données NoSQL modernes intègrent souvent des fonctionnalités avancées pour optimiser les performances des requêtes. Par exemple, MongoDB prend en charge les index composés et les stratégies d'optimisation des requêtes, Cassandra propose des index secondaires et des vues matérialisées, et Redis utilise des mécanismes d'indexation personnalisés adaptés à des cas d'utilisation spécifiques. Des systèmes comme Elasticsearch utilisent des index inversés pour des recherches textuelles efficaces, mais peuvent néanmoins nécessiter une analyse complète des champs non indexés. Ce comportement reflète la priorité accordée par de nombreux systèmes NoSQL à la scalabilité et à l'efficacité des opérations sur les clés plutôt qu'à l'optimisation des requêtes sur des champs arbitraires. Par conséquent, bien que ces bases de données excellent dans les opérations CRUD de base et les recherches basées sur des clés, leur aptitude aux requêtes complexes impliquant des jointures ou un filtrage non indexé varie en fonction du type de base de données (document, clé-valeur, colonne large ou graphe) et de l'implémentation spécifique.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index