2011年4月6日水曜日

ドメインオブジェクトとデータストアのマッピング

SimpleModelingと呼んでいるモデリング手法をクラウド向けに拡張する作業を行っています。
その一つの柱がドメインモデルの拡張です。ドメインモデルの拡張の一つのアプローチは、オブジェクト種別ごとの実現方法の確立です。モデルから設計/実装へ落し込むときの指針が一つも目標ですが、最終的にはDSLコンパイラによる自動コーディングをターゲットにしています。
SimpleModelingではドメインモデルを構成するオブジェクトに対して用途に応じた分類行い、プロファイルとして定義しています。代表的なオブジェクトは以下のものです。
Actor
システム外に存在する(リアル)オブジェクトの代理オブジェクト。(例:利用者)
Event
システムで発生する出来事。
Resource
システムが管理するリソース。
Powertype
ドメインオブジェクトのパワータイプ。(実装時には区分コードなどで実現される)
Rule
ドメインで使用される規則。
これらのオブジェクトの種別は、今までのソフトウェア開発でも有効ですが、クラウドアプリケーションではその価値がさらに高まります。というのは、クラウドアプリケーションではデータストアの選択が一つの大きな関心事になるからです。今までの企業システム、Webシステムでは大規模あるいは特殊要件がない限りはデータベースとしてRDBMSを一つだけ用いるということが普通です。このため、ドメインモデルとしてどのようなものを作るにしても、どうRDBMSに落し込むのかという設計へのマッピングが重要でした。しかし、クラウドアプリケーションでは複数のデータストアを用途に応じて使い分ける必要があります。一番大きいのがトランザクションやデータモデルの柔軟性というRDBMSの持つ特性が、スケーラビリティと相反する関係になる点です。この他にも半構造データの取り扱いや、分析処理向け性能特性など、必要に応じてデータストアを使い分けていく必要があります。このため、クラウドアプリケーションではRDBMS一刀流では用途が限定されてしまいます。用途に応じてデータストアを使い分けていく必要があります。

データストアの種類

SimpleModelingのドメインモデル拡張での一つのアイデアは、ドメインモデルのオブジェクト種別ごとにデータストアとのマッピングの相性を定義することが有効ではないかということです。設計の指針にもなりますし、DSLコンパイラでのコード生成でも活用できます。
データストアの種類として以下のものを想定しています。
RDBMS
汎用的なデータストア。トランザクション。SQLによる高度な問合せ。複雑なデータ構造。スケーラビリティは低い。
分散ディレクトリ
システムデータ管理向け。利用者情報などシステム管理データにアプリケーションが相乗りする使用方法。ほとんど参照でまれに更新されるデータに使用。トランザクション、SQL的な高度な問合せ、複雑なデータ構造はない。スケーラビリティは高い。
分散キャッシュ
キャッシュデータの格納向け。ほとんど参照でまれに更新されるデータに使用。永続性はない。トランザクション、SQL的な高度な問合せ、複雑なデータ構造はない。スケーラビリティは高い。
KVS
汎用的なデータストア。トランザクション、SQLによる高度な問合せ、複雑なデータ構造はない。スケーラビリティは高い。
カラムナDB
分析処理向け。全件走査に強い。スケーラビリティは高い。トランザクション、SQLによる高度な問合せ、複雑なデータ構造については要調査。
文書DB
半構造データの格納。その他の特性は要調査。
プログラム埋込み
データをプログラムに埋込んで配備。高速動作。エラー要因、配備の複雑度を低減。データとアプリケーションのライフサイクルが一致する場合、特に有効。
「プログラム埋込み」もデータストアの一種として考えています。データをプログラムに埋め込んで配備する手法は、従来のアプリケーション開発では邪道ですが、クラウド上では案外侮れない手法です。
クラウドプラットフォームでは、プログラムがシステム上に多数存在する物理マシンに配備されるわけですが、この配備のメカニズムに乗って同時にデータも配備できるというメリットがあります。また、DSLコンパイラを使うと、プログラム開発とデータ定義を別々に行い、配備の段階で集約するといったことも可能になるので、データをプログラム内に埋め込むことのデメリットを緩和することができます。
この他のデータストアとしてはCDN(Content Dlivery Network)が考えられますが、HTMLページなどの静的な成果物の配備が主な用途なので考慮の対象外にしています。(場合によっては対象に加えるかもしれません。)

マッピング

ドメインオブジェクトとデータストアのマッピングは以下の図のものを考えています。用途を問わずすべてのデータをRDBMSを入れるというアプローチも当然あるわけですが、ここでは用途別により適したデータベースという視点で分類しています。




詳細は後日。

0 件のコメント:

コメントを投稿