Saltar al contenido

Grandes soluciones de datos: Es hora de empezar a pensar fuera de la caja

Cuando se trata de grandes soluciones de datos, es hora de empezar a pensar fuera de la caja. Y eso es porque no hay una solución perfecta para todas y cada una de las situaciones; diferentes circunstancias y necesidades requieren diferentes técnicas. Enseñar las clases de T-SQL significa que a menudo me hacen preguntas sobre esto. La mayoría de las veces simplemente le digo a la gente que la «mejor técnica» realmente depende. En primer lugar, depende de tener toda la información necesaria para tomar ese tipo de decisión, y, de nuevo, normalmente no hay una única respuesta correcta que funcione para cada situación.

No hay absolutos

Por supuesto, hay algunas respuestas obvias, como ejecutar DBCC DROPCLEANBUFFERS en tu servidor SQL de producción (¡no lo hagas!). Pero la realidad es que hay pocas reglas absolutas cuando se trata de SQL Server. Les digo a mis estudiantes que cada técnica que conocen en T-SQL es una herramienta en su arsenal. Incluso los temidos cursores tienen sus puntos fuertes y deben ser utilizados cuando tiene sentido.

Grandes soluciones de datos: Es hora de empezar a pensar fuera de la caja
Grandes soluciones de datos: Es hora de empezar a pensar fuera de la caja

Desde 2002, he centrado mi carrera en SQL Server, y normalmente me llaman para ayudar a los clientes con las soluciones existentes alojadas en SQL Server. El Servidor SQL ha sido mi mundo, y he descubierto que hay suficientes clientes que necesitan ayuda con él que no necesito pasar mucho tiempo fuera de este mundo. Desafortunadamente, he tenido que aprender que, a pesar de lo que siento por SQL Server, también es una herramienta más de la caja de herramientas.

Recientemente, me pidieron que ayudara a un cliente con una base de datos de 1.2 TB. El cliente recibe los archivos de un proveedor trimestralmente e importa los datos de los archivos al servidor SQL. Luego el cliente realiza algunas agregaciones de los datos para su análisis. Me llamaron para pedirme consejo sobre cómo cargar los datos más eficientemente y hacer los cálculos más rápidos. Como los datos ya vivían en el Servidor SQL, no pensé en moverlos a ningún lado.

Mi primer pensamiento fue que las grandes tablas de la base de datos necesitaban ser particionadas. La partición del Servidor SQL permite mover fácilmente los datos dentro y fuera de una tabla particionada en base a una clave de partición. Esto parecía un problema muy fácil de resolver, excepto por un gran problema: El servidor no estaba ejecutando la Enterprise Edition, que es necesaria para la función de partición. Actualizar a la Enterprise Edition es una propuesta costosa.

Entonces echamos un vistazo al proceso que realizó los cálculos. El procesamiento de 8000 filas tomó tres minutos. Después de ayudar con los índices y algunas optimizaciones de código, fuimos capaces de procesar 8000 filas en sólo ocho segundos – no es una mala mejora.

Encontrar otras soluciones

Meses más tarde, durante un viaje al sitio del cliente para otros trabajos, se entusiasmaron al contarme sobre su nueva solución NoSQL alojada en Azure. La nueva solución les permite procesar 20.000 filas en menos de un segundo. Estaba ansioso por saber más. Resultó que, por un costo mínimo, podían usar Azure Tables para almacenar los datos, en vez de dentro de una base de datos tradicional. Como este cliente sólo hace análisis, no procesamiento transaccional, esto funciona.

Es fácil copiar los datos a las Tablas Azules. No tienes que preocuparte por el bloqueo o el bloqueo. Las Tablas Azules pueden ser divididas. El cliente descubrió la mejor manera de particionar los datos, y terminó con cuatro millones de particiones. Para procesar los datos, están usando un programa C#. El proceso puede ser multi-hilo en todas las particiones, y por eso es tan rápido. Me recuerda al antiguo procesamiento COBOL donde los cálculos se realizan sobre archivos en código, pero las Tablas Azules son mucho, mucho más rápidas.

El cliente tiene ideas para una funcionalidad adicional usando estas técnicas. Usando múltiples cuentas de almacenamiento en Azure, pueden segregar diferentes procesos para que todos funcionen rápidamente sin interferencias entre ellos. Cuando se alojan en el Servidor SQL, hay límites basados en el hardware existente. Esos límites se eliminan con las soluciones de Big Data.

Para llevar

Esta es una experiencia que quería compartir, porque aprendí mucho de ella. Para empezar, necesito empezar a pensar fuera de la caja del Servidor SQL. Si has estado atrapado dentro de una caja propia, es hora de hacer espacio para otras soluciones. Estoy deseando experimentar con las muchas soluciones disponibles, especialmente las que se encuentran en Azure como Machine Learning y HDInsight. Es ciertamente un momento emocionante para estar en la tecnología!