相关疑难解决方法(0)

如何在文件系统中存储图像

目前,我在InnoDB表中将图像(最大6MB)存储为BLOB.随着数据量的增长,夜间备份越来越慢,阻碍了正常的性能.

因此,二进制数据需要转到文件系统.(指向文件的指针将保存在数据库中.)

数据具有树关系:

- main site
  - user_0
    - album_0
    - album_1
    - album_n
  - user_1
  - user_n
etc...
Run Code Online (Sandbox Code Playgroud)

现在我希望数据通过目录结构均匀分布.我该怎么做到这一点?

我想我可以尝试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(我喜欢这个想法!),以保持每个目录的专辑数量更小(尽管大多数用户不需要).

谢谢!

database file-organization blob data-structures

30
推荐指数
2
解决办法
1万
查看次数