He estado aprendiendo sobre 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 las personas escriben sus artículos como si NoSQL pudiera reemplazar las Bases de datos relacionales. Y hay un 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 (codificando los datos en JSON, XML, lo que sea), pero el problema que veo es que necesita obtener una 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 los datos persistentes que necesitan ser buscados por su contenido. ¿O he entendido mal algo?
Un ejemplo:
Necesita almacenar datos de usuario para una tienda web.
En una base de datos relacional, almacena a cada usuario como una fila en la users
tabla, con un 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 expertos en 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 tiene que obtener todos los usuarios, analizar todos los datos y filtrar.
No digo que sea imposible , pero se vuelve mucho más complicado y supongo que no es tan efectivo si desea buscar en los datos de las entradas NoSQL.
Puede crear una clave para cada país que almacena 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 se depositan 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 tan efectivo como consultar una base de datos SQL. Así que creo que no es una forma en la que usarías en la producción. ¿O es eso?
No estoy realmente seguro si entendí mal algo o si pasé por alto algunos conceptos o mejores prácticas para manejar tales casos de uso. Tal vez podría corregir mis declaraciones y responder mis preguntas.