mysql - 在 MySQL 中存储和搜索文件

标签 mysql database

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

最佳答案

那么,您最好做一个全文索引(对于如此大量的数据,它的大小会非常大)并做一个 MATCH AGAINST 查询,以便有效地进行搜索。 LIKE 在处理大量文本时速度非常慢,这是众所周知的,应该避免。

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

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

关于mysql - 在 MySQL 中存储和搜索文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12665247/

相关文章:

php - 网页 - 使用 PDF 文件模板代替 FPDF

php - PHP/MYSQL 下拉列表显示正确项目信息时出现错误

mysql - 无法使用 Adminer 和 docker-compose 连接到 MySQL 数据库

c# - 使用 LINQ 获取 ID 列表并添加到数据库中

php - 从数据库检索到下拉列表的数据。用户选择选项然后将该值发送到数据库?

php - Laravel 4.2 查询错误 - 当其他无缓冲查询处于事件状态时无法执行查询

php - 安装 CMS Concrete5 版本 5.7.2.1 时出现疯狂长 "exception occurred"

sql - 如何从包含单引号的oracle数据库中搜索数据

php - "caching"php 中的数据库值数组(2 个选项,哪个更好?)

php - php从数据库中检索多个数据到数组中