連載
» 2009年12月15日 00時00分 公開

ゼロからのデータモデリング入門(11):論理設計から動くシステムへ (2/3)

[ITmedia]

3.論理I/O試算を実施する

 論理I/O試算【注1】とは、ホットスポット候補として絞り込まれたプロセスの各エンティティへのアクセスパスから論理I/O数を算出し、処理性能を定量的に見積もる手法です。基本的にRDBMSではメモリ上のデータを実行しますが、データがメモリにない場合はディスクI/Oが発生します。どのデータがメモリ上にあるのかは特定できないため、すべてディスクからのI/Oアクセスが発生するものと想定し算出します。

【注1】論理I/O試算はアシスト独自の方法論「Tetra-Method(R)」です。



 論理I/O試算には、「システム設計書」、「論理データモデル」が必要です。

  • システム設計書:画面設計書、プログラム設計書、現行システムなどから処理内容、条件項目、項目間のカーディナリティ、データ件数などを確認します。
  • 論理データモデル:エンティティ、属性、リレーションシップを確認します。

 ここから、図2に示す処理内容と図3に示すER図を例にホットスポット候補の論理I/O試算を実施してみましょう。

 (1)利用画面や処理概要の確認

 最初に、今回ホットスポット候補として絞り込まれたプロセスの利用画面や処理概要を確認します(図2)。このプロセスでは、ユーザーが画面上で顧客名を入力して検索ボタンを押すと、その顧客が注文した情報(注文番号、製品名、注文日、金額など)が表示されるという流れになっています。

●図2 画面イメージと処理概要 ●図2 画面イメージと処理概要

 (2)論理I/O数の試算

 次に、CRUD図より各エンティティの件数を確認し、画面と処理概要から開始位置を決定します。

 このプロセスに関連するのは顧客/注文/製品エンティティの3つです。プロセスは「ユーザーが画面上で顧客名を入力し検索ボタンを押す」ことから始まるので、開始位置(起点)は顧客エンティティになります。次に、顧客名をキーに注文情報を出力しなければならないので、プロセスは顧客エンティティから注文エンティティへ、そして製品エンティティという順にアクセスします(顧客→注文→製品というアクセスパスとなります)。

●図3 ER図と件数比率(プライマリキーにはインデックスが定義されている前提) ●図3 ER図と件数比率(プライマリキーにはインデックスが定義されている前提)

 論理I/O試算には、エンティティ間のカーディナリティとエンティティのデータ件数が重要です。ER図からエンティティ間のカーディナリティをそれぞれ確認し(「顧客:注文」=「1:10」、「注文:製品」=「20:1」)、CRUD図より各エンティティの件数(顧客:1000件、注文:1万件、製品:500件)を確認します。

 具体的なI/O試算方法については、図3を基に作成した論理I/O試算表(表1)を例に説明します。

●表1 論理I/O試算表(クリックで拡大します) ●表1 論理I/O試算表(クリックで拡大します)

 「画面上で顧客名が入力されたら顧客を検索する」というのが最初の処理になるので、まずは顧客エンティティに対するI/Oを調べます。(1)の「エンティティ1」欄の「エンティティ名」として「顧客」、画面(図2)から顧客名が条件キーとなっていることが分かるので「条件キー」に「顧客名」と記載します。最初のアクセスなのでエンティティ2には記入せず、1回の入力で1件ヒットするという処理になっているため(便宜上、同一の顧客名は複数存在しないという前提)「繰返回数」に「1」、「ヒット件数」に「1」と記入します。「I/O数」には顧客エンティティの件数である「1000」を記入します。また、インデックスを設定した場合を想定し「インデックス候補」欄にも記入します。この場合、候補となるのは「顧客名」となり、「I/O数」はインデックスへのアクセス1回とデータへのアクセス1回の合計である「2」を記入します。

 次は顧客番号を結合キーとし、注文エンティティの顧客番号を参照するという流れになるので、(2)の「エンティティ1」欄に顧客エンティティについて、「エンティティ2」欄に注文エンティティについて記入します。顧客エンティティのヒット件数が1だったので繰返回数に「1」、顧客エンティティと注文エンティティ間のカーディナリティが1:10となっているので、「10×1=10」でヒット件数は「10」となります。I/O数は、注文エンティティの件数である「1万」を記入します。インデックス候補は注文エンティティの顧客番号となり、I/O数は20となります。

 その後に注文エンティティの製品番号を結合キーとして製品エンティティへアクセスするので、(3)の「エンティティ1」欄には注文エンティティについて、「エンティティ2」欄に製品エンティティについて記入します。(2)のヒット件数が10なので繰返回数が10となりヒット件数は10となります。I/O数は注文番号が特定されているのでカーディナリティの数である20件となります。

 最後に(1)〜(3)の論理I/O数をインデックスがある場合とない場合に分けて合計します。この例では、注文エンティティの顧客番号にインデックスを定義することで、I/O数を大幅に削減できることが分かります。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。