2 técnicas de ahorro de espacio para bases de datos sensibles al tamaño

abril 30

Logotipo de Raima sobre fondo gris

Aquí hay dos cambios fáciles pero no obvios que puede realizar en su DDL para disminuir el tamaño de los archivos de su base de datos. Algunas explicaciones interesantes de los aspectos internos de RDM muestran por qué esto funciona y le permiten tomar mejores decisiones sobre DDL en todos los diseños de su base de datos.

Considere el siguiente DDL de SQL:

crear base de datos EventTrace
crear tabla circular TraceTab (
     deviceId smallint,
     lowPoint real,
     maxLevel doble
) maxrows = 8000

El tamaño en disco (o en memoria) de esta fila es de 32 bytes. Parece que debería ser de 14 bytes, con 2 para el smallint, 4 para el real y 8 para el doble. ¿De dónde provienen los 18 bytes adicionales? Si su base de datos es sensible al tamaño, puede ser bueno tener una lección breve sobre los aspectos internos de este DBMS.

Cada fila / registro en RDM tiene un encabezado que consta del tipo de registro (2 bytes) y su propia dirección de base de datos (8 bytes). Después del encabezado, los datos de la fila aparecen en un diseño alineado en C. Esto significa, en la mayoría de los compiladores, que cada elemento se alineará de modo que esté en un límite de N bytes, donde N es el tamaño del elemento. Es decir, un doble de 8 bytes comenzará en un límite de 8 bytes, 4 en 4 y 2 en 2. La estructura definida para el DDL anterior debe rellenarse entre el smallint y el real, y nuevamente entre el real y el doble, con un coste de 2 + 4 = 6 bytes de relleno para cada fila.

Primera técnica: organice las definiciones de columna / campo por tamaño, de mayor a menor.

Nuestra "dirección de base de datos" predeterminada (puntero interno a la ranura de registro) es de 8 bytes (como se mencionó anteriormente), lo que permite hasta 281 billones de filas en un archivo. Puede anular el valor predeterminado y utilizar una dirección de base de datos de 4 bytes, lo que permite hasta 16,7 millones de registros, lo que suele ser más que suficiente. Para hacer esto, diga "dba4" después del nombre de la base de datos. Ahora el encabezado tiene 6 bytes en lugar de 10, y ha guardado otros 4 bytes por fila. El encabezado es importante en un DBMS, porque puede usarse para verificar la consistencia / corrupción.

Segunda técnica: utilice "dba4" cuando sepa que no tendrá más de 16,7 millones de filas en una tabla.

Para su información, cada fila tiene un byte adicional que se usa para almacenar indicadores NULL, un bit para cada columna. Si tiene más de 8 columnas, se utilizará un segundo byte, etc.

Ahora el DDL se ve así:

crear base de datos EventTrace dba4
crear tabla circular TraceTab (
     maxLevel doble,
     lowPoint real,
     deviceId smallint
) maxrows = 8000


Entonces, la longitud total de nuestra fila redefinida pero equivalente es:

2 tipo de registro
4 dirección de base de datos
8 primera columna (maxLevel)
Columna de 4 segundos (punto bajo)
2 tercera columna (deviceId)
1 bits de columna nula

21 bytes en total / fila

Una información más: cuando las filas se colocan en espacios de página de longitud fija, siempre van a direcciones pares. Esto reduce sustancialmente la cantidad de operaciones de memcpy que necesita la biblioteca en tiempo de ejecución. Por tanto, el tamaño de esta fila es de 22 bytes y 46 de ellos caben en una página de 1024 bytes.

Todo lo anterior se aplica a una definición de base de datos que no es SQL, con una excepción: no hay ningún byte de indicadores NULL. La sintaxis del DDL es diferente, por supuesto, pero significa lo mismo.

Get notified about new RDM updates

Be the first to know about new Raima Database Manager updates when they go live, use cases, industry trends and more.