Tenemos una base de datos InnoDB de unos 70 GB y esperamos que crezca a varios cientos de GB en los próximos 2 o 3 años. Alrededor del 60% de los datos pertenecen a una sola tabla. Actualmente, la base de datos funciona bastante bien ya que tenemos un servidor con 64 GB de RAM, por lo que casi toda la base de datos se adapta a la memoria, pero nos preocupa el futuro cuando la cantidad de datos será considerablemente mayor. En este momento estamos considerando alguna manera de dividir las tablas (especialmente la que representa la mayor parte de los datos) y ahora me pregunto cuál sería la mejor manera de hacerlo.MySQL Partitioning/Sharding/Splitting: ¿qué camino tomar?
Las opciones actualmente estoy en cuenta son
- Usar MySQL particionamiento que viene con la versión 5.1
- El uso de algún tipo de biblioteca de terceros que encapsula la partición de los datos (como fragmentos de hibernación)
- La implementación de nosotros mismos dentro de nuestra aplicación
nuestra aplicación está construida en J2EE y EJB 2.1 (esperemos que estamos cambiando a EJB 3 algún día).
¿Qué sugeriría?
EDITAR (2011-02-11):
Apenas una actualización: En la actualidad el tamaño de la base de datos es de 380 GB, el tamaño de los datos de nuestra mesa "grande" es de 220 GB y el tamaño de su índice es de 36 GB . Entonces, aunque toda la tabla ya no cabe en la memoria, el índice sí lo hace.
El sistema sigue funcionando bien (todavía en el mismo hardware) y todavía estamos pensando en particionar los datos.
EDITAR (2014-06-04): Una actualización más: El tamaño de toda la base de datos es de 1,5 TB, el tamaño de nuestra tabla "grande" es de 1,1 TB. Actualizamos nuestro servidor a una máquina de 4 procesadores (Intel Xeon E7450) con 128 GB de RAM. El sistema sigue funcionando bien. Lo que estamos planificando hacer ahora es poner nuestra gran mesa en un servidor de base de datos separado (ya hemos hecho los cambios necesarios en nuestro software) al tiempo que actualizamos a un nuevo hardware con 256 GB de RAM.
Esta configuración se supone que durará dos años. Entonces tendremos que finalmente comenzar a implementar una solución de fragmentación o simplemente comprar servidores con 1 TB de RAM que nos mantendrán activos por un tiempo.
EDITAR (18/01/2016):
Desde entonces, hemos puesto nuestra mesa grande en su propia base de datos en un servidor independiente. Actualmente el tamaño de esta base de datos es de aproximadamente 1.9 TB, el tamaño de la otra base de datos (con todas las tablas excepto la "grande") es de 1.1 TB.
configuración de hardware actual:
- HP ProLiant DL 580
- 4 x (R) Xeon (R) CPU Intel S7- 4830
- 256 GB RAM
rendimiento es fina con esta configuración
Obtenga más memoria en 2-3 años, o use un disco de estado sólido en este momento. Una vez que haya gastado unos cientos de dólares en eso, considere la optimización. – Kurt
¿Podría actualizar el estado actual nuevamente? –
¿Qué hay de nuevo con esto? ¿Qué solución se ha utilizado? – Benj