【问题标题】:Write multiple streams to a single file without knowing the length of the streams?在不知道流长度的情况下将多个流写入单个文件?
【发布时间】:2011-09-06 21:48:19
【问题描述】:

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

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

有没有办法在文件系统级别将文件附加在一起而无需文件副本?

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

single-dataset.raw
[header 512B][data1-45MB][data2-123MB][data3-4MB][data5-44MB] 

我希望 SAN 目前是 NTFS,以防某些文件系统有任何特殊功能。

如果我使子集足够小以适合 ram,我会知道压缩后的大小,但让它们更小还有其他性能缺陷。

【问题讨论】:

    标签: file-io compression san


    【解决方案1】:

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

    更酷的解决方案是将每个子集写成一个单独的文件,然后使用低级文件系统函数通过将下一个文件的第一个块链接到前一个文件的最后一个块来连接文件(同时删除除了第一个文件之外的所有目录条目)。

    【讨论】:

    • 如果我使用稀疏文件,我需要某种方式来检测文件系统是否可以处理。
    • 我喜欢更酷的解决方案。我想要一些关于如何做类似事情的实际指示。
    猜你喜欢
    • 2019-05-24
    • 2011-07-29
    • 2017-01-12
    • 1970-01-01
    • 2021-03-25
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多