2009-10-23 17 views
8

Estoy tratando de entender las tiendas de Key-Value como CouchDB y Cassandra. Entiendo por qué son útiles, pero en cuanto a cómo reemplazan un RDBMS como MySql, no lo entiendo.Comprensión de las tiendas Key-Value

Digamos que este es mi lo que necesito para almacenar:

{123456: {'model' : 'Ford' 
      'color': 'blue' 
      'MPG': 23}} 

entonces necesito encontrar todos los coches que son de color azul.

¿Cómo consulta el almacén de clave-valor las claves utilizando el valor? Leí un poco donde se puede usar map-reduce, pero al ver el origen de algunos proyectos no puedo encontrar un ejemplo.

Deseo saber si hago la pregunta correcta.

Respuesta

8

en esencia, cuando se utiliza tiendas de valores clave, usted está construyendo una base de datos de los mismos componentes que una base de datos relacional tiene internamente. La razón para hacer esto es tener más control y flexibilidad sobre la escala y el rendimiento, o simplemente para la sencillez.

En este caso, debe almacenar el equivalente de las filas de la tabla y el índice como dos cosas separadas. Por lo tanto, si desea indexar en color, debe almacenar

{'blue': {123456}} 

en el equivalente de una tabla de índice.

Por supuesto, algunos almacenes de clave-valor proporcionan mecanismos de indexación y búsqueda para usted, por lo que no existe una regla general que sirva para todos.

+0

lo necesitarían a ser: {{ 'color': 'azul'}: [123456]} De lo contrario ¿cómo podría saber lo que se refería a azul. ¿Qué pasa con el texto? {'Lorem ipsum dolor sit amet, consectetuer adipiscing elit ...': [123456]} ¿A las tiendas clave-valor les gustan las búsquedas? – user142006

+1

Suponía que el índice solo contendría el color como clave. Los detalles de esto dependen del almacén de clave-valor que va a usar. Usted mencionó dos diferentes en su respuesta, así que asumí que la pregunta era más una pregunta general de la tienda clave-valor. Redis, Hadoop, Tokyo Cabinet, Metakit, Berkeley db, gdbm ofrecen capacidades diferentes para tiendas de valores clave. –

2

Desea mantener un almacén de claves/valores por separado que es esencialmente un índice. Tendría "azul" como clave, y luego una lista de todas las identificaciones de la tienda "principal" de autos que son azules.

Sí, eso es duplicar la funcionalidad de índice de un rdbms regular.

Este es un buen artículo acerca de cómo el equipo de FriendFeed abordó este problema y resolvió esta solución, junto con sus razones (sé, un poco extraño ya que usaron un RDBMS como clave/tienda de valores, pero los puntos de discusión son la teoría de sonido):
http://bret.appspot.com/entry/how-friendfeed-uses-mysql

Cuestiones relacionadas