2017-03-17 37 views
1

對於我的C++程序,我用jobs.yml,其中包含有關YAML格式類似的職位信息:YAML數據庫

141647523: 
    JobType: Turbo 
    LocalJobID: 16773779.0 
    Status: Done 
    SystemPriority: 0.0 
    UserPriority: 8.0 

然後我用yaml-cpp庫解析文件和鑄造作業C++ Job對象。由於jobs.yml(〜900Mb)的大尺寸,我無法在程序開始時一次讀取所有文件並存儲在RAM中。

我該如何克服這個障礙? 我想我應該將jobs.yml轉換爲數據庫,並在程序中通過sql請求獲取所需數據?在這種情況下我應該怎麼做?

或者也許有更簡單的解決方案?

+0

flyx在下面有一個很好的答案,但也要考慮一個1 GB的YAML文件可能不是最有效的解決方案。考慮二進制格式(例如SQLite或其他) - 您可能會在文件大小和加載時間方面節省大量成本。 –

+0

@JesseBeder你有教程或一些例子如何使用'YAML :: Parser.HandleNextDocument'? –

回答

2

yaml-cpp有一個基於事件的API。僅從YAML::EventHandler派生並使用YAML::Parser.HandleNextDocument。然後逐個處理事件處理程序中的事件。這應該可以避免將整個文件加載到RAM中。

+0

你有使用'YAML :: Parser.HandleNextDocument'的好例子嗎?或者,也許一些教程? –

+0

不幸的不是。我不是yaml-cpp用戶。 – flyx