在MySQL中存储和搜索文件

时间:2012-09-30 21:25:11

标签: mysql database

我试图在数据库中存储至少500,000个小“文件”(偶尔平均大小为3 KB,大约8~10 MB)。这是为了从文件系统中删除它们并加快搜索/用户操作。

  • 元数据(主要是文件名,日期时间创建,日期时间修改)
  • 文件内容的LONGBLOB

将它们存储在数据库(MySQL)中一直没问题。数据库存储该数量的文件并使用相关索引快速搜索元数据(字符串,日期时间,日期时间)。

不幸的是,但不出所料,任何在LONGBLOB中搜索的尝试都非常缓慢。在LONGBLOB中,这里是数据的外观:

  • 80%是“文本文件”(例如XML),低于100 KB
  • 15%是“文本文件”,但超过100 KB(最多8~10 MB)
  • 5%或更少是二进制文件(可能在“文本”容器中被破坏)。

将此数据分类为文本或未知,然后将其放在单独的LONGTEXT表中,可以在执行类似LIKE“%X%”(与LONGBLOB相反)的操作时提高性能?

在搜索BLOB时,是否还有其他技术可以提高性能(以非常“grep”样式)?搜索通常是BLOB中保存的短数据序列,并且可能很少有搜索重复(但搜索有些可预测,某些数据比其他数据更有趣)。

1 个答案:

答案 0 :(得分:1)

好吧,你最好做一个全文索引(在这样的数据量上会有很大的数量)并进行MATCH AGAINST查询以便有效地搜索。 <{1}}在大量文本上的速度非常缓慢,这是众所周知的,应该避免使用。

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

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