#Задача 2
Для выполнения описанной задачи по хранению и доступу к большому количеству файлов мною была выбрано хранилище основанное на файловой системе, с проведенной оптимизацией структуры хранения. Для хранения и доступа к большому количеству файлов я решил провести нормализацию основанную на генерации hash-значения от имени файла. На основании полученного хеша я создаю 23-уровневую иерархическую структуру, которая используется как полное имя файла на диске. Это позволило решить следующие задачи
- Неограниченное количество файлов на одном уровне (ограничение большинства файловых систем, для ext4 это 64k файлов на уровне)
- Равномерное распределение по подкаталогам позволяет провести партионинг и горизонтальное масштабирование хранилища монтируя дополнительные диски
- Скорость доступа не зависит от количества файлов в хранилище
- Возможен прямой доступ к данным без использования приложения, например для отдачи статики веб-сервером
Минусы
- Для получения списка хранящихся данных необхохимо построение индекса
- Для поиска по содержимому необходима дополнительная реализация
Я полагаю что указанные минусы не блокируют требования к приложению озвученные в задании. В репозитории находится моя реализация на PHP 5.6 и инструкции по сборке и запуску тестов.
** Filestorage **
-
Install * php composer.phar install
-
Test *
-
all
php composer.phar test
-
unit
./vendor/bin/codecept run unit --steps
-
functional
./vendor/bin/codecept run functional --steps
-
acceptance
./vendor/bin/codecept run acceptance --steps