Telerik OpenAccess ORM (英語版)

デスクトップと Web アプリケーションをつなぐデータ・アクセスを、簡潔にするための製品です。

Telerik 社の製品
2018 年より日本国内にてComponentSourceで販売中。

i

Telerik OpenAccess ORM was renamed Telerik Data Access and as of October 31st 2016, dedicated support for the product has been discontinued and there will be no new features or product updates. However, as DataAccess will continue to be an integral part of Sitefinity CMS developers using DataAccess in this context will still have access to support through the Sitefinity Support System.

Telerik OpenAccess ORM について

デスクトップと Web アプリケーションをつなぐデータ・アクセスを、簡潔にするための製品です。

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 のマッピング

  • Forward マッピング- ユーザーのオブジェクト・モデルおよび、最適化されたデータ・スキーマを用いてOpenAccess が実現する、新規リレーショナル・データベースのスクラッチでの開発。 開発時においてリレーショナルに注意を払う必要性を排除しながら、その実装を自動的に実施。 OpenAccess が実現する、あらゆる種類のスキーマ定義と、前提となる Table とColumn の名称の反映。
  • Reverse マッピング- レガシー・データベースを用いて、OpenAccess が実現する開発。提供される Reverse マッピング・ウィザードを用いて、新規の Visual Studio プロジェクトとレガシー・データベースを瞬時に接続することで、逆マップのエクスペリエンスを開始。OpenAccess による、データのモデル, タイプおよび、キーなどの付加的な情報の認識と、マッチング・オブジェクト・モデルの作成。さらに、それらを用いた、新規 .NET アプリケーションの設計と開発も実現。
  • Roundtrip マッピング- オブジェクト・モデルにおける各種の変更に基づいた、スキーマ変更をオプションとして提供。また、データベースにおける各種の変更に基づいた、オブジェクト・モデル変更をオプションとして提供することで、その使用法の変更に対応。
  • インスタンスへの従属 - 対象となるインスタンスへの参照が存在しなくなった場合に、自動的な削除が行われるような、リレーションの設定に対応。

6 種類のデータベースをサポート - 最も一般的とされるデータベースをサポートすることで、固有の環境にとらわれない開発を実現します。

  • Microsoft SQL Server
  • Oracle
  • MySQL
  • Firebird
  • Sybase SQL Anywhere
  • Advantage Database Server

  ミドル層でのマッピングによる柔軟なディプロイメント

OpenAccess では、アクティブ・トランザクションのスコープ内に限定された、データベースの修正だけをサポートします。 それにより、永続性, 一貫性, 最小単位, 隔離といった、現実世界の課題に対応します。 したがって、基礎をなすデータベースに起因するリスクの、見落としや増大が排除されます。完全にトランザクショナルなデータベースをサポートすることで、多くの .NET アプリケーションで用いられるデータベース用法にフォーカスします。一連の用法において、欠落するものがありましたら、ぜひ、お知らせください。

OpenAccess は、ミドル層でマッピングを定義します。ディフォルトでは、C#, VB コードやデータベースから独立したかたちで、すべてのマッピング情報がapp.config ファイルにストアされます。それにより、単一のオブジェクト・モデルとデータベース・スキーマを用いて、アプリケーションをディプロイメントするだけではなく、各種のデータベース・ベンダーごとのマップを用いたディプロイメントが実現されます。コードに対する、如何なる変更も不要です。こうした柔軟性が、当初から必要とされない場合においても、作成されたコードの独立性が確保されます。既存のアプリケーションとデータベースから、新規のデータベースへの移行も支援されます(従来からのデータベースに Reverse マップすることで、Forward マップへの展開が可能)。

LINQ, OQL, SQL 言語のサポート - OpenAccess には、クエリー言語に関する制約がありません。以下の各言語から適切なものを選択すること、また、それらを組み合わせることが可能です。

  • LINQ - OpenAccess による LINQ のサポート。LINQ のオブジェクト指向に加えて、コンパイル時におけるクエリーのチェックという先進の機能により、ランタイムでの安定した運用を実現。
  • OQL - OpenAccess における OQL のサポート。Object Database Management Group により定義された、オブジェクト指向クエリーへの対応も実現。LINQ が発表される以前のクエリー言語であり、ランタイムにける動的なクエリーの構築が必要なケースに対応。
  • SQL - 特殊な操作や、既存の SQL ステートメントの再利用において利用が可能。OpenAccess をバイパスするための、SQL 利用を実現。Visual Studio 内で SQL ブラウザを利用することで、一行のコードも記述することなく、クエリーを実行。

  透過的なデータ・アクセス, レイジー・ローディング, 更新の自動トラッキング

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 にすることも可能です。