簡體   English   中英

c ++將protobuf增量寫入文件

[英]c++ write protobuf incrementally to file

我有以下protobuf:

message FrameData {
    ... arbitrarily complex ...
}

message DataDump {
  optional uint64 headerField1 = 1;
  optional uint64 headerField2 = 2;
  optional uint64 headerField3 = 3;
  repeated FrameData frameData = 4;
}

我正在一個一個迭代地創建 frameData protobuf,我想將 DataDump protobuf 寫入文件。

我可以通過簡單地構建我的 DataDump protobuf 然后調用SerializeToOstream來做到這一點 - 問題是數據只有幾個 100gb,這樣我需要先在 ram 中建立所有數據,然后才能將其轉儲到磁盤。

由於重復字段 frameData 是 protobuf 中的最后一個,因此我認為應該可以先將標頭寫入文件,然后在生成每個 FrameData protobuf 后迭代地輸出 frameData 的元素。

如何才能做到這一點?

可以連接 Protobuf 消息(尤其是 proto2 語法消息)以合並它們的內容。 弄清楚它究竟是如何工作的,需要閱讀protobuf 編碼格式文檔

在您的情況下,您可以首先將帶有標頭字段的DataDump消息寫入文件。 之后,將您想要的任意數量的項目放入frameData並將該消息附加到文件的末尾。 重復直到所有項目都已寫入。

當解碼器讀取消息時,它看起來好像所有項目都是大frameData數組的一部分。


但是,這在解碼方面可能是一個問題:在許多實現中,這會迫使您一次將整個文件讀入內存,而不是將它們分成較小的塊進行處理。

特別是如果您想要隨機訪問和某種索引,存儲數百 GB 的數據集可以從更高級的存儲格式中受益。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM