試験結果 |
-
各データの表示時間
(A) と (B) と (C) と (D) について、単にヒロ・データベースを使ってリスト表示 ( 先頭50件 )
する時間を計測しました。
| データ |
データ件数 |
データサイズ |
CPU実行時間 |
| ( A ) |
121,648 件 |
6,992,446 バイト |
0.82 CPUs |
| ( B ) |
121,648 件 |
4,925,380 バイト |
0.68 CPUs |
| ( C ) |
5,205 件 |
219,880 バイト |
0.16 CPUs |
| ( D ) |
5,205 件 |
6,992,445 バイト |
0.83 CPUs |
データ量30%減の(B) ですが、(A)に比べて20%程度の速度UPしか出ていませんね。この結果から、「リスト表示の際は、データ件数を考えるよりも、データサイズの少ないほうが、表示時間が短い」ということは分かっていただけると思います。
-
抽出するデータの位置(データファイル中のデータ位置)の違いによる検証
データファイル中の、先頭にあるデータは「北海道」のデータで、末尾にあるデータは「沖縄県」のデータです。(A)のデータについて、それぞれの検索時間を計測しました。
| データ |
検索文字 |
Hit件数 |
CPU実行時間 |
| ( A ) |
北海道 |
8215 件 |
3.04 CPUs |
| ( A ) |
沖縄県 |
790 件 |
3.02 CPUs |
上記1の検証におけるCPU実行時間に比べて、検索ルーチンを通すことでかなりのCPUプロセス消費していますね。まぁ、それはしかたのないこととして。この結果から、「検索にHitするデータがデータファイル中のどの位置にあってもCPU実行時間には影響しない」
ことが言えると思います。ヒロ・データベースは全文検索なので、本来は最初の1件目がHitするだけの検索を行っても、結果的に最終レコードまでをなめまわしていますので、こういった結果になるのでしょうね。微妙な差
( 0.02CPUs ) は、Hitしたレコードの変数代入回数の差か何かでしょう。
- 多重検索の検証
and検索は、検索キーワードの個数分の検索を繰り返していたと思います(確か・・・すみません、おおざっぱで)。同じ件数のHitが出るであろう検索を計測しました。
| データ |
検索文字 |
Hit件数 |
CPU実行時間 |
| ( A ) |
兵庫県神戸市兵庫区芦原通 |
1 件 |
3.00 CPUs |
| ( A ) |
兵庫県神戸市 and 兵庫区芦原通 |
1 件 |
3.03 CPUs |
| ( A ) |
兵庫県 and 神戸 and 市 and
兵庫 and 区 and 芦原 and 通 |
1 件 |
3.20 CPUs |
もっと違いがでるかなと思っていたのですが。まぁしかし、「検索キーワードの個数を増やせばCPU実行時間が増える」ようです。
- データサイズの違いによる検証
(A) と (B) を使って、それぞれ同じ文字列検索を行い、処理時間を計測しました。
| データ |
検索文字 |
データ件数 |
データサイズ |
Hit件数 |
CPU実行時間 |
| ( A ) |
神戸市 |
121,648 件 |
6,992,446 バイト |
821 件 |
3.02 CPUs |
| ( B ) |
神戸市 |
121,648 件 |
4,925,380 バイト |
821 件 |
2.84 CPUs |
上記1の検証と同じく、この結果から、「検索対象となるデータ件数が同じ場合、データサイズの少ないほうが、検索の際のCPU実行時間は短い」ということですね。
- データ件数の違いによる検証
(A) と (C) と (D) を使って、それぞれ同じ文字列検索を行い、処理時間を計測しました。
| データ |
検索文字 |
データ件数 |
データサイズ |
Hit件数 |
CPU実行時間 |
| ( A ) |
神戸市 |
121,648 件 |
6,992,446 バイト |
821 件 |
3.02 CPUs |
| ( C ) |
神戸市 |
5,205 件 |
219,880 バイト |
821 件 |
0.26 CPUs |
| ( D ) |
神戸市 |
5,205 件 |
6,992,445 バイト |
821 件 |
1.02 CPUs |
この結果から、「検索対象となるデータ件数が違う場合、データ件数の少ないほうが、検索の際のCPU実行時間は短い」です。
まとめ
と、いうことで、まとめに入りますが、データ件数、及び、データサイズ(rec.dat のファイルサイズ)が、共に少ないほど、CPU実行時間は短くなります。同じデータ件数を処理するのにも、rec.dat
のデータサイズが違えば、処理時間は変わってくるということです。
ヒロ・データベースで、12万件のデータを処理することは可能だけれども、実行速度は非常に遅くなり、実用的ではありません。データ件数は多くて5000件まで、できれば、1000件程度にしておいたほうがCPUに無理な負荷をかけないのではないでしょうか。
インターネットですから、いつ、どのような状況になるかもわかりません。もし、大勢の人が一度にアクセスしたら大変です。サーバの環境や、利用者数によっても違います。運用しながら、もちろん、データのバックアップも取りながら、安心できるメンテナンスをお願いします。
ご自身のサーバ環境で実験がしてみたい場合は、下記よりデータをダウンロードしてお試しあれ。
ご参考 ( サポート対象外 )
CPU実行時間を表示するには、hero.pl の sub futer_pc{ } の中の最初あたりに次の記述をしてみてください。
@_=times(); $_[0]+=$_[1]; print "CPU実行時間 ",(int($_[0]*1000)/1000),"CPUs";
|
|