依次读取大量小文件

thr*_*thr 4 .net c# windows filesystems

我有这个问题:我有一个小文件的集合,每个文件大约有 2000 个字节(它们的大小完全相同),并且大约有大约 100.000 个 em,相当于大约 200 兆字节的空间。我需要能够实时地在这些文件中选择一个范围。假设文件 1000 到 1100(总共 100 个文件),读取它们并通过网络相当快地发送它们。

好消息是文件将始终按顺序读取,即它总是说“从这个文件和一百多个”而不是“这个文件在这里,那个文件在那里等等”。

文件也可以在运行时添加到这个集合中,所以它不是固定数量的文件。

我提出的当前方案是这样的:没有文件大于 2000 字节,所以不是在磁盘上分配多个文件,我将有一个包含所有其他文件的大文件,甚至以 2048 字节为间隔每个 2048 块的前 2 个字节是包含在接下来的 2046 个字节中的文件的实际字节大小(文件大小在 1800 到 1950 字节之间),然后在该文件中查找而不是为每个文件打开一个新的文件句柄我需要阅读的文件。

因此,当我需要在位置 X 获取文件时,我将只执行 X*2048,读取前两个字节,然后将 (X*2048)+2 中的字节读取到前两个字节中包含的大小。这个 200mb 的大文件将仅被追加,因此即使在序列化输入线程/进程(尚未决定)向其追加更多数据时也可以安全读取。

这必须在 Windows 上可行,C 是一种选择,但我更喜欢 C#。

Nei*_*l N 5

您是否反对将这些文件存储在数据库中?

一个简单的 RDBMS 将大大加快一堆 2k 文件的搜索和排序