File io 在不知道流的长度的情况下将多个流写入单个文件?

File io 在不知道流的长度的情况下将多个流写入单个文件?,file-io,compression,san,File Io,Compression,San,为了提高读取和写入大型数据集的性能,我们有多个线程将单独的文件压缩并写入SAN。我正在制作一个新的文件规范,它将把所有这些文件附加到一个文件中。我将把这些较小的数据块都称为子集 由于每个子集在压缩后都是未知大小,因此无法知道要写入哪个字节偏移量。无需压缩,每个写入程序都可以写入可预测的地址 有没有一种方法可以在文件系统级别将文件附加在一起而不需要文件副本 我将在这里写一个示例,说明我如何期望结果出现在磁盘上。虽然我不确定这样写有多大帮助 single-dataset.raw [header 51

为了提高读取和写入大型数据集的性能,我们有多个线程将单独的文件压缩并写入SAN。我正在制作一个新的文件规范,它将把所有这些文件附加到一个文件中。我将把这些较小的数据块都称为子集

由于每个子集在压缩后都是未知大小,因此无法知道要写入哪个字节偏移量。无需压缩,每个写入程序都可以写入可预测的地址

有没有一种方法可以在文件系统级别将文件附加在一起而不需要文件副本

我将在这里写一个示例,说明我如何期望结果出现在磁盘上。虽然我不确定这样写有多大帮助

single-dataset.raw
[header 512B][data1-45MB][data2-123MB][data3-4MB][data5-44MB] 
我希望SAN现在是NTFS,以防某些文件系统有任何特殊功能


如果我使子集足够小以适合ram,我将知道压缩后的大小,但保持较小的子集还有其他性能缺陷。

使用稀疏文件。只需将每个子集定位在确保超出最后一个子集的某个偏移处。然后,头部可以包含每个子集的偏移量,文件系统为您处理大的空块


更酷的解决方案是将每个子集作为一个单独的文件写入,然后使用低级文件系统函数连接文件,方法是将下一个文件的第一个块链接到上一个文件的最后一个块,同时删除除第一个文件外的所有文件的目录项。

如果我使用稀疏文件,我需要某种方法来检测文件系统可以处理这个问题。我喜欢更酷的解决方案。我想要一些关于如何做那样的事情的实际指针。