NoSQL se démarque: les meilleures bases de données clé-valeur comparées

La plupart des applications ont besoin d'une certaine forme de persistance - un moyen de stocker les données en dehors de l'application à des fins de sauvegarde. Le moyen le plus simple est d'écrire des données dans le système de fichiers, mais cela peut rapidement devenir un moyen lent et difficile de résoudre le problème. Une base de données complète fournit un moyen puissant d'indexer et de récupérer des données, mais elle peut également être excessive. Parfois, tout ce dont vous avez besoin est un moyen rapide de prendre une information de forme libre, de l'associer à une étiquette, de la ranger quelque part et de la retirer en un tournemain.

Entrez le magasin clé-valeur. C'est essentiellement une base de données NoSQL, mais avec un objectif très spécifique et une conception délibérément contrainte. Son travail est de vous permettre de prendre des données (une valeur), de leur appliquer une étiquette (une clé) et de les stocker en mémoire ou dans un système de stockage optimisé pour une récupération rapide. Les applications utilisent des bases de données clé-valeur pour tout, de la mise en cache des objets au partage des données couramment utilisées entre les nœuds d'application.

De nombreuses bases de données relationnelles peuvent fonctionner comme des magasins à valeur clé, mais c'est un peu comme utiliser un semi-remorque pour faire des courses d'épicerie. Cela fonctionne, mais il est considérablement inefficace et il existe des moyens beaucoup plus légers de résoudre le problème. Un magasin clé-valeur, comme d'autres bases de données NoSQL, fournit juste assez d'infrastructure pour un stockage et une récupération de valeur simples, s'intègre plus directement aux applications qui l'utilisent et évolue de manière plus granulaire avec la charge de travail des applications.

Comparaison des fonctionnalités de base de données NoSQL clé-valeur

Cinq produits largement utilisés (dont un service cloud) méritent votre attention; ils sont explicitement facturés en tant que bases de données clé-valeur ou offrent le stockage clé-valeur en tant que fonctionnalité centrale. Leurs différences fondamentales:

  • Hazelcast et Memcached tendent vers le minimalisme et ne prennent même pas la peine de sauvegarder les données sur disque.
  • Aerospike, Cosmos DB et Redis sont plus complets, mais tournent toujours autour de la métaphore clé-valeur.

Tableau: Comparaison des produits de base de données NoSQL clé-valeur

L W M S I A O

* Par une implémentation tierce.

Clé: = Linux, = Windows, = MacOS, = Solaris, = iOS, = Android, = Autre.
  Aerospike Hazelcast IMDG Microsoft Azure Cosmos DB Memcached Redis
Plateformes LWMO Java Cloud uniquement LWMO LWMO
Version actuelle 3.14.1.1 3,9 N / A 1.5.1 4.0.1
Première version 2012 2008 2017 2003 2009
Licence AGPL Apache 2 Propriétaire BSD BSD
Sauvegardé sur disque Oui Non Oui Non OuiBSD
Clustering Oui Oui Oui Non Oui
Partitionnement / partitionnement Oui Oui Oui Non Oui
Script natif Oui Java Oui Non Oui
Transactions Par clé Oui Oui Non Oui
Intégrable Oui*

Oui Non Oui*

Oui*

Base de données NoSQL clé-valeur Aerospike en profondeur

Si Redis est Memcached sous stéroïdes, Aerospike pourrait être considéré comme Redis sous stéroïdes. Comme Redis, Aerospike est un magasin clé-valeur qui peut fonctionner comme une base de données persistante ou un cache de données. Aerospike est conçu pour être facile à mettre en cluster et à évoluer, afin de mieux prendre en charge les charges de travail des entreprises.

Caractéristiques uniques à Aerospike

Beaucoup dans Aerospike fait écho à la fois aux autres magasins de valeurs clés et aux autres bases de données NoSQL. Les données sont stockées et récupérées via des clés, et les données peuvent être conservées dans un certain nombre de types de données fondamentaux, y compris les entiers 64 bits, les chaînes, les flottants double précision et les données binaires brutes sérialisées à partir d'un certain nombre de langages de programmation courants.

Aerospike peut également stocker des données dans des types complexes - listes de valeurs, collections de paires clé-valeur appelées cartes et données géospatiales au format GeoJSON. Aerospike peut effectuer un traitement natif des données géospatiales, par exemple pour déterminer les emplacements stockés dans la base de données les plus proches les uns des autres en effectuant simplement une requête, ce qui en fait une option intéressante pour les développeurs d'applications qui dépendent de l'emplacement.

Les données stockées dans Aerospike peuvent être organisées dans plusieurs conteneurs hiérarchiques. Certains systèmes NoSQL sont orientés document, ce qui signifie que les données sont encapsulées dans un type d'objet, généralement JSON. Avec Aerospike, les conteneurs sont à peu près comme des documents, mais avec des fonctions et des comportements spécifiques à Aerospike. Chaque type de conteneur vous permet de définir différentes propriétés comportementales sur les données qu'il contient.

Par exemple, le niveau le plus élevé des conteneurs, espaces de noms, détermine si les données sont stockées sur disque, dans la RAM ou les deux; si les données sont répliquées dans le cluster ou entre les clusters; et quand et comment les données sont expirées ou expulsées. Grâce aux espaces de noms, Aerospike permet aux développeurs de conserver en mémoire les données les plus fréquemment consultées pour une réponse la plus rapide possible.

Comment Aerospike gère le stockage et le clustering

Aerospike peut conserver ses données sur presque tous les systèmes de fichiers, mais il a été spécialement écrit pour tirer parti des SSD. Cela dit, ne vous attendez pas à laisser tomber Aerospike sur un ancien SSD et attendez de bons résultats. Les développeurs d'Aerospike tiennent à jour une liste des périphériques SSD approuvés et ont créé un outil appelé ACT pour évaluer les performances des périphériques de stockage SSD sous les charges de travail Aerospike.

Aerospike, comme la plupart des systèmes NoSQL, utilise une architecture sans partage pour des raisons de réplication et de clustering. Aerospike n'a pas de nœuds maîtres et pas de partitionnement manuel. Chaque nœud est identique. Les données sont réparties de manière aléatoire sur les nœuds et automatiquement rééquilibrées pour empêcher la formation de goulots d'étranglement. Si vous le souhaitez, vous pouvez définir des règles pour le rééquilibrage agressif des données. Vous pouvez configurer plusieurs clusters, fonctionnant dans différents segments de réseau ou même dans différents centres de données, pour se synchroniser les uns avec les autres.

Scripting dans Aerospike

Comme Redis, Aerospike permet aux développeurs d'écrire des scripts Lua, ou UDF (fonctions définies par l'utilisateur), qui s'exécutent à l'intérieur du moteur Aerospike. Vous pouvez utiliser des UDF pour lire ou modifier des enregistrements, mais il est préférable de les utiliser pour effectuer des opérations de réduction de mappage à grande vitesse, en lecture seule, sur des collections, ou «flux», d'enregistrements sur plusieurs nœuds.

Où obtenir Aerospike

L'édition communautaire d'Aerospike peut être téléchargée directement à partir du site Web d'Aerospike. Cela inclut les éditions serveur pour Linux, les versions de bureau pour MacOS d'Apple et Windows de Microsoft, les éditions cloud pour Amazon EC2, Azure et Google Compute Engine, et les conteneurs Docker. L'édition entreprise d'Aerospike est disponible via le programme Quick Start d'Aerospike, qui fournit une version d'essai illimitée de 90 jours.

Le code source est disponible sur GitHub.

Base de données NoSQL à valeur-clé Hazelcast IMDG en profondeur

Hazelcast est présenté comme une «grille de données en mémoire», essentiellement un moyen de regrouper les ressources RAM et CPU sur plusieurs machines pour permettre aux ensembles de données d'être distribués sur ces machines et manipulés en mémoire.

Les bases de données NoSQL offrent des fonctionnalités de valeur-clé, de graphique ou de document. Hazelcast se concentre sur la fonctionnalité clé-valeur, mettant l'accent sur un accès rapide aux données distribuées. Selon ses fabricants, il peut également être utilisé comme alternative à des produits tels que Pivotal Gemfire, Software Terracotta et Oracle Coherence.

Hazelcast peut être exécuté en tant que service distribué ou être intégré directement dans une application Java. Des clients sont disponibles pour Java, Scala, .Net, C / C ++, Python et Node.js, et un pour Go est en préparation.

Caractéristiques propres à Hazelcast

Hazelcast est construit avec Java et possède un écosystème centré sur Java. Chaque nœud d'un cluster Hazelcast exécute une instance de la bibliothèque principale de Hazelcast, IMDG, sur la JVM. Le fonctionnement de Hazelcast avec les données est également étroitement lié aux structures du langage Java. L'interface Map de Java, par exemple, est utilisée par Hazelcast pour fournir un stockage clé-valeur. Comme avec Memcached, rien n'est écrit sur le disque; tout est gardé en mémoire à tout moment.

Un des avantages que Hazelcast peut offrir dans un environnement distribué est le «cache proche», où les objets couramment demandés sont migrés vers le serveur effectuant les requêtes. De cette façon, les requêtes peuvent être effectuées directement en mémoire sur le même système, sans nécessiter un aller-retour à travers le réseau.

Outre les paires clé-valeur, vous pouvez stocker et distribuer de nombreux autres types de structures de données via Hazelcast. Certaines sont de simples implémentations d'objets Java, comme Map. D'autres sont spécifiques à Hazelcast. MultiMap, par exemple, est une variante du stockage clé-valeur qui peut stocker plusieurs valeurs sous la même clé. Ces fonctionnalités permettent d'émuler certains comportements d'autres systèmes NoSQL, tels que l'organisation des données dans des documents, mais l'empasis est sur des structures qui permettent aux données d'être distribuées et accessibles rapidement.

Comment Hazelcast gère le clustering

Les clusters Hazelcast n'ont pas de configuration maître / esclave; tout est peer-to-peer. Les données sont automatiquement partitionnées et distribuées entre tous les membres du cluster. Vous pouvez également désigner certains membres du cluster comme «allégés», qui ne contiennent aucune donnée au début, mais peuvent ensuite être promus membres à part entière. Cela permet à certains nœuds d'être utilisés strictement pour le calcul ou pour distribuer les données progressivement à travers un cluster pendant leur mise en ligne.

Hazelcast peut également garantir que les opérations ne se poursuivent que si au moins un certain nombre de nœuds sont en ligne. Cependant, vous devez configurer ce comportement manuellement et il ne fonctionne que pour certaines structures de données. À partir de Hazelcast version 3.9, vous pouvez reconfigurer les structures de données dans un cluster sans avoir à le mettre d'abord hors ligne.

Où se procurer Hazelcast

Hazelcast est disponible en téléchargement directement sur le site Hazelcast. Il est généralement déployé sous la forme d'une collection de fichiers Java .JAR. Les images Docker sont également disponibles dans le registre officiel Docker.

Vous pouvez télécharger l'édition entreprise de Hazelcast directement à partir de Hazelcast. Vous pouvez également obtenir une clé d'essai gratuite de 30 jours pour Hazelcast.

Base de données NoSQL clé-valeur Memcached en profondeur

Memcached est à peu près aussi basique et rapide que le stockage clé-valeur. Initialement écrit comme une couche d'accélération pour la plate-forme de blogging LiveJournal, Memcached est depuis devenu un composant omniprésent des piles de technologies Web. Si vous avez de nombreux petits fragments de données qui peuvent être associés à une clé simple et n'ont pas besoin d'être répliqués entre les instances de cache, Memcached est le bon outil.

Fonctionnalités uniques à Memcached

Memcached est le plus couramment utilisé pour mettre en cache des requêtes à partir d'une base de données et conserver les résultats exclusivement en mémoire. À cet égard, il diffère de beaucoup d'autres bases de données NoSQL, clé-valeur ou autre, car elles stockent des données sous une forme persistante. 

Memcached ne sauvegarde en rien sa banque de données. Toutes les clés ne sont conservées qu'en mémoire, elles s'évaporent donc chaque fois que l'instance Memcached ou le serveur qui l'héberge est réinitialisée. Ainsi, Memcached ne peut pas vraiment être utilisé comme un substitut à une base de données NoSQL.

Cependant, il peut être utilisé pour un moyen rapide de stocker les données couramment utilisées qui peuvent prendre des ordres de grandeur plus de temps pour interroger une source.

Toutes les données qui peuvent être sérialisées dans un flux binaire peuvent être stockées dans Memcached. Les valeurs peuvent être définies pour expirer après un certain temps, ou à la demande, en référençant les clés aux valeurs d'une application. La quantité de mémoire que vous consacrez à une instance donnée de Memcached dépend entièrement de vous, et plusieurs serveurs peuvent exécuter Memcached côte à côte pour répartir la charge. De plus, Memcached évolue linéairement avec le nombre de cœurs disponibles dans un système car il s'agit d'une application multithread.

Les langages de programmation les plus courants ont des bibliothèques clientes pour Memcached. Par exemple, libmemcachedpermet aux programmes C et C ++ de travailler directement avec des instances Memcached. Il permet également à Memcached d'être intégré dans les programmes C.

Comment Memcached gère le clustering

Même si vous pouvez exécuter plusieurs instances de Memcached, que ce soit sur le même serveur ou sur plusieurs nœuds d'un réseau, il n'y a pas de fédération ou de synchronisation automatique des données entre les instances. Les données insérées dans une instance Memcached ne sont disponibles qu'à partir de cette instance, point.

Où obtenir Memcached

Le code source de Memcached est disponible en téléchargement sur GitHub et sur le site officiel de Memcached. Les binaires Linux sont disponibles dans les référentiels de la plupart des distributions Linux. Les utilisateurs de Windows peuvent le créer directement à partir de la source; certains binaires non officiels ont été construits dans le passé mais ne semblent pas disponibles de manière fiable.

Base de données NoSQL clé-valeur Microsoft Azure Cosmos DB en profondeur

La plupart des bases de données ont un paradigme global: magasin de documents, magasin de clés-valeurs, magasin de colonnes étendues, base de données de graphiques, etc. Pas si Azure Cosmos DB. Dérivé de la base de données NoSQL de Microsoft en tant que service, DocumentDB, Cosmos DB est la tentative de Microsoft de créer une base de données unique pouvant utiliser plusieurs paradigmes.

Fonctionnalités uniques à Azure Cosmos DB

Cosmos DB utilise ce qu'on appelle un système de stockage atom-record-sequence pour prendre en charge différents modèles de données. Les atomes sont des types primitifs tels que des chaînes, des entiers et des valeurs booléennes. Les enregistrements sont des collections d'atomes, comme les structures en C. Les séquences sont des tableaux d'atomes ou d'enregistrements.

Cosmos DB utilise ces blocs de construction pour répliquer le comportement de plusieurs types de base de données. Il peut reproduire le comportement des tables présentes dans les bases de données relationnelles conventionnelles. Mais il peut également reproduire la fonctionnalité des types de données trouvés dans les systèmes NoSQL - documents JSON sans schéma (DocumentDB et MongoDB) et graphiques (Gremlin, Apache TinkerPop).