В настоящее время у меня есть изображения (макс. 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
Я думаю, что я буду использовать идентификатор альбома, разделенный сзади (мне нравится эта идея!), Чтобы уменьшить количество альбомов в каталоге (хотя это не будет необходимо для большинства пользователей).
Спасибо!