He estado aprendiendo acerca de las bases de datos NoSQL durante una semana.
Realmente entiendo las ventajas de las bases de datos NoSQL y los muchos casos de uso para los que son excelentes.
Pero a menudo la gente escribe sus artículos como si NoSQL pudiera reemplazar bases de datos relacionales. Y ahí está el punto en el que no puedo entender:
Las bases de datos NoSQL son (a menudo) almacenes de valores clave.
Por supuesto, es posible almacenar todo en un almacén de valores clave (al codificar los datos en JSON, XML, lo que sea), pero el problema que veo es que usted necesita obtener cierta cantidad de datos que coincida con un criterio específico, en muchos casos de uso. En una base de datos NoSQL solo tiene un criterio que puede buscar de manera efectiva: la clave. Las bases de datos relacionales están optimizadas para buscar cualquier valor en la fila de datos de manera efectiva.
Por lo tanto, las bases de datos NoSQL no son realmente una opción para la persistencia de datos que necesitan ser buscados por su contenido. ¿O he entendido mal algo?
Un ejemplo:
Debe almacenar datos de usuario para una tienda web.
En una base de datos relacional, almacena todos los usuarios como una fila en la tabla users
, con una ID, el nombre, su país, etc.
En una base de datos NoSQL almacenaría a cada usuario con su ID como clave y todos sus datos (codificados en JSON, etc.) como valor.
Entonces, si necesita obtener todos los usuarios de un país específico (por alguna razón, los responsables de marketing necesitan saber algo sobre ellos), es fácil hacerlo en la base de datos relacional, pero no es muy efectivo en la base de datos NoSQL, porque tienes que obtener cada usuario, analizar todos los datos y el filtro.
No digo que sea imposible , pero se vuelve mucho más complicado y creo que no es tan efectivo si quieres buscar en los datos de las entradas NoSQL.
Puede crear una clave para cada país que almacene las claves de cada usuario que vive en este país, y obtener los usuarios de un país específico obteniendo todas las claves que están depositadas en la clave de este país. Pero creo que esta técnica hace que un conjunto de datos complejo sea aún más complejo: es más difícil de implementar y no es tan efectivo como consultar una base de datos SQL. Así que creo que no es una forma de usar en producción. ¿O es?
No estoy realmente seguro de haber malinterpretado algo o haber pasado por alto algunos conceptos o las mejores prácticas para manejar estos casos de uso. Quizás puedas corregir mis afirmaciones y responder a mis preguntas.