2017-04-12 312 views
0

我對100.000條記錄和json_encode做了一些測試,比每個獲取行的createMyModel(builder,id,.....)還要快。創建500.000條記錄的平緩緩存的正確方法

我只是在做以下操作:

//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

這是比較蘋果和橙子。 json_encode可能在本地代碼中運行,而FlatBuffer版本全部在PHP本身。然後還有額外的開銷,你是通過名字獲取每個行元素,這不是很快。

如果PHP有一個內建的flatbuffers_encode它可能會比JSON快很多。

另請注意,如此大量的數據,請確保將緩衝區預先分配到適當的大小,以免它不必經常重新分配。

+0

如何避免按名稱獲取行?你還可以使用其他選項來獲取它?感謝您的重新申請 – aaron0207