
Por toda su popularidad y éxito, Sql es un estudio en Paradox. Puede ser torpe y detallado, pero para los desarrolladores, a menudo es la forma más simple y directa de extraer los datos que queremos. Puede ser un rayo rápido cuando una consulta se escribe correctamente, y lenta como melaza cuando la consulta pierde la marca. Tiene décadas, pero al ras de las características nuevas y atornilladas.
Estas paradojas no importan porque el mercado ha hablado: SQL es la primera opción para muchos, incluso con opciones más nuevas y posiblemente más poderosas. Desarrolladores en todas partes, desde los sitios web más pequeños hasta las mega corporaciones más grandes, Know SQL. Confían en él para mantener todos sus datos organizados.
El modelo tabular de SQL es tan dominante que muchos proyectos que no son SQL terminan agregando un Sql-ish interfaz porque los usuarios lo exigen. Esto es incluso cierto para el Coso Movimiento, que fue inventado para liberarse del viejo paradigma. Al final, al parecer, SQL ganó.
Las limitaciones de SQL pueden no ser suficientes para conducirlo al basurero de la historia. Es posible que los desarrolladores nunca se levanten y migren todos sus datos de SQL. Pero sus problemas son lo suficientemente reales como para generar estrés, agregar retrasos e incluso requerir reingeniería para algunos proyectos.
Aquí hay trece razones por las que desearíamos poder dejar SQL, aunque probablemente no lo haremos.
13 formas en que SQL empeora las cosas
- Las tablas no escala
- SQL no es JSON o XML-nativo
- Marshalling es un gran casco de tiempo
- SQL no hace tiempo real
- Las uniones son un dolor de cabeza
- Las columnas son un desperdicio de espacio
- La optimización solo ayuda a veces
- La denormalización trata tablas como basura
- Las ideas atornilladas pueden destrozar su base de datos
- La sintaxis SQL es demasiado frágil, pero no lo suficientemente frágil
- No todo es una mesa
- SQL no es tan estándar
- Hay mejores opciones
Las tablas no escala
El modelo relacional ama las mesas, por lo que seguimos construyendolas. Esto está bien para bases de datos pequeñas o incluso de tamaño normal. Pero el modelo comienza a descomponerse a escamas realmente grandes.
Algunos intentan resolver el problema reuniendo viejo y nuevo, como integrar el fragmento en una base de datos de código abierto más antigua. Agregar capas puede parecer que los datos sean más simples de administrar y ofrecer una escala infinita. Pero esas capas agregadas pueden ocultar minas terrestres. A SELECT o JOIN Puede tomar cantidades muy diferentes de tiempo para procesarse dependiendo de la cantidad de datos almacenados en los fragmentos.
El fragmento también obliga al DBA a considerar la posibilidad de que los datos se almacenen en una máquina diferente, o posiblemente incluso en una ubicación geográfica diferente. Un administrador inexperto que comienza a buscar en una tabla puede confundirse si no se dan cuenta de que los datos se almacenan en diferentes ubicaciones. El modelo a veces abstrae la ubicación lejos de la vista.
Algunas máquinas AWS vienen con 24 terabytes de Ram. ¿Por qué? Porque algunos usuarios de bases de datos necesitan tanto. Tienen tantos datos en una base de datos SQL, y funciona mucho mejor en una sola máquina y un solo bloque de RAM.
SQL no es JSON o XML-nativo
SQL puede ser de hoja perenne como idioma, pero no juega particularmente bien con los formatos de intercambio de datos más nuevos como JSON, YAML y XML. Los tres admiten un formato más jerárquico y flexible que SQL. Las entrañas de las bases de datos SQL todavía están atascadas en el modelo relacional con tablas en todas partes.
El mercado encuentra formas de papel de esta queja común. Es relativamente fácil agregar un formato de datos diferente como JSON con el código de pegamento correcto, pero lo pagará con tiempo perdido.
Algunas bases de datos SQL pueden codificar y decodificar formatos de datos más modernos como JsonXml, Gráficoo Yaml como características nativas. Pero en el interior, los datos generalmente se almacenan e indexan utilizando el mismo modelo tabular antiguo. El formato JSON es solo una fachada que puede facilitar la vida del desarrollador, pero también podría ocultar los costos de conversión.
¿Cuánto tiempo se dedica a convertir datos dentro y fuera de estos formatos? ¿No sería más fácil almacenar nuestros datos de una manera más moderna? Algunos desarrolladores de bases de datos inteligentes continúan experimentando, pero lo extraño es que a menudo terminan atornillados en algún tipo de analizador SQL. Eso es lo que dicen los desarrolladores que quieren.
Marshalling es un gran casco de tiempo
Las bases de datos pueden almacenar datos en tablas, pero los programadores escriben código que se ocupa de los objetos. Parece que gran parte del trabajo de diseñar aplicaciones basadas en datos está descubriendo la mejor manera de extraer datos de una base de datos y convertirlos en objetos que la lógica comercial puede utilizar. Luego, los campos de datos del objeto deben estar solteros convirtiéndolos en un SQL Upsert. ¿No hay ninguna manera de dejar los datos en un formato que esté listo para funcionar?
SQL no hace tiempo real
La base de datos SQL original fue diseñada para análisis por lotes y modo interactivo. El modelo de transmisión de datos con tuberías de procesamiento largas es una idea relativamente nueva, y no coincide exactamente.
Las principales bases de datos SQL fueron diseñadas hace décadas cuando el modelo imaginó la base de datos que se sentaba sola y respondía consultas como algún tipo de oráculo. A veces responden rápidamente, a veces no lo hacen. Así es como funciona el procesamiento por lotes.
Algunas de las aplicaciones más recientes exigen un mejor rendimiento en tiempo real, no solo por conveniencia, sino porque la aplicación lo requiere. Sentarse como un gurú en una montaña no funciona tan bien en el mundo de la transmisión.
Las bases de datos más nuevas diseñadas para estos mercados otorgan una prima a la velocidad y la capacidad de respuesta. No ofrecen el tipo de consultas SQL elaboradas que pueden detener todo.
Las uniones son un dolor de cabeza
El poder de las bases de datos relacionales proviene de dividir los datos en tablas más pequeñas y más concisas. El dolor de cabeza viene después.
Reensamblar los datos sobre la marcha con uniones es a menudo la parte más costosa de un trabajo porque la base de datos tiene que hacer malabarismos con todos los datos. Los dolores de cabeza comienzan cuando los datos comienzan a superar la RAM.
Las uniones pueden ser increíblemente confusas para cualquiera que aprenda SQL. Descubrir la diferencia entre las uniones internas y externas es solo el comienzo. Encontrar la mejor manera de conectar varias uniones es aún peor.
Las columnas son un desperdicio de espacio
Una de las grandes ideas de NoSQL fue dar a los usuarios la libertad de las columnas. Si alguien quisiera agregar un nuevo valor a una entrada, podría elegir cualquier etiqueta o nombre que quisiera. No había necesidad de actualizar el esquema para agregar una nueva columna.
Los defensores de SQL solo ven el caos en ese modelo. Les gusta el orden que viene con tablas y no quieren que los desarrolladores agregen nuevos campos sobre la marcha. Tienen un punto, pero agregar nuevas columnas puede ser costosa y lento, especialmente en grandes tablas. Poner los nuevos datos en columnas separadas y combinarlos con uniones agrega aún más tiempo y complejidad.
La optimización solo ayuda a veces
Las compañías de bases de datos e investigadores han pasado mucho tiempo desarrollando buenos optimizadores que desarman una consulta y encuentran la mejor manera de pedir sus operaciones.
Las ganancias pueden ser significativas, pero hay límites para lo que un optimizador puede hacer. Si el administrador de la base de datos presenta una consulta complicada, solo hay mucho que el optimizador puede hacer.
Algunos DBA solo aprenden esto a medida que la aplicación comienza a escalar. Las primeras optimizaciones son suficientes para manejar los conjuntos de datos de prueba durante el desarrollo. Pero en el momento de Crunch, el optimizador golpea una pared. Solo hay tanto jugo que el optimizador puede expulsar una consulta. De una consulta.
La denormalización trata tablas como basura
Los desarrolladores a menudo se encuentran atrapados entre los usuarios que desean un rendimiento más rápido y los mostradores de frijoles que no quieren pagar el hardware. Una solución común es desnormalizar las tablas para que no haya necesidad de uniones complejas o nada cruzado. Todos los datos ya están allí en un rectángulo largo.
Esta no es una mala solución técnica, y a menudo gana porque el espacio en el disco se ha vuelto más barato que la potencia de procesamiento. Pero la denormalización también deja a un lado las partes más inteligentes de SQL y la teoría de la base de datos relacional. Toda esa potencia de base de datos elegante está prácticamente borrada cuando su base de datos se convierte en un archivo CSV largo.
Las ideas atornilladas pueden destrozar su base de datos
Los desarrolladores han estado agregando nuevas funciones a SQL durante años, y algunos son bastante inteligentes. Es difícil estar molesto por las características geniales que no tiene que usar. Por otro lado, estas campanas y silbatos a menudo están atornillados, lo que puede conducir a problemas de rendimiento. Algunos desarrolladores advierten que debes tener mucho cuidado con las subconsules porque retrasarán todo. Otros dicen que seleccionar subconjuntos como expresiones de tabla comunes, vistas o Windows complica en exceso su código. El creador del código puede leerlo, pero todos los demás tienen dolor de cabeza tratando de mantener todas las capas y generaciones de SQL rectas. Es como ver una película de Christopher Nolan pero en código.
Algunas de estas grandes ideas se interponen en el camino de lo que ya funciona. Las funciones de la ventana se diseñaron para hacer que el análisis de datos básico sea más rápido al acelerar el cálculo de resultados como promedios. Pero muchos usuarios de SQL utilizarán alguna función atornillada. En la mayoría de los casos, probarán la nueva función y solo notarán que algo está mal cuando su máquina se ralentiza. Luego necesitarán un DBA de edad avanzada para explicar qué sucedió y cómo solucionarlo.
La sintaxis SQL es demasiado frágil, pero no lo suficientemente frágil
En el pasado lejano cuando nació SQL, solo los humanos escribirían SQL. Ahora tantos sistemas unen consultas automáticamente. Eso les da a los usuarios ingenuos o maliciosos demasiado poder para hacer cosas malas.
Los DBA rápidamente aprenden a evitar palabras reservadas, pero eso no ayuda al usuario casual que podría querer usar «Select Group» como columna. Y luego están las maravillosas soluciones estándar para escapar de palabras reservadas como «Seleccionar». MySQL usa garrapatas traseras. PostgreSQL usa cotizaciones dobles. Solo asegúrese de usar el adecuado para su versión de SQL.
Para empeorar las cosas, los atacantes inteligentes pueden apuntar a este punto débil inyectando comandos SQL en consultas. En lugar de escribir su nombre en un campo, el atacante ingresa ; DROP TABLE users; DROP TABLE products; DROP TABLE orders;--. El analizador SQL está feliz de hacer lo que se le dice. Después de todo, se escribió en una era en la que solo los humanos emitieron las consultas.
No todo es una mesa
Una cantidad sorprendentemente grande de datos se ajusta muy bien a las tablas, pero una cantidad creciente de datos no encaja perfectamente. Por ejemplo, las redes sociales, los datos jerárquicos y muchos fenómenos científicos se modelan con gráficos. Estos se pueden almacenar en tablas, pero hacer cualquier cosa más que la consulta más simple se vuelve compleja. Y luego están los datos espaciales en dos o tres dimensiones. Al menos los datos de la serie temporal tienen solo un eje principal.
Existen otros datos en dos, tres o tal vez incluso múltiples dimensiones. Sin embargo, las tablas tienen solo un eje para las filas y un eje subordinado para las diversas columnas. Esto significa que almacenar datos bidimensionales como la latitud y la longitud es posible, pero los cálculos multidimensionales como la distancia no son fáciles. Las nuevas extensiones geográficas pueden parchearlo, pero el paradigma aún limita.
SQL no es tan estándar
SQL puede ser un estándar ANSI/ISO, pero eso no significa que pueda moverlo de una implementación de soporte estándar a otro. Debes estar pensando en otro significado de la palabra estándar.
Los DBA están muy familiarizados con la amplia variedad de diferencias sintácticas. Mysql usa «CURDATE()«, Oracle usa»SYSDATE«, Y PostgreSQL usa»CURRENT_DATE«. SQL Server le permite concatenar cadenas con un»+«Operador. Otros quieren dos líneas verticales («||«).
Las docenas de incompatibilidades sintácticas son solo el comienzo. Existen grandes diferencias filosóficas entre las implementaciones de procedimientos almacenados, desencadenantes y funciones respaldadas. Incluso los tipos de datos fundamentales tienen matices en su precisión y rango.
Hay mejores opciones
Los equipos de TI a menudo deben conformarse con lo que ya existe. La mejor razón por la que SQL tiene que ir es que tenemos mejores alternativas que son más concisas, flexibles y legibles. Gráficopor ejemplo, a menudo se encuentra en aplicaciones web, donde se usa para solicitar las combinaciones de datos correctas con un patrón simple. Los datos jerárquicos son compatibles naturalmente.
Ya hay varias buenas opciones para buscar bases de datos NoSQL. Muchas de las tiendas de valor clave solo buscan nodos coincidentes. Algunos, como el Mongodb Lenguaje de consulta (MQL), imitar lo popular Json estándar. Los desarrolladores que usan algunas de las soluciones centradas en el documento como SOLR o la búsqueda elástica pueden usar funciones de similitud complejas.
Todo esto puede apoyar consultas que son más poderosas y más fáciles de leer y crear para los humanos. Crean posibilidades para almacenar datos que no se limitan a las tablas llenas de filas y columnas. Qué visión tan estrecha del mundo es.




