投稿者

インターシステムズジャパン
記事 Toshihiko Minamoto · 5月 20, 2021 9m read

DeepSee: データベース、ネームスペース、マッピング(5/5)

以下の記事は、この連載の締めくくりとして、完全に柔軟なアーキテクチャの例で確認されたすべてのデータベースのリストを掲載しています。

データベースとマッピング

以下で説明するデータベースは、ネームスペース間で共有する必要のあるアプリケーションコードを除き(例では APP-CODE データベースに格納されています)、ネームスペースごとに定義されている必要があります。 DeepSee 実装が実行するすべてのネームスペースはグローバルマッピングを使用し、グローバルが正しいデータベースに保存されて読み取られるようにする必要があります。

データベース 1: DeepSee キャッシュ

このデータベースはすべての DeepSee キャッシュ(^DeepSee.Cache.* および ^DeepSee.JoinIndex グローバル)を保存する必要があります(注意: ドキュメントのこちらのページに、さらに多くのグローバルが DeepSee キャッシュとしてリストされていますが、^DeepSee.Cache.* グローバルが明らかに最も重要なグローバルです)。

DeepSee キャッシュグローバルを専用のデータベースにマッピングすることを強くお勧めします。 DeepSee キャッシュグローバルは決してジャーナル化されてはいけません。ジャーナル化してしまうと、DeepSee のパフォーマンスが低下し、ジャーナルファイルが巨大化する可能性があります。

^DeepSee.Cache.* と ^DeepSee.JoinIndex グローバルをこのデータベースにマッピングします。 必要に応じて、^DeepSee.LastQuery と ^DeepSee.QueryLog グローバルもこのデータベースにマッピングします。これらは実行されたすべての MDX クエリのログを保存するグローバルです。

データベース 2: 実装と設定

このデータベースには、DeepSee 実装のほとんどが含まれている ^DeepSee.* グローバルが含まれています。 このデータベースには、すべての DeepSee キューブまたはサブジェクトエリアの定義のほか、Cube Manager(^DeepSee.CubeManager*)、キューブの定義と設定(^DeepSee.Cubes、^DeepSee.Dimensions)、DeepSee のアイテム(^DeepSee.Folder*、^DeepSee.FolderItem*)、ピボット変数(^DeepSee.Variables)、用語リスト(DeepSee.TermList)、ユーザー設定(^DeepSee.DashboardSettings)、DeepSee オーバーライド(^DeepSee.Overrides)などの多数の機能に関する情報も含まれています。

これらの機能は別の読み取り/書き込み可能なデータベースに保存し、そのデータベースにジャーナリングを実行して定期的にバックアップすることをお勧めします。 そうすれば、何らかの中断が生じた場合でも、すべての定義、設定、およびユーザーデータを復元することが可能になります。

残りのすべての ^DeepSee* グローバルをこのデータベースにマッピングします。

データベース 3: DeepSee の更新

DeepSee は、ソーステーブルでキューブを最新の状態に維持するために、^OBJ.DSTIME と ^DeepSee.Update グローバルを使用しています。 運用データベースでは、このデータベースに ^OBJ.DSTIME グローバルを保存し、アナリティクスサーバーにミラーリングします。 システムがアドホックまたは最新バージョンの Caché で実行している場合、これらには ^DeepSee.Update が使用されているため(通常、Caché 2016.1.2 以降で利用可能)、このデータベースにも ^DeepSee.Update が保存されます。 この場合、^OBJ.DSTIME を保存しているアナリティクスサーバーのデータベースは、読み取り/書き込み可能であり、^OBJ.DSTIME が ^DeepSee.Update にコピーされた後に、それをパージできる必要があります。 データベースホスティングデータ(この例では APP-DATA)が読み取り専用の場合、このデータベースを使用する必要があることに注意してください。使用しない場合、^OBJ.DSTIME をパージするのは不可能です。

運用サーバーでは、ジャーナリングが有効になっている必要があります。 ^OBJ.DSTIME と ^DeepSee.Update をこのデータベースにマッピングします。

データベース 4: ファクトテーブル

DeepSee のキューブはソースクラスに基づいていますが、ファクトテーブルと次元テーブルにデータを入力して使用します。 これらのテーブルには、キューブに組み込まれた各レコードの情報が含まれており、ランタイム時に DeepSee によって使用されます。

ファクトテーブル、次元テーブル、およびインデックス用の専用データベースを定義するのは通常、データベースごとに異なるジャーナリングの設定を適用するためです。 ジャーナリングが有効である場合のキューブの構築について、以下の注意事項をお読みください。 ファクトテーブル、次元テーブル、およびインデックスを別のデータベースにマッピングするもう 1 つの理由は、デフォルト以外のブロックサイズを定義することができるからです(デフォルトの 8000 ブロックではなく 16000 ブロックにするなど)。 異なるブロックサイズを使用することで、MDX クエリのパフォーマンスを向上させることができます。

ファクトテーブルと次元テーブルは、^DeepSee.Fact* と ^DeepSee.Dimension* グローバルに保存されています。 DeepSee インデックスは ^DeepSee.Index に保存され、キューブがリレーションを定義するときに ^DeepSee.JoinIndex グローバルが使用されます。 これらのグローバルはこのデータベースにマッピングします。

データベース 5: DeepSee インデックス

DeepSee インデックスは、キューブのファクトテーブルのインデックスです。

DeepSee インデックスを別のデータベースに保存するのは、^DeepSee.Index グローバルのサイズが大きくなる可能性があるためです。 異なるジャーナリング設定を使用し、デフォルト以外のブロックサイズを定義すると、復元を簡単に行えるようになり、パフォーマンスの改善にも役立ちます。

ジャーナリングはオプションです。前のデータベースと同じ設定を選択してください。

^DeepSee.Index グローバルはこのデータベースにマッピングします。

ジャーナリングとキューブの構築に関する注意事項

キューブを構築するとキューブのファクトとインデックステーブルが削除されて再作成されることに注意してください。 つまり、ジャーナリングが有効である場合、^DeepSee.Fact* や ^DeepSee.Index などのグローバルの SET や KILL がジャーナルファイルに記録されるということです。 その結果、キューブを再構築すると、ジャーナルファイルのエントリが膨大化し、ディスク容量に問題が生じる可能性があります。

ファクトテーブルとインデックスを 1 つか 2 つの別々のデータベース(上記のデータベース 4 とデータベース 5)にマッピングすることをお勧めします。

ファクトおよびインデックスデータベースにおいては、ジャーナリングはオプションであり、ビジネスのニーズに基づきます。 キューブが比較的小さく、素早く構築できる場合や、キューブの定期的な再構築が計画されている場合には、ジャーナリングを無効にすることをお勧めします。

キューブが比較的大きく、再構築に時間が掛かる場合には このデータベースのジャーナリングを有効にします。 キューブが安定しており、定期的に同期されるだけで構築は行われない場合には、ジャーナリングを有効にしておくのが理想的と言えます。 キューブを安全に構築する方法の 1 つとして、ファクトデータベースとインデックスデータベース(順にデータベース 4 と 5)のジャーナリングを一時的に無効にすることが挙げられます。

要約

  <td width="125">
    マッピングするグローバル
  </td>
  
  <td width="119">
    機能
  </td>
  
  <td width="143">
    設定
  </td>
</tr>

<tr style="height:0pt">
  <td>
    1 - ソースデータ
  </td>
  
  <td>
     
  </td>
  
  <td>
    本番システムからデータを取得する
  </td>
  
  <td>
    本番システムからミラーリング<br>すべてのネームスペースで共有
  </td>
</tr>

<tr style="height:0pt">
  <td>
    2 - ソースコード
  </td>
  
  <td>
     
  </td>
  
  <td>
    コードをデータから切り離す
  </td>
  
  <td>
    すべてのネームスペースで共有
  </td>
</tr>

<tr style="height:0pt">
  <td>
    3 - DeepSee キャッシュ
  </td>
  
  <td>
    ^DeepSee.Cache.*<br>^DeepSee.JoinIndex<br>^DeepSee.LastQuery<br>^DeepSee.QueryLog
  </td>
  
  <td>
    ほかのデータベースのジャーナリングを有効にしたまま、DeepSee キャッシュのジャーナリングを無効にできる
  </td>
  
  <td>
    ジャーナリングを無効化
  </td>
</tr>

<tr style="height:0pt">
  <td>
    4 - 実装と設定
  </td>
  
  <td>
    ^DeepSee.*
  </td>
  
  <td>
    DeepSee の実装とユーザー設定の復元を可能にする
  </td>
  
  <td>
    ジャーナリングを有効化、定期的にバックアップ
  </td>
</tr>

<tr style="height:0pt">
  <td>
    5 - DeepSee の更新
  </td>
  
  <td>
    ^OBJ.DSTIME<br>^DeepSee.Update
  </td>
  
  <td>
    キューブを最新の状態に維持する
  </td>
  
  <td>
    本番システムからミラーリング<br>読み取り/書き込みを維持
  </td>
</tr>

<tr style="height:0pt">
  <td>
    6 - ファクトテーブル
  </td>
  
  <td>
    ^DeepSee.Dimension*<br>^DeepSee.Fact<br>^DeepSee.JoinIndex
  </td>
  
  <td>
    ジャーナリングはオプション<br>ブロックサイズを変更可能
  </td>
  
  <td>
    ジャーナリングはオプション
  </td>
</tr>

<tr style="height:0pt">
  <td>
    7 - DeepSee インデックス
  </td>
  
  <td>
    ^DeepSee.Index
  </td>
  
  <td>
    キューブが大きく、クエリや構築のパフォーマンスを改善する必要がある場合はこのデータベースを定義。そうでない場合は、ファクトテーブルとともに保存(データベース 5)
  </td>
  
  <td>
    ファクトテーブルデータベースと同様のジャーナリング
  </td>
</tr>
データベース

最後に

この連載では、Caché と DeepSee を使用したビジネスインテリジェンスの実装に関して考慮する必要のあるデータベースとマッピング関連のベストプラクティスを説明しました。 この連載で推奨したデータベースより少ない数のデータベースを使って DeepSee 実装をデプロイすることはもちろん可能ですが、実装に制限がかかる可能性があります。