Этот вопрос закрыт для ответов, так как повторяет вопрос Где и как вы храните изображения в веб-проектах?

Как лучше хранить изображения для сайта?

Предположим, что есть тематический портал, на котором пользователи могут публиковать статьи. К каждой статье можно прикрепить от 0 до 20 изображений. Где лучше всего хранить изображения? Варианты с бд не рассматриваются.

Я определил 2 основных варианта:

1)Хранение изображений на том же сервере, что и сам сайт в древовидной системе каталогов.
2)Хранение изображений на отдельном сервере в одной папке.

Вот интересующие вопросы и критерии сравнения:

1)Вместительность хранилищ. Имена изображений состоят из уникального набора цифр. А древовидная структура состоит из 100 каталогов и имеет приблизительно такой вид:

/photos/1/1/115347123471324.jpg
/photos/1/2/121347123471324.jpg
...

/photos/2/1/211347123471324.jpg
/photos/2/2/221347123471324.jpg
...

Надолго ли хватит 100 таких каталогов, если, например, будет добавляться по 30000 изображений в год?
Не знаю важно ли это, но сервер на Linux. Какое вообще ограничение на количество файлов в одном каталоге?
Сколько может поместиться в один каталог отдельного сервера?

2)Скорость работы. Понятно, что скорость работы напрямую зависит от количества изображений. Вопрос в том, когда начнутся тормоза? Когда в одном каталоге древовидной структуры будет 1000, 5000 или 10000 изображений?
И что в таком случае будет с отдельным сервером, где все изображения в одном каталоге?

3)Как вообще отразится хранение изображений и сайта на одном сервере на работу самого сайта? Сильно ли это повлияет на скорость работы сайта?
  • Вопрос задан
  • 280 просмотров
Решения вопроса 2
@entermix
Используйте структуру каталогов на основе хеша

Примерно так:
// Convert path to hash structure while preserving directory and extension.
	function hash($path, $random = FALSE)
	{
		$hash = ($random) ? md5(time() + rand()) : md5($path);
		
		$path = pathinfo($path);

		$segments = array();
		
		if ($path['dirname'] != '.')
		{
			$segments[] = $path['dirname'];
		}
		
		$segments[] = substr($hash, 0, 2);
		$segments[] = substr($hash, 2, 2);
		$segments[]	= $hash . ((isset($path['extension'])) ? '.' . $path['extension'] : '');
		
		return implode('/', $segments);
	}


$storage_path = hash(date('/Y/m/d/').basename($file).'/', true);


P.S
https://medium.com/eonian-technologies/file-name-h...

P.P.S.
Чем грозит большое количество папок?
Ответ написан
Negash
@Negash
Невнимателен, Технарь
Использовать объектное хранилище типа s3 или minio, дальше это поможет в масштабировании
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы