2017-04-12 8 views
0

フェッチされた行ごとにcreateMyModel(builder、id、.....)を作成するよりも、100.000レコードとjson_encodeでいくつかのテストを行った方が高速です。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

名前で行をフェッチしないようにするにはどうすればよいですか?それをフェッチするために使用する他のオプションはどれですか?あなたのrepplyのおかげで – aaron0207

関連する問題