正确的方法来创建500.000记录的flatbuffer

时间:2017-04-12 07:42:33

标签: mysql laravel-5 flatbuffers

我用100.000条记录进行了一些测试,而json_encode仍然比制作每个读取行的createMyModel(builder,id,.....)更快。

我正在做以下事情:

//Flatbuffer Version

$query->execute();
$builder = new \App\Http\Controllers\FlatbufferBuilder(0);
while ($row = $query->fetch()) {

   MyFlatBufferGeneratedModel::createMyModel($builder,
              $row['id'],
//  add here about 24 extra atributes ....
      );
}

$builder->dataBuffer();

return "Finish";

//Json Version

$query->execute();
$result_array = [];

while ($row = $query->fetch()) {

  array_push($result_array,$row);

}

json_encode($result_array);

return "Finish";

额外说明:
- 我使用Laravel 5.3和MySql作为数据源。
- Json过程需要1.8s和Flatbuffer过程,如10s

1 个答案:

答案 0 :(得分:0)

这是比较苹果和橘子。 json_encode可能在本机代码中运行,而FlatBuffer版本在PHP本身中运行。然后,您需要按名称获取每个行元素的额外开销,这不是很快。

如果PHP有内置flatbuffers_encode,它可能比JSON快很多。

另请注意,对于如此大量的数据,请确保将缓冲区预分配到适当的大小,以便不必经常重新分配。