La mejor respuesta
Las tablas de búsqueda no son tanto una «cosa de SQL» como se usan en el diseño de bases de datos. Por lo general, se utilizan para ayudar con la Normalización de la base de datos para datos que son relativamente estáticos, como tablas que contienen nombres de países, estados, ciudades, etc.
No estoy seguro de si existe una definición académica formal de «tablas de búsqueda» en el contexto del diseño de la base de datos, pero cuando pienso en ellas, suelo pensar en tablas con las siguientes propiedades:
- Tienen configuración o datos descriptivos en ellos, versus datos relacionados con eventos de aplicaciones individuales.
- Son pequeños en relación con las tablas relacionadas con eventos.
- Son de inserción y leer tablas, y si se realizan actualizaciones, son raras.
- En su mayor parte, las uniones comienzan o terminan en ellas.
- A menudo las considero análogas a las “Diccionario” en Algoritmos de compresión de diccionario .
Algunos ejemplos de tablas de búsqueda:
- Tablas de configuración de aplicaciones.
- Tablas geográficas (como se mencionó anteriormente) u otras tablas descriptivas uch como una lista de vendedores y proveedores, una tabla de catálogo de productos para una tienda web, etc.
- Listas de nombres de máquinas y propiedades de hardware de máquinas para una aplicación que administra un centro de datos.
- La lista de usuarios y los datos del perfil del usuario (imagen, descripción del usuario, etc.) de un sitio web. Cosas como la página visitada más recientemente \_no\_ estarían en las tablas de búsqueda.
Respuesta
La velocidad no es realmente el factor que impulsa el cambio a una base de datos NoSQL. Si toma las bases de datos SQL y NoSQL una al lado de la otra y compara actualizaciones simples y lecturas de una tabla, ambos deberían responder muy rápidamente a tales consultas.
La diferencia clave es que, las bases de datos NoSQL están diseñadas específicamente para manejar simples consultas de bajo nivel, le permiten obtener, establecer y tal vez algunas otras cosas simples como rangos o clasificación. Una gran desventaja es que debe decidir cómo va a utilizar los datos que ingresa allí y diseñar un esquema adecuado desde el principio, que le permitirá acceder a los datos, en el formato que necesite.
Por otro lado, SQL, siempre que los datos que ingrese estén desnormalizados correctamente, puede manejar consultas enormemente complejas. No necesita diseñar un esquema en torno a su caso de uso particular y tiene la enorme flexibilidad del lenguaje de consulta que puede devolver cualquier dato en cualquier formato sin tener que modificar el esquema subyacente.
La razón por la que SQL tiene la reputación de ser lento, y es que procesar una consulta compleja en un conjunto de datos grande, inevitablemente lleva tiempo, mientras que NoSQL simplemente no proporciona la capacidad de ejecutar consultas complejas lentas en primer lugar.
No hay razón por la que no podría utilizar una base de datos SQL exactamente de la misma manera que una base de datos NoSQL. Coloque todos sus datos en tablas grandes y utilice solo las consultas más básicas. Entonces funcionaría muy bien junto con una base de datos NoSQL equivalente, pero obviamente desperdiciaría la mayoría de sus características más útiles. De hecho, este es el caso de muchas grandes bases de datos SQL. La desnormalización se rompe y la flexibilidad se sacrifica para «optimizar» para consultas específicas.
Sin embargo, existen ciertos inconvenientes en SQL y, en algunas circunstancias, estos inconvenientes se convierten en un problema tal que estamos dispuestos a sacrificar la flexibilidad que brinda para superarlos.
Primero, no escala bien horizontalmente. Intentar dividir sus datos en muchas máquinas más pequeñas, aunque no es imposible, puede tener un gran impacto en el rendimiento. Las bases de datos SQL grandes tienden a ejecutarse en hardware muy costoso de alta potencia para intentar mantener un rendimiento adecuado, mientras que las bases de datos NoSQL tienden a escalar de manera fácil y económica a cualquier tamaño simplemente agregando hardware adicional a un clúster.
Segundo y, lo que es más importante, SQL no es tolerante a errores. Sí, es posible replicar sus datos en una segunda máquina de respaldo, pero luego duplica los costos de hardware especializado de alta potencia y ese hardware debe ser aún más poderoso para manejar la carga adicional de mantenerse sincronizados. Compare eso, por ejemplo, con un clúster de Cassandra, y podría ejecutar una docena de máquinas más pequeñas con replicación de datos, incluso distribuidas en múltiples centros de datos si lo desea. La carga se distribuye automáticamente, las actualizaciones se envían a todo el clúster y el usuario final no notará la pérdida de ninguna máquina.
Estas dos son las verdaderas razones por las que debe elegir entre las dos tecnologías. Si su base de datos es lo suficientemente pequeña para caber en una sola máquina y el tiempo de inactividad ocasional mientras restaura desde una copia de seguridad no es un problema, use SQL, simplificará enormemente su desarrollo y tendrá la flexibilidad de adaptarse si sus necesidades cambian. Si su conjunto de datos va a ser enorme o si tiene SLA estrictos para alcanzar, elija NoSQL. En cualquier punto intermedio, debe tomar una decisión, pero tenga en cuenta que las habilidades NoSQL tienen una gran demanda en este momento.Puede valer la pena seguir ese camino solo para ganar experiencia.