【问题标题】:Storing and searching files in MySQL在 MySQL 中存储和搜索文件
【发布时间】: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 中的短数据序列,并且可能很少有重复的搜索(但搜索在某种程度上是可预测的,有些数据比其他数据更有趣)。

【问题讨论】:

    标签: mysql database


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-03
      • 2011-03-26
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多