【发布时间】:2012-09-30 21:25:10
【问题描述】:
我正在尝试在数据库中存储至少 500,000 多个小“文件”(平均大小为 3 KB,有时高达约 8~10 MB)。这是为了将它们从文件系统中删除并加快搜索/用户操作。
- 元数据(主要是文件名、创建日期时间、修改日期时间)
- 文件内容的 LONGBLOB
将它们存储在数据库 (MySQL) 中很好。数据库存储该数量的文件,并且使用相关索引搜索元数据(字符串、日期时间、日期时间)也很快。
不幸但不出所料,在 LONGBLOB 中进行搜索的任何尝试都非常缓慢。 LONGBLOB 中的数据如下所示:
- 80% 是“文本文件”(例如 XML)且小于 100 KB
- 15% 是“文本文件”,但超过 100 KB(最大 8~10 MB)
- 5% 或更少是二进制文件(可能在“文本”容器中损坏)。
在执行 LIKE "%X%" 之类的操作(与 LONGBLOB 相对)时,将这些数据分类为文本或未知,然后将其放在单独的 LONGTEXT 表中是否会提高性能?
在搜索 BLOB(非常“grep”风格)时,我可以采取任何其他技术来提高性能吗?搜索通常是保存在 BLOB 中的短数据序列,并且可能很少有重复的搜索(但搜索在某种程度上是可预测的,有些数据比其他数据更有趣)。
【问题讨论】: