XMLデータのインデックスは、パス定義で定義する検索パス単位にDSI内に情報を格納します。
このため、XMLデータのインデックスの容量を算出する場合は、各検索パス単位に容量を求め、その総和がXMLデータのインデックスの容量となります。
以下に各検索パスの容量の見積りを示します。
XMLデータ部やインデックス部における、検索対象の要素・属性となる目安値を以下に示します。
検索対象となる要素・属性のデータ属性 | 長さ(バイト) |
|---|---|
STRING(n) | n+(繰返しノード数×4) |
NUMBER(p,q) | j+(繰返しノード数×4) (注) |
DATE | 4+(繰返しノード数×4) |
n:長さ p:精度 q:位取り
注) jはpの値に依存して以下の値になります。
pの値(精度) | j |
|---|---|
1~ 2 | 1 |
XMLデータのインデックスのデータ部やインデックス部ではキーを圧縮して格納します。この場合のキー圧縮率は以下のような目安値を使用して見積りを行います。
データ部のキー圧縮率 : 0.3 インデックス部のキー圧縮率: 0.5
XMLデータのインデックスのデータ部やインデックス部における使用率(各ページの平均使用率)は、データのキー値、データの追加および削除の順番に依存して変動します。スペース量を見積もる場合は、それぞれの値に対して、以下のような目安値を使用して見積りを行います。
データ部の使用率 : 0.5 インデックス部の使用率: 0.5
以下に示す構造のXMLグループ定義をインデックスに付加する場合の容量を計算します。
CREATE XMLGROUP 受注伝票GR ON 伝票IXDSO (
'/受注伝票/伝票番号' STRING(20),
'/受注伝票/商品*/商品名' STRING(20)
) RULE (伝票種別) = ('1');上記構造のXMLグループ定義に対するインデックスの容量見積りは、以下の手順で行います。
検索パス’/受注伝票/伝票番号'に対する容量見積りを行う。
検索パス'/受注伝票/商品*/商品名'に対する容量見積りを行う。
手順1と手順2の総和が、XMLデータのインデックスの容量となる。
上記のXMLグループに対して以下のXML文書を、XMLデータのインデックスを付加した列に格納した場合、インデックスに格納されるデータ数は’/受注伝票/伝票番号’のデータ数は1個、'/受注伝票/商品*/商品名'のデータ数は2個(’商品’ノードが繰返し構造のため)となります。検索パスあたりのインデックス格納データ数は、XMLデータ内の繰返し数にも注意してください。
<受注伝票>
<伝票番号>123</伝票番号>
<日付情報>
<契約日>2007-01-19</契約日>
<納入日>2007-02-21</納入日>
</日付情報>
<受注先>
<社名>ABC銀行</社名>
<コード>009</コード>
</受注先>
<商品 CPU="Pentium II 300" DISK="8">
<商品名>FMV6300</商品名>
<単価>300,000</単価>
<数量>200</数量>
</商品>
<商品 CPU="Pentium II 300" DISK=“6">
<商品名>FMV7300</商品名>
<単価>350,000</単価>
<数量>10</数量>
</商品>
</受注伝票>格納構造:
’/受注伝票/伝票番号’と’/受注伝票/商品*/商品名’をキーとしたXML構造
ページ長(データ部):
16Kバイト
ページ長(インデックス部):
2Kバイト
使用率(データ部):
0.5
使用率(インデックス部):
0.5
圧縮率(データ部):
0.3
圧縮率(インデックス部):
0.5
インデックスに格納されるデータ数
検索パス’/受注伝票/伝票番号’の場合
30000
検索パス’/受注伝票/商品*/商品名’の場合
60000
検索パス’/受注伝票/伝票番号’に対する容量見積りを以下に示します。
【データ部】
エントリ長 = ( /受注伝票/伝票番号 ) × ( 1 - キー圧縮率 ) + 20
= 20 × ( 1 - 0.3 ) + 20
≒ 34 (注1)
セクション長 = エントリ長 × 10 + 2
= 34 × 10 + 2
= 342
ページ内セクション数 = ( データ部のページ長 - 152 ) / セクション長
= ( 16384 - 152 ) / 342
≒ 47 (注2)
ページ内エントリ数 = ( セクション長 / エントリ長 ) × ページ内セクション数 ×
データ部の使用率
= ( 342 / 34 ) × 47 × 0.5
≒ 10 × 47 × 0.5 (注3)
= 235
データ部のページ数 = 検索パスあたりのインデックス格納データ数 / ページ内エントリ数
= 30000 / 235
= 127.6
≒ 128 (注1)
データ部のスペース量 = ( データ部のページ数 + 1 ) × データ部のページ長 × 安全率
= ( 128 + 1 ) × 16384 × 1.3
= 2747596 (バイト)
= 2683 (K バイト)
→ 2688 (K バイト) (注4)注1) 小数点切上げ
注2) 小数点切捨て
注3) ( 342 / 34 )は小数点切捨て
注4) スペース量をページ長の整数倍に補正
【インデックス部】
エントリ長 = ( /受注伝票/伝票番号 + 12 ) × ( 1 - キー圧縮率 ) + 10
= ( 20 + 12 ) × ( 1 - 0.5 ) + 10
= 26
セクション長 = エントリ長 × 10 + 2
= 26 × 10 + 2
= 262
ページ内セクション数 = ( インデックス部のページ長 - 152 ) / セクション長
= ( 2048 - 152 ) / 462
≒ 5 (注1)
ページ内エントリ数 = ( セクション長 / エントリ長 ) × ページ内セクション数 ×
インデックス部の使用率
= ( 262 / 26 ) × 5 × 0.5
≒ 10 × 5 × 0.5
= 25 (注2)
インデックスレベル = L → 以下の条件を満たす値
( ページ内エントリ数 )L ≧ データ部のページ数
25L ≧ 128
= 2
インデックスレベル
インデックス部のページ数 = Σ ( データ部のページ数 / (ページ内エントリ数i ))
i=1
2
= Σ ( 128 /( 25i ))
i=1
= ( 128 / 25 ) + ( 128 / 25 / 25 )
≒ 6 + 1 (注3)
= 7
インデックス部のスペース量
= ( インデックス部のページ数 + 1 ) × インデックス部のページ長 × 安全率
= ( 7 + 1 ) × 2048 × 1.3
= 21299 (バイト)
≒ 20.8 (K バイト)
→ 22 (K バイト) (注4)注1) 小数点切上げ
注2) ( 262 / 26 )は小数点切捨て
注3) 小数点切上げ
注4) スペース量をページ長の整数倍に補正
手順2.検索パス’/受注伝票/商品*/商品名’に対する容量見積り
検索パス’/受注伝票/商品*/商品名’に対する容量見積りを以下に示します。
【データ部】
エントリ長 = ( /受注伝票/商品*/商品名 ) × ( 1 - キー圧縮率 ) + 20
= 24 × ( 1 - 0.3 ) + 20
≒ 38 (注1)
セクション長 = エントリ長 × 10 + 2
= 38 × 10 + 2
= 382
ページ内セクション数 = ( データ部のページ長 - 152 ) / セクション長
= ( 16384 - 152 ) / 382
≒ 42 (注2)
ページ内エントリ数 = ( セクション長 / エントリ長 ) × ページ内セクション数 ×
データ部の使用率
= ( 382 / 38 ) × 42 × 0.5
≒ 10 × 42 × 0.5 (注3)
= 210
データ部のページ数 = 検索パスあたりのインデックス格納データ数 / ページ内エントリ数
= 60000 / 210
= 285.7
≒ 287 (注1)
データ部のスペース量 = ( データ部のページ数 + 1 ) × データ部のページ長 × 安全率
= ( 287 + 1 ) × 16384 × 1.3
= 6134169.6 (バイト)
= 5990(K バイト)
→ 6000 (K バイト) (注4)注1) 小数点切上げ
注2) 小数点切捨て
注3) ( 342 / 34 )は小数点切捨て
注4) スペース量をページ長の整数倍に補正
【インデックス部】
エントリ長 = ( /受注伝票/商品*/商品名 + 12 ) × ( キー圧縮率 ) + 10
= ( 24 + 12 ) × ( 1 - 0.5 ) + 10
= 40
セクション長 = エントリ長 × 10 + 2
= 40 × 10 + 2
= 402
ページ内セクション数 = ( インデックス部のページ長 - 152 ) / セクション長
= ( 2048 - 152 ) / 402
≒ 5 (注1)
ページ内エントリ数 = ( セクション長 / エントリ長 ) × ページ内セクション数 ×
インデックス部の使用率
= ( 402 / 40 ) × 5 × 0.5
≒ 10 × 5 × 0.5
= 25 (注2)
インデックスレベル = L → 以下の条件を満たす値
( ページ内エントリ数 ) L ≧ データ部のページ数
25 L ≧ 287
= 2
インデックスレベル
インデックス部のページ数
= Σ ( データ部のページ数 / ページ内エントリ数i )
i=1
2
= Σ ( 287 / 25 i )
i=1
= ( 287 / 25 ) + ( 287 / 25 / 25 )
≒ 12+ 1 (注3)
= 13
インデックス部のスペース量
= ( インデックス部のページ数 + 1 ) × インデックス部のページ長 × 安全率
= ( 13 + 1 ) × 2048 × 1.3
= 37273.6 (バイト)
≒ 36.4 (K バイト)
→ 38 (K バイト) (注4)注1) 小数点切上げ
注2) ( 262 / 26 )は小数点切捨て
注3) 小数点切上げ
注4) スペース量をページ長の整数倍に補正
手順3.XMLデータのインデックスの容量(手順1と手順2の総和)
XMLデータのインデックスの容量を求める手順を以下に示します。
【XMLデータのインデックスの容量】
XMLデータのインデックスの容量
= 手順1 ( データ部のスペース量 + インデックス部のスペース量 )
+ 手順2 ( データ部のスペース容量 + インデックス部のスペース量 )
= ( 2688 + 22 ) + (6000 + 38 )
= 8748 ( Kバイト )
≒ 8.7 ( Mバイト) (注)注) 小数点切捨て