1

我有一个每条记录一个文件的数据库实现,我有大约 10000 条记录。我正在尝试优化访问文件的性能,我有点怀疑。

将文件拆分到文件夹中是否比将所有文件保存在单个文件夹中更好,以便快速访问文件?例如:文件夹 0 中从 0 到 999,文件夹 2 中从 1000 到 1999 等等...

FAT16FAT32哪个更好?

4

3 回答 3

2

如果您直接访问文件,那么您不会有任何性能下降。如果您在磁盘上搜索特定文件,将它们存储在文件夹中会更快。这样文件夹将模拟数据库索引。但正如@blow 提到的,你为什么不使用像Sqlite这样的东西?

于 2012-03-18T10:15:39.937 回答
0

将它们跨目录拆分(拆分数量取决于您的集群大小),如果可以,请不要使用 LFN (LongFileName),因为它会减慢您的操作。我也从事嵌入式系统的工作。我不必像您一样访问 1000 多个文件,但我避免使用 LFN(尤其是出于版税原因)。

于 2012-03-18T12:24:20.627 回答
0

当您retrieve a file by filename很可能在包含该文件的目录中进行线性搜索时,您会跳过所有目录条目,直到找到与给定文件名匹配的条目。

如果你每次都对每个文件都做这个搜索操作可能会很慢,目录中有很多文件并且读取速度很慢(如果你的 CPU 很慢,你会丢失更多)。

您可能想要构建某种索引,即filename+location按文件名排序的紧凑数组对,您可以将其保存在内存中以快速查找文件而无需重新读取目录条目。

如果有恒定数量的文件并且它们具有相同的长度或填充到相同的长度,则事情可以大大简化。在这种情况下,您不需要任何搜索,因为您可以直接从文件名计算每个文件的位置,当然,前提是文件的顺序是固定的。

在这种情况下,FAT1x 和 FAT32 之间的唯一实际区别是文件分配表的大小,即一组链表/链告诉您哪些集群是空闲的或被文件/目录数据占用,并告诉您哪个集群是下一个给定文件/目录之后的文件/目录。在 FAT32 中,簇链元素是 32 位的,比 FAT16 大 2 倍。如果使用的簇数量很少(小于~64K),那么与 FAT16 相比,您在遍历簇链时从 FAT32 读取的数据量将是 FAT32 的两倍。此外,如果磁盘上有很多簇(FAT32 AFAIR 上最多 2^28 vs 2^),在 FAT32 上查找空闲簇(当您创建新文件/目录或扩展现有文件时)可能会很慢FAT16 的 16 个)。您不想每次都从 FAT 的开头开始搜索空闲簇。

于 2012-03-18T11:15:25.987 回答