デフォルトのConfigrationでは、およそ30MB程度のXMLデータを格納することができます。それ以上のサイズのXMLデータを格納する場合は、各データベースファイルの領域拡張が必要となります。ここでは、格納するXMLデータに対して、どのデータベースファイルをどの程度拡張すればよいかを概算する方法についてVer2.9をベースに説明します。
データベースファイルの使用領域は、実際に格納するXMLデータの特性(ユニークなデータの割合、データ長、タグ構造)に影響を受けるため、ここで算出する値はあくまでも格納するXMLデータの特性を想定した上での概算値となります。実際にデータベースを運用する際は、この概算値を元に、定期的にデータベースファイルの使用率を確認し、データベース領域の微調整とデフラグメンテーションを行う必要があります。
Ver3.0では新機能としてデータベース領域のAutoGrowth機能が追加されますので、予めデータベース領域を確保しておく必要がなくなります。
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つはデフラグメンテーションのためのスペアファイルとして使用されます。
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
重複する(タグ+データ)量に比例して使用領域が増加します。
| <?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データを格納するのに必要な領域を概算することができます。