Quiero crear una base de datos MySQL con 2 tablas, cada una con aproximadamente 1.5B de registros. El tamaño de la base de datos será de aproximadamente 1-2 TB. ¿Qué topología y hardware se recomiendan?

Wowza! Esa es una gran cantidad de datos. Sin saber un poco más sobre la naturaleza de sus datos y sus cargas de trabajo de consultas, será un poco difícil ofrecer una solución genérica. Dicho esto, en aras de la discusión, supongamos que tiene un conjunto de datos que es fácil de particionar y desea consultarlo en tiempo real.

La restricción de consulta en “tiempo real” es lo que lo hace interesante, ya que descontará inmediatamente a Hadoop, ya que funciona con un flujo de trabajo por lotes. Así que estamos de vuelta en MySQL (o alguna variante RDMS), ¿cómo hacemos que esto funcione?

La clave para usar MySQL para hacer esto es que necesitará particionar sus datos en tablas separadas. Entonces, volviendo a la suposición inicial, debe ser capaz de “dividir” sus datos de manera uniforme para poder crear fragmentos de K, cada uno con aproximadamente el mismo número de registros. Entonces, por ejemplo, supongamos que sus datos estaban relacionados de alguna manera con los apellidos (digamos datos del censo de los EE. UU.), Podría dividirlos en función de la primera letra del apellido y tener en cuenta las distribuciones “típicas” de los apellidos.

A partir de ahí, querrás generar suficientes particiones para que cada tabla individual pueda caber en la RAM de la máquina en la que la estás cargando. Mirando SoftLayer Storefront, digamos que puede pagar los servidores de 512 GB de RAM por lo que necesitará 3 particiones.

Bien, ahora sus datos residen en 3 “fragmentos” y suponiendo que haya agregado índices, puede consultarlos de manera razonablemente eficiente. Ahora, volviendo a la segunda suposición, esta técnica solo funcionará bien para un cierto tipo de carga de trabajo de consulta. Cualquier cosa que pueda calcular por separado y luego agregada estará bien, pero cualquier cosa que requiera una UNIÓN será problemática. Además de esto, su aplicación tendrá que ser consciente de la lógica de partición que está sucediendo detrás de escena.

¡En fin, buena suerte!

Depende del archivo de tamaño máximo de su sistema de archivos.

os max bloque de archivos
win32 con FAT / FAT32 2GB / 4GB
win32 w / NTFS 2TB (quizás más grande)
Linux 2.2-Intel 32-bit 2GB (LFS: 4GB)
Linux 2.4+ 4TB (ext3)
Solaris 9/10 16TB
NetWare con sistema de archivos NSS 8TB
MacOS X con HFS + 2TB
win32 con FAT / FAT32 2GB / 4GB
win32 w / NTFS 2TB (quizás más grande)
Linux 2.2-Intel 32-bit 2GB (LFS: 4GB)
Linux 2.4+ 4TB (ext3)
Solaris 9/10 16TB
NetWare con sistema de archivos NSS 8TB
MacOS X con HFS + 2TB