Leveldb semble être une nouvelle clé persistante intéressante de Google. En quoi Leveldb diffère-t-il de Redis, Riak ou Tokyo Tyrant ? Dans quels cas d'utilisation spécifiques l'un est-il meilleur que l'autre ?
Réponses
Trop de publicités?J'ajoute seulement ceci parce que dans les deux réponses précédentes, je ne vois pas cette distinction (importante) faite...
- Redis : est un serveur de base de données. Vous communiquez avec lui par le biais d'un protocole binaire personnalisé (via une bibliothèque client, généralement).
- LevelDB : est une bibliothèque qui implémente un magasin clé-valeur. Vous communiquez avec elle en appelant la fonction API C++ directement .
Si vous connaissez SQLite et sa popularité en tant que base de données intégrée dans les applications client (je crois qu'Android et iOS en sont équipés), vous comprenez la place de LevelDB.
Imaginez que vous écriviez une application PIM complexe, peut-être un gestionnaire de carnet d'adresses d'entreprise destiné à être installé sur des ordinateurs individuels au bureau. Vous ne voudriez pas stocker toutes ces données en XML ou JSON que vous avez écrites/parées vous-même dans votre application - si vous le pouviez, vous préféreriez les stocker dans une base de données pour avoir des modèles d'accès plus faciles.
Mais vous ne voulez pas non plus avoir à expédier et installer une copie locale de Redis, fonctionnant sur un port aléatoire juste pour pouvoir vous y connecter... vous voulez une base de données que vous pouvez appeler directement et nativement depuis votre application sans vous soucier de la communication "over the wire"... vous voulez les entrailles brutes d'une base de données sans aucun des trucs réseau dont vous n'avez pas besoin dans une application client uniquement.
C'est là que se trouve LevelDB.
C'est un outil différent pour un travail différent.
Je ne suis pas tout à fait d'accord avec les critères de Colum, bien que les différences entre Leveldb et Redis qu'il souligne soient très pertinentes.
Avez-vous besoin de la concurrence ? Je choisirais Redis. Je dis cela parce que Redis a déjà le code écrit pour le gérer. Chaque fois que je peux utiliser le code bien écrit d'autres personnes pour gérer la concurrence, c'est encore mieux. Je ne parle pas simplement d'applications multithreads, mais j'y inclus la notion de processus multiples, qu'ils soient sur le même système ou non. Même dans ce cas, le fait de ne pas avoir à écrire et à déboguer le verrouillage dans une application multithread présente un gros avantage à mes yeux.
Voulez-vous qu'il soit complètement autonome dans l'application ? Choisissez leveldb car il s'agit d'une bibliothèque. Vous voulez ou avez besoin de plus qu'un simple k/v ? Choisissez Redis.
Je ne commente que l'aspect leveldb ou Redis, car je ne me considère pas encore suffisamment à l'aise avec Riak ou TT pour me prononcer sur leurs meilleures adéquations.
En bref, si tout ce que vous recherchez est un stockage persistant de clés et de valeurs dans une application monotâche, alors leveldb est l'option à choisir dans votre liste (une autre serait Tokyo cabinet ou le bon vieux BerkleyDB ou même sqlite). Mais si vous voulez plus que cela, choisissez l'un des autres.
[modifier : mise à jour de l'explication concernant la concurrence].
Différences :
- Redis est un serveur, tandis que Leveldb est "une bibliothèque qui implémente un magasin de valeurs clés persistant et rapide". Ainsi, avec Redis, vous devez interroger le serveur. Avec Leveldb, la base de données est stockée sur le disque, ce qui la rend beaucoup plus lente que Redis, qui est stockée en mémoire.
- Leveldb ne propose que des clés/stocks. Redis a également cette fonction, mais possède également beaucoup plus de fonctions et de caractéristiques.
Des similitudes :
- Ils ont tous deux des méthodes Key/Store
Raisons de choisir l'un plutôt que l'autre
Si vous réalisez une application C/C++, alors leveldb est la solution, à condition que vous ayez simplement besoin d'une base de données qui ne soit pas aussi lourde en ressources que mysql. Leveldb fournit un accès au niveau du code, alors qu'avec redis vous avez besoin d'une interface qui doit communiquer avec le serveur. Dans toute autre application, Redis est la solution à retenir. Non seulement vous disposez d'un serveur réel, auquel plusieurs applications peuvent accéder, mais vous bénéficiez également d'autres fonctionnalités telles que l'écriture sur disque, les ensembles, les listes, les hachages, et ainsi de suite.