ウェブ・データベース http://www.hero.ne.jp/~db/
ウェブ・データベース ヒロ・データベース 郵便番号データベースでのプロセス消費時間を検証
テーブル自由設計型データベース(Perl CGI)
ゆうびんホームページの郵便番号データを利用してヒロ・データベースの検証を行いました。
TOP > 郵便番号データを利用したCPU実行時間の計測
 はじめに

ヒロ・データベースのユーザ様より、時折こんな質問をされることがあります。

何件まで登録してもいいの?」

この回答を出すために、多量のデータを処理した試験をもとにして、おおよその件数をお答えしています。その根拠となるデータは公開しておりませんでしたが、あらためて試験を行ない、ユーザの皆さんがヒロ・データベースを使う上で参考にして頂けるよう、この場において公表したいと思います。また、試験に利用したデータをダウンロードできるようにしておきますので、皆さんのサーバ環境では、どのくらいのデータ量まで扱えそうかなど、そういった検証にご利用いただいても結構です。

今回の試験では、郵便番号データ(データ件数約12万件、ファイルサイズ約7MB)を利用します。

郵便番号データは、ゆうびんホームページにおいて、都道府県別、及び、全国一括のデータとしてCSV形式で公開されています。このデータを利用して、ヒロ・データベースにおけるCPU実行時間の計測を行なってみましたのでご覧ください。


ご注意

 処理時間の計測は、開発者の自宅サーバ環境で行なっていますので、ご利用者の方により条件が異なります。また、本サーバーでは多量の負荷発生を考慮して、実際に動作確認をする環境は構築していません。今回の試験で利用したデータをダウンロードできるようにしましたが、、この データ を利用した事によるいかなる損害も作者は一切の責任を負いませんのでご了承ください。

 
 もくじ

試験方法

試験環境や試験データの説明。

試験結果
試験を行なった結果(CPU実行時間)など。

ダウンロード

ひととおりの説明をご覧になって、ご自身が使っているサーバでも検証してみたいという場合などにご活用ください。
 試験方法

  • 試験に利用するサーバ環境

    Linux ( OS ) / 1.2GHz Intel Pentium V プロセッサ ( CPU ) /
    256MB ( RAM ) 開発用自宅サーバーです


  • 利用する試験データ

    郵便番号データ ( 配布元:ゆうびんホームページ ) を、ヒロ・データベース用に改変。

    表記 データ名 補足 データ件数 データサイズ
    ( A ) 全国一括 比較基準として。 121,648 件 6,992,446 バイト
    ( B ) 全国一括
    (データ量30%カット)
    都道府県などを消去し市区群町村名を残したもの。
    rec.dat のファイルサイズを減らすため。
    121,648 件 4,925,380 バイト
    ( C ) 兵庫県 ヒロ・データベース通常運用の場合に
    5,000件程度が限界かと想定しました。
    5,205 件 219,880 バイト
    ( D ) 兵庫県
    (無理矢理データ増量)
    比較基準(A)とデータサイズを合わせ
    (C)と同じデータ件数にしてみました。
    5,205 件 6,992,445 バイト

    ※データサイズ : rec.dat のファイルサイズです。


    table.def 構成 ( 各データ共通 )

    ITEM01<>inactive<>10<>TEXT<>ZIPCD<>郵便番号<>YES<>-1<>
    ITEM02<>active<>50<>TEXT<>ADDR<>住所<>YES<>-1<>

  • 計測方法

    プロセスが消費したCPU時間 ( 秒 ) をスクリプト上で計測します。まぁ、おおざっぱな値です。ただし、全ての試験において、それぞれ3回実行した平均の値で検証することにします。


  • 試験パターン
    1. 各データの表示時間
      各データについて、単にヒロ・データベースを使ってリスト表示 ( 先頭50件 ) する時間。

    2. 抽出するデータの位置(データファイル中のデータ位置)の違いによる検証
      (A) を使って、データファイルの先頭と末尾のデータ検索を行い、処理時間を比較。

    3. 多重検索の検証
      (A) を使って、通常検索と and検索を行い、処理時間を比較。

    4. データサイズの違いによる検証
      (A) と (B) を使って、それぞれ同じ文字列検索を行い、処理時間を比較。

    5. データ件数の違いによる検証
      (A) と (C) と (D) を使って、それぞれ同じ文字列検索を行い、処理時間を比較。

 

 試験結果

    1. 各データの表示時間

      (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しか出ていませんね。この結果から、「リスト表示の際は、データ件数を考えるよりも、データサイズの少ないほうが、表示時間が短いということは分かっていただけると思います。


    2. 抽出するデータの位置(データファイル中のデータ位置)の違いによる検証

      データファイル中の、先頭にあるデータは「北海道」のデータで、末尾にあるデータは「沖縄県」のデータです。(A)のデータについて、それぞれの検索時間を計測しました。

      データ 検索文字 Hit件数 CPU実行時間
      ( A ) 北海道 8215 件 3.04 CPUs
      ( A ) 沖縄県 790 件 3.02 CPUs

      上記1の検証におけるCPU実行時間に比べて、検索ルーチンを通すことでかなりのCPUプロセス消費していますね。まぁ、それはしかたのないこととして。この結果から、「検索にHitするデータがデータファイル中のどの位置にあってもCPU実行時間には影響しない」 ことが言えると思います。ヒロ・データベースは全文検索なので、本来は最初の1件目がHitするだけの検索を行っても、結果的に最終レコードまでをなめまわしていますので、こういった結果になるのでしょうね。微妙な差 ( 0.02CPUs ) は、Hitしたレコードの変数代入回数の差か何かでしょう。

    3. 多重検索の検証

      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実行時間が増える」ようです。

    4. データサイズの違いによる検証

      (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実行時間は短い」ということですね。


    5. データ件数の違いによる検証

      (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";

 ヒロ・データベース用郵便番号検索データのダウンロード

  • 使用条件 (データをダウンロードする場合、無条件に同意したものとみなします。)


    1. ご利用の際には全てにおいて自己責任で行ってください。

  • 郵便番号データの原本は、ゆうびんホームページで配布されています。本データは、ゆうびんホームページで公開されているデータを、ヒロ・データベース用に加工したものです。

    データ名 ダウンロード 圧縮形式 データ件数 データサイズ
    全国一括 クリックでダウンロード LZH形式 121,648 件 6,992,446 バイト
    全国一括(データ量30%カット) クリックでダウンロード LZH形式 121,648 件 4,925,380 バイト
    兵庫県 クリックでダウンロード LZH形式 5,205 件 219,880 バイト
    兵庫県(無理矢理データ量増) クリックでダウンロード LZH形式 5,205 件 6,992,445 バイト

  • 使用方法

    ダウンロード後にファイルを解凍すると、各テーブルごとに必要なファイルが展開されます。ユーザ様が既に設置されている HeRO-DataBase のディレクトリに転送してください。HeRO-DataBase の本体に含まれている sample ディレクトリと同じ構成です。

    なお、本データは、訂正(修正や削除)を行なうためには用意されておりません。検索を目的としたものですので、訂正を行なうことにより不具合が発生する可能性があります。あらかじめご了承ください。