2011-05-23 10 views

Respuesta

28

Encuentro que estoy un poco en desacuerdo 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. 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 quiere completamente autónomo dentro de la aplicación? Ir con leveldb ya que es una biblioteca. ¿Necesita o quiere más que solo una k/v? Ve con Redis.

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

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

[Editar: explicación actualizada wrt. concurrencia]

+3

No estoy seguro si estoy de acuerdo con su análisis. Por favor, consulte [hilo de Hacker News] (http://news.ycombinator.com/item?id=2526032). Tanto en términos de concurrencia como de nivel de velocidad parece superior, aunque todavía estoy buscando estudios objetivos. – rafidude

+1

Supongo que depende de * por qué * va con concurrencia y cómo la necesita. No defendí que Redis fuera más rápido con la concurrencia, aunque para ser exhaustivo. No dije por qué (lo arreglaré). Pero desde el punto de vista de "No tengo que escribir código para manejar la concurrencia", lo veo como un factor importante. –

+0

Wow, abajo votos sin explicación? –

11

Diferencias:

  • Redis es un servidor, mientras que LevelDB es "una biblioteca que implementa un rápido persistente almacén de claves-valor". 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

Similitudes:

  • Ambos tienen claves métodos/Tienda

razones para elegir uno sobre otra

Si está haciendo una aplicación C/C++, entonces leveldb es el camino a seguir, siempre solo necesita 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.

+2

> * Redis, que se almacena en la memoria * Nota para los lectores, esto es un poco engañoso. Se conserva en la memoria * y * del disco. Los datos almacenados en redis no son volátiles, a diferencia, digamos, de memcached. –

+0

@CrescentFresh Pero es imposible eliminar la parte de memoria de redis, ¿correcto? Si uno está buscando almacenar múltiples GB de datos en la persistencia y no tiene el ram para cubrirlo, entonces redis no es algo que pueda usarse, ¿no? – superhero

+0

@Erik: no solo necesita el ariete para cubrirlo, sino que necesita más para guardar el fondo. Su pregunta y este comentario se explican en su totalidad en [faq] (http://redis.io/topics/faq). –

36

Sólo añado esto porque en las dos respuestas anteriores que no veo esta distinción (importante) hizo ...

  • 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 al C++ API directly.

Si está familiarizado con SQLite y lo popular que se ha convertido como una base de datos integrada para aplicaciones de cliente (creo tanto en Android y el IOS buque ella) y luego a ver dónde algo así como LevelDB encaja.

Imagínese estaba escribiendo una aplicación PIM compleja, tal vez algún administrador de la libreta de direcciones de la empresa que debía instalarse en las computadoras individuales de 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 desea tener que enviar e instalar una copia local de Redis, ejecutándose en un puerto aleatorio solo para que pueda conectarse ... desea una base de datos a la que pueda llamar directamente y de forma nativa desde su aplicación y no se preocupe 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.

+2

Redis puede ejecutarse en sockets de dominio Unix. Lo he hecho en un dispositivo integrado para acelerar el arranque (no es necesario interconectarse para iniciar Redis). – tjameson

+0

cualquier punto de referencia Redis vs MonetDB o VoltDB o RocksDB? – skan