通过 php 处理巨大的 yaml 文件


Processing huge yaml-files via php

我需要处理一个巨大的yaml文件 - 这是450 MB - 来获取数据库中的数据。因此,我尝试使用"spyc"。但是文件太大了。

每一章都有--- !de.db.net,DB::Util::M10lDocument行。我需要将每一章的内容作为一个数组。因此,我尝试使用spyc。但是完整的文件太大了。我不知道如何拆分这些章节。

是否可以逐块读取完整文件?

有没有人知道如何处理这个大文件?

---是 YAML 流的文档边界标记。使用将文件作为流处理的 YAML 分析器应该允许您以文档大小的块处理文件,只要每个文档足够小以容纳可用内存。

yaml PECL 扩展提供的yaml_parse_file函数包括从文档流中解析单个文档的功能。没有内置方法来迭代文档(例如foreach支持),但您可以实现自己的循环,该循环获取顺序文档并在yaml_parse_file返回时停止 false 指示未找到请求的文档。

<?php
$docNum = 0;
while (false !== ($doc = yaml_parse_file('example.yaml', $docNum))) {
    var_dump($doc);
    $docNum++;
}