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

Almacenamiento eficiente de 7.300.000.000 filas

"Ahora, ¿cómo abordaría el problema descrito?"

Con archivos planos simples.

He aquí por qué

Tienes 2.000.000 de entidades. Partición basada en el número de entidad:

level1= entity/10000
level2= (entity/100)%100
level3= entity%100

Cada archivo de datos es level1/level2/level3/batch_of_data

Luego puede leer todos los archivos en una parte determinada del directorio para devolver muestras para su procesamiento.

Si alguien quiere una base de datos relacional, entonces cargue archivos para una entidad_id determinada en una base de datos para su uso.

Editar En números de día.

  1. El date_id /entity_id la regla de unicidad es no algo que tiene que ser manejado. Es (a) trivialmente impuesto en los nombres de los archivos y (b) irrelevante para realizar consultas.

  2. El date_id "rollover" no significa nada, no hay consulta, por lo que no es necesario cambiar el nombre de nada. El date_id simplemente debería crecer sin límites a partir de la fecha de época. Si desea purgar los datos antiguos, elimine los archivos antiguos.

Dado que ninguna consulta se basa en date_id , nunca hay que hacer nada con él. Puede ser el nombre del archivo para todo lo que importa.

Para incluir el date_id en el conjunto de resultados, escríbalo en el archivo con los otros cuatro atributos que están en cada fila del archivo.

Editar en abrir/cerrar

Para escribir, debe dejar los archivos abiertos. Realiza vaciados periódicos (o cierra/reabre) para asegurarse de que las cosas realmente vayan al disco.

Tiene dos opciones para la arquitectura de su escritor.

  1. Tenga un solo proceso de "escritor" que consolide los datos de varias fuentes. Esto es útil si las consultas son relativamente frecuentes. Paga por fusionar los datos en el momento de la escritura.

  2. Tenga varios archivos abiertos simultáneamente para escribir. Al consultar, combine estos archivos en un solo resultado. Esto es útil si las consultas son relativamente raras. Pagas por fusionar los datos en el momento de la consulta.