German Malinovsky
Новичок
Мне нужно придумать стратегию хранения изображений на ФС. Потенциально в такой структуре, должна быть возможность хранить несколько миллионов изображений. Есть ограничение в максимум 1000 файлов/поддиректорий в любой директории.
Допустим, что хранение нужно 1млрд. изображений. Варианты решения, которые я знаю на текущий момент:
1. Делать уникальный идентификатор для каждого файла в 9 символов (напр. id файла в БД, что инкрементится). 9 символов потому что как раз туда влезет 1 млрдное число.
Если id в БД 1 то полный id будет 000000001 (недостающие позиции забиваем нулями). Т.к. нужно не больше 1000 файлов/подпапок, то разбиваем на 3 уровня подпапок по 1000 - /000/000/001/000000001.jpg
/ [1..999] / [1..999] / [1..999] / Полный_id.jpg
2. То же самое как в первом случае только вместо id используем md5 по id или каком-то уникальному генератору id для более равномерного распределения
3. / {YYYY} / {MM} / {DD} / {MD5}-{PX-SIZE}.jpg. Но такой способ не подходит если в день будет добавляться больше 1000 файлов.
Порыскав по сайтам, я нашел вот такие распределения по подпапкам:
a) http://storage1.example.com/images/b/b/3/e/bb3e4912d9174537fe5857e7826fef86/640x424.jpg
Это крупный и посещаемый новостной сайт и 4 уровня подпапок? 16^4 = 65536 файлов может хранить. Или я что-то упускаю?
б). http://cdn.example.com/photos/24/2482/248221/248221small.jpg
Сайт с большим user-generated контентом. Тут вообще выходит, что в папке 2482 может быть больше 1000 подпапок. Опять таки не понятно что они намудрили... Если это не реальные подпапки, а виртуальный путь, то зачем их делать через подпапки в URL, а не как http://cdn.example.com/photos/248221small.jpg
в) http://icdn.example.com/images/2015/05/19/16/2015051916 5830200/pic_a8abdf056bddd69fd599437406f95ad5.jpg
Я так понял это расширеный 3й вариант с дополнительной подпапкой в конкретной дате, в этом случае это 16-я подпапка
г) http://example.com/image/attachments/images/000/009/554/large/JaC2lI0pciMqgQ12tKosQg.jpg
Тут смешан цифровой id и 22 байтовый id (почему-то вместо одного используют два)
Кто сталкивался с проблемой распределения файлов на ФС и как решал?
Очень не хочется использовать разные GridFS, MogileFS и enterprise решения
Допустим, что хранение нужно 1млрд. изображений. Варианты решения, которые я знаю на текущий момент:
1. Делать уникальный идентификатор для каждого файла в 9 символов (напр. id файла в БД, что инкрементится). 9 символов потому что как раз туда влезет 1 млрдное число.
Если id в БД 1 то полный id будет 000000001 (недостающие позиции забиваем нулями). Т.к. нужно не больше 1000 файлов/подпапок, то разбиваем на 3 уровня подпапок по 1000 - /000/000/001/000000001.jpg
/ [1..999] / [1..999] / [1..999] / Полный_id.jpg
2. То же самое как в первом случае только вместо id используем md5 по id или каком-то уникальному генератору id для более равномерного распределения
3. / {YYYY} / {MM} / {DD} / {MD5}-{PX-SIZE}.jpg. Но такой способ не подходит если в день будет добавляться больше 1000 файлов.
Порыскав по сайтам, я нашел вот такие распределения по подпапкам:
a) http://storage1.example.com/images/b/b/3/e/bb3e4912d9174537fe5857e7826fef86/640x424.jpg
Это крупный и посещаемый новостной сайт и 4 уровня подпапок? 16^4 = 65536 файлов может хранить. Или я что-то упускаю?
б). http://cdn.example.com/photos/24/2482/248221/248221small.jpg
Сайт с большим user-generated контентом. Тут вообще выходит, что в папке 2482 может быть больше 1000 подпапок. Опять таки не понятно что они намудрили... Если это не реальные подпапки, а виртуальный путь, то зачем их делать через подпапки в URL, а не как http://cdn.example.com/photos/248221small.jpg
в) http://icdn.example.com/images/2015/05/19/16/2015051916 5830200/pic_a8abdf056bddd69fd599437406f95ad5.jpg
Я так понял это расширеный 3й вариант с дополнительной подпапкой в конкретной дате, в этом случае это 16-я подпапка
г) http://example.com/image/attachments/images/000/009/554/large/JaC2lI0pciMqgQ12tKosQg.jpg
Тут смешан цифровой id и 22 байтовый id (почему-то вместо одного используют два)
Кто сталкивался с проблемой распределения файлов на ФС и как решал?
Очень не хочется использовать разные GridFS, MogileFS и enterprise решения
Последнее редактирование: