2011-09-06 40 views
0

爲了讀取和寫入大型數據集的性能,我們有多個線程將單獨的文件壓縮並寫入SAN。我正在創建一個新的文件規範,將所有這些文件一起附加到一個文件中。我將把每個數據的這些小塊作爲子集。在不知道流的長度的情況下將多個流寫入單個文件?

由於壓縮後每個子集的大小都是未知大小,因此無法知道要寫入的字節偏移量。如果沒有壓縮,每個寫入者都可以寫入可預測的地址。

有沒有辦法在文件系統級別將文件附加在一起而不需要文件複製?

我會在這裏寫一個關於如何期待結果在磁盤上的例子。雖然我不確定這是怎麼寫的。

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

我希望SAN現在是NTFS,以防某些文件系統有任何特殊功能。

如果我製作的子集足夠小以適應內存,我會知道壓縮後的大小,但保持它們較小有其他性能缺陷。

回答

0

使用稀疏文件。只需將每個子集的「保證」偏移量定位在最後一個子集之外即可。然後,您的頭文件可以包含每個子集的偏移量,而文件系統將爲您處理大「空」塊。

更酷的解決方案是將每個子集寫爲單獨的文件,然後使用低級文件系統函數通過將下一個文件的第一個塊鏈接到前一個文件的最後一個塊來加入文件(以及刪除除第一個文件以外的所有目錄條目)。

+0

如果我使用稀疏文件,我需要檢測文件系統是否可以處理該文件。 –

+0

我喜歡更酷的解決方案。我想要一些關於如何做這樣的事情的實際指示。 –

相關問題