|
カテゴリ:PHP
以前業務処理の混じったスクリプトでtsvとserializeの速度比較を行ったが、無駄な処理があるのでちょっと信頼性に欠ける。
今回は不要な処理をなるべく無くして比較実験。 ----実験---- ・データ量:約18万7千件(行) ・各テストスクリプトを3回、load averageが0.1以下になってから実行 ・CPU:Quad-Core AMD Opteron(tm) Processor 2376 x2個 ・メモリ:8GB ----入出力ファイルサイズ---- ※データ件数は同じです。ファイルサイズの違いは保存形式(tsv,serialize,ALLserialize)の違いによるもの。 詳しくはソース参照 --tsv-- 17,446,415 byte --serialize(1件毎)-- 46,573,936 byte --serialize(全件まとめて)-- 81,368,022 byte ----tsv---- ・入力ファイル:tsv形式 ・出力ファイル:tsv形式 ・処理方法:1件ずつ入力、全て入力後、1件ずつ出力 --1回目-- all:4.02843904495 read:2.52924990654 write:1.49918913841 --2回目-- all:4.13419485092 read:2.52776885033 write:1.6064260006 --3回目-- all:4.12754297256 read:2.56202197075 write:1.56552100182 ----serialize&unserialize---- ・入力ファイル:serialize形式(1件毎) ・出力ファイル:serialize形式(1件毎) ・処理方法:1件ずつ入力、全て入力後、1件ずつ出力 --1回目-- all:4.92642498016 read:2.69009304047 write:2.2363319397 --2回目-- all:4.93736600876 read:2.73131799698 write:2.20604801178 --3回目-- all:4.93822383881 read:2.72671484947 write:2.21150898933 ----まとめてserialize&unserialize---- ・入力ファイル:serialize形式(まとめて全件) ・出力ファイル:serialize形式(まとめて全件) ・処理方法:全件入力、全件出力 --1回目-- all:98.4064509869 read:95.5289621353 (file_get_contents:0.117384195328,unserialize:95.41157794) write:2.87748885155 --2回目-- all:98.2645261288 read:95.387127161 (file_get_contents:0.124714136124,unserialize:95.2624130249) write:2.87739896774 --3回目-- all:97.9302198887 read:95.0836489201 (file_get_contents:0.114450931549,unserialize:94.9691979885) write:2.84657096863 何か余計な処理がないとtsvが読み書き最速だった。 書き込みはserialize化が無い分早いっぽい。書き込みデータも小さいみたいだし。 前回は業務用の余計な処理があったから、読み込みがserializeに負けてたのかな。 そして、まとめてunserializeがやっぱり遅い。 とりあえず行単位でやれば大差なさそうです。 ファイルサイズを節約したいなら断然tsvかも。 データ加工が面倒で楽したいならserializeかな~。 異論は認める! お気に入りの記事を「いいね!」で応援しよう
Last updated
2010.02.03 23:48:02
コメント(0) | コメントを書く
[PHP] カテゴリの最新記事
|