目前,我有图像(最大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

我想我会用从后面拆分的相册(我喜欢这个主意!)保持每个目录的专辑数量较少(虽然这对大多数用户来说不是必需的).

谢谢!

推荐答案

从后面分开你的用户名就行了.例如:

UserID = 6435624 
Path = /images/24/56/6435624

对于备份,您可以使用MySQL复制并备份从机 数据库以避免备份时出现问题(例如锁定).

Database相关问答推荐

撤销语句释放类实例中可用的缓冲区

使用 golan 查询 mongodb 中的集合并返回 id 作为字符串

将数据集上传到 Hub 时停止运行时会导致什么?

使用 Java 对 mysql 数据库进行简单备份和恢复

按请求的可变事务隔离级别

苹果 ios 购买收据数据的可能最大长度是多少?

group by会自动保证order by吗?

寻找基于磁盘的类 redis 数据库

在 phpmyadmin 中导入时如何跳过重复记录

C# 连接到数据库并列出数据库

使用 Flask 时 Python 中持久数据库连接的最佳实践

恢复数据库备份时出错

数据库表中的索引有什么缺点?

MySQL 转储所有数据库并在导入时创建(或重新创建)它们?

限制一个 sqlite 表的最大行数

PDO SQL 状态00000但仍然错误?

如何在没有验证提取的情况下将 MSSQLServer 数据库提取为 .dacpac?

如何在每个 SQLite 行中插入唯一 ID?

存储信用卡号 - PCI?

以可能的数据丢失为代价提高 PostgreSQL 写入速度?