Archive Engine, almacenamiento masivo
A veces es necesario almacenar una gran cantidad de datos en MySQL, por ejemplo las típicas tablas con los logs del sistema, fichajes de empleados, estadísticas de correo, resultados de encuestas, etc.. Son tablas que aumentan constantemente y que nunca dejarán de hacerlo. Por otro lado son tablas que a pesar de almacenar tantos datos y ocupar tanto espacio no podremos eliminar, ya sea porque son necesarios o porque nuestro jefe sufre el Síndrome de Diógenes. En esos casos, cuya única función es el almacenamiento constante y la consulta esporádica, cosas como integridad referencial o transacciones nos importa bien poco. Lo que nos tiene que preocupar es el tamaño de la tabla y el espacio libre en disco duro.
Para este tipo de almacenamiento existe un engine que nos puede ayudar, Archive:
- Compresión de datos al vuelo según se van introduciendo
- Bloqueo a nivel de fila
- Autoincrementales
- No permite eliminar o actualizar, solo añadir
- No soporta índices (excepto en autoincrementales), claves externas o transacciones
- La velocidad en lectura es muy similar :)
Veamos la relación entre rendimiento/tamaño de las tablas, comparando InnoDB con Archive. La BBDD que usaremos será "employee", que se puede descargar de https://launchpad.net/test-db.
InnoDB
Tamaño de las tablas:
210 megas
Tiempo de lectura:
mysql [localhost] {msandbox} (employees) > select count(\*) from salaries where emp_no like '%'; +----------+ | count(\*) | +----------+ | 2844047 | +----------+ 1 row in set (3.42 sec) mysql [localhost] {msandbox} (employees) > select count(\*) from employees where emp_no like '%'; +----------+ | count(\*) | +----------+ | 300024 | +----------+ 1 row in set (0.42 sec)
Archive
Tamaño del las tablas:
31 megas
Tiempo de lectura:
mysql [localhost] {msandbox} (employees) > select count(\*) from salaries where emp_no like '%'; +----------+ | count(\*) | +----------+ | 2844047 | +----------+ 1 row in set (3.07 sec) mysql [localhost] {msandbox} (employees) > select count(\*) from employees where emp_no like '%'; +----------+ | count(\*) | +----------+ | 300024 | +----------+ 1 row in set (0.51 sec)
Ocupa menos y es ligeramente más rápido que InnoDB.
Ya sabes que hacer con tus tablas de almacenamiento masivo :)







