Mi base de datos tiene millones de registros

Tener una base de datos que contenga miles de registros es lo más común y fácil de manejar, pero ¿qué pasa cuando tengo millones de registros y esos registros están en una tabla o una colección? Hoy vamos a conversar sobre este escenario.

Cuando una tabla o colección tiene millones de registros, realizar una búsqueda así sea por índices, puede ser muy costosa en uso de recursos (memoria, procesador, disco); para esto muchos dirían que al colocar más recursos se realizaría el proceso de manera rápida, este aumento de recursos no es la panacea de este escenario. De hecho, el no aprovechar las bondades y herramientas de los manejadores de bases de datos es la peor práctica y lamentablemente por desconocimiento o falta de iniciativa por investigar o aprender, es la más usada por los auto-decretados administradores de base de datos.

Colocar más recursos de procesamiento, en efecto ayuda por un tiempo, luego cuando la data crece (lo cual es un comportamiento normal de una base de datos) el problema regresa; para esto existen varias soluciones, unas que implican un costo de inversión y otras que usan las bondades de los manejadores de base de datos para mejorar el rendimiento del mismo.

Volviendo al escenario de la tabla con millones de registros, lo primero que se debe realizar es un particionamiento de tablas  para manejadores de base de datos SQL (PostgreSQL) y sharding  para manejadores de base de datos NoSQL (MongoDB), esta división de la información en pedazos que pueden estar en el mismo equipo o varios equipos, permite que la manipulación de la data sea en segmentos más pequeños capaces de caber en porciones de memoria que se pueden reutilizar y analizar de manera más eficiente y rápida que analizando todo un bloque de millones de registros.

Véase: Particionar tablas en PostgreSQL (http://www.postgresql.org/docs/9.4/static/ddl-partitioning.html)

Véase: Sharding en MongoDB (http://docs.mongodb.org/manual/sharding/)

El partitioning y sharding es la división de una tabla en varias tablas hijas que heredan todas las propiedades de la tabla padre, dicha división se realiza basada en un campo especifico el cual tiene un rango de valor mínimo y máximo para cada uno de los pedazos.

En PostgreSQL, todas las tablas hijas están contenidas en un cluster de base de datos (escalamiento vertical), en MongoDB estos pedazos existen en una instancia de mongo (escalamiento vertical) o varias instancias alojadas en diferentes equipos (escalamiento horizontal).

Realizar un escalamiento vertical es muy simple y el uso de los recursos se maximiza de manera impresionante, mientras que el escalamiento horizontal es un poco más complicado y requiere mayores recursos de hardware, pero los beneficios de este tipo de escalamiento son impresionantes; el tipo de escalamiento va de la mano con la infraestructura que se necesita o se requiere para mantener un servicio que se estima crecerá su demanda en el tiempo.

DesdeLaPlaza.com /Lennin Caro

@lennincaro

@droidstartve