1

我正在尝试在数据库中存储至少 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 中的短数据序列,并且可能很少有重复的搜索(但搜索在某种程度上是可预测的,一些数据比其他数据更有趣)。

4

1 回答 1

1

好吧,你最好做一个全文索引(在如此大量的数据上将是一个巨大的大小)并进行MATCH AGAINST查询以有效地搜索。LIKE在大量文本上速度非常慢,这是众所周知的,应该避免。

http://dev.mysql.com/doc/refman/5.5/en//fulltext-search.html

您还可以将它们保存在 FS 中并构建自己的命令行工具,您可以在服务器端语言中调用这些工具,这些工具实际上执行“GREP 样式”搜索并返回与您的“查询”匹配的文件路径列表,但我'不确定这是否有效。

于 2012-09-30T21:30:16.437 回答