如何阅读大型apache avro文件

时间:2016-04-18 13:24:58

标签: php avro

我是apache avro的新手。我有一项任务是从oracle DB读取数据并从该数据生成avro。然后在第二个任务中从avro文件中读取数据并插入到MySQL DB中。

我成功完成了两项任务,最多可达1,00,000行(3列)。 但是当我将行增加到100万和6列(所有列中的小数据)时,我仍然能够生成33MB的avro文件。但是在第二个任务中,尽管提供了1 GB的内存限制,PHP avro库仍然为Allowed memory size of -- bytes exhausted提供了错误。

$data_reader = \AvroDataIO::open_file($file_name);
// Read each datum
$i=0;

foreach ($data_reader->data() as $datum) {  

调试后我发现,foreach语句无法执行并给出错误。我怀疑它是否尝试加载内存中导致错误的所有未压缩数据。

如果他们更好地阅读大型avro文件或者我需要生成更小的avro文件,或者我必须采用更高的内存限制。

更新:我查看了PHP库代码中的方法数据,其中找到了有问题的代码。

$data []= $this->datum_reader->read($this->decoder);

这会将所有数据存储在内存中。在https://github.com/researchgate/avro-php处对此库的替代更新使用PHP 5.5 yield,我认为应该解决此问题。但目前我使用的是没有收益率的php 5.4。

0 个答案:

没有答案
相关问题