web-dev-qa-db-fra.com

Comment Leveldb se compare-t-il à Redis, Riak ou Tokyo Tyrant?

Leveldb semble être un nouveau magasin de valeurs de clés persistant intéressant 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?

46
rafidude

Je trouve que je suis un peu en désaccord avec les critères de colum bien que les différences entre leveldb et Redis qu'il souligne sont parfaites.

Avez-vous besoin de simultanéité? J'irais avec Redis. Je dis cela parce que Redis a déjà écrit le code pour le gérer. Chaque fois que je peux utiliser le code des autres personnes bien écrit pour gérer la concurrence, tant mieux. Je ne parle pas simplement des applications multi-thread, mais j'inclus dans cela la notion de processus multiples - qu'ils soient sur le même système ou non. Même alors, ne pas avoir besoin d'écrire et de déboguer le verrouillage dans une application multi-thread a un gros avantage à mes yeux.

Voulez-vous qu'il soit complètement autonome dans l'application? Allez avec leveldb car c'est une bibliothèque. Avez-vous besoin ou voulez-vous plus qu'un simple k/v? Allez avec Redis.

Je ne fais que commenter l'aspect leveldb ou Redis car je ne me considère pas encore assez fluide dans Riak ou TT pour commenter leurs meilleurs costumes.

En bref, si tout ce que vous recherchez est un magasin de valeurs-clés persistant dans une application à un seul thread, leveldb est l'option à choisir parmi votre liste (un autre serait le cabinet de Tokyo ou le bon vieux BerkleyDB ou même sqlite). Mais si vous voulez plus que cela, choisissez l'un des autres.

[modifier: explication mise à jour par rapport à. concurrence]

29
The Real Bill

J'ajoute seulement cela 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 via un protocole binaire personnalisé (via la bibliothèque cliente généralement).
  • LevelDB: est une bibliothèque qui implémente un magasin de valeurs-clés. Vous communiquez avec lui en appelant API C++ directement .

Si vous connaissez SQLite et sa popularité en tant que base de données intégrée pour les applications clientes (je crois que les deux Android et iOS le livrent)), vous voyez où quelque chose comme LevelDB s'intègre.

Imaginez que vous écriviez une application complexe PIM, 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 qui vous vous êtes écrit/analysé vous-même dans votre application - si vous le pouviez, vous préféreriez de préférence le 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 et non inquiétez-vous de la communication "over the wire" ... vous voulez les entrailles brutes d'une base de données sans aucun des éléments réseau dont vous n'avez pas besoin dans une application réservée aux clients.

C'est là que se situe LevelDB.

C'est un outil différent pour un travail différent.

42
Riyad Kalla

Différences:

  • Redis est un serveur, tandis que Leveldb est "une bibliothèque qui implémente un magasin de valeurs-clés persistant rapide". Pour cela, avec Redis, vous devez interroger le serveur. Avec Leveldb, la base de données est stockée sur disque, ce qui la rend beaucoup plus lente que Redis, qui est stockée en mémoire.
  • Leveldb ne propose que des clés/magasin. Redis a cela aussi, mais a aussi beaucoup plus de fonctions et de fonctionnalités

Similitudes:

  • Ils ont tous deux des méthodes Key/Store

Raisons de choisir l'un plutôt que l'autre

Si vous créez une application C/C++, alors leveldb est la voie à suivre, à condition d'avoir juste besoin d'une base de données qui ne soit pas aussi gourmande en ressources que mysql. Leveldb fournit un accès au niveau du code, tandis qu'avec redis, vous avez besoin d'une interface qui doit communiquer avec le serveur. Dans toute autre application, Redis est le chemin à parcourir. Non seulement vous obtenez un serveur réel auquel plusieurs applications peuvent accéder, mais vous obtenez d'autres fonctionnalités telles que l'écriture sur le disque, les ensembles, la liste, les hachages, et cela continue.

11
Colum