Tengo una base de datos basada en archivos que tiene aproximadamente 2 millones de archivos almacenados en 3 niveles de subdirectorios.
2/2/6253
2/2/6252
...
El archivo varía desde 30 bytes hasta 60 KB. Toda la base de datos es de solo lectura. DB tiene aproximadamente 125 Gigabytes de tamaño.
Agregado:Todos los archivos están comprimidos por zlib (python)
Quiero manejarlo todo como un archivo con un sistema de archivos. ¿Qué sistema de archivos sería mi mejor elección?
Por el momento uso el siguiente script:
dd if=/dev/zero of=/my_file.iso bs=1024K count=60000
mkfs.ext4 -f /my_file.iso
mount -o loop /my_file.iso /mnt/
Respuesta1
Probablemente sólo quieras usar XFS.
Es bastante capaz de lo que estás pidiendo y hace el trabajo.
No hay razón para complicar esto con sistemas de archivos menos utilizados, que pueden conllevar otras compensaciones.
Por favor mira:¿Cómo afecta la cantidad de subdirectorios al rendimiento de lectura/escritura de la unidad en Linux? yEl impacto de una alta proporción de directorio a archivo en XFS
Si desea algo más esotérico, ZFS zvols con un sistema de archivos en la parte superior podría proporcionar una alternativa interesante (para fines de compresión, integridad y portabilidad).
Mira aquí:Sistema de archivos de compresión transparente junto con ext4
Respuesta2
Al ver la cantidad de archivos pequeños, consideraría usar SquashFS. Especialmente si tienes una CPU lo suficientemente potente (es decir, sin Pentium III o ARM de 1 GHz).
Dependiendo del tipo de datos almacenados, SquashFS puede reducir en gran medida su tamaño y, por tanto, la E/S al leerlos. El único inconveniente es el uso de la CPU en lectura. Por otro lado, cualquier CPU moderna puede descomprimir a velocidades que superan con creces a las HDD y probablemente incluso a las SSD.
Como otra ventaja, ahorra espacio/ancho de banda y/o tiempo dedicado a descomprimir después de la transferencia.
Algunos puntos de referenciacomparándolo con ISO y otros medios similares. Como ocurre con todos los puntos de referencia, tómalo con cautela y, mejor aún, finge el tuyo propio. ;-)
Editar: dependiendo de las circunstancias (y no me atrevo a adivinar aquí), SquashFS sin compresión ( mksquashfs -noD
) podría superar a ext4, ya que el código de lectura debería ser mucho más simple y optimizado para operación de solo lectura. Pero eso realmente depende de usted para comparar su caso de uso. Otra ventaja es que la imagen de SquashFS es un poco más grande que sus datos. Con Ext4 siempre debes crear un dispositivo de bucle más grande. La desventaja es, por supuesto, que resulta bastante incómodo cambiar los datos. Eso es mucho más fácil con ext4.
Respuesta3
Si es de sólo lectura, ¿por qué no utilizar un archivo ISO? Puedes usar genisoimage
o mkisofs
.
Si desea comprimir todo, también puede usar squashfs
, otro sistema de archivos de solo lectura con una relación de compresión muy alta.
Respuesta4
No estoy seguro de si esto se ajusta a su propósito, pero ¿ha considerado tar
combinar varios archivos? Eso podría disminuir la presión y los requisitos de espacio en el sistema de archivos, y su aplicación de base de datos puede leer datos de un archivo específico con una de las muchas tar
bibliotecas disponibles.
Dependiendo de su patrón de acceso, esto podría incluso aumentar el rendimiento.