nosql redis riak tokyo-tyrant leveldb

nosql - ¿Cómo se compara Leveldb con Redis, Riak o Tokyo Tyrant?



tokyo-tyrant (3)

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


Diferencias

  • Redis es un servidor, mientras que Leveldb es "una biblioteca que implementa una tienda rápida de valores clave persistentes". Por lo tanto, con Redis, debe 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 key / store. Redis tiene esto también, pero también tiene muchas más funciones y características

Semejanzas

  • Ambos tienen métodos clave / tienda

Razones para elegir uno sobre otro

Si está haciendo una aplicación C / C ++, entonces leveldb es el camino a seguir, siempre que solo necesite una base de datos que no tenga tantos recursos como mysql. Leveldb proporciona acceso a nivel de código, mientras que con redis necesita una interfaz que se comunique con el servidor. En cualquier otra aplicación, Redis es el camino a seguir. No solo obtienes un servidor real, sino que puedes acceder a más de una aplicación, pero obtienes otras funciones, como escribir en el disco, conjuntos, listas, hashes, y continúa.


Encuentro que estoy un poco en desacuerdo con el criterio 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. Cada vez que puedo utilizar el Otro código popular bien escrito para manejar la simultaneidad, mucho mejor. No me refiero simplemente a las aplicaciones de subprocesos múltiples, sino que incluyen en esto la noción de procesos múltiples, ya sea que estén en el mismo sistema o no. Incluso entonces, no necesitar escribir y depurar el bloqueo en una aplicación multiproceso tiene una gran ventaja a mis ojos.

¿Lo quieres completamente autónomo dentro de la aplicación? Ir con leveldb ya que es una biblioteca. ¿Necesita o quiere algo más que ak / v? Ve con Redis.

Solo estoy comentando el aspecto de Levellb o Redis ya que no me considero lo suficientemente fluido como para hablar de sus mejores trajes en Riak o TT.

En resumen, si todo lo que está buscando es una tienda de valores clave persistente en una aplicación de subproceso único, leveldb es la opción para elegir entre su lista (otro sería el gabinete de Tokio o el bueno de BerkleyDB o incluso sqlite). Pero si quieres más que eso, elige uno de los otros.

[editar: explicación actualizada wrt. concurrencia]


Solo agrego 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 (a través de la biblioteca del cliente por lo general).
  • LevelDB: es una biblioteca que implementa un almacén de clave-valor. Te comunicas con él llamando directamente a la API de C ++ .

Si está familiarizado con SQLite y lo popular que se ha convertido en una base de datos integrada para las aplicaciones cliente (creo que tanto Android como iOS lo envían), entonces verá dónde encaja algo como LevelDB.

Imagine que estaba escribiendo una aplicación PIM compleja, tal vez algún administrador de la libreta de direcciones de la empresa destinado a ser instalado en computadoras individuales en la oficina. No querría almacenar todos los datos en XML o JSON que escribió / analizó usted mismo dentro de su aplicación; si pudiera, preferiría almacenarlos en un DB para tener patrones de acceso más fáciles.

Pero tampoco querrá tener que enviar e instalar una copia local de Redis, ejecutándose en un puerto aleatorio solo para que pueda conectarse ... quiere una BD a la que pueda llamar directamente y de forma nativa desde su aplicación y no Preocuparse por la comunicación "por cable" ... quiere las agallas de una base de datos sin ninguna de las cosas de la red que no necesita en una aplicación solo para el cliente.

Aquí es donde se encuentra LevelDB.

Es una herramienta diferente para un trabajo diferente.