c++:更多的小文件还是更少的大文件?

标签 c++ performance file file-access

<分区>

我编写了一个 C++ 程序来查询 100 GB 的字典。我已将字典拆分为 n 个大小相等的文件。所有拆分文件都放在同一个目录中。字典是完全索引的,即,一旦出现查询,我就知道要打开哪个 spit-file 以及到哪里寻找。我的问题是为了获得更好的性能,哪种拆分会更好: (a) 少量大文件或 (b) 大量小文件? 另外,什么是理想的分割?

最佳答案

您的字典是静态的还是可以在运行时更改?

如果它是静态的,则对所有内容使用单个文件。

如果它是动态的并且您的索引是“vector ”(不是最好的主意),请使用一个文件存储数据,并为每个索引使用一个文件。

如果它是动态的并且您的索引是“树”(包括双端队列和其他 vector ,如 ADT,它们不是 100% 连续的)您可以再次使用单个文件,除非为了速度而将索引存储在单独的卷上.

您应该在开头打开文件,并且永远不会再招致文件打开/关闭惩罚。

如果您的应用程序是 64 位的,只需将整个文件映射到内存中,让操作系统完成其余的工作。

如果您的应用程序是 32 位的,仍然使用内存映射来访问文件。您需要为您可能需要执行的每个可能的并发访问创建一个内存映射“窗口”(对于静态数据,可能每个数据线程一个,每个索引每个线程一个或两个)。

关于c++:更多的小文件还是更少的大文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12521725/

相关文章:

linux:如何删除这种名称为 "test\download\"的文件?

c++ - 如果 A 有析构函数,什么时候 std::unique_ptr<A> 需要一个特殊的删除器?

c++ - 在 C++ 中计算二项式系数模块素数 p

SQL语句出奇地慢

file - golang 阅读更多 4096 字节

php - 使用 php 将文件上传到 aws s3 存储桶时出现错误

c++ - 将已删除的函数声明为 noexcept 有什么意义吗?

c++ - 将 C++ 结构传递给需要 C 结构的库

java - 使用非空条件的最佳方法是直接条件还是使用实用方法?

ruby-on-rails-3 - 渲染haml部分需要很长时间......为什么?