gpt4 book ai didi

c++ - 写入单个大数据文件或多个较小文件: Which is faster?

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:38 27 4
gpt4 key购买 nike

我正在开发一个将大量数据写入磁盘的 C++ 程序。以下函数对数据进行 gzip 压缩并将其写入文件。压缩数据约为100GB。压缩并写出数据的函数如下:

 void constructSNVFastqData(string const& fname) {                                 
ofstream fastq_gz(fname.c_str());
stringstream ss;
for (int64_t i = 0; i < snvId->size(); i++) {
consensus_pair &cns_pair = snvId->getPair(i);
string qual(cns_pair.non_mutated.size(), '!');
ss << "@" + cns_pair.mutated + "[" + to_string(cns_pair.left_ohang) +
";" + to_string(cns_pair.right_ohang) + "]\n"
+ cns_pair.non_mutated + "\n+\n" + qual + "\n";
}
boost::iostreams::filtering_streambuf<boost::iostreams::input> out;
out.push(boost::iostreams::gzip_compressor());
out.push(ss);
boost::iostreams::copy(out,fastq_gz);
fastq_gz.close();
}

该函数将数据写入字符串流,然后我将其写入使用 boost 的 filtering_streambuf 写入文件 (fastq_gz)。该文件不是日志文件。文件写入后它将由子进程读取。该文件不需要查看由人类。<​​/p>

目前,我正在将数据写入单个大文件 (fastq_gz)。这需要一段时间,而且根据我们的系统管理员的说法,文件系统非常繁忙。我想知道是否应该写出多个较小的文件,而不是写出单个大文件?这种方法会更快,还是会减少文件系统的负载?

请注意,速度慢的不是压缩 - 我已经进行了基准测试。

我在 Linux 系统上运行,不需要考虑将实现推广到 Windows 文件系统。

最佳答案

因此,您的代码可能正在执行的操作是(a)将文件生成到内存交换空间中,(b)从交换空间加载并动态压缩,(c)将压缩数据写入输出文件。

(b)和(c)很棒; (a) 会杀了你。这是未压缩数据的两次往返,其中一次与输出文件生成竞争。

我在 boost iostreams 中找不到,但您需要一个 istream(源)或一个可以按需从您那里获取数据的设备。一定有人写过它(看起来很有用),但我在查看 boost iostreams 文档 5 分钟后没有看到它。

关于c++ - 写入单个大数据文件或多个较小文件: Which is faster?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49242063/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com