ページの先頭行へ戻る
Symfoware Server V12.7.0 RDB運用ガイド(XMLアダプタ編)
FUJITSU Software

C.1 XMLデータのインデックスの容量見積り

XMLデータのインデックスは、パス定義で定義する検索パス単位にDSI内に情報を格納します。

このため、XMLデータのインデックスの容量を算出する場合は、各検索パス単位に容量を求め、その総和がXMLデータのインデックスの容量となります。

以下に各検索パスの容量の見積りを示します。

XMLデータのインデックスのデータ部

キー圧縮率については、“キー圧縮率の目安値”を参照してください。

データ部の使用率については、“使用率の目安値”を参照してください。

XMLデータのインデックスのインデックス部

インデックス部の使用率については、“使用率の目安値”を参照してください。

検索対象となる要素・属性の長さの目安値

XMLデータ部やインデックス部における、検索対象の要素・属性となる目安値を以下に示します。

検索対象となる要素・属性のデータ属性

長さ(バイト)

STRING(n)

n+(繰返しノード数×4)

NUMBER(p,q)

j+(繰返しノード数×4) (注)

DATE

4+(繰返しノード数×4)

n:長さ p:精度 q:位取り

注) jはpの値に依存して以下の値になります。

pの値(精度)

j

1~ 2
3~ 4
5~ 6
7~ 9
10~11
12~14
15~16
17~18

1
2
3
4
5
6
7
8

キー圧縮率の目安値

XMLデータのインデックスのデータ部やインデックス部ではキーを圧縮して格納します。この場合のキー圧縮率は以下のような目安値を使用して見積りを行います。

データ部のキー圧縮率      :  0.3
インデックス部のキー圧縮率:  0.5

使用率の目安値

XMLデータのインデックスのデータ部やインデックス部における使用率(各ページの平均使用率)は、データのキー値、データの追加および削除の順番に依存して変動します。スペース量を見積もる場合は、それぞれの値に対して、以下のような目安値を使用して見積りを行います。

データ部の使用率      :  0.5
インデックス部の使用率:  0.5

XMLデータのインデックスの容量見積り例

以下に示す構造のXMLグループ定義をインデックスに付加する場合の容量を計算します。

CREATE XMLGROUP 受注伝票GR ON 伝票IXDSO (
        '/受注伝票/伝票番号' STRING(20),
        '/受注伝票/商品*/商品名' STRING(20)
 ) RULE (伝票種別) = ('1');

上記構造のXMLグループ定義に対するインデックスの容量見積りは、以下の手順で行います。

  1. 検索パス’/受注伝票/伝票番号'に対する容量見積りを行う。

  2. 検索パス'/受注伝票/商品*/商品名'に対する容量見積りを行う。

  3. 手順1と手順2の総和が、XMLデータのインデックスの容量となる。

格納される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</数量>
  </商品>
</受注伝票>

手順1.検索パス/受注伝票/伝票番号に対する容量見積り

検索パス’/受注伝票/伝票番号’に対する容量見積りを以下に示します。

【データ部】
エントリ長            = ( /受注伝票/伝票番号 ) × ( 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バイト)                                            (注)

注) 小数点切捨て