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に従ったディレクトリに配置されます。

  • MapFile(複数ファイル)
    ファイル名:neoXDB001.map(以下002、003...と連番)
    XMLデータの論理的な参照情報が格納されます。1つはデフラグメンテーションのためのスペアファイルとして使用されます。
  • DataDictionary
    ファイル名:neoXDBD.dct
    ユニークなデータ値と属性値が格納されます。
  • CrossReference
    ファイル名:neoCR.crf
    DataDictionaryに格納される各エントリに関連したエントリが格納されます。
  • TagDictionary
    ファイル名:neoXDBT.dct
    ユニークなflattenedタグと、タグの順列が格納されます。
  • DataIndexCore
    ファイル名:neoData.inx
    ユニークなデータのインデックスが格納されます。
  • DataIndexMTMem
    ファイル名:neoDataMTMem.dup
    重複するデータのインデックスが格納されます。
  • DataIndexTmpMTMem
    ファイル名:neoDataTmpMTMem.dup
    Query実行時にDataIndexMTMemのArrayが一時的に作成されます。
  • DataIndexDTMem(複数ファイル)
    ファイル名:neoDataDTMem001.dup(以下002、003...と連番)
    重複するデータのインデックスが格納されます。1つはデフラグメンテーションのためのスペアファイルとして使用されます。
  • TagIndexCore
    ファイル名:neoTag.inx
    ユニークなタグのインデックスが格納されます。
  • TagIndexMTMem
    ファイル名:neoTagMTMem.dup
    重複するタグのインデックスが格納されます。
  • TagIndexTmpMTMem
    ファイル名:neoTagTmpMTMem.dup
    Query実行時にTagIndexMTMemのArrayが一時的に作成されます。
  • TagIndexDTMem(複数ファイル)
    ファイル名:neoTagDTMem001.dup(以下002、003...と連番)
    重複するタグのインデックスが格納されます。1つはデフラグメンテーションのためのスペアファイルとして使用されます。
  • TagPlusDataIndexCore
    ファイル名:neoTPD.inx
    ユニークなタグ+データのインデックスが格納されます。
  • TagPlusDataIndexMTMem
    ファイル名:neoTPDMTMem.dup
    重複するタグ+データのインデックスが格納されます。
  • TagPlusDataIndexTmpMTMem
    ファイル名:neoTPDTmpMTMem.dup
    Query実行時にTagPlusDataIndexMTMemのArrayが一時的に作成されます。
  • TagPlusDataIndexDTMem(複数ファイル)
    ファイル名:neoTPDDTMem001.dup(以下002、003...と連番)
    重複するタグ+データのインデックスが格納されます。1つはデフラグメンテーションのためのスペアファイルとして使用されます。

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

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

  • MapFile
    XMLデータサイズに比例して使用領域が増加します。
  • DataDictionary
    ユニークなデータ量に比例して使用領域が増加します。
  • CrossReference
    ユニークなデータ量に比例して使用領域が増加します。
  • TagDictionary
    ユニークなタグの量に比例して使用領域が増加します。タグ構造が一定のXMLデータを大量に格納する場合は増加しません。
  • DataIndexCore
    ユニークなデータ量に比例して使用領域が増加します。
  • DataIndexMTMem
    DataOnlyQueryがOFFの場合は増加しません。
  • DataIndexTmpMTMem
    DataOnlyQueryがOFFの場合は増加しません。
  • DataIndexDTMem
    DataOnlyQueryがOFFの場合は増加しません。
  • TagIndexCore
    ユニークなタグの量に比例して使用領域が増加します。タグ構造が一定のXMLデータを大量に格納する場合は増加しません。
  • TagIndexMTMem
    タグ構造が一定のXMLデータを大量に格納する場合は増加しません。
  • TagIndexTmpMTMem
    Query実行時にTagIndexMTMemのArrayが一時的に作成されるファイルなので、実行するQueryに依存します。通常、拡張の必要はありません。
  • TagIndexDTMem
    重複するタグの量に比例して使用領域が増加します。
  • TagPlusDataIndexCore
    ユニークな(タグ+データ)量に比例して使用領域が増加します。
  • TagPlusDataIndexMTMem
    重複する(タグ+データ)量に比例して使用領域が増加します。
  • TagPlusDataIndexTmpMTMem
    Query実行時にTagPlusDataIndexMTMemのArrayが一時的に作成されるファイルなので、実行するQueryに依存します。通常、拡張の必要はありません。
  • 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データを格納するのに必要な領域を概算することができます。

企画協力:アイティメディア株式会社
アイティメディア株式会社ロゴ

▲このページのTOPへ

  • XMLとは?IT初心者でもすぐわかるXML超入門
  • 無償で使える!XMLDB「NeoCore」
  • サイバーテック求人情報
  • メールマガジン申し込み
  • TEchScore

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

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