He estado buscando en la página de Wikipedia para NoSQL y enumera varias variaciones en la base de datos de la tienda Key / Value, pero no puedo encontrar ningún detalle sobre lo que significa la tienda Key / Value en este contexto. ¿Podría alguien explicarme o vincularme una explicación? Además, ¿cuándo usaría tal base de datos?
56
Respuestas:
¿Conoces el concepto de un par clave / valor? Suponiendo que esté familiarizado con Java o C #, esto está en el lenguaje como map / hash / datatable / KeyValuePair (el último es en el caso de C #)
La forma en que funciona se demuestra en este pequeño gráfico de muestra:
Donde tenga una clave (izquierda) y un valor (derecha) ... observe que puede ser una cadena, int o similar. La mayoría de los objetos KVP le permiten almacenar cualquier objeto a la derecha, porque es solo un valor.
Dado que siempre tendrá una clave única para un objeto en particular que desea devolver, solo puede consultar la base de datos para esa clave única y obtener los resultados de cualquier nodo que tenga el objeto (es por eso que es bueno para sistemas distribuidos, ya que hay otras cosas involucradas como sondear los primeros n nodos para devolver un valor que coincida con otros nodos devuelve).
Ahora mi ejemplo anterior es muy simple, así que aquí hay una versión ligeramente mejor del KVP
Como puede ver, la generación de claves simple es poner "usuario" el número único de usuario, un guión bajo y el objeto. Una vez más, esta es una variación simple, pero creo que comenzamos a entender que siempre que podamos definir la parte de la izquierda y tener un formato consistente, podemos extraer el valor.
Tenga en cuenta que no hay restricción en el valor de la clave (ok, puede haber algunas limitaciones, como solo texto) o en la propiedad del valor (puede haber una restricción de tamaño), pero hasta ahora no he tenido sistemas realmente complejos. Probemos y avancemos un poco más:
Se entiende la idea ... todos estos se almacenarían en una "tabla" masiva en los nodos distribuidos (hay matemática detrás de todo) y simplemente le pediría al sistema distribuido el valor que necesita por nombre.
Por lo menos, esa es mi comprensión de cómo funciona todo. Puedo tener algunas cosas mal, pero eso es lo básico.
enlace obligatorio de wikipedia http://en.wikipedia.org/wiki/Associative_array
fuente
user1923_color: red, user1923_age: 18, ...
en lugar de hacerlouser1923: {color: red, age: 18, ...}
.En términos de SQL, una base de datos NoSQL es una sola tabla con dos columnas: una es la Clave (Primaria) y la otra es el Valor. Y eso es todo, esa es toda la magia NoSQL.
Usaría NoSQL por una razón principal: escalabilidad.
Si su aplicación necesita manejar millones de consultas por segundo, la única forma de lograrlo es agregar más servidores. Eso es muy barato y fácil con NoSQL. En contraste, escalar una base de datos SQL tradicional es mucho más complicado.
Solo los sitios web más grandes están aprovechando todo el potencial de NoSQL, es decir, Facebook, que tiene miles de servidores con Cassandra .
Recomiendo leer esta publicación de blog, comparando SQL, NoSQL y ORM:
http://seldo.com/weblog/2010/07/12/in_defence_of_sql
fuente
Supongo que tiene una comprensión básica del movimiento NoSQL y modelos de bases de datos no relacionales.
Key Value store es uno de los modelos de bases de datos sin relación, como gráficos, modelos de bases de datos orientados a documentos.
when would I use such a database?
Could someone explain or link an explanation to me?
Es más una decisión arquitectónica y discutible ... Debe considerar muchos factores como la escalabilidad, el rendimiento, etc.
Vea las diapositivas / artículos a continuación y obtendrá una idea de cuándo, por qué y por qué no usar el almacén de valores clave :)
fuente
Otros han explicado esto, pero voy a hacer una puñalada de todos modos.
Una base de datos de clave / valor almacena datos por una clave primaria. Esto nos permite identificar de forma única un registro en un depósito. Como todos los valores son únicos, las búsquedas son increíblemente rápidas: siempre es una simple búsqueda de disco.
El valor es cualquier tipo de valor. La forma en que se almacenan los datos es opaca a la base de datos en sí. Cuando almacena datos en un almacén de clave / valor, la base de datos no sabe ni le importa si es XML, JSON, texto o una imagen. En efecto, lo que estamos haciendo en un almacén de clave / valor es trasladar la responsabilidad de comprender cómo se almacenan los datos fuera de la base de datos en las aplicaciones que recuperan nuestros datos. Dado que solo tiene que preocuparse por un único rango de claves por cubo, es muy fácil distribuir las claves en muchos servidores y usar técnicas de programación distribuida para que sea posible acceder a estos datos rápidamente (cada servidor almacena un rango de datos) .
Un inconveniente de este enfoque de los datos es que la búsqueda es una tarea muy difícil. Debe leer todos los registros en su depósito de datos o, de lo contrario, debe crear índices secundarios usted mismo.
Hay algunas razones por las que es posible que desee utilizar una base de datos de clave / valor:
Hay tantas razones para usar una base de datos de clave / valor como para usar un RDBMS y hay tantos argumentos para justificar uno sobre el otro. Es importante observar cómo está consultando sus datos y comprender cómo ese patrón de acceso a datos guía cómo va a insertar y almacenar datos.
Solo recuerde que una base de datos clave / valor es solo un tipo de base de datos NoSQL.
fuente
Si tiene una base de datos relacional, puede experimentar fácilmente con esto:
Así solían ser todas las bases de datos, con Berkeley DBM como un buen ejemplo, desde 1979. Desde entonces, las cosas han avanzado (puede tener muchos valores por clave en cualquier RDBMS). Para muchas aplicaciones, un almacén de valores clave es suficiente (por ejemplo, así es como sendmail almacena sus alias). Pero si se encuentra preprocesando el valor en su propio código (o concatenando cadenas para hacer su "clave"), tal vez dividiendo el valor en un delimitador o analizándolo, antes de que pueda usarlo, probablemente estará mejor con un RDBMS y en realidad lo almacena de esa manera.
fuente