sql >> Base de Datos >  >> RDS >> Mysql

Arquitectura de base de datos para millones de nuevas filas por día

Si está hablando de grandes volúmenes de datos, mire particionamiento de MySQL . Para estas tablas, una partición por fecha/hora sin duda ayudaría al rendimiento. Hay un artículo decente sobre particiones aquí .

Mire la creación de dos bases de datos separadas:una para todos los datos sin procesar para las escrituras con una indexación mínima; un segundo para informar usando los valores agregados; ya sea con un proceso por lotes para actualizar la base de datos de informes desde la base de datos sin procesar, o use la replicación para hacerlo por usted.

EDITAR

Si desea ser realmente inteligente con sus informes de agregación, cree un conjunto de tablas de agregación ("hoy", "semana hasta la fecha", "mes hasta la fecha", "por año"). Agregue desde datos sin procesar hasta "hoy", ya sea diariamente o en "tiempo real"; agregado de "por día" a "semana hasta la fecha" por noche; de "semana hasta la fecha" a "mes hasta la fecha" semanalmente, etc. Al ejecutar consultas, únase (UNION) a las tablas adecuadas para los intervalos de fechas que le interesen.

EDITAR #2

En lugar de una tabla por cliente, trabajamos con un esquema de base de datos por cliente. Dependiendo del tamaño del cliente, podemos tener varios esquemas en una sola instancia de base de datos o una instancia de base de datos dedicada por cliente. Usamos esquemas separados para la recopilación de datos sin procesar y para la agregación/informes para cada cliente. Ejecutamos múltiples servidores de bases de datos, restringiendo cada servidor a una sola instancia de base de datos. Para mayor resiliencia, las bases de datos se replican en varios servidores y se equilibran las cargas para mejorar el rendimiento.