2017-03-17 41 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