目前,我将图像(最大 6MB)作为 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 - 图像存储 - f/347e/013b - f347e013bc04251cf985f7ad0daa987d - 0 - 专辑 1_10 - 图片_1.jpeg - 1 - 专辑 1_1 - 图片_2.jpeg - 图片_3.jpeg - 专辑 1_11 - 图片_n.jpeg -n - 专辑 1_n
我想我会使用从后面拆分的 albumId(我喜欢这个主意!)以保持每个目录的专辑数量更小(尽管对于大多数用户来说这不是必需的)。
谢谢!