目前,我在InnoDB表中将图像(最大6MB)存储为BLOB。随着数据大小的增长,夜间备份变得越来越慢,影响正常性能。
因此,二进制数据需要转移到文件系统中。(指向文件的指针将保存在数据库中。)
数据具有类似树形结构的关系:
- 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
这将允许我将第一个字符映射到一台服务器,并平均分配目录结构到多个服务器。
但是,这样做反而无法按用户组织图像,可能会将一个相册的图像分散到多个服务器上。
我的问题是:
最佳方法是什么,可以在文件系统中平衡地存储图像数据,同时保持用户/相册数据在一起?
我考虑得对吗?还是完全错误的做法?
更新:
我将使用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切片(我喜欢那个想法!)以使每个目录中的相册数量更少(尽管对大多数用户来说不是必需的)。
谢谢!