2012-10-18 47 views
1

我有〜280,000个文件需要通过搜索,并返回并打开正确的文件。文件名称与预期的搜索条件完全匹配。从〜280,000个文件的目录中检索正确的文件

搜索条件将通过使用PHP的输入框进行。什么是最好的方法来实现这一点,以便搜索不需要大量时间?

谢谢!

+2

如果文件名的搜索字词精确匹配,为什么还需要通过在所有文件进行搜索吗?你不能完全打开一场比赛吗? –

+0

如果文件名完全匹配,则不需要搜索。你可以打开它。是否有任何理由需要搜索它? – Virendra

+0

为什么你的问题标记为[[mysql]'? –

回答

2

我怀疑文件系统本身将28万页的文件在一个目录中挣扎。

我过去采取的一种方法是根据文件名的首字母将这些文件放在子目录中,例如

1/100000.txt 
1/100001.txt 
... 
9/900000.txt 

等,您可以进一步细分使用的第二个字母等

+0

这涉及基数排序的原理。好答案。 – gcochard

+0

除非您尝试列出它们,否则一个好的文件系统可以轻松处理多个文件系统。 –

+0

如果搜索不是大小写的,这仍然可能会留下〜10,800个条目来迭代。考虑到不会有很多以Z,Y,Q等开头的文件,这个数字可能很低。我认为将可用文件名和位置缓存到数据库会更加有效。尤其是像Mongo或Redis这样的内容,您可以利用内存而不是为每次搜索读取物理驱动器。 –

0

它很好,你添加mysql到你的标签。理想情况下,我将有一个CRON任务,将目录索引到一个mysql表中,并使用它执行实际搜索。代数比文件系统迭代更快。您可以每天或每小时运行一次任务,具体取决于文件更改的频率。或者使用像Guard这样的东西来监视文件系统的变化并进行适当的更新。

参见:https://github.com/guard/guard