Almacenar archivos en un directorio... ¿hay límites?

Almacenar archivos en un directorio... ¿hay límites?

Estoy usando CentOS 5 con Plesk 9 (64 bits), estoy ejecutando un sitio donde los usuarios cargarán imágenes. Con un sistema operativo de 64 bits, ¿existe algún límite en cuanto a la cantidad de archivos que puedo almacenar? Lo único que me importa es el rendimiento y la distribución de los archivos. Preferiría no tener 4 directorios de archivos dispersos. Sin embargo, espero que en algún momento pueda tener entre 200 y 300 mil imágenes.

Respuesta1

Si usted esusando ext3, Encontréesta cita(advertencia: sitio de habla hispana)

"Hay un límite de 32k (32768) subdirectorios en un solo directorio, una limitación que probablemente sea sólo de interés académico, ya que muchas personas ni siquiera tienen tantos archivos (aunque es posible que los grandes servidores de correo deban tenerlo en cuenta). La especificación del inodo ext2 permite que más de 100 billones de archivos residan en un solo directorio"

Otras lecturasmostró que ext3notiene una limitación de 32K, que se puede probar empíricamente con

a=0; i=1; while [ $a == 0 ]; do touch $i; a=$?; let i++; done

perosi tieneun límite de carpeta de 32 K por carpeta, que se puede probar con

a=0; i=1; while [ $a == 0 ]; do mkdir $i; a=$?; let i++; done

Esta afirmación (infundada)dice que

ReiserFS no tiene ningún problema con cientos de miles de archivos en un único directorio. flabdablet - 1 de febrero de 2007

Esta preguntadel sitio hermano stackoverflow.com también podría ayudar.

En general:

  • Alláesun límite a la cantidad de directorios,
  • deberíamantenga sus archivos/directorios por debajo de 32 K, peropoderir mucho más lejos,
  • El sistema de archivos que estás utilizando sí importa.

Respuesta2

Esto depende en gran medida del sistema de archivos que utilice. Ciertas versiones anteriores de ext3 eran atroces con esto, y así es como surgieron los btrees. Reiser tiene mucho más rendimiento con una gran cantidad de archivos como ese. En el pasado, tenía un directorio Novell NSS en un servidor NetWare con 250.000 archivos de 4 kb debido a un error de GroupWise y funcionó bien. Enumerar el directorio fue una mierda, pero acceder a un archivo específico en ese directorio funcionó tan rápido como se esperaba. Como esto fue hace 8 años, debo suponer que los sistemas de archivos Linux modernos pueden manejar eso con aplomo.

Respuesta3

Depende del sistema de archivos que esté utilizando, no de los 64 bits del sistema operativo. Con cada sistema de archivos, habrá algún punto en el que los grandes costos del algoritmo utilizado para buscar en el directorio sacarán lo mejor de la computadora.

Si puede dividir la jerarquía de archivos incluso en una jerarquía de dos (2) niveles, verá una mejor escalabilidad a largo plazo.

Respuesta4

Si vas a ir más allá de unos pocos cientos de imágenes, definitivamente considera dos cosas:

  1. Jerarquías anidadas con nombres de archivos hash;
  2. No usar ext3

Recomendaría usar XFS o, en su defecto, ReiserFS, con una jerarquía de directorios de dos o tres profundidades dividida por pares de dos bytes. p.ej

11/2f/112f667c786eac323e300632b5b2a78d.jpg
49/2f/49ef6eb6169cc57d95218c842d3dee5c.jpg
0a/26/0a26f9f363f1d05b94ceb14ff5f27284.jpg

Esto le dará 256 directorios en los primeros niveles, dividiendo las imágenes en un total de 65535 directorios separados (lo cual es más que suficiente para 100-200k imágenes y más). Hará las cosas mucho más rápidas y escalables, y también hará que su mantenimiento sea mucho más fácil en el futuro.

información relacionada