0

我用 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.8 秒,Flatbuffer 进程耗时 10 秒

4

1 回答 1

0

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

如果 PHP 有一个内置函数flatbuffers_encode,它可能会比 JSON 快很多。

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

于 2017-04-12T18:09:25.380 回答