我用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
答案 0 :(得分:0)
这是比较苹果和橘子。 json_encode
可能在本机代码中运行,而FlatBuffer版本在PHP本身中运行。然后,您需要按名称获取每个行元素的额外开销,这不是很快。
如果PHP有内置flatbuffers_encode
,它可能比JSON快很多。
另请注意,对于如此大量的数据,请确保将缓冲区预分配到适当的大小,以便不必经常重新分配。