【发布时间】:2013-02-08 02:32:30
【问题描述】:
我想存储大量(~数千个)字符串并能够使用通配符执行匹配。
例如,这里是一个示例内容:
Folder1Folder1/Folder2Folder1/*Folder1/Folder2/Folder3Folder2/Folder**/Folder4*/Fo*4
(每一行也有额外的数据,比如标签,但匹配只针对那个键)
这是我想与数据匹配的示例:
Folder1Folder1/Folder2/Folder3Folder3
(*在这里是通配符,可以是不同的字符)
我天真地考虑将它存储在 MySQL 表中并使用 % 通配符和 LIKE 运算符,但 MySQL 索引仅适用于通配符左侧的字符,在我的情况下它可以在任何地方(即%/Folder3)。
所以我正在寻找一个可以从 PHP 使用的快速解决方案。我是开放的:它可以是一个单独的服务器,一个使用正则表达式文件的 PHP 库,...
【问题讨论】:
-
这不是一个真正的答案,所以我将它作为评论发布。您可能想查看 PHP 提供的
glob函数来搜索目录。 php.net/manual/en/function.glob.php 在该页面上的一个 cmets 中,我发现如果您尝试搜索超过 500,000 个文件,您可能会耗尽内存。 -
@Kyle 尽管我的示例建议如此,但这与“真实”文件无关,它只是一个示例
-
某种类型的缓存解决方案如何缓存特定搜索条件的搜索结果?第一次查找会很慢,但随后的查找速度会快如闪电。
-
@crush 是的,这是个好主意,但我相信这本身还不够,因为要与数据库匹配的字符串变化很大,我预计会有很多请求,所以缓存失效可能会变得非常高(除非缓存非常大)。
-
对不起大家,我犯了一个错误,我反转数据和字符串以匹配数据(通配符实际上在数据中)。我编辑了这个问题,但我相信它并没有改变很多。
标签: php database datasource string-matching database-performance