Как хранить изображения в вашей файловой системе
В настоящее время у меня есть изображения (макс. 6 МБ), хранящиеся как BLOB в таблице InnoDB. По мере того, как размер данных растет, ночные резервные копии растут все медленнее и мешают нормальной производительности.
Итак, двоичные данные должны идти в файловую систему. (указатели на файлы будут храниться в БД.)
Данные имеют древовидное отношение:
- main site
- user_0
- album_0
- album_1
- album_n
- user_1
- user_n
etc...
Теперь я хочу, чтобы данные распределялись равномерно по структуре каталогов. Как мне это сделать?
Я думаю, я мог бы попробоватьMD5('userId, albumId, imageId');
и нарезать полученную строку, чтобы получить мой путь к каталогу:
/var/imageStorage/f/347e/013b/c042/51cf/985f7ad0daa987d.jpeg
Это позволило бы мне сопоставить первый символ с сервером и равномерно распределить структуру каталогов по нескольким серверам.
Это однаконе сохраняйте изображения, организованные для каждого пользователя, вероятно распределяя изображения для 1 альбома по нескольким серверам.
Мой вопрос:
Каков наилучший способ сбалансированного хранения данных изображения в файловой системе при одновременном сохранении данных пользователя / альбома?
Думаю ли я в правильном направлении? или это неправильный способ делать вещи вообще?
Обновить:
Я пойду заmd5(user_id)
нарезка строк для разделения на высшем уровне. А затем поместите все пользовательские данные в ту же корзину. Это обеспечит равномерное распределение данных при одновременном хранении пользовательских данных.
/var - imageStorage - f/347e/013b - f347e013bc04251cf985f7ad0daa987d - 0 - album1_10 - picture_1.jpeg - 1 - album1_1 - picture_2.jpeg - picture_3.jpeg - album1_11 - picture_n.jpeg - n - album1_n
Я думаю, что я буду использовать albumId, разделенный сзади (мне нравится эта идея!), Чтобы уменьшить количество альбомов в каталоге (хотя это не будет необходимо для большинства пользователей).
Спасибо!