Master812
25.10.2017 - 01:01
Всем привет!
Пишу свой движок, сейчас остановился на менеджере файлов. Реализовал его просто - в каждую папку записывается не более 1000 файлов. Если это число превышено, то создаётся вторая папка и в неё тоже записывается 1000 файлов, затем третья папка, четвёртая и так далее до 1000 папок. В сумме в такую систему можно воткнуть до 1 миллиона файлов. Но вот вопрос: не будет ли тормозов от такого количества? И сколько вообще папок можно создавать, чтобы сервер не тормозил? Мощность сервера средняя.
Жду ответа.
С уважением, Алексей.
AllesKlar
25.10.2017 - 01:16
В FAT32 максимальное количество файлов на логическом диске 4,194,304.
В NTFS максимальное количество файлов на логическом диске 4,294,967,295.
В ext4 максимальное количество файлов на логическом диске до 4,294,967,295 (указывается при создании ФС).
Производительность зависит от ОС.
1000 файлов в папке - это незаметно для любой ОСи.
У меня на дебиане, после ~2Mio файлов в папке перестали работать маски типа ls image*.*
Пришлось строить иерархию каталогов типа файл 123456789.jpg лежит в /123/456/123456789.jpg
Фактически получилось, что в каждой папке не более 1000 файлов/каталогов.
Полет нормальный.
_____________
[продано копирайтерам]
Master812
так и делай. хорошее решение. иначе при большом кол-ве файлов в одной папке - тормоза жуткие.
waldicom
25.10.2017 - 12:02
Думаю, что подход AllesKlar'а эффективнее - файл с определенным именем всегда будет лежать по определенному пути. Можно вообще брать md5 файла и строить папки по нему
_____________
Свои мозги еще никто не отменял.
Телепатов нету.
AllesKlar
25.10.2017 - 14:19
Цитата (waldicom @ 25.10.2017 - 10:02) |
Можно вообще брать md5 файла и строить папки по нему |
Это сейчас как раз в разработке.
Минус подхода - нужно хранить md5 суммы файлов, при попытке поиска файла по имени.
Плюс подхода - в системе не будет двух одинаковых файлов. Т.е., если два пользователя загрузили в разное время один и тот же файл, даже под разными именами, то фактически будет перелинковка имен файлов к одному физическому файлу.
_____________
[продано копирайтерам]
FatCat
25.10.2017 - 17:04
Цитата (AllesKlar @ 25.10.2017 - 00:16) |
Пришлось строить иерархию каталогов типа файл 123456789.jpg лежит в /123/456/123456789.jpg Фактически получилось, что в каждой папке не более 1000 файлов/каталогов. |
Аналогияно у нас на форуме предусмотрено хранение сообщения не в БД, а в файле.
Айдишник твоего сообщения 3135069, значит его адрес после архивирования будет /arc/3/135/69.gz
_____________
Бесплатному сыру в дырки не заглядывают...
Master812
26.10.2017 - 01:15
Спасибо всем за советы!
Доработал свой скрипт, а именно сделал в нём папки второго уровня вложенности, т.е. теперь в 1-ом уровне может находится 1000 папок, далее в них самих (во 2-ом уровне вложенности) может находиться ещё 1000 папок и в них уже находятся файлы в количестве до 1000 штук. Итого 1000*1000*1000 = 1 миллиард файлов!
При этом сохраняется название файлов. А сами папки естественно имеют нумерацию.
При загрузке адрес файлов будет таков
site.ru/files/1/1/Бухгалтерские_документы.docГде зелёным помечена папка 1-ого уровня, а красным - второго уровня.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.