さじろーどっとねっと
<ADD方式>

Perl DATABASEでは、データ管理にADD方式を採用しています。この章ではADD方式の概要を説明します。

ADD方式では以下のようにファイルに設定します。ファイル名は「perldbdat?.cgi」となります。

$perldb->insert("test","aaa<>bbb<>ccc<>ddd<>");を実行した場合・・・

perldbdattest.cgi
???????????????????
000000000000002
000000000000002<>aaa<>bbb<>ccc<>ddd<>

???????????????????

読み込む時には、連想配列に入れます。

???????????????????
open(IN,"dbdata/perldbdattest.cgi");
%data=;
close(IN);
???????????????????

この方式により、インデックス部分(この例では「000000000000002」)に対する処理が、全部のデータを検索するよりも高速になります。データの検索頻度を考えるとインデックス部分のソートがかなりのパフォーマンスネックになります。そのためこのような処理になりました。

???????????????????
@sortkeys = sort keys(%data);
foreach(@sortkeys){
print "$data{$_}"; # ソートされた順番に表示されます。
}

# 逆順にソートしたい場合は、リバースします
@sortkeys = reverse sort keys(%data);
foreach(@sortkeys){
print "$data{$_}"; # ソートされた順番に表示されます。
}
???????????????????

データを削除した場合には以下のようになります。

$perldb->delete("test","1 eq aaa");を実行した場合・・・

perldbdattest.cgi
???????????????????
000000000000002
000000000000002<>aaa<>bbb<>ccc<>ddd<>
000000000000002
?この行は空白になります

???????????????????

ファイルを昇順に読み込みますので、先に読み込まれたデータ「000000000000002<>aaa<> bbb<>ccc<>ddd<>」が$data{"000000000000002"}に設定されます。その後、「空白」のデータが再度「$data{"000000000000002"}」に設定されますので結果として、「$data {"000000000000002"}」は「""」になります。

???????????????????
open(IN,"dbdata/perldbdattest.cgi");
%data=;
close(IN);

print "$data{"000000000000002"}"; # なにも表示されません
???????????????????

処理内容ではマスターファイルと更新ファイルに分けられており、事前にマスターデータを読み込み、次に更新データを読み込みます。

マスターファイル
???????????????????
000000000000002
000000000000002<>aaa2<>bbb2<>ccc2<>ddd2<>
000000000000003
000000000000003<>aaa3<>bbb<>ccc<>ddd<>
000000000000004
000000000000004<>aaa4<>bbb4<>ccc4<>ddd4<>

???????????????????

トランザクション
???????????????????
000000000000002 # 削除したレコード
?この行は空白にです
000000000000003 # 更新したレコード
000000000000003<>aaa3<>bbb3<>ccc3<>ddd3<>

???????????????????

Selectした場合、以下の結果が得られます。
???????????????????
000000000000002<>aaa2<>bbb2<>ccc2<>ddd2<>
000000000000003<>aaa3<>bbb3<>ccc3<>ddd3<>
000000000000004<>aaa4<>bbb4<>ccc4<>ddd4<>
???????????????????

ブックマークに追加する