速度の測定とキー

Menu Menu


Perl での時間測定

Benchmark module を使う。

  DB<<8>> use Benchmark qw(:all) ;
  DB<<9>> $c = 10000
  DB<<10>> $t = timeit($c,sub { for(1..1000) { $c += $_; } } )
  DB<<11>> p timestr($t)
 2 wallclock secs ( 1.10 usr +  0.00 sys =  1.10 CPU) @ 9090.91/s (n=10000)


Perl による sqlite3 の動作

  perldoc DBD::SQLite

以下のファイルを動かしてみよう。

sqlite.pl


データを1万個 insert する

Benchmark module を使って時間を測定してみる。

データは以下のように作る。

    my $title = 'Perl000000';
    print $title++,"\n";
    print $title++,"\n";

1,10,100,1000,10000,100000 と測定してグラフを作成せよ。

   (グラフは何を使って書く?)

sqlite_insert.pl


データを読み出す時間

読み出すデータは以下のように作る。

    my $title = sprintf("Perl%05d",rand(10000));
    print $title,"\n";
    $title = sprintf("Perl%05d",rand(10000));
    print $title,"\n";

表の大きさを変えて、100,1000,10000,100000 と測定してグラフを作成せよ。

sqlite_select.pl


Index とは何か?

検索を高速化する

    create index インデックス名 on テーブル名(カラム名1, カラム名2, ...);

読み出す時間を再測定する。

sqlite_insert_index.pl


問題2

データベース書き込み、読込の時間をグラフに書く

キー

データベースでは、特定の属性に Index を作るとアクセスが速くなる。

Index には重複や空白は許されない。

Index を用いた検索が重要となる。

Index のように必ず値を持ち、その値を決めると、表の row / record が決まる属性(複数の場合もある)をキーと言う。


レコード

Record は複数の属性とその値の組

表の一行。Row (ロウ)。

Tuple (タプル、テュープル) とも呼ぶ。

表の一列は、column (コラム、カラム) と言う。


物理的実装

Index がない場合は、線形探索が行われる。

Index に対しては、

  Hash Table
  Binary Tree
  Branced Binary Tree

などが使われている。


メモリとディスク

メモリは 4GB から 128GB まで、値段によるが…

ハードディスクは、1TB から、台数を増やせば…

さらに、それを分散したネットワーク上のPCに載せて…

実用的に使いたいなら少なくともIndexはメモリ上にある必要がある。

ハードディスクはバックアップ。


問題1

メモリ上のインデックスの性能を確認せよ。 (この問題はオプションにします)


Shinji KONO / Mon Jan 16 13:48:20 2012