2010-11-04 5 views
1

Мы в процессе создания системы, которая позволяет пользователям загружать несколько изображений и видео на наши серверы.Управление активами: что является лучшим способом организовать созданные пользователем файлы на веб-сервере?

Команда, с которой я работаю, решила сохранить все активы, принадлежащие пользователю, в папке с именем, используя уникальный идентификатор пользователя. Эта папка, в свою очередь, будет подпапкой нашей основной папки ресурсов на файловом сервере.

Структура файла они предложили следующим образом:

[asset_root]/userid1/assets1 
[asset_root]/userid1/assets2 

[asset_root]/userid2/assets1 
[asset_root]/userid2/assets2 

etc. 

Мы ожидаем тысячи или, возможно, миллион + пользователей в то время жизни этой системы.

Я всегда думал, что это не очень хорошая идея, чтобы иметь много вложенных папок в одном месте и предложил год/месяц/день подход следующим образом:

[asset_root]/2010/11/04/userid1/assets1 
[asset_root]/2010/11/04/userid1/assets2 

[asset_root]/2010/11/04/userid2/assets1 
[asset_root]/2010/11/04/userid2/assets2 

etc. 

Кто-нибудь знает, какой из выше подходы будут лучше подходят для этого много активов? Есть ли лучший способ организовать изображения/видео на сервере?

Система, о которой идет речь, будет Windows IIS 7.5 с SAN.

Большое спасибо заранее.

ответ

1

В целом вы правы, поскольку многие файловые системы налагают ограничение на количество файлов и папок, которые могут находиться в одной папке. Если вы нажмете этот предел с количеством пользователей, у вас есть, у вас проблемы.

В общем, я бы просто использовал uuid для каждого изображения с некоторым размером разбиения. например Хеш ABCDEFGH закончится как [asset_root]/ABC/DEFGH. Использование хэша дает вам большую уверенность в количестве файлов, которые попадают в каждую папку, и не позволяет вам беспокоиться о том, что, например, не зная, в каком месяце было сохранено нужное изображение.

+0

Спасибо за быстрый ответ. Использование uuid и разметки кажется отличной идеей! Одной из причин, по которой команда хочет пойти с их решением, является то, что нет необходимости хранить пути к файлам в базе данных, если все пользовательские активы находятся в одной папке, но, очевидно, имеют свои ограничения. – purplemass

+0

Если вы не храните пути в базе данных, я думаю, вы пожалеете об этом. В конце концов вам нужно будет найти, сколько места используется каждым пользователем, получить статистику по использованию или любой из миллиона вещей. Вы не хотите проходить через файловую систему, чтобы определить, должна ли отображаться ссылка «Файлы» на странице профиля пользователя. –

+0

Мы пошли с решением, основанным на вашем ответе: каждый идентификатор пользователя - это 10-значный номер, поэтому папка, созданная для пользователя 1234567890: [asset_root]/1234/567/890 /. Что касается вашей точки при сохранении путей в базе данных: мы сохраняем логическое значение, чтобы показать, был ли актив сохранен или нет, - подумал, что это может быть более эффективным в долгосрочной перспективе и должно быть достаточным для получения статистики и т. Д. – purplemass

0

Я предполагаю, что ваша файловая система NTFS? ЕСЛИ так, у вас есть ограничение на 4 294 967 295 файлов на диске - предел файлов в папке одинаковый. Если у вас порядка миллионов пользователей, вы должны быть в порядке, хотя вы можете захотеть иметь только одну папку для каждого пользователя, а не несколько, как показывает ваш пример.

+0

Как вы думаете, файловый сервер будет работать по-другому (медленнее), если в одной папке есть тысячи подпапок? Я помню, как открывал папку с сотнями файлов в Windows 2000 и должен был ждать несколько минут до отображения файлов/папок. – purplemass

+0

Я никогда не тестировал его.Тем не менее, сервер может работать несколько медленнее, но, вероятно, недостаточно, чтобы оправдать сложность структуры папок, особенно по сравнению с неэффективностью наличия десятков потоков, которые пытаются одновременно прочитать и записать эти ресурсы на жесткий диск. :) –