【发布时间】:2010-09-16 13:13:37
【问题描述】:
目前,我已将图像(最大 6MB)作为 BLOB 存储在 InnoDB 表中。 随着数据量的增长,每晚备份的速度越来越慢,影响了正常性能。
所以,二进制数据需要进入文件系统。 (指向文件的指针将保存在数据库中。)
数据具有树状关系:
- main site
- user_0
- album_0
- album_1
- album_n
- user_1
- user_n
etc...
现在我希望数据通过目录结构均匀分布。我应该如何做到这一点?
我想我可以尝试MD5('userId, albumId, imageId'); 并将结果字符串切分以获得我的目录路径:
这将允许我将第一个字符映射到服务器并将目录结构均匀地分布在多个服务器上。
然而,这不会按用户组织图像,可能会将 1 个相册的图像分布在多个服务器上。
我的问题是:
以平衡的方式将图像数据存储在文件系统中,同时将用户/相册数据保存在一起的最佳方法是什么?
我的想法是否正确?还是这完全是错误的做事方式?
更新:
我将使用md5(user_id) 字符串切片,以便在最高级别进行拆分。
然后将所有用户数据放在同一个桶中。这将确保数据的均匀分布,同时将用户数据存储在一起。
我想我会使用从后面拆分的 albumId(我喜欢这个主意!)以减少每个目录的专辑数量(尽管对于大多数用户来说不是必需的)。
谢谢!
【问题讨论】:
-
您是否考虑过对数据库进行增量备份?
-
啊 - 我建议将“均匀分布”编辑为“均匀分布”。我现在意识到您的目标是尝试平均每个文件系统文件夹的图片数量。
-
我认为增量备份只能暂时解决问题。
标签: database data-structures blob file-organization