Necesito almacenar millones de archivos HTML, cada uno alrededor de 100kB (30kB comprimido). Estos archivos pertenecen a un puñado de grupos. Los archivos en cada grupo tienen grandes fragmentos similares.

Me gustaría almacenar estos archivos de forma compacta (mucho mejor que el gzip individual) y recuperarlos por clave. Insertaría nuevos archivos con el tiempo, incluidos los que tengan una nueva estructura. No estoy interesado en buscar los archivos.

¿Existe una solución existente para almacenar estos archivos? Por ejemplo, un servicio especializado en la parte superior de un almacén de objetos.

¿Cuáles son los posibles enfoques para una solución personalizada? Estoy considerando almacenar archivos en grupos comprimidos de 1000 y mantener un índice en una base de datos.

Editar: agregaría continuamente archivos. También me gustaría transmitir todos los archivos en orden de inserción cada pocas semanas.

1
tehwalris 16 ene. 2018 a las 23:05

3 respuestas

La mejor respuesta

Si no necesita acceder a archivos individuales de manera regular, esto es lo que puede hacer:

Cree un archivo de "búsqueda de desplazamiento" que enumere los nombres y tamaños de sus archivos. Concatena todos tus archivos en un enorme archivo enorme.txt. Comprime huge.txt y guárdalo junto con lookup.txt

En el raro caso de que necesite uno de los archivos, descomprima huge.txt, use lookup.txt para encontrar dónde comienza su enorme.txt y cuántos bytes tiene, y extráigalo desde allí.

1
Michael 16 ene. 2018 a las 20:21

Desea concatenar sus grupos de mil archivos en un solo archivo para comprimir, lo que debería aprovechar los bloques comunes, si están dentro de una distancia de 32K bytes entre sí en la concatenación. También puede probar zstd, que tiene tamaños de diccionario mucho más grandes y seguramente podría aprovechar Los bloques comunes.

Puede consultar gzlog para agregar rápidamente nuevos datos a una secuencia de gzip.

2
Mark Adler 19 ene. 2018 a las 15:57

Ligeramente, fuera de la caja, responda: coloque los archivos en un repositorio git. Aparentemente, comprime grandes fragmentos de bytes similares.

2
Ray 19 ene. 2018 a las 10:08
48289006