【发布时间】:2017-04-07 21:34:39
【问题描述】:
我有一个目录,其中包含我拥有的程序用户的文件。该目录中有大约 70k 个 json 文件。
当前的搜索方法是使用glob 和foreach。它变得非常缓慢并且占用了服务器。有什么好方法可以更有效地搜索这些文件吗?我在 Ubuntu 16.04 机器上运行它,如果需要,我可以使用 exec。
更新:
这些是 json 文件,每个文件都需要打开以检查它是否包含搜索查询。循环遍历文件非常快,但是当它需要打开每个文件时,需要相当长的时间。
这些不能使用 SQL 或 memcached 进行索引,因为我正在使用 memcached 处理其他一些事情。
【问题讨论】:
-
能否像在 SQL 数据库中那样离线索引以减少负载?
-
您应该使用某种形式的缓存。你可以有一个脚本,每 15 分钟索引一次图像(或者它们经常改变)并将它们保存到数据库中,然后从数据库中获取图像,这应该会更快。
-
实际上我发现使用
glob的方法比递归迭代器更快,而且我可以更好/更轻松地过滤它。您可以尝试对glob和递归迭代器进行基准测试,看看自己更快。这两个是我知道的唯一选项,如果您不想拥有关于文件的 DBMS 表并监视文件夹的更改。 -
Apache SOLR 是一个选项?
-
如果你可以使用
exec,那么看看find和grep的命令