NoSQL - NoSQL
Un NoSQL ( en référence à l' origine « non SQL » ou « non-relationnel ») base de données fournit un mécanisme pour le stockage et la récupération des données qui sont modélisés dans des moyens autres que les relations tabulaires utilisés dans les bases de données relationnelles . De telles bases de données existent depuis la fin des années 1960, mais le nom « NoSQL » n'a été inventé qu'au début du 21e siècle, déclenché par les besoins des entreprises du Web 2.0 . Les bases de données NoSQL sont de plus en plus utilisées dans le Big Data et les applications Web en temps réel. Les systèmes NoSQL sont également parfois appelés « pas seulement SQL » pour souligner qu'ils peuvent prendre en charge des langages de requête de type SQL ou s'asseoir à côté de bases de données SQL dans des architectures polyglottes persistantes .
Les motivations de cette approche incluent la simplicité de conception , une mise à l' échelle "horizontale" plus simple vers des clusters de machines (ce qui est un problème pour les bases de données relationnelles), un contrôle plus fin de la disponibilité et la limitation de la non -concordance d'impédance objet-relationnelle . Les structures de données utilisées par les bases de données NoSQL (par exemple , paire clé-valeur , colonne large , graphique ou document ) sont différentes de celles utilisées par défaut dans les bases de données relationnelles, rendant certaines opérations plus rapides dans NoSQL. L'adéquation particulière d'une base de données NoSQL donnée dépend du problème qu'elle doit résoudre. Parfois, les structures de données utilisées par les bases de données NoSQL sont également considérées comme "plus flexibles" que les tables de bases de données relationnelles.
De nombreux magasins NoSQL compromettent la cohérence (au sens du théorème CAP ) en faveur de la disponibilité, de la tolérance de partition et de la vitesse. Les obstacles à une plus grande adoption des magasins NoSQL incluent l'utilisation de langages de requête de bas niveau (au lieu de SQL, par exemple), le manque de capacité à effectuer des jointures ad hoc entre les tables, le manque d'interfaces standardisées et d'énormes investissements antérieurs dans les bases de données relationnelles existantes . La plupart des magasins NoSQL ne disposent pas de véritables transactions ACID , bien que quelques bases de données les aient placées au cœur de leurs conceptions.
Au lieu de cela, la plupart des bases de données NoSQL offrent un concept de « cohérence éventuelle », dans lequel les modifications de la base de données sont propagées à tous les nœuds « en fin de compte » (généralement en quelques millisecondes), de sorte que les requêtes de données peuvent ne pas renvoyer de données mises à jour immédiatement ou entraîner la lecture de données qui sont pas précis, un problème connu sous le nom de lectures périmées. De plus, certains systèmes NoSQL peuvent présenter des écritures perdues et d'autres formes de perte de données . Certains systèmes NoSQL proposent des concepts tels que la journalisation en écriture anticipée pour éviter la perte de données. Pour le traitement des transactions distribuées sur plusieurs bases de données, la cohérence des données est un défi encore plus grand qui est difficile pour les bases de données NoSQL et relationnelles. Les bases de données relationnelles "ne permettent pas aux contraintes d'intégrité référentielle de s'étendre sur les bases de données". Peu de systèmes maintiennent à la fois les transactions ACID et les normes X/Open XA pour le traitement des transactions distribuées. Les bases de données relationnelles interactives partagent des techniques d'analyse de relais conformationnelles comme une caractéristique commune. Les limitations au sein de l'environnement d'interface sont surmontées à l'aide de protocoles de virtualisation sémantique, de sorte que les services NoSQL sont accessibles à la plupart des systèmes d'exploitation.
Histoire
Le terme NoSQL a été utilisé par Carlo Strozzi en 1998 pour nommer sa base de données relationnelle open source Strozzi NoSQL légère qui n'exposait pas l' interface SQL ( Structured Query Language ) standard, mais était toujours relationnelle. Son SGBDR NoSQL est distinct du concept général des bases de données NoSQL vers 2009. Strozzi suggère que, parce que le mouvement NoSQL actuel « s'écarte complètement du modèle relationnel, il aurait donc dû être appelé de manière plus appropriée « NoREL » », se référant à « 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 open-source distribuées et non relationnelles ». Le nom a tenté d'étiqueter l'émergence d'un nombre croissant de magasins de données non relationnelles et distribuées, y compris des clones open source de Bigtable / MapReduce de Google et 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 de base par modèle de données, avec des exemples :
- Colonne large : Azure Cosmos DB , Accumulo , Cassandra , ScyllaDB , HBase .
- Document : Azure Cosmos DB , Apache CouchDB , ArangoDB , BaseX , Clusterpoint , Couchbase , eXist-db , IBM Domino , MarkLogic , MongoDB , OrientDB , Qizx , RethinkDB
- Clé–valeur : Azure Cosmos DB , Aerospike , Apache Ignite , ArangoDB , Berkeley DB , Couchbase , Dynamo , FoundationDB , InfinityDB , MemcacheDB , MUMPS , Oracle NoSQL Database , OrientDB , Redis , Riak , SciDB , SDBM/Flat File dbm , ZooKeper
- Graphique : Azure Cosmos DB , AllegroGraph , ArangoDB , InfiniteGraph , Apache Giraph , MarkLogic , Neo4J , AgensGraph , OrientDB , Virtuoso
Une classification plus détaillée est la suivante, basée sur celle de Stephen Yen :
| Taper | Exemples notables de ce type |
|---|---|
| Cache clé-valeur | Apache Ignite , Couchbase , Coherence , eXtreme Scale , Hazelcast , Infinispan , Memcached , Redis , Velocity |
| Magasin clé-valeur | Azure Cosmos DB , ArangoDB , Aerospike , Couchbase , Redis |
| Magasin clé-valeur (à terme cohérent) | Azure Cosmos DB , Base de données Oracle NoSQL , Dynamo , Riak , Voldemort |
| Magasin clé-valeur (commandé) | FoundationDB , InfinityDB , LMDB , MemcacheDB |
| Magasin de tuples | Rivière Apache , GigaSpaces |
| Base de données d'objets | Objectivité/DB , Prest , ZopeDB |
| Magasin de documents | Azure Cosmos DB , ArangoDB , BaseX , Clusterpoint , Couchbase , CouchDB , DocumentDB , eXist-db , IBM Domino , MarkLogic , MongoDB , Qizx , RethinkDB , Elasticsearch |
| Magasin à colonnes larges | Azure Cosmos DB , Amazon DynamoDB , Bigtable , Cassandra , Google Cloud Datastore , HBase , Hypertable , ScyllaDB |
| Base de données multi-modèles native | ArangoDB , Azure Cosmos DB , OrientDB , MarkLogic |
Les bases de données de corrélation sont indépendantes du modèle et, au lieu d'un stockage basé sur des lignes ou des colonnes, utilisez un stockage basé sur des valeurs.
Magasin clé-valeur
Les magasins clé-valeur (KV) utilisent le tableau associatif (également appelé carte ou dictionnaire) comme modèle de données fondamental. Dans ce modèle, les données sont représentées sous la forme d'une collection de paires clé-valeur, de sorte que chaque clé possible apparaisse au plus une fois dans la collection.
Le modèle clé-valeur est l'un des modèles de données non triviaux les plus simples, et des modèles de données plus riches sont souvent mis en œuvre comme une extension de celui-ci. Le modèle clé-valeur peut être étendu à un modèle ordonné discrètement qui maintient les clés dans l' ordre lexicographique . Cette extension est puissante en termes de calcul, en ce sens qu'elle peut récupérer efficacement des plages de clés sélectives .
Les magasins de valeurs-clés peuvent utiliser des modèles de cohérence allant de la cohérence à terme à la sérialisation . Certaines bases de données prennent en charge l'ordre des clés. Il existe diverses implémentations matérielles, et certains utilisateurs stockent les données dans la mémoire (RAM), tandis que d'autres sur des disques à semi-conducteurs (SSD) ou des disques rotatifs (aka disque dur (HDD)).
Magasin de documents
Le concept central d'une banque de documents est celui de "document". Bien que les détails de cette définition diffèrent entre les bases de données orientées document, elles supposent toutes que les documents encapsulent et codent des données (ou des informations) dans certains formats ou encodages standard. Les codages utilisés incluent XML, YAML et JSON et des formes binaires comme BSON . Les documents sont adressés dans la base de données via une clé unique qui représente ce document. Une autre caractéristique déterminante d'une base de données orientée document est une API ou un langage de requête permettant de récupérer des documents en fonction de leur contenu.
Différentes implémentations offrent différentes manières d'organiser et/ou de regrouper les documents :
- Collections
- Mots clés
- Métadonnées non visibles
- Hiérarchies de répertoires
Par rapport aux bases de données relationnelles, les collections pourraient être considérées comme analogues à des tableaux et des documents analogues à des enregistrements. Mais ils sont différents : chaque enregistrement d'une table a la même séquence de champs, tandis que les documents d'une collection peuvent avoir des champs complètement différents.
Graphique
Les bases de données de graphes sont conçues pour des données dont les relations sont bien représentées sous la forme d'un graphe composé d'éléments connectés par un nombre fini de relations. Des exemples de données incluent les relations sociales, les liaisons de transport public, les cartes routières, les topologies de réseau, etc.
- Bases de données de graphes et leur langage de requête
Base de données d'objets
- db4o
- Gemme/S
- InterSystems Cache
- JADE
- Base de données objet++
- BD d'objets
- Objectivité/DB
- Magasin d'objets
- ODABA
- Prest
- Royaume
- Virtuose OpenLink
- Base de données d'objets Versant
- ZODB
Tabulaire
Magasin de tuples
- Rivière Apache
- GigaSpaces
- Tarantool
- Espaces actifs TIBCO
- Virtuose OpenLink
Base de données triple/quad store (RDF)
- AllegroGraph
- Apache JENA (C'est un framework, pas une base de données)
- MarkLogic
- Ontotext-OWLIM
- Base de données Oracle NoSQL
- Sens du Profium
- Serveur Virtuose Universel
Hébergé
- Base de données Azure Cosmos
- Amazon DynamoDB
- Amazon DocumentDB
- Amazon SimpleDB
- Base de données Clusterpoint
- Couche de données Cloudant (CouchDB)
- Base libre
- Banque de données Google Cloud
- Services de stockage Microsoft Azure
- Virtuose OpenLink
- Atlas MongoDB
Bases de données multivaleurs
- Base de données de sélection D3
- Moteur de stockage extensible (ESE/NT)
- InfinityDB
- InterSystems Cache
- Base de données de sélection jBASE
- Logiciel de fusée mvBase
- Logiciel mvEnterprise Rocket
- Northgate Information Solutions Reality, la base de données Pick/MV originale
- OpenQM
- OpenInsight (Windows) et Advanced Revelation (DOS) de Revelation Software
- Fusée UniData U2
- Univers Rocket U2
Base de données multimodèle
- Base de données Azure Cosmos
- Apache Ignite
- ArangoDB
- Base de canapé
- FondationDB
- MarkLogic
- OrientDB
- Base de données Oracle
Performance
Les performances des bases de données NoSQL sont généralement évaluées à l'aide de la métrique de débit , qui est mesurée en opérations/seconde. L'évaluation des performances doit prêter attention aux bons repères tels que les configurations de production, les paramètres des bases de données, le volume de données prévu et les charges de travail simultanées des utilisateurs.
Ben Scofield a évalué différentes catégories de bases de données NoSQL comme suit :
| Modèle de données | Performance | Évolutivité | La flexibilité | Complexité | Fonctionnalité |
|---|---|---|---|---|---|
| Magasin clé-valeur | haute | haute | haute | rien | variable (aucune) |
| Magasin à colonnes | haute | haute | modérer | meugler | minimal |
| Magasin orienté document | haute | variable (élevé) | haute | meugler | variable (faible) |
| Base de données graphique | variable | variable | haute | haute | la théorie des graphes |
| Base de données relationnelle | variable | variable | meugler | modérer | algè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
Étant donné que la plupart des bases de données NoSQL n'ont pas la capacité de joindre les requêtes, le schéma de la base de données 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 le tableau Prise en charge des jointures et 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 avec une seule requête, il est courant de faire 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 des requêtes supplémentaires peut donc être acceptable. Si un nombre excessif de requêtes était 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 stocker uniquement des clés étrangères, il est courant de stocker des valeurs étrangères réelles avec les données du modèle. Par exemple, chaque commentaire de blog peut inclure le nom d'utilisateur en plus d'un identifiant d'utilisateur, offrant ainsi un accès facile au nom d'utilisateur sans nécessiter une autre recherche. Cependant, lorsqu'un nom d'utilisateur change, il devra désormais être modifié à de nombreux endroits dans la base de données. Ainsi, cette approche fonctionne mieux lorsque les lectures sont beaucoup plus courantes que les écritures.
Données d'imbrication
Avec les bases de données de documents comme MongoDB, il est courant de mettre plus de données dans un plus petit nombre de collections. Par exemple, dans une application de blog, on peut choisir de stocker les commentaires dans le document du billet de blog de sorte qu'avec une seule récupération, on obtienne tous les commentaires. Ainsi, dans cette approche, un seul document contient toutes les données dont vous avez besoin pour une tâche spécifique.
ACID et rejoindre le support
Une base de données est marquée comme prenant en charge les propriétés ACID (Atomicité, Cohérence, Isolation, Durabilité) ou les opérations de jointure si la documentation de la base de données fait cette affirmation. Cependant, cela ne signifie pas nécessairement que la capacité est entièrement prise en charge d'une manière similaire à la plupart des bases de données SQL.
| Base de données | ACIDE | Jointure |
|---|---|---|
| Aérospike | Oui | Non |
| Apache Ignite | Oui | Oui |
| ArangoDB | Oui | Oui |
| Base de canapé | Oui | Oui |
| CouchDB | Oui | Oui |
| DB2 | Oui | Oui |
| InfinityDB | Oui | Non |
| LMDB | Oui | Non |
| MarkLogic | Oui | Oui |
| MongoDB | Oui | Oui |
| OrientDB | Oui | Oui |
Voir également
- théorème CAP
- Comparaison des systèmes de gestion de base de données objet
- Comparatif des logiciels de stockage structuré
- Base de données de corrélation
- C++
- Évolutivité de la base de données
- Cache distribué
- Recherche à facettes
- Base de données MultiValue
- Base de données multi-modèles
- Triple magasin
- Bases de données indépendantes du schéma
Les références
Lectures complémentaires
- Sadalage, Pramod ; Fowler, Martin (2012). NoSQL distillé : un bref guide du monde émergent de la persistance polyglotte . Addison-Wesley. ISBN 978-0-321-82662-6.
- McCreary, Dan ; Kelly, Anne (2013). Comprendre NoSQL : un guide pour les gestionnaires et le reste d'entre nous . ISBN 9781617291074.
- Wiese, Léna (2015). Gestion avancée des données pour les bases de données SQL, NoSQL, cloud et distribuées . De Gruyter/Oldenbourg. ISBN 978-3-11-044140-6.
- Strauch, Christof (2012). "Bases de données NoSQL" (PDF) .
-
Moniruzzaman, AB; Hossain, SA (2013). "Base de données NoSQL : nouvelle ère des bases de données pour l'analyse des mégadonnées - Classification, caractéristiques et comparaison". arXiv : 1307.0191 . Bibcode : 2013arXiv1307.0191M . Citer le journal nécessite
|journal=( aide ) -
Orend, Kai (2013). « Analyse et classification des bases de données NoSQL et évaluation de leur capacité à remplacer une couche de persistance relationnelle objet ». CiteSeerX 10.1.1.184.483 . Citer le journal nécessite
|journal=( aide ) - Krishnan, Ganesh ; Kulkarni, Sarang ; Dadbhawala, Dharmesh Kirit. "Méthode et système de partage, de consolidation et de reporting d'informations versionnées" .
Liens externes
- Strauch, Christophe. "Livre blanc NoSQL" (PDF) . Stuttgart : Hochschule der Medien.
- Edlich, Stéphane. "Liste des bases de données NoSQL" .
- Neubauer, Peter (2010). "Bases de données graphiques, NOSQL et Neo4j" .
- Bushik, Sergueï (2012). "Une comparaison indépendante des fournisseurs de bases de données NoSQL : Cassandra, HBase, MongoDB, Riak" . NetworkWorld.
- Zicari, Roberto V. (2014). "NoSQL Data Stores – Articles, Papers, Presentations" . odbms.org .