XMLDB.jp

XMLDB開発支援
HOME  >  XMLDB開発支援  >  データベースファイルサイズの見積もり方法

データベースファイルサイズの見積もり方法

2004年5月20日 更新


デフォルトのConfigrationでは、およそ30MB程度のXMLデータを格納することができます。それ以上のサイズのXMLデータを格納する場合は、各データベースファイルの領域拡張が必要となります。ここでは、格納するXMLデータに対して、どのデータベースファイルをどの程度拡張すればよいかを概算する方法についてVer2.9をベースに説明します。


データベースファイルの使用領域は、実際に格納するXMLデータの特性(ユニークなデータの割合、データ長、タグ構造)に影響を受けるため、ここで算出する値はあくまでも格納するXMLデータの特性を想定した上での概算値となります。実際にデータベースを運用する際は、この概算値を元に、定期的にデータベースファイルの使用率を確認し、データベース領域の微調整とデフラグメンテーションを行う必要があります。


Ver3.0では新機能としてデータベース領域のAutoGrowth機能が追加されますので、予めデータベース領域を確保しておく必要がなくなります。




1.データベースファイルについて

NeoCore XMS Ver2.9では、以下の16種類のデータベースファイルが用意されています。

各ファイルはNeoDatabase.xmlで指定されているLocationに従ったディレクトリに配置されます。


1)MapFile(複数ファイル)

ファイル名: neoXDB001.map(以下002、003...と連番)

XMLデータの論理的な参照情報が格納されます。1つはデフラグメンテーションのためのスペアファイルとして使用されます。


2)DataDictionary

ファイル名: neoXDBD.dct

ユニークなデータ値と属性値が格納されます。


3)CrossReference

ファイル名: neoCR.crf

DataDictionaryに格納される各エントリに関連したエントリが格納されます。


4)TagDictionary

ファイル名: neoXDBT.dct

ユニークなflattenedタグと、タグの順列が格納されます。


5)DataIndexCore

ファイル名: neoData.inx

ユニークなデータのインデックスが格納されます。


6)DataIndexMTMem

ファイル名: neoDataMTMem.dup

重複するデータのインデックスが格納されます。


7)DataIndexTmpMTMem

ファイル名: neoDataTmpMTMem.dup

Query実行時にDataIndexMTMemのArrayが一時的に作成されます。


8)DataIndexDTMem(複数ファイル)

ファイル名: neoDataDTMem001.dup(以下002、003...と連番)

重複するデータのインデックスが格納されます。1つはデフラグメンテーションのためのスペアファイルとして使用されます。


9)TagIndexCore

ファイル名: neoTag.inx

ユニークなタグのインデックスが格納されます。


10)TagIndexMTMem

ファイル名: neoTagMTMem.dup

重複するタグのインデックスが格納されます。


11)TagIndexTmpMTMem

ファイル名: neoTagTmpMTMem.dup

Query実行時にTagIndexMTMemのArrayが一時的に作成されます。


12)TagIndexDTMem(複数ファイル)

ファイル名: neoTagDTMem001.dup(以下002、003...と連番)

重複するタグのインデックスが格納されます。1つはデフラグメンテーションのためのスペアファイルとして使用されます。


13)TagPlusDataIndexCore

ファイル名: neoTPD.inx

ユニークなタグ+データのインデックスが格納されます。


14)TagPlusDataIndexMTMem

ファイル名: neoTPDMTMem.dup

重複するタグ+データのインデックスが格納されます。


15)TagPlusDataIndexTmpMTMem

ファイル名: neoTPDTmpMTMem.dup

Query実行時にTagPlusDataIndexMTMemのArrayが一時的に作成されます。


16)TagPlusDataIndexDTMem(複数ファイル)

ファイル名: neoTPDDTMem001.dup(以下002、003...と連番)

重複するタグ+データのインデックスが格納されます。1つはデフラグメンテーションのためのスペアファイルとして使用されます。


2.領域拡張が必要なデータベースファイル

1.で説明したように、16種類のデータベースファイルはそれぞれ格納されるデータが異なります。このため、どのデータベースファイルをどの程度拡張するべきかは、格納するXMLデータの特性に依存することになります。各データベースファイルの領域拡張に関する一般的な指針は、以下のようになります。


1)MapFile

XMLデータサイズに比例して使用領域が増加します。


2)DataDictionary

ユニークなデータ量に比例して使用領域が増加します。


3)CrossReference

ユニークなデータ量に比例して使用領域が増加します。


4)TagDictionary

ユニークなタグの量に比例して使用領域が増加します。タグ構造が一定のXMLデータを大量に格納する場合は増加しません。


5)DataIndexCore

ユニークなデータ量に比例して使用領域が増加します。


6)DataIndexMTMem、7)DataIndexTmpMTMem、8)DataIndexDTMem

DataOnlyQueryがOFFの場合は増加しません。


9)TagIndexCore

ユニークなタグの量に比例して使用領域が増加します。タグ構造が一定のXMLデータを大量に格納する場合は増加しません。


10)TagIndexMTMem

タグ構造が一定のXMLデータを大量に格納する場合は増加しません。


11)TagIndexTmpMTMem

Query実行時にTagIndexMTMemのArrayが一時的に作成されるファイルなので、実行するQueryに依存します。通常、拡張の必要はありません。


12)TagIndexDTMem

重複するタグの量に比例して使用領域が増加します。


13)TagPlusDataIndexCore

ユニークな(タグ+データ)量に比例して使用領域が増加します。


14)TagPlusDataIndexMTMem

重複する(タグ+データ)量に比例して使用領域が増加します。


15)TagPlusDataIndexTmpMTMem

Query実行時にTagPlusDataIndexMTMemのArrayが一時的に作成されるファイルなので、実行するQueryに依存します。通常、拡張の必要はありません。


16)TagPlusDataIndexDTMem

重複する(タグ+データ)量に比例して使用領域が増加します。


3.データベースファイルサイズを概算する方法

<?xml version="1.0" encoding="UTF-8"?>
<CATALOG>
<CD ID="1">
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
</CATALOG>

このXMLドキュメントの特性としては、
    - ユニークなデータが多い
    - 重複するタグが多い
    - 重複するタグが多い

の2点が挙げられるので、領域拡張が必要となるファイルは次のように推測できます。
    - MapFile
    - DataDictionary
    - CrossReference
    - DataIndexCore
    - TagIndexDTMem
    - TagPlusDataIndexCore


上記のデータベースファイルをどの程度拡張するかを算出するには、格納するXMLデータの一部をNeoCore XMSに格納し、各データベースファイルのサイズと使用率を確認します。


各データベースファイルのサイズと使用率は、NeoCore XMS管理コンソールのStatusタブ>NeoCoreXMS Statusの<Strage-Stats>より確認できます。


まず、格納する1,000,000件の100分の1である10,000件のXMLデータを、NeoCore XMSに格納します。
格納後のDataDictionaryのStatus、<Physical>タグと<Percent-Full>タグの値を確認します。


<Physical>10485760</Physical>


<Percent-Full>3.00</Percent-Full>


10,000件のXMLデータでの使用領域は、次のように計算できます。
10485760(バイト)×0.03=314572.8(バイト)・・・(1)


(1)より、1,000,000件のXMLデータを格納するのに必要な領域は、次のように概算できます。
314572.8(バイト)×(1,000,000/10,000)=30(メガバイト)・・・(2)


(2)より、1,000,000件のXMLデータを格納するには、DataDictionaryのサイズを30MB以上にする必要があることが分かります。これはあくまでも概算値ですので、安全のため25%程度の余裕を持たせて、サイズを決定します。


30(メガバイト)×1.25=37.5(メガバイト)


DataDictionaryのサイズはメガバイト単位の整数値で指定する必要があるので、最終的にパラメータ値を38と決定します。その他のファイル(IndexCoreファイルを除く)についても同様に計算することで、1,000,000件のXMLデータを格納するのに必要な領域を概算することができます。


DataIndexCore、TagIndexCore、TagPlusDataIndexCoreの3ファイルについては、サイズの指定がメガバイト単位ではなく格納できるエントリ数を2の累乗の指数で指定するため、計算方法が異なります。上記3ファイルについては、格納後のStatus、<Total-Quanta>タグと<Allocated>タグの値を確認します。


DataIndexCoreのStatusが以下のようであった場合、

<Total-Quanta>262144</Total-Quanta>
<Allocated>7864</Allocated>


<Tatal-Quanta>の値より、現在のパラメータ値は18であることが分かります。
2^18=262144


<Allocated>の値より、現在7864エントリが格納されていることが分かるので、1,000,000件のXMLデータを格納するのに必要なエントリ数は25%の余裕を含めて次のように概算できます。


7864(エントリ)×(1,000,000/10,000)×1.25=983000(エントリ)


これより、2の累乗の指数を求めると、
2^19<983000<2^20


となるので、DataIndexCoreのパラメータ値は20と決定します。
TagIndexCore、TagPlusDataIndexCoreついても同様に計算することで、1,000,000件のXMLデータを格納するのに必要な領域を概算することができます。



企画協力:アイティメディア株式会社it_S.gif  

▲このページのTOPへ

  • 無償で使える!XMLDB「NeoCore」
  • サイバーテック求人情報
  • メールマガジン申し込み
  • TEchScore

  • ▲NeoCoreについて記載されています!

  • ▲XMLマスター教則本です。試験対策はこれでばっちり!
Copyright (c) CyberTech corporation ltd. All ights Reserved. | サイバーテックについて | ご利用ガイド