我在超級計算機上做了大型模擬。由於這些仿真運行起來很昂貴,我需要不時地將結果寫入磁盤。此外,大多數超級計算機的最長運行時間爲1或2天,之後您的工作將自動終止。因此,我需要能夠爲我的應用程序添加「簡歷」功能。什麼文件格式適合於記錄/配置文件?
對於大型數據集,我使用「原始」二進制文件,因爲這是可以將信息轉儲到磁盤的最快速度。稍後,我可以將這些二進制文件轉換爲可以在普通桌面上進行後處理的格式。但是,我還需要在代碼運行時記錄有關模擬的一些參數信息,以便我不會有任何問題計算出我的結果對應的參數集。
此外,我需要一個配置文件,以便可以從我開始/恢復作業時設置參數。我想要做的就是將logging/configure文件合併爲一個步驟,以便代碼可以將所有需要的信息記錄到下一個簡歷的配置文件中。我還需要這個文件易於人類閱讀,分層,並且在解析庫方面有很好的支持。我主要關心的是我正在開發的語言,即C++
,但在python
中也可以支持。
到目前爲止,我在xml
使用boost::property_tree
這樣做,但我不確定這是最好的方式。具體來說,我的xml
文件看起來有點過於冗長!我可以使用的文件格式有更好的選擇嗎?如何支持圖書館?我更喜歡僅頭文件庫來防止更改構建結構。
如果你想要語言和庫的可用性之間的互操作性,XML是要走的路。 (或者也許是JSON,但我不知道C++有什麼可用的。)冗長性很糟糕,但我建議只處理它。這不像你要手動編輯文件,而且也沒有提到解析文件時出現任何性能問題。 (無論如何,使用XML更容易高效)如果空間有問題,壓縮應該有所幫助。 – millimoose
幾年前,我的確遇到了同樣的問題。你的XML解決方案聽起來比我實現的任何東西都好我建議將您的參數記錄到與記錄數據不同的文件中,否則,您的方法聽起來不錯。 (有HDF,分層數據格式,但這是不可讀的。)我犯的一個錯誤是缺乏對我的代碼的良好修訂控制,其中(a)版本號與運行時參數一起丟棄,(b)簡潔的更新日誌。如果您的研究延續時間超過六個月,那麼您將永遠不會記住沒有這個結果生成哪個代碼。 – thb
如果您可以使用平面文件,那麼請務必使用平面文件!如果您需要分層數據,那麼XML或JSON值得考慮。 – paulsm4