目前,我有图像(最大6MB)作为BLOB存储在InnoDB表中. 随着数据大小的增长,夜间备份的增长速度越来越慢,从而阻碍了正常性能.
因此,二进制数据需要转到文件系统.(指向文件的指针将保留在数据库中.)
数据具有树状关系:
- main site
- user_0
- album_0
- album_1
- album_n
- user_1
- user_n
etc...
现在,我希望数据通过目录 struct 均匀分布.我该怎么做呢?
我想我可以try MD5('userId, albumId, imageId');
并将结果字符串分割,以获得我的目录路径:
/var/imageStorage/f/347e/013b/c042/51cf/985f7ad0daa987d.jpeg
这将允许我将第一个字符映射到服务器,并将目录 struct 均匀分布在多个服务器上.
然而,这将保持每个用户not张图片的组织,可能会将一张相册的图片分散到多个服务器上.
我的问题是:
在保持用户/相册数据在一起的同时,以平衡的方式将图像数据存储在文件系统中的最佳方式是什么?
我想的方向对吗?或者这是完全错误的做法吗?
Update:
我会go 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
我想我会用从后面拆分的相册(我喜欢这个主意!)保持每个目录的专辑数量较少(虽然这对大多数用户来说不是必需的).
谢谢!