JP2009544064A - 増分ビューの保守を用いたマッピングアーキテクチャ - Google Patents

増分ビューの保守を用いたマッピングアーキテクチャ Download PDF

Info

Publication number
JP2009544064A
JP2009544064A JP2009502890A JP2009502890A JP2009544064A JP 2009544064 A JP2009544064 A JP 2009544064A JP 2009502890 A JP2009502890 A JP 2009502890A JP 2009502890 A JP2009502890 A JP 2009502890A JP 2009544064 A JP2009544064 A JP 2009544064A
Authority
JP
Japan
Prior art keywords
view
mapping
database
query
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009502890A
Other languages
English (en)
Other versions
JP2009544064A5 (ja
JP5064483B2 (ja
Inventor
アドヤ アトゥール
エー.ブラークレイ ジョセ
ラーソン パー−エーク
メルニク セルゲイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2009544064A publication Critical patent/JP2009544064A/ja
Publication of JP2009544064A5 publication Critical patent/JP2009544064A5/ja
Application granted granted Critical
Publication of JP5064483B2 publication Critical patent/JP5064483B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24539Query rewriting; Transformation using cached or materialised query results
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99932Access augmentation or optimizing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Machine Translation (AREA)

Abstract

アプリケーションによって使用され得るデータをデータベース内で永続されるデータにマッピングするためのマッピングアークテクチャを含む、データアクセスアーキテクチャを提供する。このマッピングアーキテクチャは、2つのタイプのマッピングビュー、すなわち、クエリの変換に役立つクエリビューと、更新の変換に役立つ更新ビューを使用する。増分ビューの保守を使用して、アプリケーションとデータベースとの間でデータを変換することができる。

Description

本発明は、増分ビューの保守を用いたマッピングアークテクチャに関する。
アプリケーションとデータベースとのブリッジングは、長年にわたる問題である。1996年に、CareyおよびDeWittは、オブジェクト指向データベースおよび永続プログラミング言語を含む多数のテクノロジが、クエリおよび更新処理、トランザクションスループット、ならびにスケーラビリティにおける制限のために、広く受け入れられなかった理由の概要を示した。彼らは、2006年にオブジェクト/リレーショナル(O/R)データベースが中心になるであろうと推測した。実際には、DB2(登録商標)データベースシステムおよびOracle(登録商標)データベースシステムは、従来のリレーショナルエンジンの上にハードワイヤードのO/Rマッピングを使用する組み込みオブジェクトレイヤを含む。しかし、これらのシステムによって提供されるO/R機能は、マルチメディアデータ型および空間データ型を除いて、企業データを格納するのにはほとんど使用されないと思われる。その理由の中には、データおよびベンダの独立性、レガシデータベースを移行するコスト、ビジネスロジックが中間層ではなくデータベース内で動作する際のスケールアウトの困難性、ならびにプログラミング言語との統合が不十分であることがある。
1990年代半ばから、クライアント側のデータマッピングレイヤが、インターネットアプリケーションの成長によって活気付けられ、人気を獲得している。そのようなレイヤのコア機能は、明示的なマッピングによって駆動されるアプリケーションのデータモデルにしっかりと合ったデータモデルを公開する、更新可能ビューを提供することである。多数の製品およびオープンソースプロジェクトが現れ、これらの機能を提供している。事実上全てのエンタープライズフレームワークが、クライアント側の永続レイヤ(例えば、J2EEのEJB)を提供する。ERPアプリケーションおよびCRMアプリケーションなど、ほとんどのパッケージ化されたビジネスアプリケーションは、専用のデータアクセスインターフェース(例えば、SAP R/3のBAPI)を組み込んでいる。
広く使用されているJava(登録商標)用のオープンソースのORM(Object−Relational Mapping)フレームワークの1つが、Hibernate(登録商標)である。Hibernateは、複数の継承マッピングシナリオ、オプティミスティック並行性制御、および包括的オブジェクトサービスをサポートする。Hibernateの最新のリリースは、EJB 3.0標準規格に準拠し、EJB 3.0標準規格は、Java(登録商標) Persistence Query Languageを含む。商業的側面において、一般的なORMは、Oracle TopLink(登録商標)およびLLBLGen(登録商標)を含む。後者は.NETプラットフォームで動作する。これらおよび他のORMは、そのターゲットプログラミング言語のオブジェクトモデルに密結合される。
BEA(登録商標)は、最近、ALDSP(AquaLogic Data Services Platform(登録商標))と呼ばれる新しいミドルウェア製品を導入した。これは、アプリケーションデータのモデル化にXMLスキーマを使用する。XMLデータは、XQueryを使用してデータベースおよびウェブサービスからアセンブルされる。ALDSPのランタイムは、複数のデータソースにまたがるクエリをサポートし、クライアント側のクエリ最適化を実行する。更新は、XQueryビューに対するビュー更新として実行される。更新が一意の変換を有しない場合は、開発者が、命令コードを使用して更新ロジックをオーバーライドする必要がある。ALDSPのプログラミングサーフェスは、SDO(service data object)に基づいている。
今日のクライアント側のマッピングレイヤは、様々な程度の機能、堅固性、および総所有コスト(TCO:total cost of ownership)を提供する。典型的に、ORMによって使用されるアプリケーションとデータベースのアーチファクトとの間のマッピングは、曖昧な意味を有し、ケースバイケースで推論することになる。シナリオ主導の実装は、サポートされるマッピングの範囲を制限し、しばしば、拡張が難しい脆弱なランタイムをもたらす。ごく少数のデータアクセスソリューションが、データベースコミュニティによって開発されたデータ変形技法を活用し、しばしば、クエリ変換および更新変換に関するアドホックな解決策に依拠する。
データベースの研究は、永続レイヤの構築に活用することができる多数の強力な技法に貢献してきた。それでも、著しいギャップがある。最も重大なギャップの中に、マッピングを介した更新のサポートがある。クエリと比較して、更新は、マッピングにまたがってデータの一貫性を保つ必要があり、ビジネスルールなどをトリガする可能性があるので、扱うのがはるかに難しい。その結果、商用データベースシステムおよびデータアクセス製品は、更新可能なビューに関する非常に制限されたサポートを提供する。最近、研究者は、双方向変形などの代替なアプローチに取り組んでいる。
伝統的に、概念モデル化は、データベースおよびアプリケーションの設計、リバースエンジニアリング、およびスキーマ変換に制限されてきた。多数の設計ツールが、UMLを使用する。ごく最近の概念モデル化のみが、産業強度(industry−strength)のデータマッピングソリューションに進出し始めた。例えば、エンティティおよびリレーションシップの概念は、ALDSPとEJB 3.0との両方で姿を表している。ALDSPは、E−Rスタイルのリレーションシップを複合型XMLデータの上にオーバーレイするが、EJB 3.0は、クラス注釈を使用してオブジェクト間のリレーションシップを指定することを可能にする。
スキーママッピング技法は、Microsoft(登録商標)BizTalk Server(登録商標)、IBM(登録商標)Rational Data Architect(登録商標)、およびETL(登録商標)ツールなど、多数のデータ統合製品で使用される。これらの製品は、開発者が、データ変形を設計し、またはマッピングからデータ変形をコンパイルして、e−コマースメッセージを変換するかデータウェアハウスをロードすることを可能にする。
データアクセスアーキテクチャを実装および使用するためのシステム、方法、およびコンピュータ読み取り可能な媒体を提供する。該データアクセスアーキテクチャは、アプリケーションによって使用され得るデータを、データベース内で永続するデータにマッピングする、マッピングアーキテクチャを含む。一実施形態では、該マッピングアーキテクチャは、2つタイプのマッピングビュー、すなわち、クエリの変換を助けるクエリビューと、更新の変換を助ける更新ビューを使用する。増分ビューの保守(incremental view maintenance)を使用して、アプリケーションとデータベースとの間でデータを変換することができる。さらなる態様および実施形態を、以下で説明する。
本発明にかかる増分ビューの保守を用いたマッピングアーキテクチャのシステムおよび方法を、添付の図面を参照してさらに説明する。
新規のデータアクセスアーキテクチャ
一実施形態では、本革新を、このセクションで説明する新規のデータアクセスアーキテクチャ、「Entity Framework(エンティティフレームワーク)」において実装し、その諸態様を組み込むことができる。そのようなEntity Frameworkの例が、本件特許出願人によって開発されたADO.NET vNEXT(登録商標)データアクセスアーキテクチャである。以下に、多くの実装固有の詳細とともに、ADO.NET vNEXTデータアクセスアーキテクチャを全般的に説明するが、この詳細は本発明の実践に必要とみなされるべきではない。
<概要>
従来のクライアント−サーバアプリケーションは、そのデータに対するクエリおよび永続性のオペレーションをデータベースシステムに委ねる。データベースシステムは、行およびテーブルの形式のデータを操作するが、アプリケーションは、より高水準のプログラミング言語構造(クラス、構造体など)に関してデータを操作する。アプリケーション層とデータベース層との間のデータ操作サービスにおけるインピーダンス不整合は、従来のシステムにおいても問題であった。サービス指向アーキテクチャ(SOA:service−oriented architecture)、アプリケーションサーバ、および多層(multi−tier)アプリケーションの出現とともに、プログラミング環境とよく統合され、任意の層において動作可能な、データアクセスサービスおよびデータ操作サービスの必要性が非常に高まっている。
本件特許出願人のADO.NET Entity Frameworkは、抽象化のレベルをリレーショナルレベルから概念(エンティティ)レベルまで高める、データをプログラミングするためのプラットフォームであり、これによって、アプリケーションサービスとデータ中心のサービスとのインピーダンス不整合が著しく減少される。Entity Framework、全体的なシステムアーキテクチャ、および基礎になる技術についての諸態様を以下で説明する。
<序論>
現代のアプリケーションは、全ての層でデータ管理サービスを必要とする。現代のアプリケーションは、ますます豊富な形式のデータを処理する必要があり、このデータは、構造化されたビジネスデータ(Customers(顧客)とOrders(注文)など)だけではなく、電子メール、カレンダ、ファイル、および文書などの、半構造化されたコンテンツおよび構造化されていないコンテンツも含む。これらのアプリケーションは、より機敏な意思決定プロセスを可能にするために、複数のデータソースからのデータを統合すると同時に、このデータを収集し、浄化し、変形し、格納する必要がある。これらのアプリケーションの開発者は、その生産性を高めるために、データアクセスツール、プログラミングツール、および開発ツールを必要とする。リレーショナルデータベースは、ほとんどの構造化データのデファクトストアになっているが、そのようなデータベースが公開するデータモデル(および機能)と、アプリケーションが必要とするモデル化機能との間の不整合、すなわち周知のインピーダンス不整合の問題がある傾向がある。
他の2つの要因も、企業システムの設計において重要な部分を果たす。第1に、アプリケーションのデータ表現は、基礎になるデータベースのデータ表現と異なって進化する傾向がある。第2に、多くのシステムが、異なる程度の機能を有する別個のデータベースバックエンドから構成される。中間層のアプリケーションロジックは、これらの差を調整してデータのより均一なビューを提示する、データ変形に関与する。これらのデータ変形は、すぐに複雑になる。それらを実装すること、特に基礎になるデータが更新可能である必要があるときの実装は、難しい問題であり、アプリケーションに複雑性を加える。アプリケーション開発のかなりの部分、一部の事例では40%までが、これらの問題に対処するためのカスタムデータのアクセスロジックの記述に使われる。
同一の問題が、データ中心サービスについて存在するが、深刻さはより少ない。クエリ、更新、およびトランザクションなどの従来のサービスは、論理スキーマ(リレーショナル)レベルで実装されてきた。しかし、複製および分析など、より新しいサービスの大多数は、典型的により高水準の概念データモデルに関連付けられたアーチファクトに対して最もよく動作する。例えば、SQL SERVER(登録商標)Replicationは、制限された形式のエンティティを表現する「論理レコード」と呼ばれる構造を発明した。同様に、SQL Server Reporting Servicesは、SDML(semantic data model language)と呼ばれるエンティティ同様のデータモデルの上にレポートを作成する。これらのサービスのそれぞれは、概念エンティティを定義してこれらをリレーションテーブルにマッピングする、カスタムツールを有する。したがって、Customerエンティティを、ある方法で複製用に、別の方法でレポート構築用に、さらに別の方法で他の分析サービス用になど、定義してマッピングする必要がある。アプリケーションに関して、各サービスは典型的に、最終的にはこの問題に対するカスタムソリューションを作成することになり、その結果、サービス間には、コードの重複と制限されたインターオペラビリティとが存在する。
HIBERNATE(登録商標)およびORACLE TOPLINK(登録商標)などのORM(Object−to−relational mapping)技術は、カスタムデータアクセスロジックの良く知られた代替である。データベースとアプリケーションとの間のマッピングは、カスタム構造内でまたはスキーマ注釈を介して表現される。これらのカスタム構造は、概念モデルと同様に見えることがあるが、アプリケーションは、この概念モデルに対して直接プログラミングすることができない。マッピングは、データベースとアプリケーションとの間に、ある程度の独立性を提供するが、同一データのわずかに異なるビューを有する複数のアプリケーションを扱うという問題(例えば、Customerエンティティの異なる射影を見ようとする2つのアプリケーションを考慮されたい)、または、より動的な傾向があるサービスの必要性という問題(先験的クラス(priori class)生成技法は、基礎になるデータベースがより早く進歩する可能性があるので、データサービスについてはうまく働かない)は、これらの解決策によってうまく対処されていない。
ADO.NET Entity Frameworkは、アプリケーションおよびデータ中心サービスのインピーダンス不整合を著しく減少させる、データに対するプログラミングのプラットフォームである。ADO.NET Entity Frameworkは、少なくとも次の観点で他のシステムおよびソリューションと異なる。
1.Entity Frameworkは、豊富な概念データモデル(Entity Data Model、すなわちEDM)、および、このモデルのインスタンスを操作する新しいデータ操作言語(Entity SQL)を定義する。SQLと同様に、EDMは値ベースである。すなわち、EDMは、エンティティの構造的な諸態様を定義するのであって、振舞い(またはメソッド)は定義しない。
2.このモデルは、クエリおよび更新の強力な双方向(EDM−リレーショナル)マッピングをサポートするミドルウェアマッピングエンジンを含む、ランタイムによって具象化される。
3.アプリケーションおよびサービスは、値ベースの概念レイヤに対して、または概念(エンティティ)抽象化にまたがって階層化できるプログラミング言語固有のオブジェクト抽象化に対して、直接プログラミングすることができ、ORM同様の機能性を提供する。値ベースのEDM概念の抽象化は、アプリケーションとデータ中心サービスとの間でデータを共有するための、オブジェクトよりもより柔軟性のある基礎であると考える。
4.最後に、Entity Frameworkは、本件特許出願人の新しいLINQ(Language Integrated Query)技術を活用する。該LINQ技術は、クエリ表現をネイティブに用いてプログラミング言語を拡張し、アプリケーションに関するインピーダンス不整合をさらに減少させ、一部のシナリオでは完全に除去する。
ADO.NET Entity Frameworkは、Microsoft .NET Frameworkなどの、より大きいフレームワークに組み込むことができる。
データアクセスアーキテクチャに関するこの説明の残りは、ADO.NET Entity Frameworkの実施形態の文脈で、次のように編成される。「動機づけ」セクションは、Entity Frameworkの追加の動機づけを提供する。「Entity Framework」セクションは、Entity FrameworkおよびEntity Data Modelを提示する。「プログラミングパターン」セクションは、Entity Frameworkのプログラミングパターンを説明する。「Object Services」セクションは、Object Servicesモジュールの概要を示す。「マッピング」セクションは、Entity FrameworkのMappingコンポーネントに焦点を当て、「クエリ処理」セクションおよび「更新処理」セクションは、クエリおよび更新がどのように処理されるかを説明する。「メタデータ」および「ツール」は、Entity Frameworkのメタデータサブシステムおよびツールコンポーネントを説明する。
<動機づけ>
このセクションは、より高水準のデータモデル化レイヤが、なぜアプリケーションおよびデータ中心サービスに必須になったのかを論じる。
(データアプリケーションにおける情報レベル)
データベース設計を作成するための今日の支配的な情報モデル化方法は、情報モデルを4つの主要なレベル、すなわち、物理、論理(リレーショナル)、概念、およびプログラミング/プレゼンテーションにファクタリングする。
物理モデルは、データが、メモリ、ワイヤ、またはディスクなどの物理的なリソース内でどのように表現されるかを記述する。このレイヤで検討される概念のボキャブラリは、レコードフォーマット、ファイルの区画およびグループ、ヒープ、ならびにインデックスを含む。物理モデルは、典型的に、アプリケーションに対して可視ではなく、物理モデルに対する変更は、アプリケーションロジックに影響を与えてはいけないが、アプリケーションのパフォーマンスに影響を与えることがある。
論理データモデルは、ターゲットドメインの完全で正確な情報モデルである。リレーショナルモデルは、ほとんどの論理データモデルに関する選択の表現である。論理レベルで検討される概念は、テーブル、行、主キー/外部キー制約、および正規化を含む。正規化は、データの一貫性、さらなる並行性、およびより良いOLTPパフォーマンスを達成するのを助けるが、アプリケーションに関する重大な課題をも導入する。論理レベルで正規化されたデータは、しばしばフラグメント化されすぎており、アプリケーションロジックは、複数のテーブルからの行を、アプリケーションドメインのアーチファクトにさらに類似しているより高水準のエンティティに、アセンブルする必要がある。
概念モデルは、問題ドメインからのコア情報エンティティおよびそのリレーションシップをキャプチャする。周知の概念モデルは、1976年にPeter Chenによって紹介されたエンティティ・リレーションシップモデル(Entity−Relationship Model)である。UMLは、概念モデルのより最近の例である。ほとんどのアプリケーションは、概念設計のフェーズをアプリケーション開発のライフサイクルの早期に含む。しかし、残念ながら、概念データモデル図は、「壁にピンで止められた」状態が続き、時とともにアプリケーション実装の現実からますます離れつつある。Entity Frameworkの重要な目標は、概念データモデル(次のセクションで説明するEntity Data Modelによって具現化される)を、データプラットフォームの具象的なプログラム可能な抽象化にすることである。
プログラミング/プレゼンテーションモデルは、概念モデルのエンティティおよびリレーションシップを、手元のタスクに基づいて異なる形式でどのようにマニフェスト(提示)する必要があるかを記述する。エンティティの中には、アプリケーションビジネスロジックを実装するために、プログラミング言語オブジェクトに変形される必要があるもの、ウェブサービスの呼出しのためにXMLストリームに変形される必要があるもの、ユーザインターフェースのデータバインディングのために、リストまたはディクショナリなどのメモリ内の構造に変形される必要があるものがある。当然、普遍的なプログラミングモデルまたはプレゼンテーションの形式は存在せず、したがって、アプリケーションは、エンティティを様々なプレゼンテーションの形式に変形する柔軟なメカニズムを必要とする。
ほとんどのアプリケーションおよびデータ中心サービスは、Orderをリレーショナルデータベーススキーマにおいて正規化できる複数のテーブルについてではなく、Orderなどの高水準の概念に関して推論する傾向がある。注文は、プレゼンテーション/プログラミングレベルにおいて、注文に関連付けられた状態およびロジックをカプセル化するVisual BasicまたはC#内のクラスインスタンスとして、またはウェブサービスと通信するXMLストリームとして現れることがある。正しいプレゼンテーションモデルは存在しないが、具象的な概念モデルを提供すること、および、そのモデルを、様々なプレゼンテーションモデルおよび他の高水準データサービスとの間での柔軟性のあるマッピングの基礎として使用できることには、価値がある。
(アプリケーションおよびサービスの進化)
10〜20年前の、データに基づくアプリケーションは、典型的に、データモノリス、すなわち、論理スキーマレベルでデータベースシステムと対話する動詞オブジェクト関数(例えば、create−order、update−customer)によってファクタリングされたロジックを有する閉じたシステムとして構造化されていた。いくつかの顕著な傾向が、今日、近代のデータに基づくアプリケーションをファクタリングし、展開する方法を形成している。これらの中の主要なものは、オブジェクト指向ファクタリング、サービスレベルアプリケーション構造、およびより高水準のデータ中心サービスである。概念エンティティは、今日のアプリケーションの重要な部分である。これらのエンティティは、様々な表現にマッピングされ、様々なサービスにバインドされなければならない。正しい表現またはサービスバインディングは存在しない。すなわち、XML表現、リレーショナル表現、およびオブジェクト表現の全てが重要であるが、これらの1つが、全てのアプリケーションにとって十分であることはない。したがって、より高水準のデータモデル化レイヤをサポートし、複数のプレゼンテーションレイヤをプラグインすることをも可能にするフレームワークの必要性が存在する。Entity Frameworkは、これらの要件を満たすことを目的とする。
データ中心サービスも、同様の方法で進化してきている。20年前に「データプラットフォーム」によって提供されたサービスは、最小限であり、RDBMSの論理スキーマの周囲に焦点を合わせていた。これらのサービスには、クエリおよび更新、アトミックトランザクション、ならびに、バックアップおよびロード/抽出などのバルクオペレーションが含まれていた。
SQL Server自体は、従来的なRDBMSから、概念スキーマレベルで実現されるエンティティにまたがる価値の高い複数のデータ中心サービスを提供する、完全なデータプラットフォームへと進化しつつある。SQL Server製品内の複数のより高水準のデータ中心サービス(2つだけを例に挙げると、ReplicationおよびReport Builder)は、そのサービスを概念スキーマレベルで、ますます提供している。現在、これらのサービスのそれぞれは、別々のツールを有し、概念エンティティを記述し、これらを基礎になる論理スキーマレベルにマッピングする。Entity Frameworkの目標は、これらのサービスの全てが共有できる、共通のより高水準の概念抽象化を提供することである。
<Entity Framework>
本明細書で説明するEntity Frameworkの前に存在した本件特許出願人のADO.NETフレームワークは、データアクセス技術であり、該技術は、アプリケーションがデータストアに接続し、該データストア内に含まれるデータを様々な方法で操作することを可能にした。これは、Microsoft .NET Frameworkの一部であり、.NET Frameworkクラスライブラリの残りに高度に統合された。以前のADO.NETフレームワークは、2つの主要な部分、すなわち、プロバイダとサービスとを有していた。ADO.NETプロバイダは、特定のデータストアとの話し方を知っているコンポーネントである。プロバイダは、機能の3つのコア部分から構成される。すなわち、コネクションが、基礎になるデータソースに対するアクセスを管理し、コマンドが、データソースに対して実行されるコマンド(クエリ、プロシージャ呼出しなど)を表し、データリーダーが、コマンド実行の結果を表す。ADO.NETサービスは、オフラインのデータプログラミングシナリオを可能にするDataSetなど、プロバイダ中立コンポーネントを含む(DataSetは、データソースに関わらず一貫したリレーショナルプログラミングモデルを提供する、データのメモリ常駐表現である)。
(Entity Frameworkの概要)
ADO .NET Entity Frameworkは、予め存在する既存のADO.NETプロバイダモデルを基に、次の機能性を追加する。
1.概念スキーマのモデル化を助ける新しい概念データモデルである、Entity Data Model(EDM)。
2.EDMのインスタンスおよびクエリのプログラム的表現(カノニカルコマンドツリー(canonical command tree))を操作して、異なるプロバイダと通信するための新しいデータ操作言語(DML:data manipulation language)である、Entity SQL。
3.概念スキーマと論理スキーマとの間のマッピングを定義する能力。
4.概念スキーマに対するADO.NETプロバイダのプログラミングモデル。
5.ORM同様の機能を提供するオブジェクトサービスレイヤ。
6.データを.NET言語からのオブジェクトとして、プログラミングすることを容易にするLINQ技術との統合。
(Entity Data Model)
エンティティデータモデル(EDM:Entity Data Model)は、豊富なデータ中心アプリケーションの開発を可能にする。EDMは、E−Rドメインからの概念を用いて典型的なリレーショナルモデルを拡張する。本明細書で提供する例示的な実施形態では、EDMの組織的概念は、エンティティとリレーションシップとを含む。エンティティは、トップレベルのアイテムを識別(identity)で表し、リレーションシップは、2つまたはそれ以上のエンティティを関係付ける(または、2つまたはそれ以上のエンティティの間のリレーションシップを記述する)のに使用される。
一実施形態では、EDMは、C#(CLR)のようにオブジェクト/参照ベースではなく、リレーショナルモデル(およびSQL)のように値ベースである。いくつかのオブジェクトプログラミングモデルを、EDMの上に容易に階層化することができる。同様に、EDMは、永続性に関して1つまたは複数のDBMS実装にマッピングすることができる。
EDMおよびEntity SQLは、データプラットフォーム用のより豊富なデータモデルおよびデータ操作言語を表し、CRMおよびERPなどのアプリケーション、レポート作成、ビジネスインテリジェンス、複製、および同期化などのデータ集中型サービス、ならびにデータ集中型アプリケーションが、その必要性により近い構造および意味のレベルでデータをモデル化して操作することを可能にすることが意図されている。次に、EDMに関係する様々な概念を論じる。
・EDMの型
EntityTypeは、エンティティの構造を記述する。エンティティは、そのエンティティの構造を記述するゼロまたはそれ以上のプロパティ(属性、フィールド)を有することができる。さらに、エンティティ型は、キー、すなわち、エンティティのコレクション内でエンティティインスタンスを一意に識別する値を有するプロパティのセットを、定義しなければならない。EntityTypeは、別のエンティティ型から派生する(またはサブタイプ化する)ことができ、EDMは、単一の継承モデルをサポートする。あるエンティティのプロパティは、単純型または複合型とすることができる。SimpleTypeは、スカラ(またはアトミック)型(例えば、整数、ストリング)を表し、ComplexTypeは、構造化されたプロパティ(例えば、Address)を表す。ComplexTypeは、ゼロまたはそれ以上のプロパティから構成され、これらのプロパティ自体は、スカラ型または複合型のプロパティとすることができる。RelationshipTypeは、2つ(またはそれ以上)のエンティティ型の間のリレーションシップを記述する。EDM Schemaは、型のグループ化メカニズムを提供し、型は、スキーマで定義されなければならない。型名と組み合わされたスキーマの名前空間は、特定の型を一意に識別する。
・EDMインスタンスモデル
エンティティインスタンス(または単にエンティティ)は、論理的にEntitySet内に含まれる。EntitySetは、エンティティの同種コレクションである。すなわち、あるEntitySet内の全てのエンティティは、同一の(または派生した)EntityTypeを有しなければならない。EntitySetは、概念的にはデータベースのテーブルに類似し、エンティティは、テーブルの行に類似する。エンティティインスタンスは、正確に1つのエンティティセットに属さなければならない。同様に、リレーションシップのインスタンスは、論理的にRelationshipSet内に含まれる。RelationshipSetの定義が、リレーションシップのスコープを決定する。すなわち、これは、リレーションシップに参加するエンティティ型のインスタンスを保持するEntitySetを識別する。RelationshipSetは、概念的にはデータベース内のリンクテーブルに類似する。SimpleTypeおよびComplexTypeを、単に、EntityTypeのプロパティとしてインスタンス化することができる。EntityContainerは、EntitySetおよびRelationshipSetの論理グループ化であり、SchemaがEDM型に関してどのようなグループ化メカニズムであるかに類似する。
・例示的なEDM Schema
サンプルのEDMスキーマを以下に示す。
Figure 2009544064
Figure 2009544064
(高水準のアーキテクチャ)
このセクションは、ADO.NET Entity Frameworkのアーキテクチャの概要を示す。その主な機能コンポーネントは、図1に示されており、以下のものを含む。
データソース固有のプロバイダ。Entity Framework 100は、ADO.NETデータプロバイダモデルを基礎とする。SQL Server 151、152、リレーショナルソース153、非リレーショナル154、およびWebサービス155ソースなど、複数のデータソース用の特定のプロバイダ122〜125がある。プロバイダ122〜125を、ストア固有のADO.NET Provider API 121から呼び出すことができる。
EntityClientプロバイダ。EntityClientプロバイダ110は、具象的な概念プログラミングレイヤを表す。これは、新しい値ベースのデータプロバイダであり、ここでは、データは、EDMエンティティおよびリレーションシップに関してアクセスされ、エンティティベースのSQL言語(Entity SQL)を使用してクエリ/更新される。EntityClientプロバイダ111は、Entity Data Services 110パッケージの一部を形成し、Entity Data Services 110パッケージは、メタデータサービス112と、クエリおよび更新パイプライン113と、トランザクションサポート115と、ビューマネージャランタイム116と、複数のフラットなリレーショナルテーブルにまたがる更新可能EDMビューをサポートするビューマッピングサブシステム114とを含むこともできる。テーブルとエンティティとの間のマッピングは、マッピング仕様言語を介して宣言的に指定される。
Object Servicesおよび他のプログラミングレイヤ。Entity Framework 100のObject Servicesコンポーネント131は、複数のエンティティにまたがる豊富なオブジェクト抽象化、これらのオブジェクトにまたがるサービスの豊富なセットを提供し、アプリケーションが、よく知られたプログラミング言語構造を使用して命令コーディング経験161内でプログラミングすることを可能にする。このコンポーネントは、オブジェクトの状態管理サービス(変更追跡、識別解決(identity resolution)を含む)を提供し、オブジェクトおよびリレーションシップをナビゲートし、ロードするサービスをサポートし、Xlinq 132などのコンポーネントを使用してLINQおよびEntity SQLを介するクエリをサポートして、オブジェクトの更新および永続化を可能にする。
Entity Frameworkは、130と類似の複数のプログラミングレイヤが、EntityClientプロバイダ111によって公開される値ベースのentity data servicesレイヤ110にプラグオンされることを可能にする。Object Services 131コンポーネントは、CLRオブジェクトを表面化するそのようなプログラミングレイヤの1つであり、ORM同様の機能性を提供する。
メタデータサービス112コンポーネントは、Entity Framework 100の設計時間およびランタイムの必要性と、Entity Framework上のアプリケーションとに関するメタデータを管理する。EDM概念(エンティティ、リレーションシップ、EntitySet、RelationshipSet)、ストア概念(テーブル、列、制約)、およびマッピング概念に関連する全てのメタデータが、メタデータインターフェースを介して公開される。メタデータコンポーネント112は、モデル主導型のアプリケーション設計をサポートするドメインモデル化ツールの間のリンクとしても機能する。
設計ツールおよびメタデータツール。Entity Framework 100は、ドメインデザイナ170と統合して、モデル主導型のアプリケーション開発を可能にする。このツールは、EDM設計ツール、モデル化ツール171、マッピング設計ツール172、ブラウジング設計ツール173、バインディング設計ツール174、コード生成ツール175、およびクエリモデラーを含む。
サービス。レポート作成141、同期化142、ウェブサービス143、およびビジネス分析などの豊富なデータ中心サービスを、Entity Framework 100を使用して構築することができる。
<プログラミングパターン>
ADO.NET Entity Frameworkは、LINQと一緒に、アプリケーションコードとデータとの間のインピーダンス不整合を大幅に減少させることによって、アプリケーション開発者の生産性を高める。このセクションでは、論理レイヤ、概念レイヤ、およびオブジェクト抽象化レイヤでのデータアクセスプログラミングパターンの進化を説明する。
例示のAdventureWorksデータベースに基づく次のリレーショナルスキーマのフラグメントを検討されたい。このデータベースは、図2に図示されるような、リレーショナルスキーマに従う、SContacts 201テーブル、SEmployees 202テーブル、SSalesPersons 203テーブル、およびSSalesOrders 204テーブルから構成される。
Figure 2009544064
ある日付の前に雇われた販売員の名前および雇われた日付を取得する、アプリケーションコードのフラグメントを考慮されたい(下記に示す)。このコードフラグメントには、回答を必要とするビジネス質問にほとんど関係しない4つの主な短所がある。第1に、このクエリは、英語では非常に簡潔に述べることができるが、SQLステートメントは、非常に冗長的であり、開発者が、正規化されたリレーショナルスキーマを意識して、SContactsテーブル、SEmployeesテーブル、およびSSalesPersonテーブルから適切な列を集めるのに必要なマルチテーブル結合を定式化する必要がある。さらに、基礎になるデータベーススキーマに対する全ての変更が、下記のコードフラグメントの対応する変更を必要とする。第2に、ユーザは、データソースへの明示的な関連付け(connection)を定義しなければならない。第3に、返される結果は、強く型付けされていないので、非既存の列の名前に対する全ての参照は、クエリが実行された後にのみキャッチされることになる。第4に、このSQLステートメントは、Command APIに対するストリングプロパティであり、その定式化(formulation)における全てのエラーは、実行時にのみキャッチされることになる。このコードは、ADO.NET 2.0を使用して記述されているが、コードパターンおよびその短所は、ODBC、JDBC、またはOLE−DBなどの、全ての他のリレーショナルデータアクセスAPIにあてはまる。
Figure 2009544064
この例示のリレーショナルスキーマを、図3に図示されるようなEDMスキーマを介して概念レベルでキャプチャすることができる。これは、SContacts 201テーブル、SEmployees 202テーブル、およびSSalesPersons 203テーブルを抽象化する、エンティティ型ESalesPerson 302を定義する。これは、エンティティ型、EStoreOrder 301とESalesOrder 303との間の継承関係もキャプチャする。
概念レイヤでの同等のプログラムは、次のように記述される。
Figure 2009544064
このSQLステートメントは、かなり単純化されており、ユーザは、もはや正確なデータベースレイアウトについて知る必要がない。さらに、アプリケーションロジックを、基礎になるデータベーススキーマに対する変更から分離することができる。しかし、このフラグメントは、それでもなお、ストリングベースであり、プログラミング言語型でチェックすることの利点が得られず、弱く型付けされた結果を返す。
エンティティの回りに薄いオブジェクトラッパーを追加し、C#のLINQ拡張を使用することによって、次のように、インピーダンス不整合のない同等の関数を再記述することができる。
Figure 2009544064
このクエリは単純である。すなわち、アプリケーションが、基礎になるデータベーススキーマに対する変更から(十分に)分離され、クエリが、C#のコンパイラによって完全に型チェックされる。クエリに加えて、オブジェクトと対話し、オブジェクトに対して通常のCreate、Read、Update、およびDelete(CRUD)オペレーションを実行することができる。これらの例を、更新処理のセクションで説明する。
<Object Services>
Object Servicesコンポーネントは、概念(エンティティ)レイヤ上のプログラミング/プレゼンテーションレイヤである。これは、プログラミング言語と値ベースの概念レイヤエンティティとの間の対話を容易にする複数のコンポーネントを備えている。プログラミング言語ランタイム(例えば.NET、Java(登録商標))ごとに1つのオブジェクトサービスが存在することが予期される。.NET CLRをサポートするように設計される場合は、全ての.NET言語のプログラムが、Entity Frameworkと対話することができる。Object Servicesは、次の主要コンポーネントから構成される。
ObjectContextクラスは、データベース接続、メタデータワークスペース、オブジェクト状態マネージャ、およびオブジェクトマテリアライザを備えている。このクラスは、Entity SQL構文またはLINQ構文のいずれかでのクエリの定式化を可能にするために、オブジェクトクエリインターフェース、ObjectQuery<T>を含み、強く型付けされたオブジェクトの結果をObjectReader<T>として返す。ObjectContextは、プログラミング言語レイヤと概念レイヤとの間のクエリおよび更新(すなわち、SaveChanges)オブジェクトレベルインターフェースも公開する。オブジェクト状態マネージャは、3つの主要な機能を有する。すなわち、(a)クエリ結果をキャッシュし、識別解決を提供し、オーバーラップするクエリ結果からオブジェクトをマージするようにポリシを管理し、(b)メモリ内の変更を追跡し、(c)更新処理インフラストラクチャに入力される変更リストを構築する、という3つの主要な機能を有する。オブジェクト状態マネージャは、キャッシュ内の各エンティティの状態、すなわち、デタッチ済み(キャッシュから)、追加済み、未変更、変更済み、および削除済み、という状態を管理し、その状態遷移を追跡する。オブジェクトマテリアライザ(Object materializer)は、概念レイヤからのエンティティ値と、対応するCLRオブジェクトとの間で、クエリおよび更新中に変形を実行する。
<マッピング>
一実施形態では、ADO.NET Entity Frameworkなどの汎用データアクセスレイヤのバックボーンは、アプリケーションデータとデータベースに格納されたデータとの間のリレーションシップを確立するマッピング(mapping)とすることができる。アプリケーションは、オブジェクトレベルまたは概念レベルでオブジェクトをクエリして、更新し、これらのオペレーションは、マッピングを介してストアに変換される。マッピングソリューションによって対処する必要のある、複数の技術的課題がある。特に宣言的なデータ操作が不要である場合に、1対1のマッピングを使用してリレーショナルテーブルの各行を1つのオブジェクトとして公開するORMを構築することは、比較的容易である。しかし、より複雑なマッピング、セットベースのオペレーション、パフォーマンス、マルチDBMSベンダのサポート、および他の要件が加わるにつれて、アドホックソリューションは、すぐに手におえなくなる。
(問題:マッピングを介する更新)
マッピングを介してデータにアクセスすることの問題を、「ビュー」に関してモデル化することができる。すなわち、クライアントレイヤ内のオブジェクト/エンティティは、テーブルの行にまたがる豊富なビューと考えることができる。しかし、ビューのうち限られたクラスだけが更新可能であることは周知であり、例えば、商用データベースシステムは、結合または統合を含むビュー内の複数のテーブルに対する更新を許容しない。非常に単純なビューに対するものであっても、一意の更新変換を見つけることは、ビューによる更新振舞いについての内在する指定が不十分なために、ほとんど不可能である。研究により、ビューから更新セマンティクスを引き出すことは困難であり、かなりのユーザの専門知識を必要とする可能性があることが示されている。しかし、マッピング主導型のデータアクセスについては、ビューに対する全ての更新について明確に定義された変換が存在することが有利である。
さらに、マッピング主導型のシナリオでは、更新の可能性の要件は、単一のビューを超えている。例えば、CustomerエンティティおよびOrderエンティティを操作するビジネスアプリケーションは、効果的に2つのビューに対するオペレーションを実行する。場合によって、一貫したアプリケーションの状態は、複数のビューを同時に更新することによってのみ達成可能である。そのような更新についてのケースバイケースの変換は、更新ロジックの組み合わせ的爆発(combinatorial explosion)を生じる可能性がある。その実装をアプリケーション開発者に委ねることは、アプリケーション開発者がデータアクセスの最も複雑な部分の1つに手作業で取り組むことを必要とするので、十分ではない。
(ADO.NETのマッピングアプローチ)
ADO.NET Entity Frameworkは、上記の課題に対処することを目指す革新的なマッピングアーキテクチャをサポートする。ADO.NET Entity Frameworkは、次のアイデアを活用する。
1.指定:マッピングは、明確に定義された意味を有し、広範囲のマッピングシナリオを専門家でないユーザの理解できる範囲内に置く、宣言的言語(declarative language)を使用して指定される。
2.コンパイル:マッピングは、クエリビューおよび更新ビューと呼ばれる、ランタイムエンジン内でクエリ処理および更新処理を駆動する、双方向ビューにコンパイルされる。
3.実行:更新変換は、具体化されたビューの保守、すなわち堅固なデータベース技術を活用する一般的なメカニズムを使用して行われる。クエリ変換は、ビューアンフォールディング(view unfolding)を使用する。
この新しいマッピングアーキテクチャは、原理づけられた古くならない方法でマッピング主導型の技術の強力なスタックを構築することを可能にする。さらに、この新しいマッピングアーキテクチャは、すぐに実用に関連する興味深い研究の方向性を広げる。次のサブセクションは、マッピングの指定およびコンパイルを説明する。実行は、下記のクエリ処理および更新処理のセクションで検討する。本明細書で提供する例示的なマッピングアーキテクチャのさらなる態様および実施形態は、下記の「さらなる態様および実施形態」と題するセクションにおいても説明する。
(マッピングの指定)
マッピングは、マッピングフラグメントのセットを使用して指定される。各マッピングフラグメントは、QEntities=QTablesの形式の制約であり、ここで、QEntitiesは、エンティティスキーマ(アプリケーション側)に対するクエリであり、QTablesは、データベーススキーマ(ストア側)に対するクエリである。マッピングフラグメントは、エンティティデータのある部分がリレーショナルデータのある部分にどのように対応するかを記述する。すなわち、マッピングフラグメントは、他のフラグメントと独立に理解することができる、指定の基礎的な単位である。
説明のために、図4のサンプルのマッピングシナリオを考慮されたい。図4は、エンティティスキーマ(左)とデータベーススキーマ(右)との間のマッピングを図示する。XMLファイルまたはグラフィカルツールを使用して、このマッピングを定義することができる。エンティティスキーマは、本明細書のEntity Data Modelセクションのスキーマに対応する。ストア側には、4つのテーブル、すなわち、SSalesOrders、SSalesPersons、SEmployees、およびSContactsがある。エンティティスキーマ側には、2つのエンティティセット、すなわち、ESalesOrderおよびESalesPersonsと、1つのアソシエーションセットESalesPersonOrdersがある。
このマッピングは、図5に示されるエンティティスキーマおよびリレーショナルスキーマに対するクエリに関して表される。
図5では、フラグメント1は、ESalesOrders内の正確な型ESalesOrderの全てのエンティティに関する(Id,AccountNum)値のセットが、IsOnlineがtrueであるSSalesOrdersテーブルから取り出された(SalesOrderId,AccountNum)値のセットと同一であることを示している。フラグメント2も同様である。フラグメント3は、アソシエーションセットのESalesPersonOrdersを、SSalesOrdersテーブルにマッピングし、各アソシエーションエントリが、このテーブル内の各行の主キーと外部キーのペアに対応することを示している。フラグメント4、5、および6は、ESalesPersonsエンティティセット内のエンティティが、3つのテーブルSSalesPersons、SContacts、およびSEmployeesにまたがって分割されることを示している。
(双方向ビュー)
このマッピングは、ランタイムを駆動する双方向のEntity SQLビューにコンパイルされる。クエリビューは、テーブルに関してエンティティを表し、更新ビューは、エンティティに関してテーブルを表す。
更新ビューは、仮想構造に関して永続データを指定するため、いくらか反直観的なものである可能性があるが、後で示すように、的確な方法で更新をサポートするために更新ビューを活用することができる。生成されるビューは、明確に定義された意味でマッピングを「尊重し(respect)」、下記のプロパティを有する(この提示は、わずかに単純化されており、特に永続状態が仮想状態によって完全には決定されないことに留意されたい)。
Entities = QueryViews(Tables)
Tables = UpdateViews(Entities)
Entities = QueryViews(UpdateViews(Entities))
最後の条件は、ラウンドトリップ基準(roudtripping criterion)であり、これは、確実に、全てのエンティティデータを永続させ、ロスのない方法でデータベースから再アセンブルできるようにする。Entity Frameworkに含まれるマッピングコンパイラは、生成されたビューがラウンドトリップ基準を満たすことを保証する。このマッピングコンパイラは、そのようなビューを入力マッピングから作ることができない場合に、エラーを発生する。
図6は、図5のマッピングのマッピングコンパイラによって生成される双方向ビュー、すなわち、クエリビューと更新ビューを示す。一般に、これらのビューは、必要なデータ変形を明示的に指定するので、入力マッピングより著しく複雑である可能性がある。例えば、QV1では、ESalesOrdersエンティティセットは、SSalesOrdersテーブルから構築され、その結果、ESalesOrderまたはEStoreSalesOrderのいずれかが、IsOnlineフラグがtrueであるか否かに応じてインスタンス化されることになる。ESalesPersonsエンティティセットをリレーショナルテーブルから再アセンブルするためには、SSalesPersonsテーブル、SEmployeesテーブル、およびSContactsテーブルの間で結合を実行する必要がある(QV3)。
ラウンドトリップ基準を満たすクエリビューおよび更新ビューを手で書くことは、厄介なことであり、かなりのデータベース専門知識を必要とする。したがって、Entity Frameworkの本実施形態は、組み込みマッピングコンパイラによって作成されたビューだけを受け入れるが、他のコンパイラまたは手によって作成されたビューを受け入れることは、代替的な実施形態では確かに妥当と思われる。
(マッピングコンパイラ)
Entity Frameworkは、EDMスキーマ、ストアスキーマ、およびマッピングからクエリビューおよび更新ビューを生成する、マッピングコンパイラを含む(メタデータのアーチファクトは、本明細書のメタデータのセクションで論じる)。これらのビューを、クエリパイプラインおよび更新パイプラインによって取り込む(consume)。最初のクエリがEDMスキーマに対して実行されると、このコンパイラを、設計時またはランタイムのいずれかにおいて呼び出すことができる。このコンパイラで使用されるビュー生成アルゴリズムは、正確な再記述のためのanswering−queries−using−views技法に基づく。
<クエリ処理>
(クエリ言語)
一実施形態では、Entity Frameworkを、複数のクエリ言語を処理するように設計することができる。Entity SQLおよびLINQの実施形態を、本明細書においてより詳細に説明するが、同一または類似の原理を他の実施形態に拡張できることは理解されよう。
・Entity SQL
Entity SQLは、EDMインスタンスにクエリして操作するように設計された、SQLの派生物である。Entity SQLは、以下の方法で標準のSQLを拡張する。
1.EDM構造(エンティティ、リレーションシップ、複合型など)のネイティブサポート:コンストラクタ、メンバアクセッサ、型問合せ、リレーションシップナビゲーション、ネスト/アンネストなど。
2.名前空間。Entity SQLは、名前空間を、型および関数のグループ化構造として使用する(XQueryおよび他のプログラミング言語と同様)。
3.拡張可能な関数。Entity SQLは、非組み込み関数をサポートする。全ての関数(min、max、substringなど)は、名前空間内で明示的に定義され、通常は基礎になるストアから、クエリにインポートされる。
4.SQLと比較される、サブクエリおよび他の構造についてのより直交の扱い(orthogonal treatment)。
Entity Frameworkは、例えば、EntityClientプロバイダレイヤにおいてObject Servicesコンポーネント内でクエリ言語として、Entity SQLをサポートすることができる。サンプルのEntity SQLクエリは、本明細書のプログラミングパターンのセクションに示されている。
・Language Integrated Query(LINQ)
LINQは、クエリ関連構造をC#およびVisual Basicなどのメインストリームプログラミング言語に導入する.NETプログラミング言語における革新である。クエリ式(query expressions)は、外部ツールまたは言語プリプロセッサによって処理されるのではなく、言語自体のファーストクラス表現(first−class expressions)である。LINQは、クエリ式が、豊富なメタデータ、コンパイル時の構文チェック、静的な型付け、および以前には命令コードのみに使用可能であったIntelliSenseから利益を得ることを可能にする。LINQは、トラバーサル、フィルタ、結合、射影、ソート、およびグループ化のオペレーションを、直接かつ宣言的な方法で全ての.NETベースのプログラミング言語で表すことを可能にする、汎用の標準クエリ演算子のセットを定義する。Visual BasicおよびC#などの.NET言語も、クエリ理解、すなわち標準クエリ演算子を活用する言語構文拡張をサポートする。C#でのLINQを使用するクエリの例は、本明細書のプログラミングパターンのセクションに示されている。
(カノニカルコマンドツリー)
一実施形態において、カノニカルコマンドツリー(より単純にはコマンドツリー)を、Entity Framework内の全てのクエリのプログラム的(ツリー)表現とすることができる。Entity SQLまたはLINQを介して表されたクエリを、まず解析し、コマンドツリーに変換することができ、全ての後続処理を、このコマンドツリーに対して実行することができる。Entity Frameworkは、コマンドツリー構築/編集APIを介してクエリを動的に構築する(または編集する)ことを可能にすることもできる。コマンドツリーは、クエリ、挿入、更新、削除、およびプロシ−ジャ呼出しを表すことができる。コマンドツリーは、1つまたは複数の式(Expression)から構成される。式は、単に、ある計算を表し、Entity Frameworkは、定数、パラメータ、算術演算、リレーショナル演算(射影、フィルタ、結合など)、関数呼出しなどを含む、様々な式を提供することができる。最後に、コマンドツリーは、EntityClientプロバイダと基礎になるストア固有プロバイダとの間のクエリのための通信の手段として使用することができる。
(クエリパイプライン)
クエリ実行を、Entity Frameworkの一実施形態では、データストアに委ねることができる。Entity Frameworkのクエリ処理のインフラストラクチャは、Entity SQLまたはLINQのクエリを、追加のアセンブリ情報とともに、基礎になるストアによって評価可能な1つまたは複数の基本的なリレーショナルのみのクエリに分解することに関与し、この追加のアセンブリ情報を使用して、より単純なクエリのフラットな結果を、より豊富なEDM構造に再形成する。
Entity Frameworkは、例えば、ストアがSQL Server 2000と同様の機能をサポートしなければならないと仮定することができる。クエリを、このプロファイルに適合する、より単純なフラットなリレーショナルクエリに分解することができる。Entity Frameworkの他の実施形態は、ストアがクエリ処理のより大きな部分を担うことを可能にすることができるであろう。
典型的なクエリを、次のように処理することができる。
構文およびセマンティクスの分析。Entity SQLクエリは、まずメタデータサービスコンポーネントからの情報を使用して解析され、意味的に分析される。LINQクエリは、適切な言語コンパイラの一部として解析され、分析される。
カノニカルコマンドツリーへの変換。クエリは、ここで、それが元々どのように表現されていたかに関わりなくコマンドツリーに変換され、検証される。
マッピングビューアンフォールディング。Entity Framework内のクエリは、概念(EDM)スキーマをターゲットとする。これらのクエリは、その代わりに基礎になるデータベーステーブルおよびビューを参照するように変換されなければならない。このプロセスは、マッピングビューアンフォールディングと称されるが、データベースシステムのビューアンフォールディングメカニズムに類似する。EDMスキーマとデータベーススキーマとの間のマッピングは、クエリビューおよび更新ビューにコンパイルされる。クエリビューは、次いで、ユーザクエリにアンフォールドされ、このクエリは、ここで、データベーステーブルおよびビューをターゲットとする。
構造型の除去(Structured Type Elimination)。構造型への全ての参照は、ここで、クエリから除去され、再アセンブリ情報に追加される(結果アセンブリをガイドするために)。これは、型コンストラクタ、メンバアクセッサ、型問合せの式に対する参照を含む。
射影のプルーニング。クエリを分析し、クエリ内の未参照式を除去する。
ネストのプルアップ。クエリ内の全てのネストオペレーション(ネストされたコレクションの構築)は、フラットリレーショナル演算子のみを含むサブツリー上のクエリツリーのルートにプッシュアップされる。通常、ネストオペレーションは、左外部結合(または、外部適用(outer apply))に変換され、続くクエリからのフラット結果が、適切な結果に再アセンブルされる(下記の結果アセンブリを参照されたい)。
変形。ヒューリスティック変形のセットを適用して、クエリを単純化する。これは、フィルタプッシュダウン、変換を結合するための適用、case式フォールディングなどを含む。余分な結合(自己結合、主キー、外部キー結合)は、このステージで除去される。ここでのクエリ処理インフラストラクチャは、いかなるコストベースの最適化も実行しないことに留意されたい。
プロバイダ固有コマンドへの変換。クエリ(すなわち、コマンドツリー)を、ここでプロバイダに渡し、おそらくはプロバイダのネイティブSQLダイアレクトの、プロバイダ固有コマンドを作成する。このステップをSQLGenと呼ぶ。
実行。プロバイダコマンドが実行される。
結果アセンブリ。プロバイダからの結果(DataReader)が、以前に集められたアセンブリ情報を使用して適切な形式に再形成され、単一のDataReaderが、呼出し側に返される。
マテリアライゼーション。Object Servicesコンポーネントを介して発行されたクエリについて、結果は、適切なプログラミング言語オブジェクトにマテリアライズされる。
(SQLGen)
前のセクションで論じたように、クエリ実行は、基礎になるストアに委ねられる。そのような実施形態において、クエリは、まず、ストアにとって適切な形式に変換されなければならない。しかし、異なるストアは、SQLの異なるダイアレクトをサポートし、Entity Frameworkがそれらの全てをネイティブにサポートすることは、現実的ではない。代わりに、クエリパイプラインは、クエリをコマンドツリーの形式でストアプロバイダに引き渡すことができる。ストアプロバイダは、次いで、そのコマンドツリーをネイティブコマンドに変換することができる。これは、コマンドツリーをプロバイダのネイティブSQLダイアレクトに変換することによって達成することができ、したがって、このフェーズはSQLGenである。次いで、結果のコマンドを実行して、関連する結果を作成することができる。
<更新処理>
このセクションは、更新処理を例示的なADO.NET Entity Frameworkでどのように実行できるかを説明する。一実施形態では、更新処理の2つのフェーズ、すなわち、コンパイル時とランタイムがある。本明細書で提供される双方向ビューのセクションでは、マッピング仕様をビュー表現のコレクションにコンパイルするプロセスを説明した。本セクションは、どのようにビュー表現をランタイムで活用して、オブジェクトレイヤで実行されるオブジェクト変更(または、EDMレイヤでのEntity SQL DML更新)をリレーショナルレイヤにおける同等のSQL更新に変換するかについて説明する。
(ビュー保守を介する更新)
例示的なADO.NETマッピングアーキテクチャで活用される洞察の1つは、マテリアライズビュー保守のアルゴリズムを活用して、双方向ビューを介して更新を伝搬することができることである。このプロセスを図7に示す。
図7の右側に図示されたデータベースの内部のTablesは、永続データを保持する。図7の左側に図示されたEntityContainerは、この永続データの仮想状態を表すが、これは、典型的にはEntitySets内のエンティティのわずかな部分のみが、クライアント上でマテリアライズされるからである。目標は、Entitiesの状態の更新ΔEntitiesを、Tablesの永続状態の更新ΔTablesに変換することである。このプロセスを増分ビューの保守と称する。なぜなら、更新は、エンティティの変更された諸態様を表す更新ΔEntitiesに基づいて実行されるからである。
これは、次の2つのステップを使用して行うことができる。
1.ビュー保守:
ΔTables = ΔUpdateViews (Entities, ΔEntities)
2.ビューアンフォールディング:
ΔTables = ΔUpdateViews (QueryViews (Tables), ΔEntities)
ステップ1では、ビュー保守アルゴリズムが更新ビューに適用される。これは、デルタ式のセットΔUpdateViewsを作成し、これにより、ΔTablesをΔEntities、およびEntitiesのスナップショットからどのようにして取得するか知ることができる。後者は、クライアント側では完全にはマテリアライズされないので、ステップ2で、ビューアンフォールディングを使用して、デルタ式をクエリビューと組み合わせる。一緒に、これらのステップは、入力として初期データベース状態およびエンティティに対する更新を受け取ってデータベースに対する更新を計算する式を、生成する。
このアプローチは、一度に1オブジェクトであると同時にセットベースである更新(すなわち、データ操作ステートメントを使用して表される更新)に対して機能する、クリーンで均一なアルゴリズムをもたらし、堅固なデータベース技術を活用する。実際には、ステップ1は、更新変換に十分であることが多い。なぜなら、多くの更新は、現在のデータベース状態に直接には依存しないからである。この情況では、ΔTables=ΔUpdateViews(ΔEntities)である。ΔEntitiesが、キャッシュ・エンティティに対する一度に1オブジェクトの変更のセットとして与えられる場合は、ΔUpdateViews式を計算するのではなく、変更されたエンティティに対してビュー保守アルゴリズムを直接実行することによって、ステップ1をさらに最適化することができる。
(オブジェクトに対する更新の変換)
上記で概説されたアプローチを説明するために、少なくとも5年間勤務した有資格販売員にボーナスおよび昇格を与える次の例を検討されたい。
Figure 2009544064
AdventureWorksDBは、ツール生成されたクラスであり、該クラスは、データベース接続、メタデータワークスペース、およびオブジェクトキャッシュデータ構造を備えSaveChangesメソッドを公開する、ObjectContextと呼ばれる汎用オブジェクトサービスクラスから派生する。Object Servicesセクションで説明したように、オブジェクトキャッシュは、エンティティのリストを管理し、このリストのそれぞれは、デタッチ済み(キャッシュから)、追加済み、未変更、変更済み、および削除済みという状態のうちの1つである。上記のコードフラグメントは、ESalesPersonオブジェクトの肩書プロパティおよびボーナスプロパティを変更する更新を記述し、この肩書プロパティおよびボーナスプロパティは、SEmployeesテーブルおよびSSalesPersonsテーブルにそれぞれ格納される。SaveChangesメソッドの呼出しによってトリガされる、オブジェクト更新を対応するテーブル更新に変形するプロセスは、次の4つのステップを含むことができる。
変更リスト生成。エンティティセットごとの変更のリストが、オブジェクトキャッシュから作成される。更新は、削除および挿入される要素のリストとして表される。追加されるオブジェクトは、挿入になる。削除されるオブジェクトは、削除になる。
値式の伝搬。このステップは、変更ビューおよび更新ビューのリスト(メタデータワークスペース内に保持される)をとり、増分マテリアライズビューの保守式、ΔUpdateViewsを使用して、オブジェクト変更のリストを、基礎になる作用テーブル(affected table)に対する代数ベーステーブルの挿入式および削除式のシーケンスに変形する。この例について、関連する更新ビューは、図6に示されたUV2およびUV3である。これらのビューは、単純な射影−選択クエリであり、したがって、ビュー保守ルールの適用は、容易である。挿入(Δ+)および削除(Δ-)について同一である、次のΔUpdateViews式を求める。
Figure 2009544064
上記に示されるループが、エンティティEold=ESalesPersons(1,20,“”,“Alice”,Contact(“a@sales”,NULL))を、Enew=ESalesPersons(1,30,“Senior...”,“Alice”,Contact(“a@sales”,NULL))に更新したと仮定する。次に、初期デルタは、挿入について、Δ+ESalesOrders={Enew}であり、削除について、Δ-ESalesOrders={Eold}である。Δ+SSalesPersons={(1,30)}、Δ-SSalesPersons={(1,20)}が得られる。次に、SSalesPersonsテーブルに対する計算された挿入および削除が、単一の更新に組み合わされ、この更新は、Bonus値に30をセットする。SEmployeesに対するデルタが、同様に計算される。SContactsについて、Δ+SContacts=Δ-SContactsが得られ、したがって、更新は不要である。
作用ベーステーブルに対するデルタを計算することに加え、このフェーズは、(a)参照整合性の制約を考慮に入れた、テーブル更新を実行すべき正しい順序、(b)最終的な更新をデータベースに提示する前に必要な、ストアによって生成されたキーの取り出し、および(c)オプティミスティック並行性制御に関する情報を収集することに関与する。
SQL DMLまたはストアドプロシージャ呼出しの生成。このステップは、挿入されるデルタおよび削除されるデルタのリストに加えて、並行処理に関係する追加の注釈を、SQL DMLステートメントまたはストアドプロシージャ呼出しのシーケンスに変形する。この例では、影響される販売員について生成される更新ステートメントは、次の通りである。
Figure 2009544064
キャッシュの同期化。更新が実行されると、キャッシュの状態は、データベースの新しい状態に同期化される。したがって、必要な場合に、ミニクエリ処理のステップを実行して、新しい変更されたリレーショナル状態を、それに対応するエンティティおよびオブジェクトの状態に変形する。
<メタデータ>
メタデータサブシステムは、データベースカタログに類似し、Entity Frameworkの設計時およびランタイムのメタデータの必要を満たすように設計される。
(メタデータアーチファクト)
メタデータアーチファクトは、例えば、以下のものを含むことができる。
概念スキーマ(CSDLファイル):概念スキーマは、概念スキーマ定義言語(CSDL:Conceptual Scheme Definition Language)ファイル内で定義することができ、EDM型(エンティティ型、リレーションシップ)と、データについてアプリケーションの概念ビューを記述するエンティティセットとを含む。
ストアスキーマ(SSDLファイル):ストアスキーマ情報(テーブル、列、キーなど)は、CSDLボキャブラリ項目を使用して表されることがある。例えば、EntitySetsは、テーブルを示し、プロパティは、列を示す。これらを、ストアスキーマ定義言語(SSDL:Store Schema Definition Language)ファイル内で定義することができる。
C−Sマッピング仕様(MSLファイル):概念スキーマとストアスキーマとの間のマッピングは、典型的にはマッピング仕様言語(MSL:Mapping Specification Language)ファイル内のマッピング仕様にキャプチャされる。この仕様を、マッピングコンパイラによって使用して、クエリビューおよび更新ビューを作成する。
プロバイダマニフェスト:プロバイダマニフェストは、各プロバイダによってサポートされる機能性の記述を提供することがあり、次の例示的な情報を含むことができる。
1.プロバイダによってサポートされるプリミティブ型(varchar、intなど)、およびそれらが対応するEDM型(string、int32など)。
2.プロバイダに関する組み込み関数(および、そのシグネチャ)。
この情報を、Entity SQLパーサによってクエリ分析の一部として使用することができる。これらのアーチファクトに加えて、メタデータサブシステムは、生成されたオブジェクトクラス、および、該オブジェクトクラスとこれに対応する概念エンティティ型との間のマッピングを追跡し続けることもできる。
(メタデータサービスのアーキテクチャ)
Entity Frameworkによって消費されるメタデータは、異なるソースから異なるフォーマットで来る可能性がある。メタデータサブシステムを、統一された低水準のメタデータインターフェースのセットに上に作成することができ、該インターフェースのセットにより、メタデータランタイムが、異なるメタデータの永続フォーマット/ソースの詳細と独立に機能することが可能になる。
例示的なメタデータサービスは、次を含むことができる。
異なるタイプのメタデータの列挙。
キーによるメタデータ検索。
メタデータのブラウジング/ナビゲーション。
一時メタデータの作成(例えば、クエリ処理用)。
セッション独立のメタデータのキャッシュと再使用。
メタデータサブシステムは、次のコンポーネントを含む。メタデータキャッシュは、異なるソースから取り出されたメタデータをキャッシュし、メタデータを取り出して操作する共通APIを顧客に提供する。メタデータは、異なる形式で表され、異なる位置に格納されることがあるので、メタデータサブシステムは、ローダーインターフェースを有利にサポートすることができる。メタデータローダーは、ローダーインターフェースを実装し、適切なソース(CSDL/SSDLファイルなど)からのメタデータのロードに関与する。メタデータワークスペースは、いくつかのメタデータを集約して、メタデータの完全なセットをアプリケーションに提供する。メタデータワークスペースは、通常、概念モデル、ストアスキーマ、オブジェクトクラス、およびこれらの構造の間のマッピングに関する情報を含む。
<ツール>
一実施形態において、Entity Frameworkは、開発の生産性を高めるための設計時のツールのコレクションを含むこともできる。例示的なツールは、次の通りである。
モデルデザイナ:アプリケーションの開発における早期のステップの1つは、概念モデルの定義である。Entity Frameworkは、アプリケーション設計者および分析者が、エンティティおよびリレーションシップに関してアプリケーションの主な概念を記述することを可能にする。モデルデザイナは、この概念モデル化のタスクを対話的に実行することを可能にするツールである。設計のアーチファクトは、データベース内でその状態を永続することができるMetadataコンポーネントに直接にキャプチャされる。モデルデザイナは、モデル記述(CSDLを介して指定される)を生成して、消費することもでき、EDMモデルをリレーショナルメタデータから合成することができる。
マッピングデザイナ:EDMモデルが設計されると、開発者は、概念モデルをリレーショナルデータベースにどのようにマッピングするかを指定することができる。このタスクは、マッピングデザイナによって容易にされ、マッピングデザイナは、図8に図示されるユーザインターフェースを提示することができる。マッピングデザイナは、ユーザインターフェースの左側に提示されるエンティティスキーマ内のエンティティおよびリレーションシップが、図8のユーザインターフェースの右側に提示されるデータベーススキーマに反映されるようにデータベース内のテーブルおよび列にどのようにマッピングされるかを、開発者が記述するのを助ける。図8の中央セクションに提示されたグラフ内のリンクは、Entity SQLクエリと同等のものとして宣言的に指定されたマッピング式を、視覚化する。これらの式は、クエリビューおよび更新ビューを生成する双方向のマッピングコンパイルコンポーネントへの入力となる。
コード生成:EDM概念モデルは、ADO.NETコードパターン(コマンド、接続、データリーダー)に基づいてよく知られた対話モデルを提供するので、多くのアプリケーションに十分である。しかし、多くのアプリケーションは、強く型付けされたオブジェクトとしてデータと対話することを好む。Entity Frameworkは、EDMモデルを入力として取り、エンティティ型の強く型付けされたCLRクラスを作成する、コード生成ツールのセットを含む。これらのコード生成ツールは、強く型付けされたオブジェクトコンテキスト(例えば、AdventureWorksDB)を生成することもでき、この強く型付けされたオブジェクトコンテキストは、モデルによって定義された全てのエンティティおよびリレーションセットの強く型付けされたコレクション(例えば、ObjectQuery<SalesPerson>)を公開する。
さらなる態様および実施形態
<マッピングサービス>
一実施形態において、図1の114などのマッピングコンポーネントは、マッピングの全ての態様を管理し、Entity Clientプロバイダ111によって内部的に使用される。マッピングは、2つの潜在的に異なる型空間内の構造の間の変形を論理的に指定する。例えば、エンティティ(概念空間内で、その用語が上記で使用されるとき)を、図8に図式的に示されるように、ストレージ空間内のデータベーステーブルに関して指定することができる。
規定のマッピング(prescribed mapping)は、システムが構造の適切なマッピングを自動的に決定するマッピングである。非規定のマッピング(non−prescribed mapping)は、アプリケーション設計者がマッピングの様々なファセットを制御することを可能にする。マッピングは、複数のファセットを有することができる。マッピングのエンドポイント(エンティティ、テーブルなど)、マッピングされるプロパティのセット、更新の振舞い、遅延ローディングなどのランタイムの影響、更新時の衝突解決の振舞いなどが、そのようなファセットのごく部分的なリストである。
一実施形態において、マッピングコンポーネント114は、マッピングビューを作成することができる。ストレージ空間とスキーマ空間との間のマッピングを検討されたい。エンティティは、1つまたは複数のテーブルからの行で構成される。クエリビューは、スキーマ空間内のエンティティを、ストレージ空間内のテーブルに関するクエリとして表す。エンティティは、クエリビューを評価することによってマテリアライズすることができる。
エンティティのセットに対する変更を、対応するストアテーブルに戻して反映させる必要があるときは、その変更を、逆の方法でクエリビューを介して伝搬することができる。これは、データベースにおけるビュー/更新の問題に類似し、更新伝搬プロセスは、論理的に、反対のクエリビューに対して更新を実行する。このために、更新ビューという概念を導入し、これらのビューは、エンティティに関してストアテーブルを記述し、反対のクエリビューと考えることができる。
しかし、多くの場合に、本当に関心を持っているのは、増分変更である。更新デルタビュー(Update Delta Views)は、対応するエンティティコレクションに対する変更に関して、テーブルに対する変更を記述するビュー(クエリ)である。したがって、エンティティコレクション(または、アプリケーションオブジェクト)に関する更新処理は、更新デルタビューを評価することによってテーブルに対する適切な変更を計算すること、および、その後これらの変更をテーブルに適用することを含む。
同様の方法で、クエリデルタビューは、基礎になるテーブルに対する変更に関して、エンティティコレクションに対する変更を記述する。無効化、より一般的には通知が、クエリデルタビューの使用を必要とする可能性があるシナリオである。
データベース内のビューのように、クエリとして表されたマッピングビューを、ユーザクエリを用いて構成することができ、このことは、マッピングのより一般化された取り扱いにつながる。同様に、クエリとして表されたマッピングデルタビューは、更新を扱うためのより一般的で的確なアプローチを可能にする。
一実施形態において、マッピングビューの能力を制限することができる。マッピングビューで使用されるクエリ構造は、Entity Frameworkによってサポートされる全てのクエリ構造のサブセットのみとすることができる。これにより、特にデルタ式の場合において、より単純かつ効率的なマッピング式が可能になる。
デルタビューを、代数変更計算スキーマを使用して、マッピングコンポーネント114内で計算して、更新(およびクエリ)ビューから更新(およびクエリ)デルタビューを作ることができる。代数変更計算スキーマのさらなる態様については後述する。
更新デルタビューは、Entity Frameworkが、計算アプリケーションによって行われるエンティティ変更を、データベース内のストアレベルの更新に自動的に変換することによって、更新をサポートすることを可能にする。しかし、多くの場合に、マッピングは、パフォーマンスおよび/またはデータの整合性のために追加の情報を用いて増補されなければならない。
一部の事例では、基礎になるストアテーブルの一部または全てに対して、エンティティにおける更新を直接マッピングすることは、望ましくないことがある。そのような事例では、更新を、ストアドプロシージャを介してファンネルし、データ検証を可能にすると同時に信頼境界を維持しなければならない。マッピングは、エンティティにおける更新およびクエリを処理するためのストアドプロシージャの指定を可能にする。
マッピングは、Object Services 131内のオプティミスティック並行性制御のサポートも提供することができる。特に、あるエンティティのプロパティを、タイムスタンプフィールドまたはバージョンフィールドなどの並行性制御フィールドとしてマークすることができ、ストアにおける並行性制御フィールドの値がエンティティ内の並行性制御フィールドと同一である場合にのみ、これらのオブジェクトに対する変更が成功する。両方のオプティミスティック並行性制御フィールドは、ストア固有レイヤ120ではなく、アプリケーションオブジェクトレイヤでのみ関連することに留意されたい。
一実施形態において、アプリケーション設計者は、MSLを使用して、マッピングの様々な態様を記述することができる。典型的なマッピング仕様は、次のセクションの1つまたは複数を含む。
1.Data領域は、クラス、テーブル、および/またはEDM型の記述を含むことができる。これらの記述は、既存のクラス/テーブル/型を記述することができ、または、そのようなインスタンスを生成するのに使用することができる。サーバ生成値、制約、主キーなどは、このセクションの一部として指定される。
2.Mappingセクションは、型空間の間の実際のマッピングを記述する。例えば、EDMエンティティの各プロパティは、テーブル(またはテーブルのセット)からの1つまたは複数の列に関して指定される。
3.Runtime領域は、実行を制御する様々なノブ、例えば、オプティミスティック並行性制御パラメータおよびフェッチ戦略を指定することができる。
(マッピングコンパイラ)
一実施形態において、ドメインモデル化ツールのマッピングコンポーネント172は、マッピング仕様をクエリビュー、更新ビュー、および対応するデルタビューにコンパイルするマッピングコンパイラを含むことができる。図9は、クエリビューおよび更新ビューを生成するためのMSLのコンパイルを図示する。
コンパイルパイプラインは、次のステップを実行する。
1.API 900から呼び出されるビュージェネレータ902が、オブジェクト←→エンティティ間のマッピング情報901(MSLを介して指定される)を変換し、O←→E(オブジェクト−エンティティ)空間内のクエリビュー、更新ビュー、および対応する(クエリおよび更新)デルタ式904を作成する。この情報は、メタデータストア908に置くことができる。
2.ビュージェネレータ906が、エンティティ←→ストア間のマッピング情報903(MSLを介して指定される)を変換し、E←→S(エンティティ−ストア)空間内のクエリビュー、更新ビュー、および対応する(クエリおよび更新)デルタ式907を作成する。この情報は、メタデータストア908に置くことができる。
3.依存性分析909コンポーネントは、ビュージェネレータ906によって作成されたビューを検査し、参照整合性および他のそのような制約に反しない更新について一貫した依存性順序(dependency order)910を決定する。この情報は、メタデータストア908に置くことができる。
4.次に、ビュー、デルタ式、および依存性順序908が、メタデータサービスコンポーネント(図1の112)に渡される。
(更新処理)
このセクションは、更新処理パイプラインを説明する。一実施形態において、Entity Frameworkは、2種類の更新をサポートすることができる。単一オブジェクト変更とは、オブジェクトグラフをナビゲートしている間に個々のオブジェクトに対して行われる変更である。単一オブジェクト変更について、システムは、現在のトランザクションにおいて作成、更新、および削除されたオブジェクトを追跡する。これは、オブジェクトレイヤにおいてのみ使用可能である。クエリベースの変更とは、例えばテーブルを更新するためにリレーショナルデータベースで行われるように、オブジェクトクエリに基づいて更新/削除ステートメントを発行することによって実行される変更である。図1の131などのObject Providerは、単一オブジェクト変更をサポートするように構成されることがあるが、クエリベースの変更をサポートするように構成されないことがある。一方、Entity Clientプロバイダ111は、クエリベースの変更をサポートすることができるが、単一オブジェクト変更をサポートすることはできない。
図10は、一例示的実施形態における更新処理の図を提供する。図10では、アプリケーションレイヤ1000のアプリケーションのユーザ1001は、そのようなアプリケーションによって操作されるデータに対する変更を保存する1002ことができる。オブジェクトプロバイダレイヤ1010では、変更リストがコンパイルされる1011。変更グループ化1012は、変更リストに対して実行される。制約処理1013は、メタデータストア1017に保存される制約情報および依存性モデル1022を作ることができる。拡張オペレーションが実行される1014。並行性制御式を生成し1015、並行性モデル1023をメタデータストア1017に保存することができる。オブジェクト−エンティティコンバータ1016は、オブジェクト−エンティティデルタ式1024をメタデータストア1017に保存することができる。
エンティティ式ツリー1018は、EDM Providerレイヤ1030に渡される。選択的更新スプリッタ1031は、必要に応じてある種の更新を選択し、分割することができる。EDMストアコンバータ1032は、エンティティ−ストアデルタ式1033をメタデータストア1036に保存することができる。クエリビューアンフォールディングコンポーネント1035は、クエリマッピングビュー1035をメタデータストア1036に保存することができる。エンティティ−ストア補正(compensation)1037を実行し、ストア式ツリー1038をストアプロバイダレイヤ1040に渡す。
ストアプロバイダレイヤ1040では、単純化(simplifier)コンポーネント1041が最初に動作し、続いてSQL生成コンポーネント1042が、データベース1044に対して実行されるSQL更新1043を生成することができる。全ての更新結果を、サーバ生成値の処理のためにEDMプロバイダレイヤ1030内のコンポーネント1039に渡すことができる。コンポーネント1039は、結果をオブジェクトプロバイダレイヤ内の同様のコンポーネント1021に渡すことができる。最後に、全ての結果または更新確認1003が、アプリケーションレイヤ1000に返される。
上述したように、更新デルタビューは、マッピングコンパイルの一部として生成される。これらのビューを更新プロセスで使用して、ストアでのテーブルに対する変更を識別する。
ストアでの関係テーブルのセットについて、Entity Frameworkは、ある順序で更新を有利に適用することができる。例えば、外部キー制約の存在は、変更が特定のシーケンスで適用されることを必要とする場合がある。依存性分析フェーズ(マッピングコンパイルの一部)は、コンパイル時に計算可能な全ての依存性順序付け要件を識別する。
一部の事例では、静的な依存性分析の技法は、例えば循環参照整合性制約(または自己参照整合性制約)に関して不十分であることがある。Entity Frameworkは、オプティミスティックアプローチを採用し、そのような更新の進行を可能にする。ランタイムで、循環が検出されると、例外を発生する。
図10に図示されるように、アプリケーションレイヤ1000におけるインスタンスベースの更新に関する更新処理パイプラインは、次のステップを有する。
変更グループ化1012:変更トラッカからの異なるオブジェクトコレクションに従って変更をグループ化する。例えば、コレクションPersonに関する全ての変更を、そのコレクションの挿入セット、削除セット、および更新セットにグループ化する。
制約処理1013:このステップは、ビジネスロジックが値レイヤで実行されないという事実を補正する全てのオペレーションを実行し、本質的に、オブジェクトレイヤが変更セットを拡張することを可能にする。カスケード削除補正および依存性順序付け(それぞれのEDM制約に対する)が、ここで実行される。
拡張オペレーションの実行1014:追加の(例えば削除)オペレーションが実行され、その結果、対応するビジネスロジックを実行できるようになる。
並行性制御式ジェネレータ1015:変更されたオブジェクトが不整合(stale)かどうかを検出するために、マッピングメタデータで指定されるタイムスタンプの列または列のセットをチェックする式を生成することができる。
オブジェクト−EDMの変換1016:挿入、削除、および更新のオブジェクトセットに関して指定された変更リストは、ここで、メタデータストア1017に格納されたマッピングデルタ式を使用して変換され、これらのマッピングデルタ式は、図9を参照して説明したマッピングコンパイルの後に格納される。このステップの後に、変更は、EDMエンティティに関してのみ表される式ツリー1018として使用可能である。
ステップ1018からの式ツリーは、次に、EDM−Providerレイヤ1030内のEDMプロバイダに渡される。EDMプロバイダでは、式ツリーが処理され、変更がストアに送られる。この式ツリー1018を別の方法で作成することもでき、アプリケーションがEDMプロバイダに対して直接にプログラミングすると、そのアプリケーションは、EDMプロバイダに対してDMLステートメントを実行することができることに留意されたい。そのようなDMLステートメントは、まず、EDMプロバイダによってEDM式ツリー1018に変換される。DMLステートメントまたはアプリケーションレイヤ1000から取得される式ツリーは、次の方法で処理される。
選択的更新スプリッタ1031:このステップでは、更新の一部が、挿入および削除に分離される。一般に、更新を、そのままでより下位のレイヤに伝搬する。しかし、ある事例では、デルタ式のルールがその事例について開発されていないこと、または正しい変換が実際にベーステーブルに対する挿入および/または削除をもたらすことのいずれかの理由で、そのような更新を実行することができない場合がある。
EDM−ストア変換1032:EDMレベル式ツリー1018、適切なマッピングからデルタ式を使用してストア空間に変換される。
クエリマッピングビューアンフォールディング1034:式ツリー1018は、何らかのEDMレベル概念を含むことがある。これらを除去するために、クエリマッピングビュー1035を使用して式ツリーをアンフォールドし、ストアレベルの概念のみに関するツリー1038を取得する。ツリー1038は、オプションとして、E−S補正コンポーネント1037によって処理される。
現在ストア空間の項目である式ツリー1038は、ここで、以下のステップを実行するストアプロバイダレイヤ1040内のストアプロバイダに与えられる。
単純化1041:式ツリーは、論理式変換ルールを使用することによって単純化される。
SQLの生成1042:式ツリーが与えられると、ストアプロバイダは、式ツリー1038から実際のSQL 1043を生成する。
SQLの実行1044:実際の変更が、データベースに対して実行される。
サーバ生成値:サーバによって生成された値は、EDPレイヤ1030に返される。プロバイダ1044は、サーバ生成値をレイヤ1030内のコンポーネント1039に渡し、コンポーネント1039は、マッピングを使用してこれらをEDM概念に変換する。アプリケーションレイヤ1000は、これらの更新1003をピックアップし、そのレイヤ内で利用される様々なアプリケーションおよびオブジェクトにインストールされるオブジェクトレベル概念に伝搬する。
多くの場合に、ストアテーブルは、例えばデータベースアドミニストレータ(DBA:Database Administrator)ポリシのために、直接更新可能ではない可能性がある。テーブルに対する更新は、ある妥当性チェックを実行できるようにするために、ストアドプロシージャを介してのみ可能であることがある。そのような情況では、マッピングコンポーネントは、「生の(raw)」挿入、削除、および更新のSQLステートメントを実行するのではなく、オブジェクト変更をこれらのストアドプロシージャへの呼出しに変換しなければならない。他の場合では、「ストアド」プロシージャを、EDP 1010またはアプリケーションレイヤ1000で指定することができ、その場合、マッピングコンポーネントは、変更されたオブジェクトをEDM空間に変換し、その後、適切なプロシージャを呼び出さなければならない。
これらのシナリオを可能にするために、MSLは、ストアドプロシージャをマッピングの一部として指定することを可能にし、さらに、MSLは、様々なデータベースの列をストアドプロシージャのパラメータにどのようにマッピングするかを指定するメカニズムもサポートする。
EDPレイヤ1010は、オプティミスティック並行性制御をサポートする。CDPが変更のセットをストアに送信するとき、変更される行が、別のトランザクションによって既に変更されている場合がある。CDPは、ユーザがそのような衝突を検出でき、その後、そのような衝突を解決できるような方法をサポートしなければならない。
MSLは、衝突検出の単純なメカニズム、すなわち、タイムスタンプ、バージョン番号、変更済みの列をサポートする。衝突が検出されると、例外が発生し、衝突しているオブジェクト(またはEDMエンティティ)は、アプリケーションによる衝突解決に使用可能である。
<例示的なマッピング要件>
マッピングインフラストラクチャは、有利には、様々なオペレーションをアプリケーション空間からリレーショナル空間に変換する能力を提供することができ、例えば、開発者によって記述されたオブジェクトクエリが、リレーショナル(ストレージ)空間に変換される。これらの変換は、データの過剰なコピーを伴わない効率的なものでなければならない。マッパー(mapper)は、次の例示的なオペレーションの変換を提供することができる。
1.クエリ:オブジェクトクエリは、バックエンドリレーショナルドメインに変換される必要があり、データベースから取得されるタプル(tuples)は、アプリケーションオブジェクトに変換される必要がある。これらのクエリを、セットベースのクエリ(例えば、CSQLまたはC# Sequence)またはナビゲーションベース(例えば、単純に参照に従うこと)とすることができることに留意されたい。
2.更新:アプリケーションによってそのオブジェクトに対して行われる変更は、元のデータベースに伝搬される必要がある。やはり、オブジェクトに対して行われる変更は、セットベースとするか、または個々のオブジェクトに対する変更とすることができる。考慮すべきもう1つの側面は、変更されているオブジェクトが、完全にメモリにロードされるか、または部分的にロードされるかである(例えば、オブジェクトにぶら下がっているコレクションが、メモリ内に存在しない場合がある)。部分的にロードされたオブジェクトに対する更新について、これらのオブジェクトがメモリに完全にロードされることを必要としない設計が、好ましいことがある。
3.無効化および通知:ミドルティアまたはクライアントティアで実行中のアプリケーションは、一部のオブジェクトがバックエンドで変更する際に、通知されることを望む場合がある。したがって、ORマッピングコンポーネントは、登録をオブジェクトレベルでリレーショナル空間に変換しなければならず、同様に、変更されるタプルに関するメッセージがクライアントによって受信されるとき、ORマッパーは、これらの通知をオブジェクト変更に変換しなければならない。WinFSが、そのような「通知」を、そのWatcherメカニズムを介してサポートすることに留意されたい。しかし、この場合は、マッピングは規定されており、Entity Frameworkは、非規定のマッピングに対するWatcherをサポートしなければならない。
4.通知と同様のメカニズムも、ミドルティアまたはクライアントティアで実行中のEntity Frameworkプロセスから不整合のオブジェクト(stale object)を無効化するために必要とされる。Entity Frameworkが、衝突する読み取り/書き込みを処理するためにオプティミスティック並行性制御のサポートを提供する場合、アプリケーションは、(トランザクションが、オブジェクトの読み取り/書き込みのためにアボートされないように)Entity Frameworkでキャッシュされるデータが適度に新しいことを保証し、できそうでない場合は、アプリケーションは、古いデータに関して決定をし、および/またはそのトランザクションを後にアボートすることができる。したがって、通知と同様に、ORマッパーは、データベースサーバからの「無効化」メッセージを、オブジェクト無効化に変換しなければならないことがある。
5.バックアップ/リストア/同期:エンティティのバックアップおよびミラーリングは、一部の実施形態に組み込むことができる2つの特徴である。これらの特徴の要件は単に、ORマッパーの観点から、エンティティに対する特殊化されたクエリに変換することができ、あるいは、そのようなオペレーションの特別なサポートを提供することができる。同様に、同期は、オブジェクト変更、衝突などをストアに変換するため、およびその逆に変換するために、ORマッピングエンジンからのサポートを必要とする。
6.並行性制御への関与:ORマッパーは、有利には、アプリケーションがオプティミスティック並行性制御を使用することができる異なる方法、例えば、タイムスタンプ値、フィールドの何らかの特定のセットを使用することなどをサポートすることができる。ORマッパーは、タイムスタンププロパティなどの並行性制御情報を、オブジェクト空間へ/オブジェクト空間から、リレーショナル空間から/リレーショナル空間へ変換しなければならない。ORマッパーは、ペシミスティック並行性制御(pessimistic concurrency control)(例えば、Hibernateのような)のサポートさえ提供することができる。
7.ランタイムエラー報告。本明細書で説明される例示的な実施形態では、ランタイムエラーは、通常、ストレージレベルで発生する。これらのエラーを、アプリケーションレベルに変換することができる。ORマッパーを使用して、これらのエラー変換を容易にすることができる。
<マッピングシナリオ>
Entity Frameworkがサポートできる例示的な開発シナリオを論じる前に、ORマッパーの様々な論理的な部分を説明する。一実施形態では、図11に図示されるように、ORマッピングに5つの部分がある。
1.オブジェクト/クラス/XML(別名、アプリケーション空間)1101:開発者は、好みの言語でクラスおよびオブジェクトを指定し、最終的に、これらのクラスは、CLRアセンブルにコンパイルされ、リフレクションAPIを介してアクセス可能である。これらのクラスは、永続メンバおよび非永続メンバも含み、また、言語固有の詳細をこの部分に含めることができる。
2.Entity Data Model Schema(別名、概念空間)1102:EDM空間は、開発者によって、データをモデル化するのに使用される。上述のように、データモデルの指定は、EDM型、アソシエーションを介するエンティティ間のリレーション、継承などに関して行われる。
3.データベーススキーマ(別名、ストレージ空間)1103:この空間では、開発者は、テーブルがどのようにレイアウトされるかを指定し、外部キーおよび主キーの制約などの制約もここで指定される。この空間における指定は、ベンダ固有の特徴、例えばネストされたテーブル、UDTなどを利用することができる。
4.オブジェクト−EDMマッピング1104:このマッピングは、様々なオブジェクトおよびEDMエンティティが互いにどのように関係するかを指定し、例えば、配列を1対多のアソシエーションにマッピングすることができる。このマッピングが自明(trivial)/恒等(identity)であることは必須ではなく、例えば、複数のクラスを所与のEDM型にマッピングすることができ、逆も可能であることに留意されたい。これらのマッピングにおいて冗長性/非正規化を有しても有しなくてもよいことに留意されたい(当然、非正規化を用いると、オブジェクト/エンティティの一貫性を保つという問題に突き当たる可能性がある)。
5.EDM−ストアマッピング1105:このマッピングは、EDMエンティティおよびEDM型がデータベース内の異なるテーブルにどのように関係するかを指定し、例えば、異なる継承マッピング戦略をここで使用することができる。
開発者は、空間1101、1102、または1103の1つまたは複数、およびそれらの間の1つまたは複数のマッピングの間の対応するマッピングを指定することができる。いずれかのデータ空間が欠けている場合、開発者は、その空間をどのように生成すべきかに関するヒントを与えるか、対応する規定のマッピングを用いてEDPがそれらの空間を自動的に生成すると期待することができる。例えば、開発者が、既存のクラス、テーブル、およびそれらの間のマッピングを指定する場合、EDPは、内部EDMスキーマ、ならびに対応するオブジェクト−EDMマッピングおよびEDM−ストアマッピングを生成する。当然、最も一般的な事例では、開発者は、完全な制御を有し、2つのマッピングとともにこれらの3つの空間内でデータモデルを指定することができる。下記の表は、EDPでサポートされる異なるシナリオを示す。これは、開発者がオブジェクト、EDMエンティティ、テーブルを指定できる事例、または指定できない事例の網羅的リストである。
Figure 2009544064
上記のEDPがサポートを望むシナリオに応じて、(規定の手法で、またはヒントが提供される場合はそのヒントに基づいて)指定されていないデータ空間およびマッピングを作成するツールを提供しなければならない。内部ORマッピングエンジンは、マッピングの5つの部分の全て(オブジェクト、EDM仕様、テーブル、OEマッピング、ESマッピング)が使用可能であると仮定する。したがって、マッピング設計は、最も一般的な事例、すなわち上記の表の(G)をサポートすべきである。
<マッピング仕様言語>
開発者の観点からのORマッパーの「可視」部分の1つは、マッピング仕様言語、すなわちMSLであり、開発者は、この言語を使用して、マッピングの様々な部分を互いにどのように結び付けられるかを指定する。ランタイムコントロール(例えば、遅延フェッチ、オプティミスティック並行性制御の問題)も、MSLを使用して指定される。
マッピングを3つの異なる概念に分割する。各概念は、マッピングプロセスの異なる懸念事項に対処する。これらの仕様を単一ファイルに格納するのか、複数ファイルに格納するのか、あるいは外部リポジトリ(例えば、データ仕様のための)を介して指定するのかについて言及しないことに留意されたい。
1.データ仕様:この領域では、開発者は、クラス記述、テーブル記述、およびEDM記述を指定することができる。これらの記述を、生成目的の仕様として提供することがあり、あるいは既に存在するテーブル/オブジェクトの仕様とすることができるであろう。
オブジェクトおよびテーブルの仕様を、我々のフォーマットで記述することができ、あるいは、何らかのインポートツールを使用して外部メタデータリポジトリからインポートすることができる。
サーバ生成値、制約、主キーなどの指定が、このセクションで行われる(すなわち、EDM仕様では、制約は型指定の一部として指定される)ことに留意されたい。
2.マッピング仕様:開発者は、様々なオブジェクト、EDM型、およびテーブルのマッピングを指定する。開発者は、オブジェクト−EDMマッピング、EDM−ストアマッピング、およびオブジェクト−ストアマッピングを指定することが可能である。このセクションは、データ仕様との冗長性を最小限にすることを試みる。
3つのマッピングケース(OS、ES、およびOE)の全てにおいて、各クラスのマッピングを、トップレベルで「直接に」または別のクラスの内部で「間接に」のいずれかで指定する。各マッピングでは、フィールド/プロパティが、別のフィールド、フィールドのスカラ関数、コンポーネント、またはセットにマッピングされる。更新を可能にするために、これらのマッピングは双方向である必要がある。すなわち、オブジェクトからストア空間へおよびその逆に進むことによって、どの情報も失われてはならない。オブジェクトが読み取り専用になるように、非双方向マッピングも許容することができる。
オブジェクト−EDMマッピング:一実施形態において、全てのオブジェクトのマッピングをEDM型に関して指定する。
EDM−ストアマッピング:一実施形態において、全てのエンティティのマッピングをテーブルに関して指定する。
オブジェクト−ストアマッピング:一実施形態において、全てのオブジェクトのマッピングをテーブルに関して指定する。
3.ランタイム仕様:一実施形態において、開発者は、実行を制御する様々なノブ、例えば、オプティミスティック並行性制御パラメータ、およびフェッチ戦略を指定することが可能である。
ここに、OPersonオブジェクトがアドレスのセットを含む事例のマッピングファイルの例がある。このオブジェクトは、EDM Entity型にマッピングされ、セットは、インラインセット型にマッピングされる。データは、2つのテーブル、すなわち、一方は人(person)用のテーブル、および他方はアドレス用のテーブルに格納される。前述したように、開発者が全てのオブジェクト、EDM型、およびテーブルを指定することは必須ではなく、上記の表のケース(G)を示しているに過ぎない。仕様は、特定の構文を記述することは想定されておらず、この仕様は、本明細書で開示される概念を中心とするシステムの設計を説明し、可能にすることを意図されたものである。
・オブジェクト仕様
Figure 2009544064
・EDM仕様
各CPersonがCAddressアイテムのコレクションを有するように、1つのエンティティ型CPerson、およびインライン型CAddressを指定する。
Figure 2009544064
・ストア仕様
2つのテーブル型、SPersonおよびSAddressを、それらのキー(tpidおよびtaid)とともに指定する。
Figure 2009544064
・オブジェクト−CDMマッピング
OPersonの後のマッピングは、オブジェクト型OPersonがEntity CPersonにマッピングされることを述べるものである。その後のリストは、OPersonの各フィールドがどのようにマッピングされるかを指定し、nameは名前にマッピングされ、addrsコレクションはアドレスコレクションにマッピングされる。
Figure 2009544064
・EDM−ストアマッピング
EDMエンティティ型、CPersonは、テーブル型SPersonに、そのキー属性および名前cname属性でマッピングされる。InlineType CAddressは、単純な手法でSAddressにマッピングされる。テーブルSAddressは、外部キーをSPersonに格納する場合があることに留意されたい。この制約は、マッピングではなく、テーブルのデータモデル仕様において指定されている可能性がある。
Figure 2009544064
・ランタイム仕様
開発者は、OPersonに対するオプティミスティック並行性制御を、pidフィールドおよびnameフィールドに対して行うことを指定することを望む場合がある。OAddressについて、開発者は、stateフィールドに対する並行性制御を指定することができる。
Figure 2009544064
<マッピング設計の概要>
HibernateおよびObjectSpacesなどの、ほとんどのORマッピング技術は、重要な短所を有する。すなわち、これらの技術は、比較的アドホックな手法で更新を処理する。オブジェクト変更をサーバにプッシュバックする必要があるとき、これらのシステムによって使用されるメカニズムは、ケースバイケースの原則で更新を扱い、これによりステムの拡張性が制限される。より多くのマッピングケースがサポートされるにつれて、更新パイプラインは、より複雑になり、更新のためにマッピングを構成することが難しくなる。システムが進化するにつれて、システムのこの部分は、正しいことを保証しながら変更することが非常に面倒になる。
そのような問題を避けるために、2つタイプの「マッピングビュー」を使用してマッピングプロセスを実行する、新規の手法を使用する。このマッピングビューの一方は、クエリを変換するのに役立ち、他方は更新を変換するのに役立つ。図12に示されるように、MSL仕様1201がEDPによって処理されると、EDPは、コアマッピングエンジンの実行のために、内部的に2つのビュー1202および1203を生成する。後でわかるように、これらのビューに関してマッピングをモデル化することによって、リレーショナルデータベースにおけるマテリアライズビュー技術に関する既存の知識を活用することができる。特に、正しく的確で拡張可能な手法で更新をモデル化するために、増分ビューの保守技法を利用する。次に、マッピングビューのこれら2つのタイプについて論じる。
クエリマッピングビュー(Query Mapping Views)、すなわちQMViewという考えを使用して、テーブルデータをオブジェクトにマッピングし、更新マッピングビュー(Update Mapping Views)、すなわちUMViewという考えを使用して、オブジェクト変更をテーブル更新にマッピングする。これらのビューは、これらが構築される(主な)理由ゆえに命名される。クエリビューは、オブジェクトクエリをリレーショナルクエリに変換し、入ってくるリレーショナルタプルをオブジェクトに変換する。したがって、EDM−ストアマッピングについて、各QViewは、EDM型が様々なテーブルからどのように構築されるかを示す。例えば、Personエンティティが、2つのテーブルT_PおよびT_Aの結合から構築される場合、Personをこの2つのテーブルの間の結合に関して指定する。クエリが、Personコレクションにおいて要求されると、PersonのQMViewは、PersonをT_PおよびT_Aに関する式に置換する。次いで、この式が適切なSQLを生成する。次いで、このクエリがデータベースで実行され、応答をサーバから受信すると、QMViewが、返されたタプルからオブジェクトをマテリアライズする。
オブジェクト更新を処理するために、QMViewを介して変更をプッシュし、リレーショナルデータベース用に開発された「ビュー更新」技術を活用することを想像することができる。しかし、更新可能なビューは、それらに対する複数の制限があり、例えば、SQL Serverは、1つのビュー更新を通じて複数のベーステーブルを変更することを許容しない。したがって、EDPで許容されるマッピングのタイプを制限する代わりに、本発明の実施形態は、制約がはるかに少ないマテリアライズビュー技術の別の態様、すなわちビュー保守を活用する。
システム内の各テーブルをEDM型に関して表すために、更新マッピングビュー、UMViewを指定する。すなわち、ある意味で、UMViewはQMViewの逆である。EDM−ストアの境界上のテーブル型のUMViewは、異なるEDM型を使用してそのテーブル型の列を構築する方法を表す。したがって、Personオブジェクト型をテーブル型T_PおよびT_Aにマッピングすることを指定した場合、T_PおよびT_Aに関してPerson型のQMViewを生成するだけではなく、Personオブジェクト型を与えられるとT_Pの行をどのように構築できるかを指定する、UMViewも生成する(T_Aについても同様である)。あるトランザクションが、いくつかのPersonオブジェクトを作成、削除、または更新する場合、更新ビューを使用して、そのような変更を、オブジェクトから、T_PおよびT_Aに対するSQLの挿入ステートメント、更新ステートメント、および削除ステートメントに変換することができる。UMViewにより、リレーショナルタプルがどのようにオブジェクトから(CDM型を介して)取得されるかがわかるため、UMViewは、これらの更新を実行する際に役立つ。図13および14は、高水準で、QMViewおよびUMViewがクエリ変換および更新変換でどのように使用されるかを示す。
オブジェクトに対するビューとしてテーブルをモデル化する、このアプローチが与えられると、オブジェクトに対する更新を元のテーブルに伝搬するプロセスは、オブジェクトが「ベースリレーション」でありテーブルが「ビュー」である、ビュー保守の問題に類似する。ビュー保守の問題に対処する膨大な量のデータベース文献があり、これを我々の目的のために活用することができる。例えば、ベースリレーションに対する増分変更を、ビューに対する増分変更にどのように変換できるかについて示す、重要な多数の研究がある。代数的アプローチを使用して、ビューに対する増分更新を実行するのに必要な式を判定する。この式をデルタ式と呼ぶ。増分ビューの保守に、手続き的アプローチではなく、代数的アプローチを使用することが適切であるが、これは、このアプローチが最適化および更新の単純化に対してより修正可能なものであるからである。
一般に、EDPのコアエンジンでマッピングビューを使用することの利点には、次のものが含まれる。
1.ビューは、オブジェクトとリレーションとの間のマップを表すための相当な能力(power)および柔軟性を提供する。ORマッピングエンジンのコア部分内の制限されたビュー式の言語から始めることができる。時間およびリソースが許す限り、ビューの能力を使用して、システムを体裁よく進歩させることができる。
2.ビューは、クエリ、更新、およびビュー自体で非常に的確に構成されることが知られている。構成可能性、特に更新に関する更新可能性は、以前に試みられたORマッピングアプローチの一部に関し、問題のある争点であった。ビューベースのテクノロジを採用することによって、そのような懸念事項を回避することができる。
ビューの考えを使用することによって、データベース文献の重要な多数の研究を活用できるようになる。
<更新に関するアーキテクチャ的階層化>
本発明の諸態様の実装において考慮すべき重要な問題は、クエリマッピングビューおよび更新マッピングビューを表すマッピングビュー言語(MVL)の能力が何であるかである。これは、EDMとストアとの間のマッピングとともにオブジェクトとEDMとの間の非規範的マッピング(non−prescriptive mapping)の全てをキャプチャするのに、ほぼ十分に強力である。しかし、全ての非リレーショナルCLRおよびEDMの概念をネイティブにサポートするMVLについて、全てのそのような構造についてデルタ式または増分ビューの更新ルールを設計する必要がある。特に、一例示的実施形態は、次の非リレーショナル代数の演算子/概念に関する更新ルールを必要とすることがある。
複合型−オブジェクト、タプルコンストラクタ、フラット化、複合定数などの部分にアクセスする。
コレクション−ネスト化およびアンネスト化、セット構築/フラット化、相互適用(cross apply)など。
配列/リスト−要素の順序付けは、リレーショナル構造ではなく、明らかに、順序付けリストの代数は、非常に複雑である。
モデル化される必要がある、CLR/C#の他のEDM構造およびオブジェクト構造。
これらの構造に関する増分更新のためのデルタ式を開発することできる。MVLでネイティブに構造の大きなセットをサポートすることに関連する主な問題は、これがコアエンジンをかなり複雑にする可能性があることである。一実施形態において、より望ましいアプローチは、「コアマッピングエンジン」が単純なMVLを処理するようにシステムを階層化し、このコアの上に非リレーショナル構造を階層化することである可能性がある。そのような設計について次に論じる。
ORマッピングに関するアプローチは、「階層化」によって上記の問題に対処する。コンパイル時に、まず、オブジェクト空間、EDM空間、およびデータベース空間内の各非リレーショナル構造(WinFSは、ネスティング、UDTなどをサポートする)を、対応するリレーショナル構造に所定の手法で変換し、次いで、リレーショナル構造の間で要求される非規定の変換を実行する。このアプローチを、階層化ビューマッピングアプローチと称する。例えば、クラスCPersonがアドレスのコレクションを有する場合、まず、このコレクションを1対多のアソシエーションとしてリレーショナル構造に変換し、次に、要求される非規定の変換をテーブルに対してリレーショナル空間で実行する。
(MVL分解)
MVLは、2つのレイヤ、すなわち、リレーショナル項(term)内での実際の非規範的マッピングを扱うレイヤと、リレーショナル項への非リレーショナル構造の規範的変換を扱うレイヤに分解される。前者の言語を、R−MVL(リレーショナル−MVL)と称し、対応するマッピングをR−MVLマッピングと称する。同様に、後者の(より強力な)言語を、N−MVL(非リレーショナル−MVL)と称し、マッピングを、N−MVLマッピングと称する。
一実施形態において、マッピングは、全ての非リレーショナル構造が、クエリパイプラインおよび更新パイプラインの終りにプッシュされるように、設計を構造化することによって提供される。例えば、オブジェクトマテリアライゼーションは、オブジェクト、配列、ポインタなどを構築することを含む場合があり、そのような「演算子」は、キューパイプラインの上にプッシュされる。同様に、更新がオブジェクトに対して行われるとき、パイプラインの始めで非リレーショナルオブジェクト(例えば、ネストされたコレクション、配列)に対する変更を変換し、その後、これらの変更を、更新パイプラインを通じて伝搬する。WinFSなどのシステムでは、更新パイプラインの終りでUDTに変換する必要がある。
非規定のマッピングをR−MVLに制限することによって、増分ビューの保守ルールに関するリレーショナル構造の小さいセットが存在する。そのようなルールは、リレーショナルデータベース用に既に開発されている。R−MVLで許容される単純化された構造/スキーマを、Relationally−Expressed Schema、すなわちRESと称する。したがって、一部の非リレーショナル構造が、(例えば)オブジェクトドメイン内でサポートされる必要があるとき、対応するRES構造、ならびにオブジェクトとRES構造との間の規定の変換を見つけ出し、例えば、RES空間内でオブジェクトコレクションを1対多のアソシエーションに変換する。さらに、非リレーショナル構造Nに対する更新を伝搬するために、Nからの挿入、削除、および更新をNの対応するRES構造に変換するデルタ式を見つけ出す。これらのデルタ式は、設計時に規定され、生成されており、例えば、コレクションに対する変更を1対多のアソシエーションにどのようにプッシュすべきか分かることに留意されたい。実際の非規定のマッピングに関するデルタ式は、リレーショナルデータベースに関する増分ビューの保守ルールを使用して自動的に生成される。この階層化方法論は、多量の非リレーショナル構造に関する一般化された増分ビューの保守ルールを見つけ出すという要件を取り除くだけではなく、内部更新パイプラインをも単純化する。
階層化マッピングアプローチが、通知パイプラインにおける利点と同様の利点も有することに留意されたい。タプルに対する変更をサーバから受信すると、それらをオブジェクトに対する増分変更に変換する必要がある。これは、これらの変更を伝搬するためにクエリマッピングビューを使用する必要があること、すなわち、QMViewのデルタ式を生成すること、を除いて更新パイプラインと同一の要件である。
更新および通知パイプラインを単純化することとは別に、MVLの階層化は、重要な利点を有する。すなわち、「上位言語」(オブジェクト、EDM、データベース)が、コアマッピングエンジンに重大な影響を与えることなく発展することを可能にする。例えば、新しい概念がEDMに追加される場合、行う必要があることは、それをその構造の対応するRESに変換する規定の方法を見つけ出すことだけである。同様に、非リレーショナル概念がSQL Server内に存在する(例えば、UDT、ネスティング)場合、これらの構造を規定の手法でMVLに変換して、MVLおよびコアエンジンに対する影響を最小限にすることができる。RES−ストアとストアテーブルとの間の変換は、必ずしも恒等変換(identity translation)ではないことに留意されたい。例えば、UDT、ネスティングなどをサポートするバックエンドシステム(WinFSバックエンドなど)において、この変換は、規定のオブジェクトリレーションに類似する。
図15は、マッピングビューのコンパイル時およびランタイムの処理を図示する。1501、1502、および1503によって示されるように、MSLにおいてデータモデルおよびマッピング仕様が与えられると、まず、非リレーショナル構造1511、1512、および1513に対応するRES 1521、1522、および1523と、これらの構造とRESとの間の規定の変換、すなわちN−MVLマッピングとを生成する。次いで、開発者によって要求される非規定のマッピングについて、クエリマッピングビューおよび更新マッピングビューと、R−MVLのオブジェクト−EDMと、R−MVLのEDM−ストアとを生成する。これらのマッピングビューは、R−MVL言語を使用してRESで動作することに留意されたい。このポイントで、クエリマッピングビューおよび更新マッピングビューのデルタ式(ビュー保守式)を生成し、そのようなルールは、リレーショナル構造用に開発済みである。QMViewのデルタ式が、通知のために必要であることに留意されたい。N−MVLマッピングについて、デルタ式は設計時に決定される。これは、これらのマッピングが規定されており、例えば、Addressコレクションを1対多のアソシエーションにマッピングするときに、対応するビュー保守式も設計するからである。
上記のビューおよび変換(N−MVLおよびR−MVL)が与えられると、これらを構成して、ストア1533内のテーブルに関してオブジェクト1531を表すことができるクエリマッピングビューと、オブジェクト1531に関してストア1533を表すことができる更新マッピングビューとを得ることができる。図に示されているように、1532内のEDMエンティティがランタイム用のマッピングから完全に除去されないようにマッピングビューを保つことを選択することができ、これらのビューを保持するためには、EDM制約を利用する或る種のクエリ最適化を可能にすることが必要である。もちろん、このことは、ランタイムに実際にEDMエンティティを格納することを意味するのではない。
図16は、様々なコンポーネントが上述のビューコンパイル処理を達成する方法を示す。アプリケーションが、API 1600を呼び出す。ビュージェネレータ1601、1603は、3つの機能に関与する。すなわち、非リレーショナル構造をRES構造に変換すること、クエリ/更新ビューを生成すること、更新および通知を伝搬するためのデルタ式を生成すること、という3つの機能に関与する。これらは、これらの機能を実行する際にメタデータ1602を使用することができる。OEビューコンポーザ1605は、オブジェクトおよびEDM情報を取り込み、EDM型に関するオブジェクトの代数式となるようにそれを構成する。同様に、ESビューコンポーザ1606は、テーブルに関するEDM型の代数式を作る。これらのビューを、さらにOSビューコンポーザ1607において構成して、メタデータストア1608内のビューの単一のセットを得る。上述したように、クエリ最適化の機会のために、ビューの2つのセットを保持することができる。最後に、依存性分析コンポーネント1604も、ESビュージェネレータの出力に対して動作して、依存性順序をメタデータストア1608に提供することができる。
(マップコンパイルの要約)
要約すると、クラス、EDM型、またはテーブルの仕様Mごとに、対応するRES、および、Mと対応するRESとの間の規定の変換を生成する。したがって、図15に図示されるように、次を生成する。
1.Mに対応するRES RES−CDM(M)、RES−Object(M)、またはRES−Store(M)と表される。
2.各仕様MをRESリレーションに関して表すための規定の変換。
3.上記RESリレーションをMに関して表すための規定の変換。
4.クエリマッピングビュー:EDM型に関してオブジェクトを表すOE QMView、ストア(テーブル)に関してEDM型を表すES QMViewの2つのビューがある。
5.更新マッピングビュー:オブジェクトに関してEDM型を表すOE UMView、EDM型に関してストアテーブルを表すES UMViewの2つのビューがある。
6.更新の増分保守のために、UMViewに対するデルタ式も生成する。
これらのビューを構成した後に、4つのマップで終わる。これらのマップは、メタデータストア1608に格納され、集合的にコンパイル済みマッピングビューと称される。
クエリマップ:CDM/テーブルに関してオブジェクト/CDMを表す。
更新マップ:CDM/オブジェクトに関してテーブル/CDMを表す。
更新デルタ式:CDM/オブジェクトのデルタに関してテーブル/CDMのデルタを表す。
通知デルタ式:CDM/テーブルのデルタに関してオブジェクト/CDMのデルタを表す。
依存性順序:様々な挿入、削除、更新のオペレーションを異なるリレーションに対して実行しなければならない順序。この順序は、更新プロセス中にデータベース制約に違反しないことを保証する。
(コレクションの例)
ここで、検討してきたPersonの例に関する規定の変換および非規定の変換のマッピングについて、簡潔に示す。クエリマッピングビューと更新マッピングビューとの両方を提示し、対応するビュー保守式については、下記でさらに検討する。
(RES)
OPersonを、RES構造のR_OPersonに変換し、R_OPersonは、nameおよびpidを単純に反映する。同様に、OAddressを、R_OAddressに変換する。アドレスのコレクションを変換するために、1対多のアソシエーション、R_OPerson_Addressを使用する。EDM構造についても同様である。テーブル(R_SPerson、R_SAddress)のRESは、SPersonおよびSAddressへの恒等マッピングである。これらのRESは、次の通りである。
Figure 2009544064
(クエリマッピングビュー)
オブジェクト−ストアマッピング(オブジェクト−EDMマッピングおよびEDM−ストアマッピングにまたがって構成される)を示す。
・RES空間における非規定ビュー
オブジェクトとEDM空間との間のマッピングは、本質的に恒等である。3つのビュー、R_CPerson、R_CAddress、およびR_CPerson_Addressの全てが、R_SPersonおよびR_SAddressに対する単純な射影である。
Figure 2009544064
Figure 2009544064
・規定変換(RES−オブジェクトに関するオブジェクト)
OPersonオブジェクトは、R_OAddressとR_OPerson_Addressの結合を行い、結果をネストすることによって、R_OPerson、R_OAddress、およびR_OPerson_Addressを使用して表される。
Figure 2009544064
・CPersonの構成されたビュー
単純化の後の構成された式は、以下とすることができる(この例に関し、テーブルとそのRES構造との間に恒等変換があることを想起されたい)。
Figure 2009544064
最終的なビューは、「直接」マッピングアプローチを使用することによってうられることが予想されるものを示す。RESアプローチの1つの利点は、更新パイプラインに関するデルタ式をみるときや、クエリマッピングビューのデルタ式が必要な通知パイプラインにおいても現れる。
(更新マッピングビュー)
・RES空間内の非規定のビュー
R_SPersonに関するUMViewは、単にR_CPersonに対する射影であり、R_SAddressは、R_CAddressを1対多のアソシエーションテーブル、R_CPerson_Addressと結合することによって構築される。CDMとオブジェクト空間との間のマッピングは、恒等である。
Figure 2009544064
Figure 2009544064
・規定の変換(オブジェクトに関するRES−オブジェクト)
オブジェクトをRESに変換し、その結果、更新をオブジェクト空間からRES空間にプッシュできるようにする必要がある。R_OPersonの規定の変換は、単純な射影であるが、R_OAddressおよびR_OPerson_Addressの変換は、人とそのアドレスとの間で結合を実行することによって達成される。これは、「ポインタ結合」または「ナビゲーション結合」である。
Figure 2009544064
・構成された更新マッピングビュー
上記のビューを構成して(およびいくつかの単純化を伴って)、次の構成された更新マッピングビューを得る。
Figure 2009544064
したがって、テーブルSPersonを、OPersonに対する単純な射影として表すことができ、SAddressは、OPersonをそのアドレスと結合することによって取得される。
(ビューの検証)
生成されたビューが満たす必要がある重要なプロパティは、それらのビューが「ラウンドトリップ」しなければならないことである。すなわち、情報の消失を全て防ぐために、エンティティ/オブジェクトが保存され、その後取り出される際に情報の消失がないことを保証しなければならない。言い換えると、全てのエンティティ/オブジェクトDについて、次を保証することを望む。
D = QMView(UMView(D))
ビュー生成アルゴリズムは、このプロパティを保証する。このプロパティが真である場合は、「クエリビューおよび更新ビューがラウンドトリップする」、または双方向であるとも言う。ここで、人−アドレスの例についてこのプロパティを実証する。単純にするために、RES空間におけるラウンドトリップに焦点を当てる。
・R_OPersonに関する検証
OPersonに関するクエリビューにおいてSPersonを置換することによって、次が得られる。
Figure 2009544064
簡約化して次を得る。
Figure 2009544064
これは、SELECT*FROM Personと同等である。
・OPerson_Addressに関する検証
R_OPerson_Addressについて、わずかに複雑である。次を有する。
Figure 2009544064
R_SAddressについて置換することによって、次が得られる。
Figure 2009544064
これは、次のように簡約化される。
Figure 2009544064
上記が実際はSELECT*FROM R_OPerson_Addressであることを示すために、外部キーの依存性、R_OPerson_Address.aid→R_OAddress.aidを有することが必要である。この依存性が成り立たない場合は、ラウンドトリップすることができない。しかし、セット値付きプロパティaddrsの範囲がR_OAddressなので、これは成り立つ。この外部キー制約は、次の2つの方法で表すことができる。
Figure 2009544064
この制約を上の式において置換することによって、次が得られる。
Figure 2009544064
・アドレスに関する検証
R_OAddressは、次のように与えられる。
Figure 2009544064
R_SAddressについて置換することによって、次が得られる。
Figure 2009544064
これを、次のように言い換えることができる。
Figure 2009544064
ここで、R_OPerson_Addressとの結合は、外部キー依存性、R_OAddress.aid→R_OPerson_Address.aidが成り立つ場合は不必要である。この依存性は、R_OAddressが、実存的にR_OPersonに依存する(すなわち、アドレスが合成物である)場合にのみ成り立つ。そうでない場合には、ビューはラウンドトリップしない。したがって、次の制約がある。
Figure 2009544064
したがって、次の式が得られる。
Figure 2009544064
<クエリ変換>
(クエリトランスレータ)
EDPクエリトランスレータ(EQT)は、マッピングメタデータを利用することによって、クエリをオブジェクト/EDM空間からプロバイダ空間に変換することに関与する。ユーザクエリを、様々な構文、例えば、eSQL、C# Sequence、VB SQLなどで表すことができる。EQTアーキテクチャを図17に示す。ここで、EQTの様々なコンポーネントを説明する。
パーサ1711は、eSQL、LINQ(Language Integrated Query)、C# Sequence、およびVB Sqlを含む複数の形式の1つで表されたユーザクエリを解析することによって、構文分析を実行する。全ての構文エラーが、この時に検出され、フラグを立てられる。
LINQについて、構文分析(および意味分析)は、言語(C#、VBなど)自体の構文分析フェーズと統合される。eSQLについて、構文分析フェーズは、クエリプロセッサの一部である。典型的に、言語ごとに1つの構文アナライザがある。
構文分析フェーズの結果が、解析ツリーである。このツリーは、次いで意味分析フェーズ1712に供給される。
パラメータバインダおよび意味分析コンポーネント1712は、ユーザクエリ内のパラメータを管理する。このモジュールは、クエリ内のパラメータのデータ型および値を追跡する。
意味分析フェーズは、構文分析フェーズ1711によって作成された解析ツリーを意味的に検証する。クエリ内の全てのパラメータは、この時点で既にバインドされていなければならない。すなわち、そのデータ型が知られていなければならない。全ての意味エラーが、ここで検出され、フラグを立てられる。成功の場合、このフェーズの結果が意味ツリーである。
LINQについて、前述したように、意味分析フェーズは、言語自体の意味分析フェーズと統合される。典型的には、言語ごとに1つの構文ツリーがあるので、言語ごとに1つのセマンティックアナライザがある。
意味分析フェーズは、論理的には次のものから構成される。
1.名前解決:クエリ内の全ての名前が、この時点で解決される。これは、エクステント、型、型のプロパティ、型のメソッドなどへの参照を含む。副作用として、そのような式のデータ型も推論される。このサブフェーズは、メタデータコンポーネントと対話する。
2.型のチェックおよび推論:クエリ内の式が型をチェックされ、結果の型が推論される。
3.検証:他の種類の検証が、ここで行われる。例えば、SQLプロセッサ内で、クエリブロックがグループ化の節(group−by clause)を含む場合、このフェーズを使用して、選択リストがグループ化のキー(group−by keys)または集約関数だけを参照できるという制約を実施することができる。
意味分析フェーズの結果は、意味ツリーである。この時、クエリは有効とみなされ、さらなる意味エラーは、後のクエリコンパイル中のどの時にも発生してはならない。
代数化フェーズ1713は、意味分析フェーズ1712の結果を取り込み、これを代数変形にとってより適した形式に変換する。このフェーズの結果は、論理拡張されたリレーショナル演算子ツリー、別名、代数ツリーである。
代数ツリーは、コアリレーショナル代数演算子、すなわち、選択、射影、結合、合併に基づき、これをネスト/アンネスト、ピボット/アンピボットなどの追加演算で拡張する。
クエリトランスレータのビューアンフォールディングフェーズ1714は、おそらくは再帰的に、ユーザクエリ内で参照される全てのオブジェクトに関するQMView式を置換する。ビュー変換プロセスの終りに、ストア項でクエリを記述するツリーを得る。
オブジェクトレイヤの事例では、ビューアンフォールディングが、ストアスペースまで行われている可能性があり(メタデータリポジトリ内に格納された、最適化されたOSマッピングがある場合)、あるいは、クエリツリーが、EDMレイヤまで変形されている可能性がある。後者の事例では、このツリーを取り込み、EDM概念をストア概念に変換するという要件を用いて、このツリーをビューアンフォールディングコンポーネントに再供給する必要がある。
変形/単純化コンポーネント1715は、プロバイダ1730固有とすることができ、あるいは、代替的な実施形態では、様々なプロバイダによって活用できるEDP汎用コンポーネントとすることができる。クエリツリーに対する変形を実行する少数の理由がある。
1.ストアにプッシュする演算子:EQTは、複合演算子(例えば、結合、フィルタ、集約)をストアにプッシュする。あるいは、そのような演算は、EDPで実装される必要がある。EDPの値マテリアライゼーションレイヤは、ネスティングなどの「非リレーショナル補償」演算だけを実行する。演算子Xをキューツリーの値マテリアライゼーションノードより下にプッシュすることができず、値マテリアライゼーションレイヤがオペレーションXを実行できない場合は、そのクエリは不正であると宣言する。例えば、クエリが、プロバイダにプッシュできない集約演算である場合、値マテリアライゼーションレイヤはいかなる集約も実行することができないので、そのクエリを不正と宣言する。
改善されたパフォーマンス:クエリの複雑さの軽減は重要であり、巨大なクエリをバックエンドストアに送信することを回避したい。例えば、WinFSでの現在のクエリの一部は、非常に複雑であり、実行に長い時間を要する(対応する手書きクエリは、1桁以上高速である)。
改善されたデバッグ可能性:より単純なクエリにより、開発者がシステムをデバッグし、何がおきているかを理解することがより容易になる。
変形/単純化モジュール1715は、クエリを表す代数ツリーの一部または全てを同等のサブツリーに変形することができる。これらのヒューリスティックベースの変形が、論理的であること、すなわち、コストモデルを使用して行われるのではないことに留意されたい。論理的変形の種類には、次の例示的なプロバイダ固有サービスを含めることができる。
サブクエリフラット化(ビューおよびネストされたサブクエリ)
結合除去
述部の除去および統合
述部のプッシュダウン
共通のサブ式の除去
射影のプルーニング
外部結合→内部結合の変形
左相関の除去
このSQL生成モジュール1731は、生成されるSQLがプロバイダに固有なので、プロバイダコンポーネント1730の一部である。単純化の後に、代数ツリーが、プロバイダに渡され、このプロバイダは、適切なSQLを生成する前に、プロバイダ固有の変形または単純化をさらに実行することができる。
クエリがサーバで実行された後に、結果は、EDPクライアントにストリーミングされる。プロバイダ1730は、アプリケーションによって使用可能なDataReaderを公開して、結果をEDMエンティティとして取得する。値マテリアライゼーションサービス1741は、これらのリーダーを取り込み、これらを関連するEDMエンティティに変換することができる(新しいDataReaderとして)。これらのエンティティをアプリケーションによって消費することがあり、あるいは、新しいDataReaderを上のオブジェクトマテリアライゼーションサービスに渡すことができる。
EQT 1700は、マテリアライゼーションをキューツリー内の演算子として表す。これは、通常のクエリ変換パイプラインが、EDM空間内でオブジェクトを作ることを可能にし、このオブジェクトは、その後、実際のマテリアライゼーションを実行するために特殊な帯域外のオペレーションを必要とするのではなく、ユーザに直接に供給されることができる。これは、部分的オブジェクトフェッチ、イーガローディング(eager loading)などのような、様々な最適化をユーザクエリに対して実行することも可能にする。
(クエリの例)
我々が展開していた、人−アドレスの例を検討されたい。ユーザが、次のクエリ(WA内の全ての人を見つける)を実行することを望むと仮定する。このクエリを擬似CSQLで次のように記述することができる。
Figure 2009544064
この時点でPersonのクエリビューを使用してビューアンフォールディングを行うと、次が得られる。
Figure 2009544064
このクエリは、バックエンドサーバに送信する前に単純化することができる。
Figure 2009544064
(メタデータ)
EQTは、クエリのコンパイル中および実行中に様々なメタデータを必要とする。このメタデータは、次を含む。
アプリケーション−空間メタデータ:ユーザクエリを検証するために意味分析中に必要な、エクステント/コレクション、型、型プロパティ、型メソッドに関する情報。
スキーマ−空間メタデータ:ビューコンパイル中に必要なエンティティコレクション、CDM型、およびプロパティに関する情報。変形に関するエンティティ間のリレーションシップおよびエンティティに対する制約についての情報。
ストレージ−空間メタデータ:上で説明したもの。
アプリケーション−>スキーママッピング:ビュー拡張に必要なビュー定義を表す論理演算子ツリー。
スキーマ−>ストレージマッピング:上で説明したもの。
(エラー報告パイプライン)
クエリ処理の様々な段階でのエラーは、ユーザが理解できる用語で報告されるべきである。様々なコンパイル時および実行時のエラーが、クエリ処理中に発生することがある。構文分析中および意味分析中のエラーは、ほとんどがアプリケーション空間内であり、ほんのわずかな特殊処理を必要とする。変形中のエラーは、ほとんどがリソースエラー(メモリ不足など)であり、多少の特殊処理を必要とする。コード生成中および後続のクエリ実行中のエラーは、適切に処理されることが必要な可能性がある。エラー報告における主要な課題は、より低いレベルの抽象化で発生するランタイムエラーを、アプリケーションレベルの意味のあるエラーにマッピングすることである。これは、より低いレベルのエラーを、ストレージマッピング、概念マッピング、およびアプリケーションマッピングを介して処理することが必要であることを意味する。
(クエリの例)
サンプルのOOクエリは、ワシントン州にアドレスを有する全ての人の名前をフェッチする。
Figure 2009544064
・ステップ1:リレーショナル項への変換
このクエリを、項またはR_OPerson、R_OPerson_Address、およびR_OAddressで表された次の純リレーショナルクエリに変換することができる。本質的に、必要な場合に様々なナビゲーションプロバティ(ドット「.」式)を結合式に拡張しようとしている。
Figure 2009544064
このクエリは、まだオブジェクトドメイン内であり、オブジェクトエクステントに関することに留意されたい。
・ステップ2:ビューアンフォールディング:ストア空間への変換
ここで、クエリをSQLに変換するためにビューアンフォールディングを行う。
Figure 2009544064
・ステップ3:クエリの単純化
ここで、一連の論理変形を適用して、このクエリを単純化する。
Figure 2009544064
次に、SAddressの主キー(aid)における余分な自己結合を除去し、次を得る。
Figure 2009544064
上記全てが、かなり単純である。ここで、SQL Serverに送信することができるクエリとなる。
<更新に関するコンパイル時の処理>
EDPは、アプリケーションが新しいオブジェクトを作成し、更新し、削除し、これらの変更を永続的に格納することを可能にする。ORマッピングコンポーネントは、これらの変更がバックエンドストア変更に正しく変換されることを保証する必要がある。前述したように、オブジェクトに関してテーブルを宣言する更新マッピングビューを使用する。そのようなビューを使用することによって、本質的に、更新の伝搬の問題が、ベースリレーションに対する変更がビューに伝搬される必要があるマテリアライズビュー保守の問題となった。ここでUMViewsの場合は、「ベースリレーション」はオブジェクトであり、「ビュー」はテーブルである。この問題をこの手法でモデル化することによって、リレーショナルデータベースの世界で開発されてきたビュー保守技術の知識を活用することができる。
(更新マッピングビューの生成)
クエリの場合と同様に、更新に関する多数のマッピング作業が、コンパイル時に実行される。クラス、EDM型、およびテーブルのRelationally Expressed Schemaとともに、これらの型と対応するRES構造との間の規定の変換を生成する。また、クラスのRES構造とEDM型との間、およびEDM型のRES構造とストアテーブルとの間で更新マッピングビューも生成する。
我々が展開していた、人−アドレスの例の助けを得て、これらのUMViewsを理解しよう。構築されたオブジェクト(R_OPerson、R_OAddress、R_OPerson_Address)に関するRES制約を想起されたい。
・更新マッピングビュー(オブジェクトのRESに関するテーブルのRES)
R_OPersonのUMViewは、単にR_SPersonに対する射影であり、R_SAddressは、R_OAddressを、1対多のアソシエーションテーブル、すなわちR_OPerson_Addressと結合することによって構築される。
Figure 2009544064
・規定の変換(オブジェクトに関するRES)
オブジェクトをRESに変換し、その結果、更新をオブジェクト空間からRES空間にプッシュできるようにする必要がある。「o2r」関数を使用して、オブジェクトの仮想メモリアドレスをpidキーおよびaidキーに変換する。この実装において、単純にオブジェクトのシャドウ状態からキーを得ることができる。R_OPersonに関する規定の変換は、単純な射影であるが、R_OAddressおよびR_OPerson_Addressに関する変換は、人とそのアドレスとの間の結合を実行することによって達成される。
Figure 2009544064
・構成された更新マッピングビュー
上記のビューを構成して(およびいくつかの単純化を伴って)、次の構成された更新マッピングビューを得る。
Figure 2009544064
したがって、テーブルSPersonを、OPersonに対する単純な射影として表すことができ、SAddressは、OPersonをそのアドレスと結合することによって取得される。
(デルタ式の生成)
アプリケーションが、そのオブジェクト変更をバックエンドに保存することを求めるとき、諸実施形態は、これらの変更をバックエンドストアに変換することができる。すなわち、オブジェクト(ベースリレーション)のデルタ式に関するテーブル(ビュー)のデルタ式を生成することができる。これは、ビュー生成/コンパイルプロセスのRES構造への分解が実際に役立つ領域である。非規定のマッピングに関するデルタ式は、比較的容易に生成することができる。これは、非規定のマッピングがリレーショナル空間にあり(RESは純粋にリレーショナルである)、リレーショナルデータベースにおける大量の研究がこの目標を達成するために行われてきたからである。例えば、データベース文献では、デルタ式ルールが、選択、射影、内部結合、外部結合、準結合、共用体、交差、および差などのリレーショナル演算子に関して表されるビューについて開発されてきた。非リレーショナル構造について、必要なものは、非リレーショナル構造をRES空間へ/から変換する規定のデルタ式を設計することだけである。
Personの例を用いてデルタ式を理解しよう。RES構造(例えば、R_SAddress)が2つのオブジェクトコレクション(R_OAddressとR_OPerson_Address)の結合として表される事例を検討されたい。そのようなビューに関するデルタ式は、次のルールを使用することによって得ることができる(結合ビューがV=R JOIN Sであると想定されたい)。
Figure 2009544064
この式では、i(X)およびd(X)は、リレーションまたはビューXに関する挿入または削除されたタプルを表し、Rnewは、全ての更新が適用された後のベースリレーションRの新しい値を表す。
したがって、ランタイムの更新を容易にするために、一例示的実施形態は、まず、コンパイル時に次のデルタ式を生成することができる。
1.更新されたオブジェクトコレクション1801のグループのデルタ変更式に関する、RESリレーション1811の規定のデルタ変更式1803。例えば、i(OPerson)に関するi(R_OPerson)。
2.RESリレーション1812のデルタ変更式に関するテーブル1802の規定のデルタ変更式1804。例えば、i(R_SPerson)に関するi(SPerson)。
3.オブジェクトのRESリレーションのデルタ式に関して表された、テーブルのRESリレーションのデルタ式1813。例えば、i(R_OPerson)に関するi(R_SPerson)。
上記の(1)、(2)、および(3)を構成して、オブジェクト1821(例えば、OPerson)のデルタ式に関するテーブル1822(例えば、SPerson)のデルタ式1820を取得することができる。この構成を図18に図示する。したがって、クエリの場合と同様に、コンパイル時に、オブジェクトからテーブルへの直接変換を有する。更新の場合は、実際にRES分解を活用してデルタ式を生成している(QMViewについて、この利点は、通知に適用可能である)。
更新に関するデルタ式は必要ないことに留意されたい。後でわかるように、モデル更新は、モデル更新を挿入および削除のセットに置くことによってモデル化されることが可能であり、後の処理ステップが、その後、変更を実際にデータベースに適用する前にそれらを更新に再変換する。このアプローチの理由の1つは、増分ビューの保守に関する既存の研究は、典型的には、更新に関するデルタ式がないことである。代替的に、そのような式が開発されるより複雑な実施形態が、実現可能である。
ビュー構成を実行した後、テーブルに関するデルタ式は、純粋に、オブジェクトコレクションとオブジェクトの挿入および削除のセットとに関するものとすることができ、例えば、i(SPerson)は、OPerson、i(OPerson)、およびd(OPerson)の項目である。これらのデルタ式の一部は、オブジェクトコレクションが計算されることを必要とし、例えば、i(OPerson)は、その計算にEPersonを必要とする。しかし、コレクション全体が、EDPクライアントでキャッシュされない場合がある(あるいは、コレクションの最も一貫した最新の値に対してこのオペレーションを実行したいことがある)。この問題に対処するために、対応するクエリマッピングビューを使用してオブジェクトコレクションをアンフォールドする。例えば、OPersonにQMViewを使用し、SPersonおよび必要な場合に他のリレーションに関してこれを表す。したがって、一実施形態において、コンパイルプロセスの終りに、SPersonに関する全てのデルタ式が、i(OPerson)、d(OPerson)、およびリレーションSPerson自体に関して表され、ランタイムに、OPersonの挿入および削除のセットが与えられると、サーバで実行可能な関連するSQLステートメントを生成することができる。
要約すると、テーブルのRES構造とオブジェクトとの間のQMViewおよびUMView、ならびにこれらの構造とテーブル/オブジェクトとの間の規定の変換が与えられると、次の例示的ステップを実行することができる。
1.上記のステップ1、2、および3で言及したデルタ式を生成する。
2.オブジェクト(OPerson)のデルタ式およびオブジェクトコレクション自体に関するテーブル(SPerson)のデルタ式を有するように、これらの式を構成する。
3.オブジェクトコレクションをそのQMViewを使用してアンフォールドして、オブジェクトのデルタ式およびテーブル自体に関するテーブル(SPerson)のデルタ式を取得する。すなわち、オブジェクトコレクションを除去する。諸実施形態において、このアンフォールディングを回避するか、コレクション全体がクライアントでキャッシュされることを知ることを可能にする、特別な事例が存在する可能性がある。
4.ランタイム作業を減らすように、式を単純化/最適化する。
本明細書で明示的に説明された特定の実施形態に加えて、他の態様および実施態様が、本明細書に開示された仕様を考慮することから当業者に明らかなるであろう。添付の特許請求の範囲の真の範囲および趣旨とともに、この仕様および図示された実装は単なる例示としてみなされるべきと意図されている。
本明細書で検討される例示的なEntity Frameworkのアーキテクチャを示す図である。 例示的なリレーショナルスキーマを示す図である。 例示的なエンティティデータモデル(EDM)スキーマを示す図である。 エンティティスキーマ(左)とデータベーススキーマ(右)との間のマッピングを示す図である。 エンティティスキーマおよびリレーショナルスキーマに対するクエリに関して表されたマッピングを示す図である。 図5のマッピングに関してマッピングコンパイラによって生成される双方向ビュー、すなわち、クエリビューと更新ビューを示す図である。 双方向ビューを介して更新を伝搬するマテリアライズビュー保守アルゴリズムを活用するプロセスを示す図である。 マッピングデザイナユーザインターフェースを示す図である。 クエリビューおよび更新ビューを生成するためにマッピング仕様言語(MSL)で指定されるマッピングのコンパイルを示す図である。 更新処理を示す図である。 オブジェクトリレーショナル(OR)マッパーの例示的な論理部分を示す図である。 MSL仕様で指定されたマッピングを処理するときのエンティティデータプラットフォーム(EDP)によるクエリビューおよび更新ビューの生成を示す図である。 クエリ変換におけるQMViewの使用を示す図である。 更新変換におけるUMViewの使用を示す図である。 マッピングビューのコンパイル時処理およびランタイム処理を示す図である。 ビューコンパイル処理における様々なコンポーネントの対話を示す図である。 マッピングメタデータを利用して、オブジェクト/EDM空間からデータベース空間へクエリを変換する、EDPクエリトランスレータ(EQT)のアーキテクチャを示す図である。 オブジェクトのデルタ式に関してテーブルのデルタ式を取得するための様々なデルタ式の構成を示す図である。

Claims (20)

  1. データサービスをアプリケーションに提供する方法であって、
    データベースに関連するデータベーススキーマに関して、アプリケーションに関連するアプリケーションスキーマの少なくとも一部を表す、クエリビュー1302を生成することと、
    前記アプリケーションスキーマに関して前記データベーススキーマの少なくとも一部を表す、更新ビュー1412を生成することと、
    前記データベース1303にクエリするのに、要求アプリケーションの代わりに前記クエリビューを利用することと、
    前記データベース1414を更新するのに、前記要求アプリケーションの代わりに前記更新ビューを利用することと
    を含むことを特徴とする方法。
  2. 前記要求アプリケーションから、前記データベースの更新に使用するためのデータを含むプログラミング言語のオブジェクトを受信すること1411をさらに含むことを特徴とする請求項1に記載の方法。
  3. 前記要求アプリケーションから、前記データベースの更新に使用するためのデータを含む作成命令、挿入命令、更新命令、または削除命令を受信すること1411をさらに含むことを特徴とする請求項1に記載の方法。
  4. 前記要求アプリケーションンから、前記データベースの更新に使用するためのデータを含む、データ操作言語(DML)の式を受信すること1411をさらに含むことを特徴とする請求項1に記載の方法。
  5. 前記データベースに対する更新を計算するのに前記更新ビューを利用することは、前記更新ビューにビュー保守アルゴリズムを適用することを含むことを特徴とする請求項1に記載の方法。
  6. 前記更新ビューにビュー保守アルゴリズムを適用することは、前記更新ビューに関するデルタ式を作成することを含み、さらに、前記デルタ式をクエリビューと組み合わせるためにビューアンフォールディングを使用すること1715を含むことを特徴とする請求項3に記載の方法。
  7. 前記データベースに対する更新を計算するのに前記更新ビューを利用することは、前記データベースの更新に使用するための受信したデータに、ビュー保守アルゴリズムを適用することを含むことを特徴とする請求項1に記載の方法。
  8. 前記アプリケーションスキーマは、クラス、リレーションシップ、継承、集約、および複合型をサポートすることを特徴とする請求項1に記載の方法。
  9. 前記更新ビューは、前記アプリケーションスキーマを前記データベーススキーマに相関させるマッピングを使用して生成されることを特徴とする請求項1に記載の方法。
  10. 前記クエリビューおよび前記更新ビューは、前記マッピングを使用して生成されることを特徴とする請求項9に記載の方法。
  11. データサービスをアプリケーションに提供するデータアクセスシステムであって、
    データベースに関連するデータベーススキーマに関して、アプリケーションに関連するアプリケーションスキーマの少なくとも一部を表すクエリビューを生成するコンポーネント110と、
    前記アプリケーションスキーマに関して前記データベーススキーマの少なくとも一部を表す更新ビューを生成するコンポーネント110と、
    前記データベースにクエリするのに、要求アプリケーションの代わりに前記クエリビューを利用するコンポーネント113と、
    前記データベースを更新するのに、前記要求アプリケーションの代わりに前記更新ビューを利用するコンポーネント113と
    を備えることを特徴とするデータアクセスシステム。
  12. 前記要求アプリケーションから、前記データベースの更新に使用するためのデータを含むプログラミング言語のオブジェクトを受信するコンポーネント113をさらに備えることを特徴とする請求項11に記載のデータアクセスアーキテクチャ。
  13. 前記要求アプリケーションから、前記データベースの更新に使用するためのデータを含む作成命令、挿入命令、更新命令、または削除命令を受信するコンポーネント113をさらに備えることを特徴とする請求項11に記載のデータアクセスアーキテクチャ。
  14. 前記要求アプリケーションからデータ操作言語(DML)の式を受け取るコンポーネント113をさらに備え、前記式は、前記データベースの更新に使用されるデータを備えることを特徴とする請求項11に記載のデータアクセスアーキテクチャ。
  15. 前記データベースに対する更新を計算するのに前記更新ビューを利用する前記コンポーネント113は、前記更新ビューにビュー保守アルゴリズムを適用することを特徴とする請求項11に記載のデータアクセスアーキテクチャ。
  16. 前記更新ビューにビュー保守アルゴリズムを適用することは、前記更新ビューのデルタ式を作成し、さらに、前記デルタ式をクエリビューと組み合わせるためにビューアンフォールディングを使用するコンポーネント113を備えることを特徴とする請求項15に記載のデータアクセスアーキテクチャ。
  17. 前記データベースに対する更新を計算するのに更新ビューを利用する前記コンポーネント113は、前記データベースの更新に使用するための受信したデータに、ビュー保守アルゴリズムを適用することを特徴とする請求項11に記載のデータアクセスアーキテクチャ。
  18. 前記アプリケーションスキーマは、クラス、リレーションシップ、継承、集約、および複合型をサポートすることを特徴とする請求項11に記載のデータアクセスアーキテクチャ。
  19. 前記アプリケーションスキーマを前記データベーススキーマに相関させるマッピングを生成するコンポーネント114をさらに備えることを特徴とする請求項11に記載のデータアクセスアーキテクチャ。
  20. 前記クエリビューおよび前記更新ビューは、前記マッピングを使用して生成されることを特徴とする請求項19に記載のデータアクセスアーキテクチャアーキテクチャ。
JP2009502890A 2006-03-23 2007-03-22 増分ビューの保守を用いたマッピングアーキテクチャ Active JP5064483B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US78567206P 2006-03-23 2006-03-23
US60/785,672 2006-03-23
US11/725,206 US7680767B2 (en) 2006-03-23 2007-03-16 Mapping architecture with incremental view maintenance
US11/725,206 2007-03-16
PCT/US2007/007261 WO2007112009A1 (en) 2006-03-23 2007-03-22 Mapping architecture with incremental view maintenance

Publications (3)

Publication Number Publication Date
JP2009544064A true JP2009544064A (ja) 2009-12-10
JP2009544064A5 JP2009544064A5 (ja) 2010-05-13
JP5064483B2 JP5064483B2 (ja) 2012-10-31

Family

ID=38534796

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009502890A Active JP5064483B2 (ja) 2006-03-23 2007-03-22 増分ビューの保守を用いたマッピングアーキテクチャ

Country Status (12)

Country Link
US (1) US7680767B2 (ja)
EP (1) EP2008206B1 (ja)
JP (1) JP5064483B2 (ja)
KR (1) KR101411083B1 (ja)
CN (1) CN101405729B (ja)
AT (1) ATE528720T1 (ja)
AU (1) AU2007231006B2 (ja)
BR (1) BRPI0709108A2 (ja)
CA (1) CA2643699C (ja)
MX (1) MX2008011651A (ja)
RU (1) RU2441273C2 (ja)
WO (1) WO2007112009A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009146388A (ja) * 2007-10-12 2009-07-02 Asml Masktools Bv 複雑なリレーショナルデータ構造用のプロパティテーブルビューと組み合わされたコンパクトな表示方法
JP2011154653A (ja) * 2010-01-28 2011-08-11 Nippon Telegr & Teleph Corp <Ntt> データモデリング方法及び装置及びプログラム
JP2012194602A (ja) * 2011-03-14 2012-10-11 Fujitsu Ltd データストア制御装置、データストア制御プログラムおよびデータストア制御方法

Families Citing this family (106)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101093495B (zh) * 2006-06-22 2011-08-17 国际商业机器公司 基于网状关系维的数据处理方法和系统
US8156149B2 (en) 2007-07-24 2012-04-10 Microsoft Corporation Composite nested streams
US8423955B2 (en) * 2007-08-31 2013-04-16 Red Hat, Inc. Method and apparatus for supporting multiple business process languages in BPM
US7996416B2 (en) * 2007-08-31 2011-08-09 Red Hat, Inc. Parameter type prediction in object relational mapping
US9058571B2 (en) * 2007-08-31 2015-06-16 Red Hat, Inc. Tool for automated transformation of a business process definition into a web application package
US8914804B2 (en) 2007-09-12 2014-12-16 Red Hat, Inc. Handling queues associated with web services of business processes
US8825713B2 (en) * 2007-09-12 2014-09-02 Red Hat, Inc. BPM system portable across databases
US7941398B2 (en) * 2007-09-26 2011-05-10 Pentaho Corporation Autopropagation of business intelligence metadata
US8429601B2 (en) * 2007-11-29 2013-04-23 Red Hat, Inc. Code completion for object relational mapping query language (OQL) queries
US8954952B2 (en) * 2007-11-30 2015-02-10 Red Hat, Inc. Portable business process deployment model across different application servers
US9336327B2 (en) * 2007-11-30 2016-05-10 Microsoft Technology Licensing, Llc Mapping and query translation between XML, objects, and relations
US8161000B2 (en) * 2008-01-04 2012-04-17 International Business Machines Corporation Generic bijection with graphs
US8166449B2 (en) * 2008-01-17 2012-04-24 Microsoft Corporation Live bidirectional synchronizing of a visual and a textual representation
US20090193004A1 (en) * 2008-01-30 2009-07-30 Business Objects, S.A. Apparatus and method for forming database tables from queries
US8209340B2 (en) * 2008-03-31 2012-06-26 Microsoft Corporation Efficient functional representation of result shaping
US8375014B1 (en) * 2008-06-19 2013-02-12 BioFortis, Inc. Database query builder
US8819046B2 (en) * 2008-06-24 2014-08-26 Microsoft Corporation Data query translating into mixed language data queries
US8364750B2 (en) 2008-06-24 2013-01-29 Microsoft Corporation Automated translation of service invocations for batch processing
US8375044B2 (en) * 2008-06-24 2013-02-12 Microsoft Corporation Query processing pipelines with single-item and multiple-item query operators
US8713048B2 (en) * 2008-06-24 2014-04-29 Microsoft Corporation Query processing with specialized query operators
US8364751B2 (en) 2008-06-25 2013-01-29 Microsoft Corporation Automated client/server operation partitioning
US8676749B2 (en) * 2008-07-31 2014-03-18 Sybase, Inc. Statement logging in databases
US8176272B2 (en) * 2008-09-04 2012-05-08 International Business Machines Corporation Incremental backup using snapshot delta views
US8285708B2 (en) * 2008-10-21 2012-10-09 Microsoft Corporation Query submission pipeline using LINQ
CN101419616A (zh) 2008-12-10 2009-04-29 阿里巴巴集团控股有限公司 一种数据同步方法及装置
US9047338B2 (en) 2008-12-17 2015-06-02 International Business Machines Corporation Managing drill-through targets
US8463743B2 (en) * 2009-02-17 2013-06-11 Microsoft Corporation Shared composite data representations and interfaces
US8738584B2 (en) * 2009-02-17 2014-05-27 Microsoft Corporation Context-aware management of shared composite data
US8065323B2 (en) * 2009-02-23 2011-11-22 Oracle International Corporation Offline validation of data in a database system for foreign key constraints
US8150882B2 (en) * 2009-03-03 2012-04-03 Microsoft Corporation Mapping from objects to data model
US8280924B2 (en) * 2009-03-26 2012-10-02 Microsoft Corporation Object-relational mapping with dynamic relational schemas
US9864796B2 (en) * 2009-06-24 2018-01-09 Microsoft Technology Licensing, Llc Databases from models
US8688752B2 (en) * 2009-08-28 2014-04-01 Adobe Sytems Incorporated Method and system for deploying a model-based application to an application server
CA2679786A1 (en) * 2009-09-16 2009-12-16 Ibm Canada Limited - Ibm Canada Limitee Conceptual representation of business processes for cross-domain mapping
US8667028B2 (en) * 2009-09-28 2014-03-04 At&T Global Network Services Deutschland Gmbh System and method to determine database schema impact
US8768947B2 (en) * 2009-12-22 2014-07-01 At&T Global Network Services Deutschland Gmbh System and method for implementing unique primary keys across enterprise databases
US8739118B2 (en) 2010-04-08 2014-05-27 Microsoft Corporation Pragmatic mapping specification, compilation and validation
US8433673B2 (en) * 2010-05-28 2013-04-30 Oracle International Corporation System and method for supporting data warehouse metadata extension using an extender
CN101840230B (zh) * 2010-06-04 2012-02-01 浙江中控技术股份有限公司 一种监控和管理数据的方法及系统
US8843843B2 (en) * 2010-06-25 2014-09-23 International Business Machines Corporation Method and system using heuristics in performing batch updates of records
CA2706741C (en) 2010-06-29 2011-12-13 Ibm Canada Limited - Ibm Canada Limitee Managing parameters in filter expressions
US8566318B1 (en) 2010-09-10 2013-10-22 Giovanni Sacco Process for physical database design based on transaction workload
US9460189B2 (en) 2010-09-23 2016-10-04 Microsoft Technology Licensing, Llc Data model dualization
US20120094600A1 (en) 2010-10-19 2012-04-19 Welch Allyn, Inc. Platform for patient monitoring
US9477730B2 (en) * 2010-10-28 2016-10-25 Microsoft Technology Licensing, Llc Web services runtime for dataset transformation
US8538963B2 (en) * 2010-11-16 2013-09-17 International Business Machines Corporation Optimal persistence of a business process
US8874601B2 (en) * 2010-12-17 2014-10-28 Sap Ag SADL query view—a model-driven approach to speed-up read-only use cases
US20120158763A1 (en) * 2010-12-17 2012-06-21 Microsoft Corporation Bulk operations
US8650151B2 (en) * 2011-01-24 2014-02-11 International Business Machines Corporation Transactional service pipeline
US9141403B2 (en) * 2011-02-15 2015-09-22 Microsoft Technology Licensing, Llc Data-driven schema for describing and executing management tasks in a graphical user interface
CN102104510B (zh) * 2011-03-01 2014-01-29 北京中创信测科技股份有限公司 一种数据视图处理方法和系统
US8601007B2 (en) * 2011-05-17 2013-12-03 Microsoft Corporation Net change notification based cached views with linked attributes
US9396284B2 (en) * 2011-05-18 2016-07-19 Oracle International Corporation Method and system for implementing efficient updatable relational views over XML data
WO2013013093A1 (en) * 2011-07-20 2013-01-24 Ness Computing, Inc. Method and apparatus for quickly evaluating entities
US8601016B2 (en) 2011-08-30 2013-12-03 International Business Machines Corporation Pre-generation of structured query language (SQL) from application programming interface (API) defined query systems
US9201558B1 (en) 2011-11-03 2015-12-01 Pervasive Software Inc. Data transformation system, graphical mapping tool, and method for creating a schema map
US9430114B1 (en) 2011-11-03 2016-08-30 Pervasive Software Data transformation system, graphical mapping tool, and method for creating a schema map
CN102521401B (zh) * 2011-12-24 2014-10-15 北京数码大方科技股份有限公司 数据视图的处理方法及装置
US8990187B2 (en) 2012-05-21 2015-03-24 Google Inc. Efficient top-down hierarchical join on a hierarchically clustered data stream
US9922303B2 (en) 2012-08-30 2018-03-20 Oracle International Corporation Method and system for implementing product group mappings
US9953353B2 (en) 2012-08-30 2018-04-24 Oracle International Corporation Method and system for implementing an architecture for a sales catalog
US10223697B2 (en) * 2012-08-30 2019-03-05 Oracle International Corporation Method and system for implementing a CRM quote and order capture context service
RU2515565C1 (ru) * 2012-10-22 2014-05-10 Закрытое акционерное общество Научно-производственное предприятие "Реляционные экспертные системы" Способ обновления структурированных данных в системе управления реляционными базами данных
US9098546B2 (en) * 2012-12-12 2015-08-04 Sap Se Advanced business query language
US9424304B2 (en) 2012-12-20 2016-08-23 LogicBlox, Inc. Maintenance of active database queries
CN103092998B (zh) * 2013-02-21 2017-02-08 用友网络科技股份有限公司 数据查询系统和数据查询方法
JP6343337B2 (ja) * 2013-03-15 2018-06-13 ニューラ ラブス コーポレイション 知識への1段階アクセスを提供する適応ユーザインターフェースを有する知的インターネットシステム
US10705802B2 (en) 2013-03-20 2020-07-07 Microsoft Technology Licensing, Llc Extensible and queryable strong types
US9734183B2 (en) * 2013-08-08 2017-08-15 Hong Kong Baptist University System and method for performing view updates in database systems
US9342555B2 (en) 2013-08-30 2016-05-17 International Business Machines Corporation Reporting tools for object-relational databases
WO2015035289A1 (en) * 2013-09-06 2015-03-12 Unisys Corporation Business suite framework for developing software applications
CN104519103B (zh) * 2013-09-30 2018-10-26 腾讯科技(北京)有限公司 网络数据的同步处理方法、服务器及相关系统
CN104598374B (zh) 2013-10-30 2017-12-01 国际商业机器公司 校正失效脚本的方法和设备
US20150193852A1 (en) * 2014-01-09 2015-07-09 Cgi Federal, Inc. System and method for multi-user evaluation of healthplan benefit based on prescription coverage annual cost
US9961011B2 (en) 2014-01-21 2018-05-01 Oracle International Corporation System and method for supporting multi-tenancy in an application server, cloud, or other environment
CN105138526B (zh) * 2014-05-30 2019-02-22 国际商业机器公司 用于为关系型数据库自动生成语义映射的方法和系统
US10594619B2 (en) 2014-06-23 2020-03-17 Oracle International Corporation System and method for supporting configuration of dynamic clusters in a multitenant application server environment
US10009225B2 (en) * 2014-06-23 2018-06-26 Oracle International Corporation System and method for supporting multiple partition edit sessions in a multitenant application server environment
WO2016011677A1 (en) * 2014-07-25 2016-01-28 Hewlett-Packard Development Company, L.P. Local database cache
US20160070541A1 (en) * 2014-09-08 2016-03-10 Unisys Corporation Conversion of business suite solutions
US10372697B2 (en) 2014-12-19 2019-08-06 International Business Machines Corporation Responding to data requests related to constrained natural language vocabulary terms
CN104731911A (zh) * 2015-03-24 2015-06-24 浪潮集团有限公司 一种数据表与实体类的动态映射及转换方法
US10078676B2 (en) * 2015-04-06 2018-09-18 Sap Se Schema evolution in multi-tenant environment
EP3079065B1 (en) 2015-04-08 2019-06-12 Huawei Technologies Co., Ltd. Redo-logging for partitioned in-memory datasets
US10872065B1 (en) * 2015-08-03 2020-12-22 Intelligence Designs, LLC System for managing relational databases using XML objects
US11138223B2 (en) * 2015-09-09 2021-10-05 LiveData, Inc. Techniques for uniting multiple databases and related systems and methods
US10970311B2 (en) * 2015-12-07 2021-04-06 International Business Machines Corporation Scalable snapshot isolation on non-transactional NoSQL
US10394775B2 (en) 2015-12-28 2019-08-27 International Business Machines Corporation Order constraint for transaction processing with snapshot isolation on non-transactional NoSQL servers
US10838940B1 (en) 2016-08-11 2020-11-17 MuleSoft, Inc. Balanced key range based retrieval of key-value database
US10437564B1 (en) 2016-09-16 2019-10-08 Software Tree, LLC Object mapping and conversion system
US11086895B2 (en) 2017-05-09 2021-08-10 Oracle International Corporation System and method for providing a hybrid set-based extract, load, and transformation of data
US10558658B2 (en) * 2017-05-16 2020-02-11 Sap Se Propagation of structured query language associations
US10521223B1 (en) * 2017-08-22 2019-12-31 Wells Fargo Bank, N.A. Systems and methods of a metadata orchestrator augmenting application development
US11138157B2 (en) * 2017-08-30 2021-10-05 Jpmorgan Chase Bank, N.A. System and method for identifying business logic and data lineage with machine learning
US10698884B2 (en) * 2017-11-06 2020-06-30 Bank Of America Corporation Dynamic lineage validation system
CN108038665B (zh) * 2017-12-08 2020-01-24 平安科技(深圳)有限公司 业务规则管理方法、装置、设备及计算机可读存储介质
US11106820B2 (en) * 2018-03-19 2021-08-31 International Business Machines Corporation Data anonymization
US11226854B2 (en) * 2018-06-28 2022-01-18 Atlassian Pty Ltd. Automatic integration of multiple graph data structures
US11036497B1 (en) 2018-10-24 2021-06-15 Cerner Innovation, Inc. Code assessment for quality control of an object relational mapper and correction of problematic cast functions
CN111798311A (zh) * 2020-07-22 2020-10-20 睿智合创(北京)科技有限公司 基于大数据的银行风险分析库平台、搭建方法及可读介质
CN111984977B (zh) * 2020-08-06 2022-07-19 成都安恒信息技术有限公司 一种基于运维审计系统的多租户权限鉴权方法
US20220147568A1 (en) * 2020-11-10 2022-05-12 Sap Se Mapping expression generator
EP4030313A1 (en) * 2021-01-13 2022-07-20 Sage Global Services Limited Sql statement generator
US11829735B2 (en) 2021-07-14 2023-11-28 Bank Of America Corporation Artificial intelligence (AI) framework to identify object-relational mapping issues in real-time
US20230091845A1 (en) * 2021-09-22 2023-03-23 Sap Se Centralized metadata repository with relevancy identifiers
US11797552B2 (en) 2021-10-01 2023-10-24 Sap Se System and method for selective retrieval of metadata artefact versions

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6058391A (en) * 1997-12-17 2000-05-02 Mci Communications Corporation Enhanced user view/update capability for managing data from relational tables
US6618733B1 (en) * 2000-04-11 2003-09-09 Revelink Inc. View navigation for creation, update and querying of data objects and textual annotations of relations between data objects
US6865569B1 (en) * 2001-08-22 2005-03-08 Ncr Corporation Determining materialized view coverage
US6915305B2 (en) * 2001-08-15 2005-07-05 International Business Machines Corporation Restructuring view maintenance system and method

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5504885A (en) * 1993-06-29 1996-04-02 Texas Instruments Incorporated O-R gateway: a system for connecting object-oriented application programs and relational databases
US5907846A (en) * 1996-06-07 1999-05-25 Electronic Data Systems Corporation Method and system for accessing relational databases using objects
US6175837B1 (en) * 1998-06-29 2001-01-16 Sun Microsystems, Inc. Object-relational mapping toll that processes views
US6718320B1 (en) * 1998-11-02 2004-04-06 International Business Machines Corporation Schema mapping system and method
US6421658B1 (en) * 1999-07-30 2002-07-16 International Business Machines Corporation Efficient implementation of typed view hierarchies for ORDBMS
US6795825B2 (en) * 2000-09-12 2004-09-21 Naphtali David Rishe Database querying system and method
US7263512B2 (en) * 2002-04-02 2007-08-28 Mcgoveran David O Accessing and updating views and relations in a relational database
US6954748B2 (en) * 2002-04-25 2005-10-11 International Business Machines Corporation Remote data access and integration of distributed data sources through data schema and query abstraction
AU2002953555A0 (en) * 2002-12-23 2003-01-16 Canon Kabushiki Kaisha Method for presenting hierarchical data
CA2438997A1 (en) * 2003-08-28 2005-02-28 Ibm Canada Limited - Ibm Canada Limitee System and method for carrying out legacy application transitions
US7739223B2 (en) * 2003-08-29 2010-06-15 Microsoft Corporation Mapping architecture for arbitrary data models
CN100498766C (zh) * 2003-12-02 2009-06-10 天津曙光计算机产业有限公司 基于数据库的海量文件管理系统与方法
US8150893B2 (en) * 2004-12-29 2012-04-03 Alcatel Lucent Method and apparatus for incremental evaluation of schema-directed XML publishing
US20060195460A1 (en) * 2005-02-28 2006-08-31 Microsoft Corporation Data model for object-relational data
US7685561B2 (en) * 2005-02-28 2010-03-23 Microsoft Corporation Storage API for a common data platform
US7853961B2 (en) * 2005-02-28 2010-12-14 Microsoft Corporation Platform for data services across disparate application frameworks
US7676493B2 (en) * 2005-09-07 2010-03-09 Microsoft Corporation Incremental approach to an object-relational solution
US7440957B1 (en) * 2005-11-30 2008-10-21 At&T Intellectual Property Ii, L.P. Updates through views
US7467128B2 (en) * 2006-02-15 2008-12-16 Microsoft Corporation Maintenance of materialized outer-join views

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6058391A (en) * 1997-12-17 2000-05-02 Mci Communications Corporation Enhanced user view/update capability for managing data from relational tables
US6618733B1 (en) * 2000-04-11 2003-09-09 Revelink Inc. View navigation for creation, update and querying of data objects and textual annotations of relations between data objects
US6915305B2 (en) * 2001-08-15 2005-07-05 International Business Machines Corporation Restructuring view maintenance system and method
US6865569B1 (en) * 2001-08-22 2005-03-08 Ncr Corporation Determining materialized view coverage

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009146388A (ja) * 2007-10-12 2009-07-02 Asml Masktools Bv 複雑なリレーショナルデータ構造用のプロパティテーブルビューと組み合わされたコンパクトな表示方法
JP2011154653A (ja) * 2010-01-28 2011-08-11 Nippon Telegr & Teleph Corp <Ntt> データモデリング方法及び装置及びプログラム
JP2012194602A (ja) * 2011-03-14 2012-10-11 Fujitsu Ltd データストア制御装置、データストア制御プログラムおよびデータストア制御方法

Also Published As

Publication number Publication date
US7680767B2 (en) 2010-03-16
EP2008206A4 (en) 2010-04-21
KR20090004881A (ko) 2009-01-12
ATE528720T1 (de) 2011-10-15
CA2643699C (en) 2014-01-07
BRPI0709108A2 (pt) 2011-06-28
CA2643699A1 (en) 2007-10-04
CN101405729B (zh) 2011-04-20
EP2008206B1 (en) 2011-10-12
US20070226196A1 (en) 2007-09-27
CN101405729A (zh) 2009-04-08
EP2008206A1 (en) 2008-12-31
MX2008011651A (es) 2008-09-22
RU2008137769A (ru) 2010-03-27
RU2441273C2 (ru) 2012-01-27
KR101411083B1 (ko) 2014-07-03
AU2007231006B2 (en) 2011-10-06
WO2007112009A1 (en) 2007-10-04
JP5064483B2 (ja) 2012-10-31
AU2007231006A1 (en) 2007-10-04

Similar Documents

Publication Publication Date Title
JP5064483B2 (ja) 増分ビューの保守を用いたマッピングアーキテクチャ
US10268742B2 (en) View maintenance rules for an update pipeline of an object-relational mapping (ORM) platform
US7647298B2 (en) Generation of query and update views for object relational mapping
US20100082646A1 (en) Tracking constraints and dependencies across mapping layers
Adya et al. Anatomy of the ado. net entity framework
US7912862B2 (en) Relational schema format
Wilkinson et al. The Iris architecture and implementation
KR101159311B1 (ko) 임의의 데이터 모델에 대한 맵핑 시스템 및 방법
US8131744B2 (en) Well organized query result sets
BRPI0708827A2 (pt) linguagem de consulta extensÍvel com suporte para tipos de dados ricos
WO2006112969A2 (en) Path expression in structured query language
US20060122973A1 (en) Mechanism for defining queries in terms of data objects
Rompf et al. A SQL to C compiler in 500 lines of code
D'silva et al. Keep your host language object and also query it: A case for SQL query support in RDBMS for host language objects
Vavrek Evolution Management in NoSQL Document Databases
Trung A Method for Live SQL Query Subscription in React Native
Dieker Efficient Integration of Query Algebra Modules into an Extensible Database Framework
Onose et al. Inverse functions in the aqualogic data services platform
Russo et al. Programming Microsoft LINQ in. NET Framework 4
Amer-Yahia et al. Bulk Loading into Databases: a Declarative Approach
Blow et al. Experiences with XQuery Processing for Data and Service Federation.

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100323

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100323

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120306

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120606

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120613

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120706

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120803

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120808

R150 Certificate of patent or registration of utility model

Ref document number: 5064483

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150817

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250