Pregunta

Estoy buscando construir un servidor con muchos archivos pequeños entregados por una API XML. No hará muchas iteraciones sobre directorios o bloques de archivos secuenciales; estamos hablando de muchas búsquedas de datos discontinuos.

¿El tiempo de búsqueda en BSD UFS se degradará con el tiempo para solicitudes de archivos individuales? Entiendo que el límite de inodo del sistema de archivos se basa en el tamaño de la partición / segmento, pero el disco duro tiene que recorrer la tabla de inodo para cada solicitud de archivo antes de que pueda descubrir la ubicación de los datos. ¿Qué sistema de archivos produce el mejor rendimiento para el tiempo de búsqueda?

La alternativa es configurar 2-4GB " blob " archivos y tienen un sistema separado para buscar un archivo contenido en ellos desde el software. La "tabla de inodo" del software podría optimizarse para la entrega en función del usuario actualmente conectado, etc. Estas "tablas de inodo" probablemente se almacenaría en caché en la RAM y solo se relacionaría con los usuarios actualmente conectados para que haya menos recursos desperdiciados.

¿Dónde se clasifican estas dos soluciones desde el punto de vista de la escalabilidad y el mantenimiento? ¿Qué tipo de aumento de rendimiento, si corresponde, podría esperar al usar la segunda solución?

¿Fue útil?

Solución

La técnica de mitigación más obvia y probada en el tiempo es usar un buen diseño jerárquico para directorios (y estrategias de búsqueda de nombres de ruta), y tener más directorios con menos archivos en cada uno.

Otros consejos

Para versiones recientes de FreeBSD con dirhash y actualizaciones suaves que he visto sin problemas con unos diez mil archivos por directorio. Probablemente no quiera ir al norte de 500,000 archivos más o menos. P.ej. borrar un directorio con 2.500.000 archivos me llevó tres días.

No estoy seguro de entender su pregunta correctamente, pero si desea buscar muchos archivos, ¿por qué no usar una tabla mysql dividida en un sistema de archivos RAID0 o VFS?

Editar: hasta donde yo sé, muchos archivos en una carpeta degradarán cualquier velocidad FS ya que tiene que mantener listas más grandes de archivos, permisos y nombres, una base de datos está diseñada para mantener listas de datos en la memoria y buscar de una manera muy optimizada a través de él.

Sería útil tener más detalles de su situación, ¿existen los archivos o su aplicación los creará? Si necesita una forma de almacenar datos arbitrarios sin la estructura de una base de datos relacional, ¿ha buscado en bases de datos de objetos

Otra opción, si sus objetos deben o pueden accederse a través de HTTP, es usar un barniz caché frente a un pequeño servidor web. Inicialmente, los objetos se almacenarían en el disco, pero el barniz almacenaría y serviría objetos de la memoria después del primer acceso a un objeto dado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top