データベースファイルサイズの見積もり方法
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データを格納するのに必要な領域を概算することができます。
企画協力:アイティメディア株式会社