搜索/索引大量文件

发布于 2024-11-18 23:25:12 字数 618 浏览 6 评论 0原文

我正在努力寻找一种有效的方法(< 0.5 sek)来在只有所需文件名的一小部分的巨大文件系统中搜索特定文件。

场景如下:

假设您有大约 15,000,000 个文件,所有这些文件均按其信息类型进行分类,这些文件包含在编号目录中,每个目录包含 20,000 个文件:

DATA
--TYPE_1_001
----ID_1234567_TYPE1.XML
----ID_2345678_TYPE1.XML
----[...]
--TYPE1_002
--[...]
--TYPE_1_097
--TYPE_2_001
----ID_1234567_TYPE2.JPG
----ID_2345678_TYPE2.JPG
----ID_2345679_TYPE2.JPG
----[...]
--[...]
--TYPE2_304
--[...]

等等。

因此,给定 ID(即 1234567),我试图找到包含该 id 的所有相关文件名。 此“查找过程”将为另一个 XML 文件中给出的 7.000.000 个 id 中的每一个执行。

目前的流程需要 405 天才能处理所有 7,000,000 个 ID,据统计,这是不可接受的;)

有什么建议吗?

提前致谢!

I'm struggeling to find an efficient way (< 0.5 sek) to search for specific files in a huge file system having only a little part of the desired file name.

Here's the scenario:

Consider you have about 15.000.000 files all categorised by their type of information contained an batched within numbered directories containing 20.000 files each:

DATA
--TYPE_1_001
----ID_1234567_TYPE1.XML
----ID_2345678_TYPE1.XML
----[...]
--TYPE1_002
--[...]
--TYPE_1_097
--TYPE_2_001
----ID_1234567_TYPE2.JPG
----ID_2345678_TYPE2.JPG
----ID_2345679_TYPE2.JPG
----[...]
--[...]
--TYPE2_304
--[...]

and so on.

So, given the ID (i.e. 1234567), I'm trying to find all relevant filenames containing said id.
This "find process" will be executed for each of the 7.000.000 ids given in another XML file.

The current process would take 405 days to process all 7.000.000 ids, which - who figures - is inacceptable ;)

Any suggestions?

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

枕梦 2024-11-25 23:25:12

有什么方法可以将数据提取到某种描述的数据库或索引(例如 Lucene)中吗?

这需要一些时间,但一旦可用,搜索速度会快得多。

Is there any way you can extract the data into a database or index (such as Lucene) of some description?

That would take some time to do but would be much faster to search once it was available.

椵侞 2024-11-25 23:25:12

使用 SSD 驱动器代替硬盘驱动器。常规硬件每秒只能执行大约 120 次 IO。这是因为头部必须移动到存储信息的位置。由于没有移动部件,快速 SSD 驱动器每秒可以执行 10,000 次 IO 操作。然而,即使使用 SSD 驱动器,扫描每个目录的名称最多也需要 2 秒左右。

如果您希望它比这更快,您需要缓存/索引名称并从内存中查找它们。

顺便说一句:如果您设置了 SSD Raid 6,它可以足够快地执行 IO,在 0.5 秒内扫描 20K 文件。

Using an SSD drive instead of a hard drive. A regular hardware can only perform around 120 IOs per second. This is because the head has to move to the location where the information is stored. A fast SSD drive cna perform 10,000 IO operations per second as there is no moving parts. However even with an SSD drive it going to take you about 2 seconds at best to scan the names of every directory.

If you want it to be faster than that you need to cache/index the names and look them up from memory.

BTW: If you had a SSD Raid 6 set, it could perform IO fast enough to scan 20K files in under 0.5 seconds.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文