Telerik OpenAccess ORM (英語版)
デスクトップと Web アプリケーションをつなぐデータ・アクセスを、簡潔にするための製品です。
Telerik 社の製品
2018 年より日本国内にてComponentSourceで販売中。
Telerik OpenAccess ORM(Object-relational mapping)は、Forward, Reverse マッピングをサポートし、DAL(Data Access Layer)とビジネス・オブジェクトの接続性を透過的に保持するためのツールを提供します。また、Telerik OpenAccess ORMは Visual Studio との緊密なインテグレーションを提供し、データベースに依存しないコードをシームレスに作成します。その先進的な機能を用いることで、コードの最適化とキャッシングだけではなく、必要なコードを生成するための。自由度の高いカスタマイズなどが可能になります。
Telerik OpenAccess の ORM(Object-relational mapping)機能
Forward, Reverse のマッピング
6 種類のデータベースをサポート - 最も一般的とされるデータベースをサポートすることで、固有の環境にとらわれない開発を実現します。
ミドル層でのマッピングによる柔軟なディプロイメント
OpenAccess では、アクティブ・トランザクションのスコープ内に限定された、データベースの修正だけをサポートします。 それにより、永続性, 一貫性, 最小単位, 隔離といった、現実世界の課題に対応します。 したがって、基礎をなすデータベースに起因するリスクの、見落としや増大が排除されます。完全にトランザクショナルなデータベースをサポートすることで、多くの .NET アプリケーションで用いられるデータベース用法にフォーカスします。一連の用法において、欠落するものがありましたら、ぜひ、お知らせください。
OpenAccess は、ミドル層でマッピングを定義します。ディフォルトでは、C#, VB コードやデータベースから独立したかたちで、すべてのマッピング情報がapp.config ファイルにストアされます。それにより、単一のオブジェクト・モデルとデータベース・スキーマを用いて、アプリケーションをディプロイメントするだけではなく、各種のデータベース・ベンダーごとのマップを用いたディプロイメントが実現されます。コードに対する、如何なる変更も不要です。こうした柔軟性が、当初から必要とされない場合においても、作成されたコードの独立性が確保されます。既存のアプリケーションとデータベースから、新規のデータベースへの移行も支援されます(従来からのデータベースに Reverse マップすることで、Forward マップへの展開が可能)。
LINQ, OQL, SQL 言語のサポート - OpenAccess には、クエリー言語に関する制約がありません。以下の各言語から適切なものを選択すること、また、それらを組み合わせることが可能です。
透過的なデータ・アクセス, レイジー・ローディング, 更新の自動トラッキング
OpenAccess を用いたアクセスにおいて、大量のアプリケーション・オブジェクトが存在する場合には、レイジーなローディングで対応します。すべてのフィールドが直ちに満たされるわけではないため、コレクションや写真などのフィールドについては、その移動が遅延されます。それにより、容易なアクセスを維持しながら、メモリとネットワークの大域幅を低減するというメリットが得られます。対象となるフィールド・コンテントが必要とされる場合、そのデータがデータベース・サーバーから透過的にフェッチされます。もちろん、取得すべきフィールドの選択が可能ですが、OpenAccess による実用的なデフォルト設定が提供されます。
永続的なフィールド値に対する修正が、自動的に追跡されます。対象となる OpenAccess ランタイム・システムに対して、記述されるべきインスタンスを知らせる必要はありません。修正が検出されるとき、必要とされる Column だけが、結果として生じる SQL ステートメントに取り込まれます。すべての参照された永続オブジェクトも、同様に取り扱われるでしょう。そして、完全なオブジェクト図だけがストアされますが、その背後にインスタンスが残されることはありません。
Visual Studio 統合 - OpenAccess ORM は Visual Studio と緊密に統合されるため、開発のための環境や手法を変更する必要がありません。各種のウィザードを提供することで、容易な開発を実現し、また、処理すべきことを視覚化します。OpenAccess は IntelliSense をサポートし、また、そのドキュメントは Visual Studio Help システムの中に統合されます。OpenAccess は Visual Studio 2005, 2008 上で動作し、.NET 2.0, 3.0, 3.5 および、C#, VB.NET をサポートします。
ディスコネクト API
OpenAccess の特徴である ObjectContainer API コンセプトは、ディスコネクト・データのシナリオをサポートする、最初の ORM になることです。 モバイル・デバイスや、 Web アプリケーション、リプリケーションなどについて検討するとき、ディスコネクトされたデータの管理を必要とし、また、それに依存することになります。 ディスコネクト・モードで、データの一部を用いて作業することが可能です。 OpenAccess では、それらの編集されたデータを透過的に保存し、接続時に最小限の変更部分だけを交換することで、ネットワーク帯域幅の使用を低減します。そのため、更新されたオブジェクトあるいは、新規のオブジェクトがトラッキングされます。
オフラインの ObjectContainer API と、オンラインの ObjectScope API は、インターフェイスを共有します。そして、アプリケーションの一部分が、それらの接続性から独立したかたちで実装されます。
オブジェクトを取り込むための ObjectContainer は、オブジェクト間でのネットワークの保持および、初期化のための機能の提供、トラッキングの変更、そして変更の適用を、データベースに対するラウンド・トリップの形態を用いて実現します。
分散されたレベル 2 キャッシュの同期
分散された、レベル2 キャッシュでの同期を実現します。OpenAccess が提供するキャッシュは、プロセス内におけるデータベース・アクセスのインスタンス(オブジェクト・スコープ)により共有されます。 大量のデータが共有され、その参照が多用される状況において、この方式は有用です。典型的な例は Web サーバーであり、そこでは、大半のデータが安定し、また。共有が可能で、一般に使用されます。
オブジェクトが変化するとき、キャッシュ内のエントリーは削除されます。このキャッシュは、Read アクセスにより作成されるものですが、サイズのコンフィグレーションが可能であり、また、エントリー・タイプの保存と、LRU オーバーフローのハンドリングに対応します。
キャッシュ内のエンティティは、オブジェクト・ステート(シングル・オブジェクトのデータを表現)と全体的なクエリーの結果で構成されます。つまり、繰り返されるクエリーの結果がキャッシュにストアされ、また、キャッシュのエントリーが削除されない限り、それらのクエリーがデータベース・サーバーをアクセスすることはありません。キャッシュの削除は自動的に行われますが、マニュアルによりトリガーをかけることも可能です。
それらのキャッシュは、ひとつのプロセス内で共有されるだけではなく、ネットワーク上で接続されることで、分散同期キャッシュの提供を実現します。多数のアプリケーションや Web サーバが、同一のファームに集約されるようなシナリオにおいても、レベル2キャッシュのメリットが活用されます。
それらの分散共有キャッシュに対するネットワーク・アクセスは、信頼性の高い非同期マルチキャスト・プロトコルを用いることで最適化されます。この方式は、無制限のキャッシュ・クラスタに対する、完全な回答となります。
Fetch Plans の活用によるパフォーマンスの強化 - OpenAccess ORM は、Object Model と Activities を Fetch Plans を介して組み合わせるための、宣言を提供します。
Fetch Plans により、パフォーマンスを最適化するための、オブジェクト・ネットワークが記述されます。
OpenAccess は Fetch Plans に先行した宣言を用いて、コードで使用されるオブジェクト図の中から、適用されるものを知ることが可能です。それにより、宣言型の容易な方式により、アプリケーションのパフォーマンスを大きく改善することが可能になります。
この機能は、アプリケーションにより処理されるデータ・フェッチと、きわめて適切に組み合わせれています。そして、「n+1クエリー問題」として知られる、パフォーマンスに関する共通の問題を回避します。「1」オーダーについてクエリーをかけてから、「n」オーダーのクエリーをかけるという手順に代えて、オーダーと詳細の双方をフェッチする、ひとつにまとまった最適なクエリーを発行するために、Fetch Plans を利用できます。
この Fetch Plans は、ランタイムにおいて、単純で強力な API により構築されます。その基本的な意図は、ユースケースごとに Fetch Plans を持つことです。 カレントの Fetch Plans が常に存在し、クエリーおよびオブジェクト操作の際に使用されます。
Fetch Plans の概念は、一般的なローディングで処理すべき情報を、レイジー・ローディングに対して適用する場合の解決策となります。
柔軟なコンカレント・メカニズム
OpenAccess は、コンカレントな制御において、悲観と楽観の双方をサポートします。ランタイムにおいては、この2つのアプローチが錯綜します。そのため、アクセスについて最初に修正するときに、自動的に悲観的なトランザクションを取り込むこと、もしくは、楽観的なトランザクションを取り込むことで対応します。
楽観的なコンカレント制御(デフォルト)を用いるとき、指定されたバージョンもしくは、修正されたフィールド、すべてのフィールドにおいて、競合が検出されます。また、この競合に関する検出を、OFF にすることも可能です。