¿Cómo se compara Leveldb con Redis o Riak o Tokyo Tyrant? [cerrado]


Leveldb parece ser una nueva tienda de valor clave persistente interesante de Google. ¿En qué se diferencia Leveldb de Redis o Riak o Tokyo Tyrant? ¿En qué casos de uso específicos es mejor uno que el otro?

Author: Viktor Dahl, 2011-05-23

3 answers

Encuentro que no estoy de acuerdo un poco con los criterios de colum, aunque las diferencias entre leveldb y Redis que señala son acertadas.

¿Necesita concurrencia? Yo iría con Redis. Digo esto porque Redis ya tiene el código escrito para manejarlo. En cualquier momento puedo usar el Código bien escrito de otras Personas para manejar la concurrencia, tanto mejor. No me refiero simplemente a aplicaciones multihilo, sino que incluyen en esto la noción de múltiples procesos, ya sean en el mismo sistema o no. Incluso entonces, no la necesidad de escribir y depurar el bloqueo en una aplicación multihilo tiene una gran ventaja en mis ojos.

¿Quieres que sea completamente autónomo dentro de la aplicación? Ir con leveldb ya que es una biblioteca. ¿Necesitas o quieres algo más que un k/v? Ve con Redis.

Solo estoy comentando el aspecto de leveldb o Redis, ya que aún no me considero lo suficientemente fluido en Riak o TT para comentar sus mejores trajes.

En resumen, si todo lo que busca es un almacén de clave-valor persistente en un aplicación de un solo hilo entonces leveldb es la opción para elegir entre su lista (otra sería Tokyo cabinet o buena ole BerkleyDB o incluso sqlite). Pero si quieres más que eso, elige uno de los otros.

[editar: explicación actualizada wrt. concurrencia]

 29
Author: The Real Bill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-25 06:17:22

Solo añado esto porque en las dos respuestas anteriores no veo esta distinción (importante) hecha...

  • Redis: Es un servidor de base de datos. Se comunica con él a través de un protocolo binario personalizado (normalmente a través de la biblioteca de cliente).
  • LevelDB: Es una biblioteca que implementa un almacén de clave-valor. Se comunica con él llamando a la API de C++ directamente.

Si está familiarizado con SQLite y lo popular que se ha vuelto como una base de datos incrustada para aplicaciones cliente (Creo que tanto Android como iOS lo envían) entonces ves donde algo como LevelDB encaja.

Imagine que estaba escribiendo una aplicación PIM compleja, tal vez algún administrador de libreta de direcciones empresarial destinado a ser instalado en computadoras individuales en la oficina. No querrás almacenar todos esos datos en XML o JSON que escribiste / analizaste dentro de tu aplicación if si pudieras, preferirías almacenarlos en una base de datos para tener patrones de acceso más fáciles.

Pero tampoco quieres tener que enviar y instale una copia local de Redis, ejecutándose en algún puerto aleatorio solo para que pueda conectarse a él... quieres una base de datos a la que puedas llamar directamente y de forma nativa desde tu aplicación y no preocuparte por la comunicación "por cable"... quieres las entrañas crudas de una base de datos sin ninguna de las cosas de red que no necesitas en una aplicación solo para clientes.

Aquí es donde se encuentra LevelDB.

Es una herramienta diferente para un trabajo diferente.

 40
Author: Riyad Kalla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-07 14:52:47

Diferencias:

  • Redis es un servidor, mientras que Leveldb es "una biblioteca que implementa un almacén de clave-valor persistente rápido". Por lo tanto, con Redis, tienes que sondear el servidor. Con Leveldb, la base de datos se almacena en el disco, por lo que es mucho más lento que Redis, que se almacena en la memoria.
  • Leveldb solo ofrece clave/tienda. Redis también tiene esto, pero también tiene muchas más funciones y características

Similitudes:

  • ambos tienen Métodos clave / Almacén

Razones para elegir uno sobre otro

Si está haciendo una aplicación de C/C++, entonces leveldb es el camino a seguir, siempre que solo necesite una base de datos que no sea tan pesada como mysql. Leveldb proporciona acceso a nivel de código, mientras que con redis necesita una interfaz que tenga que comunicarse con el servidor. En cualquier otra aplicación, Redis es el camino a seguir. No solo obtienes un servidor real, al que más de una aplicación puede acceder, sino que obtienes otras características como escribir en disco, conjuntos, lista, hashes, y continúa.

 11
Author: Colum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-23 22:28:32