Cuándo utilizar un almacén de datos clave-valor vs.¿Una base de datos relacional más tradicional?

StackOverflow https://stackoverflow.com/questions/1500611

Pregunta

¿Cuándo se elegiría un almacén de datos clave-valor en lugar de una base de datos relacional?¿Qué consideraciones entran en juego para decidir uno u otro?¿Cuándo la combinación de ambas es la mejor ruta?Por favor proporcione ejemplos si puede.

¿Fue útil?

Solución

En mi experiencia, si usted está haciendo la pregunta, incluso si se utiliza tradicional vs prácticas esotéricas, y luego ir tradicional. Mientras que las prácticas esotéricas son atractivo, desafiante y divertido, 99,999% de las aplicaciones requieren un enfoque tradicional.

En lo que respecta a relacional vs KV, la pregunta que debe hacernos es:

  

Por qué iba a no que desee utilizar un modelo relacional para este escenario: ...

Dado que no se ha descrito el escenario, es imposible para cualquier persona que le diga por qué no debe usarlo. La razón "todo" ni para KV es la escalabilidad, que no es un problema ahora. ¿Conoce las reglas de optimización?

  1. No practico.
  2. (sólo para expertos) No hacerlo ahora.

KV es un muy solución optimizada para la escalabilidad que lo más probable será completamente innecesario para su aplicación.

Otros consejos

valor-clave, jerárquica, mapa-reducen, o sistemas de bases de datos gráfica son mucho más cerca de las estrategias de aplicación, que están fuertemente ligados a la representación física. La razón principal para elegir uno de estos es si hay un argumento convincente interpretación y se ajusta a su estrategia de procesamiento de datos muy de cerca. Cuidado, consultas ad hoc por lo general no son prácticos para estos sistemas, y que está en mejor situación de decidir sobre sus consultas antes de tiempo.

Los sistemas de bases de datos relacionales tratan de separar el modelo lógico, orientado a los negocios de las estrategias de representación y procesamiento físicos subyacentes. Esta separación es imperfecta, pero sigue siendo bastante buena. Los sistemas relacionales son grandes para el manejo de datos y extracción de información fiable a partir de colecciones de hechos. Los sistemas relacionales también son grandes en las consultas ad-hoc, que los otros sistemas son notablemente malos. Eso es un gran ajuste en el mundo de los negocios y muchos otros lugares. Es por eso que los sistemas relacionales son tan frecuentes.

Si se trata de una aplicación de negocios, un sistema relacional es casi siempre la respuesta. Para otros sistemas, es probable que sea la respuesta. Si usted tiene más de un problema de procesamiento de datos, como una tubería de cosas que tienen que suceder y que tienen grandes cantidades de datos, y usted sabe que todas sus consultas en la delantera, otro sistema puede ser adecuado para usted.

Si los datos son simplemente una lista de las cosas y se puede derivar un identificador único para cada artículo, a continuación, un KVS es un buen partido. Son cerca de las implementaciones de las estructuras de datos simples que aprendimos en la informática de primer año y no permiten relaciones complejas.

Una prueba sencilla: se puede representar los datos y todas sus relaciones como una lista enlazada o tabla hash? Si es así, un KVS puede trabajar. Si no, se necesita una RDB.

Todavía es necesario encontrar un KVS que funcionará en su entorno. Soporte para KVSes, incluso los más grandes, está muy lejos de lo que es para, por ejemplo, PostgreSQL y MySQL / MariaDB.

Una base de datos relacional tradicional tiene problemas de escala más allá de un punto. ¿Dónde está ese punto depende un poco de lo que está tratando de hacer.

Todo (la mayoría?) De los proveedores de cloud computing están proporcionando los almacenes de datos de valores clave.

Sin embargo, si usted tiene una aplicación de tamaño razonable con una estructura de datos compleja, entonces el apoyo que se obtiene del uso de una base de datos relacional puede reducir sus costos de desarrollo.

OMI, el valor de par de claves (por ejemplo, bases de datos NoSQL) funciona mejor cuando los datos subyacentes es estructurado, impredecible, o el cambio de frecuencia. Si usted no tiene datos estructurados, una base de datos relacional va a ser más problemático de lo que vale, ya que necesitará para hacer un montón de cambios de esquema y / o pasar por el aro para conformar sus datos a la estructura.

KVP / JSON / NoSQL es grande porque los cambios en la estructura de datos no requieren refactorización por completo el modelo de datos. Adición de un campo a su objeto de datos es simplemente una cuestión de añadir a los datos. La otra cara de la moneda es que hay menos restricciones y controles de validación en una base de datos KVP / NoSQL que una base de datos relacional para que sus datos podrían causar problemas.

Hay rendimiento y ahorro de espacio beneficios para los modelos de datos relacionales. datos relacionales normalizados pueden hacer que el entendimiento y la validación de los datos más fácil porque hay relaciones clave de mesa y limitaciones para ayudarle hacia fuera.

Uno de los peores patrones que he visto está tratando de tener las dos cosas. Tratando de poner un par clave-valor en una base de datos relacional es a menudo una receta para el desastre. Yo recomendaría el uso de la tecnología que se adapte a sus datos más importante.

Si desea búsquedas O(1) de valores basadas en claves, entonces desea una tienda KV.Es decir, si tienes datos del formulario k1={foo}, k2={bar}, etc., incluso cuando los valores son estructuras más grandes/anidadas y desean búsquedas rápidas, desea una tienda KV.Incluso con una indexación adecuada, no se pueden lograr búsquedas O(1) en una base de datos relacional para claves arbitrarias.A veces esto se denomina "búsquedas aleatorias".

Dicho de manera aliterada, si solo consulta por una columna, una "clave principal" si lo desea, para recuperar el resto de los datos, entonces usar esa columna como un espacio de claves y el resto de los datos como un valor en un almacén KV es la forma más eficiente de realizar búsquedas.

Por el contrario, si consulta con frecuencia los datos mediante cualquiera de varias columnas, es decir, admite una API de consulta más completa para los datos, entonces es posible que desee una base de datos relacional.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top