データ記憶システム内のデータを操作するシステムおよび方法
本発明は、データ記憶システムに関連するデータの操作を容易にするシステムおよび/または方法を提供し、データ記憶システムは、データモデルに関連する特徴および制約のうちの少なくとも一方を有する。データモデルは、データ記憶システムがデータベースに基づいたファイルシステムとなるようにデータ記憶システムを表すことができる。データ操作コンポーネントは、データモデルに関連するデータを操作することができ、そのようなシステムの完全性を保証するように制約および特徴の少なくとも一方を実施する。さらに、APIコンポーネントを起動して、データ記憶システム内のデータの操作を実現することができる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は一般に、データベースに関し、より詳細には、それぞれのデータ記憶システムに関連する、データモデルおよび/またはセキュリティ実装に基づくデータの操作を容易にするシステムおよび/または方法に関する。
【背景技術】
【0002】
コンピュータ技術の進歩(例えば、マイクロプロセッサの速度、メモリ容量、データ転送帯域幅、ソフトウェア機能など)は、一般に、様々な産業でのコンピュータの利用の増大に寄与した。サーバのアレイとしてしばしば構成される、より強力なサーバシステムさえも、例えば、ワールドワイドウェブなどの外部ソースから生じる要求に対するサービスを提供するために、一般的に提供される。
【0003】
利用可能な電子データ量が増大するにつれて、ユーザフレンドリかつ迅速なデータ検索および抽出を容易にする管理可能な方式で、そのようなデータを格納することがより重要となる。今日、一般的な手法は、電子データを1つまたは複数のデータベースに格納することである。一般には、典型的なデータベースは、例えばコンピュータプログラムがデータの所望の部分を迅速に検索および選択することができるようにデータが構築された、編成された情報の集合と呼ぶことができる。一般には、データベース内のデータが、1つまたは複数のテーブルを介して編成される。そのようなテーブルは、行および列の配列として構成される。
【0004】
さらに、テーブルは1組のレコードを含むことができ、レコードは1組のフィールドを含む。レコードは一般に、テーブル内の行として索引付けされ、レコードフィールドは一般に、列として索引付けされ、それによって添字の行/列対が、テーブル内の特定のデータを参照することができる。例えば、行は、販売取引、個人、またはプロジェクトに関する完全なデータレコードを格納することができる。同様に、テーブルの列は、同一の一般的データフォーマットを有する行の離散的部分を定義することができ、レコードのフィールドを定義することができる。
【0005】
独立したデータのそれぞれの個々の部分は、一般にあまり情報を与えるものではない。データベースアプリケーションがデータをより有用なものとする。データベースアプリケーションは、ユーザがデータを編成および処理する助けとなるからである。データベースアプリケーションは、ユーザがデータを比較、ソート、配列、結合、分離、および相互接続することを可能にし、その結果、有用な情報をデータから生成することができる。データベースの容量および汎用性が信じられないほど向上し、データベースを使用するほぼ無限の記憶容量が可能となった。しかし、典型的なデータベースシステムの提供する照会能力は、時間、ファイル拡張子、位置、およびサイズに基づく限られたものである。例えば、データベースに関連する膨大な量のデータを探索するために、典型的な探索は、ファイル名、ファイルサイズ、作成日などに限定され、そのような技法は不十分で不適切である。
【0006】
エンドユーザからのデータの作成は引き続き増大し、そのようなデータの発見、関係付け、操作、および格納を取り巻く問題および困難が増大している。エンドユーザは、文書を書き、写真を格納し、コンパクトディスクから音楽をリッピングし、Eメールを受信し、送信したEメールのコピーを保持したりする。例えば、音楽コンパクトディスクを作成する単純なプロセスでは、エンドユーザは数メガバイトのデータを作成することがある。コンパクトディスクから音楽をリッピングし、ファイルを適切なフォーマットに変換し、ジュエルケースカバーを作成し、コンパクトディスクラベルをデザインすることはすべて、データの作成を必要とする。
【発明の開示】
【発明が解決しようとする課題】
【0007】
ユーザを取り巻く問題だけでなく、開発者もデータに伴う同様な問題を抱えている。開発者は、パーソナルアプリケーションから高度に開発された企業アプリケーションにわたる無数のアプリケーションを作成する。作成および/または開発中に、開発者は、常にではないとしても頻繁にデータを集める。そのようなデータを得るときに、データを格納する必要がある。言い換えると、データの発見、関係付け、操作、および格納を取り巻く問題および困難は、開発者とエンドユーザのどちらにも影響を及ぼす。具体的には、従来のシステムおよび/またはデータベース内で、混乱させ、かつ/またはどんな不安定な条件も引き起こすことなく、そのようなデータをどう操作してもデータの完全性を保証しなければならない。
【課題を解決するための手段】
【0008】
以下に、本発明のいくつかの態様の基本的理解を与えるために、単純化した本発明の概要を提示する。この概要は、本発明の包括的な概要ではない。本発明の主要な要素または重要な要素を識別するものではなく、本発明の範囲を概略するものではない。その唯一の目的は、後で提示するより詳細な説明の前置きとして、本発明のいくつかの概念を単純化した形で提示することである。
【0009】
本発明は、特徴および/または制約に関連するデータモデルに少なくとも部分的に基づくデータの操作を容易にするシステムおよび/または方法に関する。データモデルは、データ記憶システム(例えば、データベースに基づいたファイル記憶システム)を表すことができ、そのようなモデルは、データ記憶システム内の情報を複合タイプのインスタンスとして表すことのできる、永続エンティティおよびサブエンティティの階層モデルである。データを操作することを容易にするために、データ操作コンポーネントは、特徴および/または制約のうちの少なくとも1つを実施および/または実装しながら、データ記憶システムに関連するデータ操作手続きを提供することができる。言い換えれば、データ操作コンポーネントは、任意の適切なデータ操作中にデータ記憶システム内のデータを永続させる。
【0010】
本発明の一態様によれば、データ操作コンポーネントは、少なくとも1つの手続き(procedure)を提供する手続きコンポーネントを含むことができ、この手続きはデータを操作する。データに対する手続きは、コピー、更新、置換、取得、設定、作成、削除、移動、修正などを実装することができる。さらに、データ操作コンポーネントは、データ記憶システムを表すデータモデルに関連する特徴および/または制約を実施および/または実装するエンフォーサコンポーネント(enforcer component)を含むことができる。データ操作に関連する特徴および/または制約を使用することにより、データモデルの完全性がデータ記憶システム全体にわたって維持される。
【0011】
本発明の別の態様によれば、データ操作コンポーネントは、アプリケーションプログラミングインターフェース(API)を使用することができる。APIは、クライアント(例えば、呼出し元)に対して公開することができ、1つまたは複数のプライベート実装ルーチンを呼び出してクライアント要求を実施することのできるパブリックサーフェスエリア(public surface area)である。一態様では、APIは、ルーチン(例えば、サブルーチンを含むことができない)を提供することができる。ユーザがデータ記憶システム内のデータを操作することに関連する少なくとも1つの手続きを呼び出し、かつ/または使用すると共に、それに関連する少なくとも1つの特徴および/または制約を維持することを可能にするように、APIを使用することができる。APIは、データ記憶システム内で適切なオペレーションを実施することを可能にする様々な関数および/または手続きを定義することのできるAPI定義コンポーネントをさらに使用することができる。
【0012】
さらに別の態様によれば、データ操作コンポーネントは、複数の同時呼出し元をサポートすると同時にデッドロックをなくすことを容易にするロッキングコンポーネント(locking component)を含むことができる。例えば、各呼出し元が他の呼出し元を待ち続けているのでどの要求も満たすことができず、したがってデッドロックが生じ得る形で共通の1組の資源の所有権を要求する複数の同時呼出し元があるというシナリオを仮定する。そのような場合、ロッキングコンポーネントはロックアップ(lock up)することができ(例えば、呼出し元がブロックされる)、そのようなケースから外れる唯一の方法は、呼出し元の1つを去らせることである。ロッキングコンポーネントは、個々の要求が原子的に成功または失敗することを複合ロッキングロジックが保証することができるように、複数の同時呼出し元もサポートすることができる。さらに、データ操作コンポーネントは、楽観的同時性(optimistic concurrency)技法を使用する楽観的同時性コンポーネントを含むことができ、そのような技法は、第1プロセスが第2プロセスとほぼ同様の時間に変更を行う可能性は低く、変更がデータ記憶システムにコミットされるまでロックが使用されないと仮定する。複数の呼出し元による同時アクセスが、ストアの状態についての特定の呼出し元の仮定を無効にした場合、無効な仮定を検出することができ、呼出し元がシステム状態の理解を再同期し、要求を再サブミットするまで、データ変更要求がシステムによって拒絶される。この技法は、命令を実行してロックを取り出す必要をなくすことによって、システムの性能を改善することができる。さらに、この技法は、長期ロックを取り出す必要をなくすことによって、システムのデッドロックを低減することができる。
【0013】
本発明の別の態様によれば、データ操作コンポーネントは、そのようなシステムで使用される様々なデータ操作に対応することのできるセキュリティ技法を提供する、セキュリティコンポーネントを含むことができる。セキュリティコンポーネントは、限定はしないが、ログイン、パスワード、生体的特徴(例えば、指紋、網膜走査、インダクタンスなど)、音声認識などのユーザプロファイルおよび/または様々なセキュリティ手段を使用して、データを操作する特定のエンティティの完全性および有効性を保証することができる。さらに、データ操作コンポーネントは、データ操作により特徴および/または制約が実施されないことになる場合にエラーコードを提供する、エラーコンポーネントを含むことができる。データ操作が不完全であることを知らせるようにエラーコードを実装することができ、エラーコードは、エラーを記述するテキストに対応することができる。本発明の他の態様では、データモデルに準拠しながら、データの操作を容易にする方法が提供される。
【0014】
以下の説明および添付の図面において、本発明のいくつかの例示的態様を詳細に説明する。しかし、こうした態様は、本発明の原理を利用することができる様々な方式のうちのいくつかを示すにすぎず、本発明は、そのようなすべての態様およびその均等物を含むものとする。本発明の他の利点および新規な特徴は、以下の本発明の詳細な説明を図面と共に考慮すると明らかになるだろう。
【発明を実施するための最良の形態】
【0015】
本明細書では、「コンポーネント」、「システム」、「インターフェース」などの用語は、ハードウェア、(例えば実行中の)ソフトウェア、および/またはファームウェアのいずれかのコンピュータ関連のエンティティを指すものとする。例えば、コンポーネントは、プロセッサ上で実行中のプロセス、プロセッサ、オブジェクト、実行可能ファイル、プログラム、および/またはコンピュータでよい。例えば、サーバ上で実行中のアプリケーションとサーバは、どちらもコンポーネントでよい。1つまたは複数のコンポーネントがプロセス内に存在することができ、コンポーネントを1つのコンピュータ上に配置し、かつ/または2つ以上のコンピュータ間に分散させることができる。
【0016】
全体を通して同様の要素を指すのに同様の参照番号が使用される図面を参照しながら、本発明を説明する。以下の説明では、説明の都合上、本発明の完全な理解を与えるために多数の特定の詳細を記載している。しかし、こうした特定の詳細なしに本発明を実施できることは明らかである。他の例では、本発明を説明しやすくするために、周知の構造および装置をブロック図形式で示す。
【0017】
次に図を参照すると、図1は、それぞれの特徴を有するデータモデルに少なくとも基づくデータの操作を容易にするシステム100を示す。データモデル102は、データベース構造に少なくとも基づく複合モデル(complex model)でよく、複合タイプのインスタンスとしてのデータ記憶システム内の情報の表現が可能となるように項目、副項目、プロパティ、および関係が定義される。データモデル102は、リッチ永続オブジェクトおよびオブジェクト間のリンクを作成し、管理するために、1組の基本ビルディングブロックを使用することができる。データモデル102内の整合性の最小単位として項目を定義することができ、整合性の最小単位を個々に保護、シリアル化、同期、コピー、バックアップ/復元することなどができる。項目はタイプのインスタンスであり、データモデル102内のすべての項目を、項目の単一グローバル範囲内に格納することができる。データモデル102は、少なくとも1つの項目および/またはコンテナ構造に基づくことができる。さらに、データモデル102は、ファイル内に項目として埋め込まれるリッチメタデータを公開する記憶プラットフォーム(storage platform)でよい。データモデル102は、上述の機能をサポートするためのデータベースに基づいたファイル記憶システムを表すことができ、任意の適切な特徴および/または属性を実装することができることを理解されたい。さらに、データモデル102は、コンテナ階層構造を使用するデータベースに基づいたファイル記憶システムを表すことができ、コンテナは、0個以上の項目を含むことのできる項目である。包含概念(containment concept)は、関連するクラス内部のコンテナIDプロパティを介して実装される。ストアが物理的組織的管理可能ユニットとなることができるように、ストアはコンテナでもよい。さらに、ストアは、階層構造内のコンテナのツリーに対するルートコンテナを表す。さらに、データモデル102は、少なくとも1つの永続エンティティと各エンティティごとの0個以上のサブエンティティの階層モデルを定義して情報を複合タイプとして表すデータベースに基づいたシステムであるデータ記憶システムを表すことができる。
【0018】
データ操作コンポーネント104は、データモデル102に関するデータを操作することができ、データモデル102の特徴に関連するデータの完全性および安定性を保証する。データモデル102は、データベースに基づいたファイル記憶システムに関連する任意の適切な特徴および/またはガイドラインを含むことができる。データ操作コンポーネント104は、安定システムを保証しながら(例えば、データモデル102によって表されるデータベースに基づいたファイル記憶システムに関連する任意の特徴に準拠しながら)、少なくとも1つのオブジェクトに対する移動、削除、コピー、作成、更新、置換などを実現することができる。例えば、データモデル102は、コンテナに関する各IDが固有であるような、特徴を有するデータベースに基づいたファイル記憶システムを表すことができる。この例を進めると、データ操作コンポーネント104は、コンテナに関するIDの固有性を実施および/または維持しながら、任意の適切なデータ操作(例えば、コピー、更新、置換、取得、設定、作成、削除、移動など)を使用することができる。上述した関数を本発明に関する制限とみなすべきではなく、データモデル102に関する任意の適切なデータ操作を使用すると共に、それに関する任意の適切な特徴を維持することができることを理解されたい。さらに、データ操作コンポーネント104は、データモデル102に基づいて(例えば、ストア、コンテナなどの少なくとも1つを使用して)階層構造に対応するデータを操作できることを理解されたい。
【0019】
本発明の一態様によれば、データの操作は、例えばアプリケーションプログラミングインターフェース(API)(図示せず)を使用することにより、ユーザからの入力に少なくとも部分的に基づくことができる。APIを使用することにより、データモデル102および対応するデータベースに基づいたファイル記憶システムに関する対話および/または操作を実装し、それに関連する任意の適切な特徴を維持/実施することができる。データ操作コンポーネント104、データ操作コンポーネント104に組み込まれた別々のコンポーネント、および/またはそれらの任意の組合せによって、APIを起動(invoke)することができる。
【0020】
システム100は、データ操作コンポーネント104をほぼ任意のオペレーティングシステムおよび/またはデータベースシステムに統合するために様々なアダプタ、コネクタ、チャネル、通信経路などを提供する、インターフェースコンポーネント106をさらに含む。さらに、インターフェースコンポーネント106は、データおよびデータ操作コンポーネント104との対話を実現する様々なアダプタ、コネクタ、チャネル、通信経路などを提供することができる。インターフェースコンポーネント106はデータ操作コンポーネント104に組み込まれるが、そのような実装はそのように限定されるわけではないことを理解されたい。例えば、インターフェースコンポーネント106は、システム100に関連してデータを受信または送信するためのスタンドアロンコンポーネントでよい。
【0021】
図2に、データ記憶システムの特徴内のデータの操作を容易にするシステム200を示す。データ記憶システム202は、少なくとも階層構造を使用することによってデータのインスタンスを複合タイプとして表す、データベースに基づいたファイル記憶システムでよい。データ記憶システム202は、データの操作中にデータ記憶システム202の特徴を保証するように実施される、少なくとも1つの特徴を含むことができる。データモデル(図示せず)はデータ記憶システム202を表すことができることを理解されたい。さらに、複合タイプのインスタンスとしての情報の表現が可能となるように、データ記憶システム202内で項目、副項目、プロパティ、および関係を定義することができる。データ記憶システム202は、データの形を記述することができ、データに関する一定の意味整合性を示唆する制約を宣言することができ、データ間の意味関連(semantic consistency)を定義することのできるデータモデルでよい。データ記憶システム202は、リッチ永続オブジェクトおよびオブジェクト間のリンクを作成し、管理するために、1組の基本ビルディングブロック(building block)を使用することができる。
【0022】
例えば、ビルディングブロックは、「Item」、「ItemExtension」、「Link」、および「ItemFragment」を含むことができる。「Item」は、データ記憶システム202内の整合性の最小単位として定義することができ、整合性の最小単位を個々に保護、シリアル化、同期、コピー、バックアップ/復元することなどができる。例えば、項目(item)は、整合性の最小単位でよいが、項目の周りに引かれる境界は、項目によって論理的に所有することのできるリンク、項目拡張(item extension)、項目フラグメント(item fragment)を含むことができる。したがって、項目は、テーブル内の行でよいが、項目行およびその2次部分のすべても参照する。言い換えれば、項目の削除、コピーなどを行うことができると共に、そのようなオペレーションが項目およびその部分のすべてに原子的に適用されることが保証される。項目はタイプのインスタンスであり、データ記憶システム202内のすべての項目を、項目の単一グローバル範囲内に格納することができる。「ItemExtension」は、エンティティ拡張を使用して拡張される項目タイプである。エンティティ拡張は、それぞれの属性(例えば、名前、拡張される項目タイプ、プロパティ宣言など)と共にスキーマ内に定義することができる。「ItemExtension」は、拡張される項目タイプに適用することのできる1組のプロパティをグループ化するように実装することができる。「Link」は、2つの項目インスタンス間の関連を定義するエンティティタイプであり、リンクが指示される(例えば、1つの項目がリンクのソースであり、他の項目がリンクのターゲットである)。「ItemFragment」は、項目タイプおよび/または項目拡張での大きな集合の宣言を可能とするエンティティタイプであり、集合の要素はエンティティでよい。データ記憶システム202は、複合タイプのインスタンスとしてのデータの表現を提供する、任意の適切なデータベースに基づいたファイル記憶システムを表すことができ、上記の記述を本発明の制限とみなすべきではないことを理解されたい。データ記憶システム202は、図1に示すデータモデル102の表現とほぼ同様でよい。
【0023】
データ操作コンポーネント204は、データ記憶システム202内のデータの操作を実現すると共に、そのようなデータ記憶システム202に関連する少なくとも1つの特徴を実施することができる。データ操作コンポーネント204は、限定はしないが、(例えば、複合タイプのインスタンスによって表される)データに対するコピー、更新、置換、取得、設定、作成、削除、移動などの操作を実現することができる。データ操作コンポーネント204は、図1に示すデータ操作コンポーネント104とほぼ同様でよいことを理解されたい。
【0024】
データ操作コンポーネント204は、データ記憶システム202に関連する特徴に従ってデータを操作するための特定の関数を提供する手続きコンポーネント206を含むことができる。言い換えれば、手続きコンポーネント206は、データ記憶システム202に関する操作技法を提供することができる。例えば、手続きコンポーネント206は、データおよび/または複合タイプのインスタンスとしてのデータの表現に対するコピー、移動、置換、設定、削除、作成、取得、更新を含むことができる。手続きコンポーネント206は、データ記憶システム202と共に実装することのできる任意の適切なデータ操作技法および/または関数を提供することができる。手続きコンポーネント206がデータ操作コンポーネント204に組み込まれているように示されているが、本発明はそのように限定されない。手続きコンポーネント206は、スタンドアロンコンポーネントでよく、またはデータ記憶システム202に組み込むことができる(例えば、データモデル概念のインスタンス化でよい)。
【0025】
データ操作コンポーネント204は、データの操作と共にデータ記憶システム202の少なくとも1つの特徴を組み込むためのエンフォーサコンポーネント208をさらに含むことができる。上述したように、データ記憶システム202は、データ記憶システム202内のデータの操作に関するガイダンスを提供することのできる任意の適切な数の特徴を含むことができる。言い換えれば、エンフォーサコンポーネント208は、データ記憶システム202に関するデータモデル制約を乱すことなくデータ記憶システム202内のデータの操作を可能にする。(図示するように)エンフォーサコンポーネント208はデータ操作コンポーネント204内に組み込むことができ、スタンドアロンコンポーネントでもよく、データ記憶システム202に組み込むこともでき、それらの任意の組合せでもよいことを理解されたい。
【0026】
例えば、データ記憶システム202は、(上述したように)項目、コンテナ、およびストア構造階層を使用することができる。エンフォーサコンポーネント208は、データ記憶システム202に関連するコンテナIDに関する特徴を実装することができる。例えば、エンフォーサコンポーネント208は、以下のうちの少なくとも1つを提供することができる。(1)項目の非ヌル項目IDをストアに含めるためのコンテナID(例えば、これは、以下で説明する操作関数および/または技法「CreateItem」、「CreateComplexItems」、「MoveItem」、および「ReplaceItem」で実装することができる)、(2)コンテナIDが(以下で説明する)操作関数および/または技法「UpdateItem」を使用して更新されない、(3)コンテナIDを「MoveItem」への呼出しを介して変更することができる。本発明は、上記の関数および/または技法の参照名に限定されないことを理解されたい。
【0027】
別の例では、エンフォーサコンポーネント208は、データの操作と共に、トランザクションセマンティックス(transaction semantics)を実装することができる。エンフォーサコンポーネント208は、以下のトランザクションセマンティクスを実装することができる。(1)トランザクションがアクティブでない場合、エラーコードを返すことができ、バッチ(batch)が処理されない。(2)オペレーションを検証および適用する試みが行われる。オペレーションを検証することおよび適用することが成功した場合、オペレーションが呼出し元によって供給されるトランザクションでコミットされないという効果と共に、制御を呼出し元に返すことができる。オペレーションを検証することまたは適用することが失敗した場合、トランザクションは失敗し、エラーが生じ、制御を呼出し元に返すことができる。失敗したトランザクションは、呼出し元がそのトランザクションに関する照会を発行することができるが、トランザクションをコミットできない(例えば、コミットに対する呼出しの結果がエラーとなることができる)ことを意味する。API要求が原子的に成功することができ、または完全に失敗することができることを理解されたい。複合APIは、基礎となる記憶テーブルに対する少なくとも1つの変更を行うことができ、複合の1組の整合性および/または完全性テストを実装することができる。さらに、システム200は、矛盾する状態および/または無効な状態のままには決してされないことを理解されたい。
【0028】
図3は、データ記憶システムに関連するデータの操作を用いたデータ完全性およびセキュリティの実施を容易にするシステム300を示す。データ記憶システム302は、少なくとも部分的にデータモデルに基づくデータベースに基づいたファイル記憶システムでよく、データは複合タイプのインスタンスとして表される。データ操作コンポーネント304は、データ記憶システム302に関連するデータ操作を提供することができる。データ操作コンポーネント304は、データ記憶システム302内のデータを操作することに関する少なくとも1つの関数および/または技法を提供することのできる手続きコンポーネント306を含むことができる。さらに、データ操作コンポーネント304は、それぞれのデータ記憶システム302についての少なくとも1つの特徴および/またはガイドラインを設けるエンフォーサコンポーネント308を含むことができ、そのような特徴は、データモデル制約をデータの操作と共に実装することを保証する。データ記憶システム302、データ操作コンポーネント304、手続きコンポーネント306、およびエンフォーサコンポーネント308は、図3のデータ記憶システム202、データ操作コンポーネント204、手続きコンポーネント206、およびエンフォーサコンポーネント308とほぼ同様でよいことを理解されたい。
【0029】
データ操作コンポーネント304は、データ記憶システム302内のデータを操作することに関連する少なくとも1つの手続きを格納し、かつ/またはそれにアクセスすることを容易にするためにデータストア310を含むことができる。例えば、データストア310は、APIで使用することのできる手続き(例えばコード)を格納することができ、データ記憶システム302に関連する少なくとも1つの特徴を維持しながら、データ操作をユーザが受信し、起動することができる。別の例では、データストア310は、データ記憶システム302および/または様々なAPIデータ(例えばサブルーチンなど)に関連する様々な特徴を格納することができる。1つの例では、データストア310はハードドライブでよい。データストア310は、例えば揮発性メモリまたは不揮発性メモリでよく、あるいは揮発性メモリと不揮発性メモリのどちらも含むことができる。例えば、限定はしないが、不揮発性メモリは、読取り専用メモリ(ROM)、プログラマブルROM(PROM)、電気的プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、またはフラッシュメモリを含むことができる。揮発性メモリはランダムアクセスメモリ(RAM)を含むことができ、これは外部キャッシュメモリとして働く。例えば、限定はしないが、RAMは、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、シンクロナスDRAM(SDRAM)、ダブルデータレートSDRAM(DDR SDRAM)、拡張SDRAM(ESDRAM)、シンクリンクDRAM(SLDRAM)、ラムバスダイレクトRAM(RDRAM)、ダイレクトラムバスダイナミックRAM(DRDRAM)、ラムバスダイナミックRAM(RDRAM)などの多くの形態で入手可能である。このシステムおよび方法のデータストア310は、限定はしないが、上記およびその他の任意の適切なタイプのメモリを含むものとする。さらに、データストア310は、サーバおよび/またはデータベースでよいことを理解されたい。
【0030】
データ操作コンポーネント304は、少なくとも1つのセキュリティ属性をシステム300に与えるために、セキュリティコンポーネント312をさらに含むことができる。例えば、セキュリティコンポーネント304は、特定のデータ操作関数および/または技法がユーザプロファイルと関連付けられるように、ユーザプロファイルを使用することができる。さらに、セキュリティコンポーネント304は、限定はしないが、ログイン、パスワード、生体的特徴(例えば、指紋、網膜走査、インダクタンスなど)、音声認識などの様々なセキュリティ手段を使用して、データを操作する特定のエンティティの完全性および有効性を保証することができる。セキュリティコンポーネント312はさらに、データ記憶システム302に関連する任意の適切なセキュリティ属性を使用することができる。言い換えれば、セキュリティコンポーネント312は、データ記憶システム302のセキュリティ制約が実施されるように、セキュリティ規定を実装することができる。
【0031】
図4に、データ記憶システムに関連するデータを操作するAPIの実装を容易にするシステム400を示す。データ記憶システム402は、それに関連する少なくとも1つの特徴を有するデータベースに基づいたファイル記憶システムでよく、データ記憶システム402をデータモデル(図示せず)によって表現することができる。データ操作コンポーネント404は、限定はしないが、それぞれデータ記憶システム402に対するコピー、移動、置換、設定、削除、作成、取得、データに対する更新を含むデータ操作を可能にする。データ記憶システム402およびデータ操作コンポーネント404は、それぞれ図3および2のデータ記憶システム302、データ記憶システム202、データ操作コンポーネント304、データ操作コンポーネント204とほぼ同様の機能を使用することができることを理解されたい。
【0032】
データ操作コンポーネント404は、エンティティがデータ記憶システム402内のデータを操作することを可能にする、APIコンポーネント406(本明細書では「API406」と呼ぶ)をさらに含むことができる。エンティティは、限定はしないが、ユーザ、コンピュータ、データベースなどでよい。API406は、ユーザ入力がデータ記憶システム402内のデータの操作に関するコマンドおよび/または関数であるようなユーザ入力を少なくとも受け取ることができる。データ操作コンポーネント404に組み込まれるように示したが、API406は、データ記憶システム402に組み込まれたスタンドアロンコンポーネント、および/またはそれらの組合せでよいことを理解されたい。さらに、API406は、上述した様々なコンポーネントを使用して、特定の手続きを使用するデータの操作を実現すると共に、それぞれデータ記憶システム402に対する特徴を実施することができる。
【0033】
図5に、データ記憶システムの特徴内のデータを操作するアプリケーションプログラミングインターフェース(API)の起動を容易にするシステム500を示す。データ記憶システム502は、少なくとも1つの定義特徴(defining characteristic)を有するデータベースに基づいたファイル記憶システムでよく、データ記憶システム502は、少なくとも部分的にデータモデル(図示せず)に基づくことができる。データ操作コンポーネント504は、それぞれデータ記憶システム502に対するコピー、移動、置換、設定、削除、作成、取得、データに対する更新を含むデータ操作を可能にする。データ記憶システム502およびデータ操作コンポーネント504は、それぞれ図4、図3、および図2のデータ記憶システム402、データ記憶システム302、データ記憶システム202、データ操作コンポーネント404、データ操作コンポーネント304、データ操作コンポーネント204とほぼ同様でよいことを理解されたい。
【0034】
データ操作コンポーネント504は、APIコンポーネント506(「API506」と呼ぶ)を含むことができる。API506は、ストアドプロシージャを実行することによってデータ操作(例えば、ストア内のデータの作成、更新、削除)を実現することができる。API506は、ユーザがデータ操作を実行することを可能にすると共に、データ記憶システム502に関連する特徴の完全性および/または純度(purity)を保証することができる。データの操作は、例えばAPI506を使用することにより、少なくとも部分的にユーザからの入力に基づくことができる。API506を使用することにより、データ記憶システム502に関する対話および/または操作を実装することができると共に、それに関連する任意の適切な特徴が維持/実施される。API506をデータ操作コンポーネント504、データ操作コンポーネント504に組み込まれた別々のコンポーネント、および/またはそれらの任意の組合せによって起動することができることを理解されたい。
【0035】
データ操作コンポーネント504は、完全性を保証する適切なロッキング戦略を使用することにより、1つまたは複数のアプリケーションでデータに同時にアクセスすることを容易にするロッキングコンポーネント508をさらに含むことができる。例えば、各呼出し元が他の呼出し元を待っている(例えば、デッドロックが生じる可能性がある)ので単一の要求も満たすことができないように共通の1組の資源の所有権を要求する複数の呼出しがあるというシナリオを仮定する。そのような場合、ロッキングコンポーネント508は、呼出し元をブロック(例えばロックアップ)することを可能にし、そのようなケースから外れる唯一の方法は、呼出し元の1つを去らせることである。この状況を回避するために、ロッキングコンポーネント508は、個々の要求が自動的に成功または失敗することを複合ロッキングロジックが保証することができるように、複数の同時呼出し元をサポートすることができる。さらに、ロッキングコンポーネント508は、デッドロックを検出し、それに反応することができる。ロッキングコンポーネント508は、ロッキングを介するデータ記憶システムのある部分(例えばストア)へのシリアル化アクセスを使用することにより、データの整合性を保つことができる。ロッキングは、グラニュラ(granular)レベルに対して行うことができ、所与の操作および/またはオペレーションによって影響を受けるデータ記憶システム内の資源(例えばストア)を、そのような操作および/またはオペレーションの期間中にロックすることができる。異なるオペレーションおよび/またはほぼ同様のオペレーションが異なる順序でロックする可能性があり、デッドロッキングが生じる可能性があることを理解されたい。例えば、ロッキングコンポーネント508は、性能に対する著しい損失を有するデッドロックを回避することができる。さらに、ロッキングコンポーネント508は、API506にデッドロックエラーコードを提供して、そのような状況を通知することができる。
【0036】
データ操作コンポーネント504は、楽観的同時性コンポーネント510を含むことができる。API506は、データ記憶システム502内のデータに対する操作および/または変更を適用するために楽観的同時性(optimistic concurrency)を使用することができる。同時性は、少なくとも2つのプロセスがほぼ同様のデータをほぼ同様の時間に更新しようと試みるときに生じる。楽観的同時性コンポーネント510は楽観的同時性を使用し、楽観的同時性は、別のプロセスがほぼ同様の時間に変更を行う可能性が低いことを仮定し、したがって、変更をデータ記憶システム(例えばストア)に対してコミットする準備ができるまで、ロックを行わない。そのような技法を使用することにより、楽観的同時性コンポーネント510はロック時間を削減し、より良好なデータベース性能を提供する。複数の呼出し元による同時アクセスが、ストアの状態についての特定の呼出し元の仮定を無効にさせる場合、無効仮定を検出することができ、呼出し元がシステム状態の理解を再同期し、要求を再サブミットするまで、データ変更要求がシステムによって拒絶される。
【0037】
例えば、楽観的同時性コンポーネント510は、各修正に伴って変化する項目に関連するトークン(token)を追跡することができる。トークンは、データがメモリに読み取られるときに呼出し元に渡される。呼出し元は、更新オペレーションに対するパラメータとしてトークンをストアに戻すことができる。ストアは、渡されたトークンをストア内の現トークン値と比較することができる。トークンが等しい場合、書込みが成功し、実施される。しかし、メモリ内の呼出し元のバージョンがストア内のものとは異なる値である場合、項目が別のアプリケーションによって修正されたことを知らせ、書込みは失敗する。
【0038】
別の例では、2つのアプリケーションによる同時アクセスによる失敗が検査される。以下の表では、項目を修正しようと試みるデータ記憶システム502上で同時に動作する2つのアプリケーションが存在する。
【0039】
【表1】
【0040】
API506は、それぞれの作成および/または更新オペレーションに関するトークン情報を返すことにより、この技法をサポートすることができる。例えば、create関数からの出力トークンパラメータを、「concurrencyToken」と命名することができる。API506は、更新および/または削除オペレーションに関する入力パラメータとして、トークン情報を取得することもできる。更新および/または削除オペレーションに渡されるトークン情報も、「concurrencyToken」と呼ぶことができる。パラメータは、入力パラメータと出力パラメータの両方でよいことを理解されたい。入力において、「concurrencyToken」は、オブジェクトがキャッシュ内に読み取られ、作成され、かつ/または更新されたときに受け取られる値である。これは、オブジェクトへの書込みがない場合のストア内の「期待値」でよい。出力において、ストアは、オペレーションが首尾よく完了した後に、オブジェクトの新しい「concurrencyToken」を返すことができる。
【0041】
「concurrencyToken」」パラメータは、BIGINT(例えば、64ビット整数)としてタイプ付けすることができる。パラメータは、データベースのタイムスタンプでよいが、値が増加することはできないことを理解されたい。バックアップから項目を回復することにより、時間に関して過去のステータスを引き起こすことができる。2つの「concurrencyToken」間のサポートされる唯一のオペレーションは、等号(equality)および/または不等号(inequality)に関するものである。この値は、ストアによってサポートされる様々なビューでも利用可能である。ビュー内の列名は、項目、項目拡張、リンク、および項目フラグメントに関する「LastUpdateLocalTS」である。セキュリティ記述子について、列名は「SDLastUpdateLocalTS」である。
【0042】
図6に、データ記憶システムの特徴内のデータを操作するAPIの起動を容易にするシステム600を示す。データ記憶システム602は、データモデルに少なくとも部分的に基づくデータベースに基づいたファイル記憶システムでよく、データが複合タイプのインスタンスとして表される。データ操作コンポーネント604は、データ記憶システム602に関連するデータ操作を提供することができる。データ操作コンポーネント604は、APIコンポーネント606(本明細書では「API606」と呼ぶ)を起動することができる。API606は、ストアドプロシージャを実行することによってデータ操作(例えば、ストア内のデータの作成、更新、および削除)を提供することができる。API606は、例えば、ユーザがデータ操作を実行することを可能にすると共に、データ記憶システム602に関連する特徴の完全性および/または純度を保証する。データ記憶システム602、データ操作コンポーネント604、およびAPI606は、それぞれ図5、4、3および2のデータ記憶システム502、402、302、および202、データ操作コンポーネント504、404、304、および204、API506、406とほぼ同様でよい。
【0043】
データ操作コンポーネント604は、API606によって使用される少なくとも1つのデータ構造を使用することのできる、データ構造コンポーネント608を含むことができる。例えば、データ構造コンポーネント608は、様々なシノニムおよび/または汎用リストタイプを使用することができる。1つの例では、以下の表が、シノニムおよび構造化照会言語(SQL)タイプと、リストタイプと、対応する共通言語ランタイム(CLR)とを定義することができる。以下の表は例であり、本発明はそのように限定されないことを理解されたい。
【0044】
【表2】
【0045】
【表3】
【0046】
データ構造コンポーネント608は、変更定義(change definition)タイプを使用することができる。API606およびデータ操作コンポーネント604は、プロパティグラニュラリティレベル(property granularity level)において更新オペレーションおよび/または修正を提供することができる。そのような技法を使用することにより、呼出し元は、変更後データを更新メソッドに渡すことができると共に、オペレーションのサイズを、変更されたデータのサイズに比例して保つ。グラニュラ更新は、ChangeDefinitionタイプを使用して記述することができる。データ記憶システム602においては、オブジェクトがストア内に永続し、テーブルの特定のセルが、Contactの格納インスタンス、または複合でよいプロパティを有するその他の複合タイプである。ChangeDefinitionタイプは、構造化オブジェクトに適用することのできる1組の変更をモデル化することができることを理解されたい。
【0047】
例えば、コンタクトの名前フィールドを更新するために、呼出し元は、ChangeDefinitionオブジェクトのインスタンスを作成し、オブジェクトに2つのノード(例えば、項目タイプを記述するノードと、フィールド名を含むノード)をポピュレートすることができる。次いで、クライアントは、ChangeDefinitionのコンパイル済みバージョンおよび対応する値のリストうちの少なくとも1つを、ストア内の修正を行うUpdateItemメソッドに渡すことができる。ほぼ同様のパターンを、項目拡張および/またはリンク内のフィールドを修正することに適用できることを理解されたい。
【0048】
ChangeDefinitionインスタンスは、ツリー構造を使用して各プロパティの変更をモデル化し、ツリー内の各レベルは、オブジェクトタイプ内のプロパティのネストされたレベルに対応することができる。プロパティ値に対する変更は、割当てノードと呼ばれるリーフノード(leaf node)によって表される。割当てノードタイプは割当てでよい。これらのノードは、プロパティへの割当てを表すことができ、プロパティ名を含むことができる。非リーフノード(ルートを除く)は、トップレベルプロパティおよび/または別のネストされたタイプのプロパティのメンバであるネストされたタイプを表す。これをトラバーサルノード(traversal node)と呼ぶことができる。トラバーサルノードは、ノードのリスト(割当てまたはトラバーサル)と、任意選択で、適切なキャストを実装するためにストアによって使用されるタイプとを含む。トラバーサルノードタイプは、PathComponentである。
【0049】
データ構造コンポーネント608は、トラバーサルノードおよび割当てノードを作成することによってChangeDefinitionを構築することができる。例えば、ChangeDefinitionによってノードを追加することができ、ChangeDefinitionクラスは、ノードを作成し、ツリーをウォークするメソッドを有する。1つの例では、ChangeDefinitionクラスはユーザ定義タイプ(UDT)ではない。別の例では、以下が定義済み割当てタイプである。1)スカラ値を深さにおいて割り当てる、2)ネストされたタイプのインスタンスを深さにおいて割り当てる、3)集合(例えば、マルチセットおよび/またはsqlList)を深さにおいて割り当てる。スカラプロパティ(例えば、XMLおよびFileStreamプロパティ)を置換できることを理解されたい。別の例では、そのようなスカラプロパティが部分的に更新される。ツリーが完了すると、データ構造コンポーネント608は、コンパイルメソッドを使用することができ、コンパイルメソッドは、バイナリフォーマットに変更することのできるプロパティの記述を返すことができる(例えば、コンパイル済み変更定義とも呼ばれる)。1つの例では、更新メソッド内のchangeDefinitionパラメータとして値を渡すことができる。
【0050】
以下は、データ構造コンポーネント608の実装の一例であり、本発明の限定とみなすべきではない。呼出し元は、ChangeDefinitionツリー内に記述されたプロパティに対応する値のリストを構築することに関与することができる。呼出し元が割当てノードをChangeDefinitionツリーに追加するとき、索引を割当てノードに割り当てることができる。索引はn−1に等しくすることができる(ただし、nはそれまでのツリーへの挿入数である)。例えば、第1割当てノードは索引0を得、第2割当てノードは索引1を得、というようにすることができる。索引をaddAssignmentの呼出し元に返すこともできる。次いで、呼出し元は、ChangeDefinitionツリーに追加されるプロパティの値を含むAssignmentValueオブジェクトを構築する。次いでAssignmentValueがAssignmentValueListに追加され、それによってAssignmentValueList内のその位置をChangeDefinitionツリーの割当てノード内の索引にマッピングすることができる。割当てノードをChangeDefinitionに追加することができ、AssignmentValueオブジェクトをリストの最後に付加する追加メソッドを使用して、対応するAssignmentValueオブジェクトをAssignmentValueリストに追加することができる。得られるAssignmentValueListは、更新メソッドのvalueListパラメータに渡される値である。
【0051】
データ操作コンポーネント604は、データ記憶システム602の特徴と矛盾するオペレーションおよび/またはデータ操作に関連するエラーを処理するためのエラーコンポーネント610をさらに含むことができる。例えば、API606は、現項目ドメインを保証する。項目ドメインとは、関連するプロパティ、エンティティ、および/またはサブエンティティと共に項目が定義し、かつ/または含む論理エリアである。項目ドメイン外部の項目が参照される場合(例えば、項目を介して、あるいはリンク、項目拡張、または項目フラグメントを介して)、項目が存在しないかのように見える。言い換えれば、「項目が存在しない」というエラーコードを使用することができる。
【0052】
エラーコンポーネント610は、エラーコードを起動することができる。エラーコードは、不完全なデータ操作を知らせるように実装することができ、エラーを記述するテキストに対応することができる。データ記憶システム602内のデータの操作に関する手続きおよび/またはオペレーションは、関数(例えば、削除、コピー、移動、取得、設定、更新など)に関するリターンコードとすることができる整数値を返すことができる。1つの例では、オペレーションが成功した場合には値は0でよく、オペレーションが失敗した場合には非0値でよい。それぞれの操作手続き/オペレーションおよび/または関数をエラーコードと関連付けることができる。例えば、API606は、テキストを表示するのではなく、エラーコードを返すことができる。エラーコードは、次いで、対応するテキストメッセージにリンクすることができ、必要なら、データベース内のテーブルからテキストメッセージを取り出すことができる。
【0053】
図7に、APIコンポーネントを使用してデータ記憶システム内のデータの操作を容易にするシステム700を示す。データ記憶システム702は、データモデルに少なくとも部分的に基づくデータベースに基づいたファイル記憶システムでよく、データは、複合タイプのインスタンスとして表される。データ操作コンポーネント704は、データ記憶システム702に関連するデータ操作を提供することができると共に、データ記憶システム702に関連する少なくとも1つの特徴の実施を保証する。データ操作コンポーネント704は、APIコンポーネント706(本明細書では「API706」と呼ぶ)を起動することができる。API706は、それぞれ受け取ったユーザ入力に対するストアドプロシージャを実行することによって、データ操作(コピー、更新、置換、取得、設定、作成、削除、移動など)を提供することができる。API706は、それぞれデータ操作要求/コマンドに対するユーザ入力を受け取ることができ、そのようなユーザ入力が実行されると共に、データ記憶システム702に関連する特徴の完全性および/または純度が保証される。データ記憶システム702、データ操作コンポーネント704、およびAPI706は、それぞれ図6、5、4、3、2のデータ記憶システム602、502、402、302、および202、データ操作コンポーネント604、504、404、304、および204、API606、506、406とほぼ同様でよいことを理解されたい。
【0054】
データ操作コンポーネント704は、(データ記憶システム702を開発するために使用される)どんなデータモデルの制約も無効にすることなく、ユーザがデータ記憶システム702に関連するデータを操作することを可能にする手続きおよび/またはオペレーションを定義する、API定義コンポーネント708を含むことができる。API定義コンポーネント708は、データ記憶システム702内のデータの操作に関連して任意の適切な関数および/または手続きを実装することができる。手続きについての以下の説明は一例であり、本発明はそのように限定されないことを理解されたい。さらに、以下の手続きは、名前、機能、プロパティを参照し、説明は、本発明を限定するべきではない。
【0055】
API定義コンポーネント708は手続きを使用して、データ記憶システム702内の項目を作成することができ、より具体的には、データ記憶システム702内のストア内の項目を作成することができる。例えば、以下の表は、作成項目手続きに関連するパラメータを示す。
【0056】
【表4】
【0057】
【表5】
【0058】
上記で示されるように、作成項目手続きは、データ記憶システム702に関する制約を保証することに少なくとも部分的に基づいて、作成項目手続きに関連する様々なエラーコードを有することができる。そのようなエラーコードは任意の適切なフォーマットでよく、コードは、対応するエラーを記述するテキストメッセージを表すことができる。例えば、ユーザがfile−backedフォルダを作成しようと試みるときにエラーコードを生成することができる。別の例では、タイプ汎用ファイルの項目がfile−backedでない場合に、エラーコードを生成することができる。
【0059】
作成項目の例示的手続きに続いて、各項目は、コンテナ項目のItemIdであるContainerIdと呼ばれるプロパティを有する。コンテナ項目は、ストア内に既に存在していなければならず、クライアントの接続ポイントから到達可能でなければならない。呼出し元が項目に関するCreationTimeを提供しない(例えば、値ヌルを提供する)場合、ストアは、CreationTimeを現在時間に設定する。呼出し元が項目に関するLastModificationTimeを提供しない(例えば、値ヌルを提供する)場合、ストアは、LastModificationTimeを現在時間に設定する。両方の値が提供されない場合、ストアは、item.CreationTimeを提供し、生成されるitem.LastModification時間はほぼ同様となる。
【0060】
別の例では、API定義コンポーネント708は、SecurityDescriptorを使用することができる。任意選択のSecurityDescriptorを含むことは、クライアントが新しい項目を自動的に作成することができ、セキュリティおよび検証パラメータを明示的に設定することができるための要件を満たす。SecurityDescriptorは、上述したセキュリティコンポーネント(図示せず)と共に機能できることを理解されたい。さらに、API定義コンポーネント708は、ツームストーン化項目(tombstoned item)の実装を定義することができる。手続きに渡されたものと厳密に同じ項目idを有するツームストーン化項目がストア内に存在する場合、手続きは失敗する。ツームストーン化項目が復活し、CreateItemに対するこの呼出しに渡された新しいデータが、復活した項目内に置かれる。
【0061】
上述したように、concurrencyTokenが返され、項目に対する後続の更新時に、クライアントが楽観的同時性検出を使用することが可能となる。返されるconcurrencyTokenは、項目に関するトークンである。別の例では、ファイルシステムエージェントがCreateItemを呼び出したとき、APIコンポーネント706は監査(audit)を生成しない。呼出しは、ユーザのコンテキストで行われ(例えば、exec_as_htoken)、アクセスチェックが、API706において行われる。このイベントに対するファイルシステム(例えば、従来型ファイル記憶システムであり、ビットベースのシステムが、同様のビットサイズのAPIをオペレーティングシステムと共に使用する)監査が、ファイルシステムエージェントによって生成される。さらに、API定義コンポーネント708は、file−backed項目に関して様々な実施を実現することができる。例えば、項目がfile−backed項目である(例えば、「isFileBacked」フラグが真に設定される)場合、以下が当てはまる。1)FileBackedItemを別のfilebacked項目ツリー内に含めることができず(例えば、親項目について、EntityState.RootFileBackedItemIdはNULLであるべきである)、2)「CompoundItem」タイプとなるように宣言される項目のみをfile backすることができる。
【0062】
API定義コンポーネント708は、少なくとも1つの複合項目を作成するための手続きを実装することができる。この手続きは、データ記憶システム702に関連するストア内の複数の項目を作成することができる。API定義コンポーネント708は1組の項目拡張と、各項目との1組のリンクを作成できることを理解されたい。タイプComplexItemは、不変のUDTである。これは本質的には、オペレーション/手続きに関連するデータを渡すためのコンテナである。以下は、ComplexItemの例示的定義である。
public class ComplexItem
{
Public ComplexItem(Item item,
SqlInt32promotionStatus,
SqlBoolean isFileBacked,
SqlString namespaceName,
SqlBoolean isGhost,
SyncEntityVersion syncInfo,
ItemSyncMetadata syncMetadata);
public void AddLink(Link link,
SyncEntityInformation syncInfo,
LinkSyncMetadata syncMetadata);
public void AddItemExtension(ItemExtension itemExtension,
SyncEntityVersion syncInfo);
public void AddItemFragment(ItemFragment itemFragment,
SyncEntityVersion syncInfo);
}
さらに、以下の表に、作成複合項目手続きに関連するパラメータの一例を示す。
【0063】
【表6】
【0064】
API定義コンポーネント708は、以下の機能を提供できることを理解されたい。トランザクションセマンティクスは、すべての項目が原子的に追加されるようなものとなる。関数の間に何らかの障害があった場合、複合項目はストアに挿入されない。complexItemsリストが空である場合、オペレーションはノーオペレーション(noop)であり、成功を返す。手続きに渡されるもののうちのいずれかと同じ項目IDを有するツームストーン化項目がストア内に存在する場合、手続きは失敗する。項目拡張リストは、ヌル、または0個以上のエントリを有する非ヌルでよい。リンクリストは、ヌル、または0個以上のエントリを有する非ヌルでよい。項目フラグメントリストは、ヌル、または0個以上のエントリを有する非ヌルでよい。concurrencyTokenが返され、後続の更新時にクライアントが楽観的同時性検出を使用することが可能となる。concurrencyToken値は、このオペレーションの結果として作成されるすべての項目、リンク、および項目拡張に適用する。file−backed項目に関して、以下を適用することができる。1)FileBackedItemを別のfilebacked項目ツリー内に含めることができず(例えば、親項目について、EntityState.RootFileBackedItemIdはNULLであるべきである)、2)「CompoundItem」タイプとなるように宣言される項目のみをfile backすることができる。
【0065】
API定義コンポーネント708は、データ記憶システム702内のストア内にリンクを作成するための手続きを実装することができる。例えば、以下の表は、リンクを作成するために使用される手続きに関連する様々なパラメータを示す。
【0066】
【表7】
【0067】
API定義コンポーネント708は、データ記憶システム702に関連する様々な特徴を保証することを理解されたい。例えば、ターゲット項目idは、(このリンクタイプについてのスキーマで指定されるような)正しいタイプの有効な項目を指すことができ、かつ/またはターゲット項目idは、ヌルでなければならない。CreateLinkを使用して、既存のデータ記憶システム702項目間の1つのリンクを作成することができる。手続きに渡されたものとほぼ同様のリンクidおよびソース項目idを有するツームストーン化リンクがストア内に存在する場合、手続きは失敗しないことを理解されたい。ツームストーン化リンクが復活することができ、CreateLinkに対するこの呼出しに渡された新しいデータが、復活したリンク内に置かれる。さらに、このリンクに対する後続の更新時にクライアントが楽観的同時性検出を使用することが可能となるようにconcurrencyTokenを返すことができる。
【0068】
API定義コンポーネント708は、ストア内の項目拡張を作成するために手続きを使用することができる。例えば、以下の表は、項目拡張を作成するために使用される手続きに関連する様々なパラメータを示す。
【0069】
【表8】
【0070】
この項目拡張に対する後続の更新時にクライアントが楽観的同時性検出を使用することができるように、上記で使用されるconcurrencyTokenを返すことができる。
【0071】
API定義コンポーネント708は、ストア内の項目を修正するための手続きを起動することができ、ストアは、データ記憶システム702に関する永続データである。以下の表は、項目手続きの修正に対応するパラメータおよび説明の一例である。
【0072】
【表9】
【0073】
API定義コンポーネント708は、ストア内のリンクを修正するための手続きを起動することができる。以下の表は、リンク手続きの修正に対応するパラメータおよび説明の一例である。
【0074】
【表10】
【0075】
リンクのソースは不変であり、このストアドプロシージャを使用することによって変更することはできない。リンクのターゲットは可変であり、UpdateLinkを呼び出すことによって変更することができる。ターゲット項目idのタイプは、ヌルまたは非ヌルでよい。非ヌルである場合、ストア内に存在する項目を指すことができ、リンクに対して宣言されたタイプと合致することができる。
【0076】
さらに、API定義コンポーネント708は、ストア内のItemExtensionを修正することができる。以下の表は、API定義コンポーネント708で使用される手続きの一例であり、様々なプロパティおよび/またはそれに関連する説明を示す。
【0077】
【表11】
【0078】
さらに、API定義コンポーネント708は、ストア内の項目を削除することを可能にするAPI706で、手続きを起動することができる。以下は、ストアから項目を削除する手続きの例示的パラメータおよび説明を伴う表である。
【0079】
【表12】
【0080】
項目が見つからなかった場合、手続きは成功を返す。項目をターゲットとするストア内の任意のリンクが、ヌルに設定されたTargetItemIdプロパティを有することができる。TargetItemIdをヌルに設定することは、呼出し元がリンクに対して有する有効な許可の如何に関わらず、成功することができる。項目を削除するとき、項目をソースとするリンク、項目に関連するItemExtensionおよびItemFragmentを削除することができる。項目が子を有さない(例えば、itemidに等しいコンテナidを有する項目が存在しない)場合、削除は成功することができる。1つの例では、項目のツリーのカスケード削除を強制する方法はない。このことは、呼出し元のみによって実装することができる。項目idがツームストーン化される場合、concurrencyToken/LastUpdateTS値の状態の如何に関わらず、成功が返される。concurrencyTokenが合致せず、項目がツームストーン化されない場合、エラーコードを返すことができる。ファイルシステムエージェントは、それ自体のコンテキストでDeleteItemを呼び出すことができる。API706ではアクセスチェックまたは監査は行われない。
【0081】
API定義コンポーネント708は、ストア内のリンクを削除する手続きを起動することができる。以下の表は、リンク手続きの削除に対応するパラメータおよび説明の一例である。
【0082】
【表13】
【0083】
API定義コンポーネント708は、データ記憶システム702内のストア内の項目拡張を削除するための手続きを使用することができる。以下の表は、本発明と共に使用される項目拡張手続きの削除に対応するパラメータおよび説明の一例である。
【0084】
【表14】
【0085】
さらに、API定義コンポーネント708は、ストア内にItemFragmentを作成するための手続きを使用することができる。以下の表は、ユーザがItemFragmentを作成することを可能にする手続きに対応するパラメータおよび説明の一例である。
【0086】
【表15】
【0087】
API定義コンポーネント708は、ストア内のItemFragmentを修正するための手続きを起動することができる。このストアドプロシージャを、タイプの名前およびItemFragmentプロパティの名前がストアドプロシージャの名前に含まれるように、タイプごとに生成することができる。より明確には、上述した「CreateItemFragment」を参照されたい。以下の表は、ストア内のItemFragmentの修正に対応するパラメータおよび説明の一例である。
【0088】
【表16】
【0089】
API定義コンポーネント708は、ストア内のItemFragmentを削除するための手続きを定義および/または実装することができる。以下は、データ記憶システム702内のItemFragmentを削除するための手続きの一例として様々なパラメータを示す表である。
【0090】
【表17】
【0091】
さらに、API定義コンポーネント708は、項目のセキュリティ記述子を得る手続きを使用することができる。以下の表は、データ記憶システム702内の項目のセキュリティ記述子を取得するための手続きに関連する様々なパラメータの一例である。
【0092】
【表18】
【0093】
concurrencyTokenが返され、セキュリティ記述子に対する後続の更新時にクライアントが楽観的同時性検出を使用することが可能となる。concurrencyTokenをセキュリティ記述子と関連付けることができる。1つの例では、セキュリティ記述子に関するconcurrencyTokenが、itemIdに対応する項目のconcurrencyToken値に関係付けられない。ファイルシステムエージェントは、それ自体のコンテキストでGetItemSecurityを呼び出すことができる。
【0094】
API定義コンポーネント708は、ストア内の項目のセキュリティ記述子を設定することができる。以下の表は、API706で使用されるセキュリティ記述子を設定するための手続きの一例であり、それに関連する様々なプロパティおよび/または説明を示す。
【0095】
【表19】
【0096】
API定義コンポーネント708は、項目をあるコンテナから別のコンテナに移動し、かつ/または項目のnamespaceNameを変更する手続きを使用することができる。以下の表は、そのような手続きに関連する様々なパラメータの一例である。
【0097】
【表20】
【0098】
移動すべき項目または新しいコンテナのいずれかが現在の接続ポイントから到達可能でない場合、手続きはエラーを返すことができる。同じ名前を有する項目がターゲットコンテナ内に既に存在している場合、このオペレーションは失敗する。この関数を使用するための3つの有効な方法がある。これらの使用法は、以下の表に示される。
【0099】
【表21】
【0100】
MoveItemがどのように呼び出されるかに関わらず(例えば、項目を移動し、かつ/または項目をリネームする)、項目に関する(concurrencyTokenで返される)LastUpdateTS値を更新することができる。ファイルシステムエージェントは、ユーザのコンテキストでMoveItemを呼び出すことができる。リネームされるファイル/ディレクトリに関するアクセスチェックまたは監査はない。新しい親に関して行われるアクセスチェックおよび監査が、ユーザが項目を新しい宛先に移動するためのアクセスを有するかどうかを判定する。
【0101】
API定義コンポーネント708は、項目を新しい項目で置換する手続きを使用することができ、新しい項目は異なるタイプでよい。以下の表は、そのような手続きに関連する様々なパラメータの一例である。
【0102】
【表22】
【0103】
ReplaceItemオペレーションを使用して、項目オブジェクトを別の項目オブジェクトで置換することができる。こうしたオブジェクトをOldItemおよびNewItemと呼ぶことができる。OldItemおよびNewItemは同じItemIdを有することができるが、異なるタイプを有することもできる。例えば、オペレーションが使用されるあるアプリケーションは、プロパティプロモーションである。以下の説明をReplaceItemオペレーションと関連付けることができる。1)コンテナIDを変更することができない(この機能を取得するために、呼出し元はMoveItemを呼び出さなければならない)。2)既存のnamespaceNameは変化しない。3)項目がfile−backedである場合、置換される項目をソースとするすべての項目を常に削除する。4)置換項目オペレーションが(ターゲットタイプ制約がもはや有効ではないので)無効とすべき項目をターゲットとするリンクを引き起こす場合、ReplaceItemは失敗する。5)置換項目オペレーションが(ソースタイプ制約がもはや有効でないので)無効とすべき項目をソースとするリンクを引き起こす場合、ReplaceItemは失敗する。6)新しい項目の変更ユニットがすべてデフォルト値に設定される。少なくとも2つの例外が存在することができる。項目がsyncに関与する場合、ChangeInformation.SyncInformation.CreationSyncVersion値を古い項目から新しい項目に持ち越すことができる。さらに、項目がsyncに関与し、file backedである場合、ファイルストリームに関する変更ユニットが、古い項目から新しい項目に持ち越される。7)すべてのファイルベースのプロパティを指定しなければならない。CreateItemとは異なり、ユーザによって設定されない場合、親フォルダからのFileプロパティの継承はない。8)file backed項目について、DeleteItemOwnedContentフラグが指定されない限り、どんなファイルストリームデータも修正されない(以下の表を参照)。
【0104】
【表23】
【0105】
さらに、9)ReplaceItemは、項目がGeneric ItemタイプからCompound Itemタイプに切り替わることを許可せず、逆もまた同様である(以下の表を参照)。
【0106】
【表24】
【0107】
図8に、インテリジェンスを使用して、それぞれの特徴を有するデータモデルに少なくとも部分的に基づくデータの操作を容易にするシステム800を示す。システム800は、上述した図で説明したそれぞれのコンポーネントとすべてほぼ同様でよい、(データモデル表現によって表すことのできる)データ記憶システム802、データ操作コンポーネント804、およびインターフェース106を含むことができる。システム800は、インテリジェントコンポーネント806をさらに含む。インテリジェントコンポーネント806はデータ操作コンポーネント804によって使用され、データ記憶システム802に関連する少なくとも1つの特徴に従うデータの操作(例えば、コピー、更新、置換、取得、設定、作成、削除、移動など)を容易にすることができる。例えば、インテリジェントコンポーネント806を使用して、データ記憶システム802に関連する特徴を分析することができ、かつ/またはそれぞれデータ記憶システム802に対する各特徴の完全性を保証することができる。
【0108】
インテリジェントコンポーネント806は、イベントおよび/またはデータを介して取り込まれる1組の観測(observation)から、システム、環境、および/またはユーザの状態についての推理を与えること、またはその状態について推論できることを理解されたい。例えば、推論を使用して、特定の状況またはアクションを識別することができ、または各状態にわたる確率分布を生成することができる。推論は、確率的、すなわちデータおよびイベントの考慮に基づく注目の各状態にわたる確率分布の計算でよい。推論は、1組のイベントおよび/またはデータからより高いレベルのイベントを構成するために使用される技法を参照することもできる。そのような推論の結果、各イベントが時間的に近接して相関されようとそうでなかろうと、またイベントおよびデータが1つの、またはいくつかのイベントおよびデータソースに由来しようと、1組の観測されたイベントおよび/または格納されたイベントデータから、新しいイベントまたはアクションが構築される。様々な(明示的および/または暗黙的に訓練された)分類方式および/またはシステム(例えば、サポートベクトルマシン、ニューラルネットワーク、エキスパートシステム、ベイズの信念ネットワーク(Bayesian belief network)、ファジィ論理、データフュージョンエンジンなど)を、本発明に関連する自動および/または推定アクションを実施することに関連して使用することができる。
【0109】
クラシファイア(classifier)は、入力属性ベクトルx=(x1,x2,x3,x4,xn)を、入力がクラスに属する信頼度に対応付ける関数であり、すなわち、f(x)=confidence(クラス)である。そのような分類は、確率および/または統計に基づいた分析(例えば、分析効用およびコストへの分解(factoring))を使用して、ユーザが自動的に実施することを望むアクションを予測または推論することができる。サポートベクトルマシン(SVM)は、使用することのできるクラシファイアの一例である。SVMは、可能な入力の空間内の超曲面を見つけることによって動作し、その超曲面は、非トリガリングイベントからトリガリング基準を分割しようと試みる。直感的に、これにより、トレーニングデータに近いが同一ではないテストデータに関して正しい分類が行われる。他の有向および無向モデル分類手法は、例えば、独立性の様々なパターンを与えるナイーブベイズ、ベイズのネットワーク、デシジョンツリー、ニューラルネットワーク、ファジィ論理モデルおよび確率分類モデルを含む。本明細書で使用される分類は、優先順位のモデルを開発するために使用される統計的回帰も含む。
【0110】
図9〜10に、本発明による方法を示す。話を簡単にするために、本発明による方法を一連の動作として図示し、説明する。本発明は図示される動作および/または動作の順序によって限定されず、例えば動作は、本明細書で提示および説明されていない他の動作と共に、様々な順序で、かつ/または同時に行うことができることを理解されたい。さらに、本発明による方法を実装するために、図示されるすべての動作が必要であるわけではない。さらに、状態ダイアグラムまたはイベントを介して、一連の相互に関係する状態として本発明による方法を表すことができることも当業者には理解されよう。
【0111】
図9に、少なくとも1つのモデル制約を実施しながら、データベースに基づいたシステム内のデータ操作の起動を容易にする方法900を示す。参照番号902においては、データモデルを使用してデータ記憶システムを表すことができる。データモデルは、データベース構造に少なくとも部分的に基づく複合モデルでよく、複合タイプのインスタンスとしてのデータ記憶システム内の情報の表現が可能となるように項目、副項目、プロパティ、および関係が定義される。データモデルは、リッチ永続オブジェクトおよびオブジェクト間のリンクを作成し、管理するために、1組の基本ビルディングブロックを使用することができる。データモデルは、表現されるデータ記憶システムの構造および/または機能を反映する少なくとも1つの特徴を含むことができることを理解されたい。言い換えれば、データモデルは、データモデル、データ記憶システム、およびそれに関連するデータの完全性を保証するように実施することのできる制約を含むことができる。
【0112】
参照番号904においては、(データモデルに基づく)データ記憶システムに関連する特徴を求めることができる。例えば、特徴は、そのような特徴に従ってデータ記憶システムを提供するためのガイドライン、制限、青写真などからなることができる。そのような特徴を使用することにより、対応するデータモデルの完全性および精度を保証することができる。参照番号906においては、少なくとも1つの手続きを実装することによってデータ操作を起動することができる。データ記憶システムに関連する任意の適切なデータ操作を提供する間、そのようなデータ記憶システムの特徴が実施され、安定な環境が得られる。1つの例では、データ記憶システムと共に任意の適切なデータ操作を可能とするためにAPIを使用することができる。例えば、ユーザはAPIを使用することができ、データを修正することができる。データ操作は、限定はしないが、コピー、更新、置換、取得、設定、作成、削除、移動などを含むことができることを理解されたい。例えば、データ記憶システムはコンテナ階層システムを含むことができ、そのような特徴が、データ記憶システム内のデータを操作するのに使用される任意の手続き中に実施される。
【0113】
図10に、それぞれの特徴が実施される、データモデルに少なくとも部分的に基づいてデータを操作する方法1000を示す。参照番号1002においては、データモデルを使用してデータ記憶システムを表すことができる。データ記憶システムはデータベースに基づいたファイルシステムでよく、情報がタイプの複合インスタンスとして表される。参照番号1004においては、表現されるデータ記憶システムに関連する特徴が求められる。特徴は、限定はしないが、制限、ガイドライン、規則、目標、青写真、および/または正確な実装を促進するデータ記憶システムに関連する任意のその他の適切な要素を含むことができる。
【0114】
参照番号1006においては、少なくとも1つの手続きを使用することによってデータの操作を起動することができる。データ操作は、APIによって提供することができ、ユーザは少なくとも1つの手続きを呼び出すことができ、手続きは少なくとも1つのデータ操作に対応することができる。データ記憶システムに関連する特徴の維持および/または実施中に、データ操作が起動されることを理解されたい。参照番号1008においては、エラーコードを使用することができ、かつ/またはセキュリティを使用することができる。例えば、データ操作がデータ記憶システムの特徴に違反するとき、エラーコードを生成し、使用することができる。APIを介してユーザにエラーコードを表示することができ、コードは、コードをテキストメッセージに関係付けるルックアップテーブルに対応することができることを理解されたい。データ操作および/またはAPIに関連するセキュリティは、様々な許可レベルおよび/またはログインおよび/またはパスワードを含むことができる。言い換えれば、各データ操作をセキュリティレベルに関係付けることができ、一定のセキュリティレベルのみが手続きを実行することができ、かつ/またはログインおよびパスワードが必要とされる。
【0115】
参照番号1010においては、データ記憶システム内のデータ操作に関連して楽観的同時性および/またはデッドロッキングを実装することができる。楽観的同時性は、ほぼ同様の時間に別のプロセスが変更を行う可能性が低いことを仮定し、したがってデータ記憶システム(例えばストア)に変更をコミットする準備ができるまでロックを行わない。そのような技法を使用することにより、ロック時間が削減され、より良好なデータベース性能が提供される。1つの例では、項目の各修正に伴う変化を項目と関連付けるようにトークンを保つことができる。言い換えれば、楽観的同時性は、2つの同時アプリケーション間のデータのアクセスを容易にすることができる。さらに、ロッキングは、複数の同時呼出し元のサポートを容易にすることができる。例えば、各呼出し元が他の呼出し元を待っているのでどの要求も満たすことができないように、共通の1組の資源の所有権を要求する複数の同時呼出し元が存在するシナリオを想定する。そのような場合、システムは呼出し元をブロックする(例えば、呼出し元をロックアウトする)ことができ、そのようなケースから外れる唯一の方法は、呼出し元の1つを去らせることである。この状況を回避するために、個々の要求が自動的に成功または失敗することを複合ロッキング論理が保証することができるように、ロッキングは複数の同時呼出し元をサポートすることができる。さらに、個々の要求が原子的に成功または失敗することを複合ロッキング論理が保証することができるように、複数の同時呼出し元をサポートすることができる。
【0116】
本発明の様々な態様を実装する追加の状況を示すために、図11〜12および以下の説明は、本発明の様々な態様を実装することのできる適切なコンピューティング環境を簡潔、かつ一般的に示す。上述した説明では、ローカルコンピュータおよび/またはリモートコンピュータ上で動作するコンピュータプログラムのコンピュータ実行可能命令の一般的な文脈において本発明を説明したが、本発明を他のプログラムモジュールと組み合わせて実施できることが当業者には理解されよう。一般に、プログラムモジュールは、特定のタスクを実施し、かつ/または特定の抽象データタイプを実装するルーチン、プログラム、コンポーネント、データ構造などを含む。
【0117】
さらに、単一プロセッサまたはマルチプロセッサコンピュータシステム、ミニコンピュータ、メインフレームコンピュータ、ならびにパーソナルコンピュータ、ハンドヘルドコンピューティング装置、マイクロプロセッサベースの、および/またはプログラム可能な家庭用電子機器などを含む他のコンピュータシステム構成と共に本発明の方法を実施することができ、それぞれを1つまたは複数の関連する装置に動作可能に結合することができることを当業者は理解されよう。本発明の図示される態様を、いくつかのタスクが通信ネットワークを介してリンクされるリモート処理装置で実行される分散コンピューティング環境でも実施することができる。しかし、本発明のすべてではないとしても、一部の態様をスタンドアロンコンピュータ上で実施することができる。分散コンピューティング環境では、プログラムモジュールをローカルおよび/またはリモートメモリ記憶装置に配置することができる。
【0118】
図11は、本発明が相互に通信することのできる例示的なコンピューティング環境1100のブロック図である。システム1100は、1つまたは複数のクライアント1110を含む。クライアント1110は、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティング装置)でよい。システム1100は、1つまたは複数のサーバ1120も含むことができる。サーバ1120は、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティング装置)でよい。例えば、サーバ1120は、本発明を使用することにより、スレッドを収容して変換を実施することができる。
【0119】
クライアント1110とサーバ1120との間の1つの可能な通信は、2つ以上のコンピュータプロセス間で伝送されるように適合されたデータパケットの形態でよい。システム1100は、クライアント1110とサーバ1120との間の通信を容易にするように使用することのできる通信フレームワーク1140を含む。クライアント1110は、クライアント1110に対してローカルに情報を格納するように使用することのできる1つまたは複数のクライアントデータストア1150に動作可能に接続される。同様に、サーバ1120は、サーバ1120対してローカルに情報を格納するのに使用することのできる1つまたは複数のサーバデータストア1130に動作可能に接続される。
【0120】
図12を参照すると、本発明の様々な態様を実装するための例示的環境1200は、コンピュータ1212を含む。コンピュータ1212は、処理装置1214、システムメモリ1216、およびシステムバス1218を含む。システムバス1218は、限定はしないが、システムメモリ1216を含むシステム構成要素を処理装置1214に結合する。処理装置1214は、様々な入手可能なプロセッサのうちのいずれでもよい。デュアルマイクロプロセッサおよびその他のマルチプロセッサアーキテクチャを、処理装置1214として使用することもできる。
【0121】
システムバス1218は、限定はしないが、業界標準アーキテクチャ(ISA)、マイクロチャネルアーキテクチャ(MSA)、拡張ISA(EISA)、Intelligent Drive Electronics(IDE)、VESAローカルバス(VLB)、Peripheral Component Interconnect(PCI)、カードバス、ユニバーサルシリアルバス(USB)、Advanced Graphics Port(AGP)、Personal Computer Memory Card International Associationバス(PCMCIA)、Firewire(IEEE1394)、およびSmall Computer Systems Interface(SCSI)を含む任意の様々な入手可能なバスアーキテクチャを使用する、メモリバスまたはメモリコントローラ、周辺バスまたは外部バス、および/またはローカルバスを含むいくつかのタイプのバス構造のいずれでもよい。
【0122】
システムメモリ1216は、揮発性メモリ1220および不揮発性メモリ1222を含む。起動中などにコンピュータ1212内の要素間で情報を転送する基本ルーチンを含む基本入出力システム(BIOS)は、不揮発性メモリ1222に格納される。例えば、限定はしないが、不揮発性メモリ1222は、読取り専用メモリ(ROM)、プログラマブルROM(PROM)、電気的プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリを含むことができる。揮発性メモリ1220は、外部キャッシュメモリとして働くランダムアクセスメモリ(RAM)を含む。例えば、限定はしないが、RAMは、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、シンクロナスDRAM(SDRAM)、ダブルデータレートSDRAM(DDR SDRAM)、拡張SDRAM(ESDRAM)、シンクリンクDRAM(SLDRAM)、ラムバスダイレクトRAM(RDRAM)、ダイレクトラムバスダイナミックRAM(DRDRAM)、ラムバスダイナミックRAM(RDRAM)などの多くの形態で入手可能である。
【0123】
コンピュータ1212は、取外し可能/取外し不可能な揮発性/不揮発性コンピュータ記憶媒体も含む。図12は、例えば、ディスクストレージ1224を示す。ディスクストレージ1224は、限定はしないが、磁気ディスクドライブ、フロッピー(登録商標)ディスクドライブ、テープドライブ、Jazドライブ、Zipドライブ、LS−100ドライブ、フラッシュメモリカード、またはメモリスティックなどの装置を含む。さらに、ディスクストレージ1224は、記憶媒体を別個に含むことができ、または、限定はしないが、コンパクトディスクROM装置(CD−ROM)、CDレコーダブルドライブ(CD−R Drive)、CDリライタブルドライブ(CD−RW Drive)、またはデジタルバーサタイルディスクROMドライブ(DVD−ROM)などの光ディスクドライブを含む他の記憶媒体と組み合わせて含むことができる。ディスク記憶装置1224のシステムバス1218への接続を容易にするために、インターフェース1226などの取外し可能または取外し不可能インターフェースが通常は使用される。
【0124】
図12は、ユーザと、適切な動作環境1200で説明した基本的なコンピュータ資源との間の媒介として働くソフトウェアを説明することを理解されたい。そのようなソフトウェアには、オペレーティングシステム1228が含まれる。オペレーティングシステム1228はディスクストレージ1224上に格納することができ、コンピュータシステム1212の資源を制御し、割り振るように動作する。システムアプリケーション1230は、システムメモリ1216またはディスクストレージ1224のいずれかに格納されたプログラムモジュール1232およびプログラムデータ1234を介してオペレーティングシステム1228による資源の管理を利用する。本発明は、様々なオペレーティングシステムまたはオペレーティングシステムの組合せで実施できることを理解されたい。
【0125】
ユーザは、入力装置1236を介してコマンドまたは情報をコンピュータ1212に入力する。入力装置1236には、限定はしないが、マウス、トラックボール、スタイラス、タッチパッドなどのポインティングデバイス、キーボード、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナ、TVチューナカード、デジタルカメラ、デジタルビデオカメラ、Webカメラなどが含まれる。上記およびその他の入力装置は、インターフェースポート1238を介してシステムバス1218によって処理装置1214に接続される。インターフェースポート1238には、例えば、シリアルポート、パラレルポート、ゲームポート、およびユニバーサルシリアルバス(USB)が含まれる。出力装置1240は、入力装置1236と同じタイプのポートのいくつかを使用する。したがって、例えばUSBポートを使用して、コンピュータ1212への入力を提供し、コンピュータ1212から出力装置1240に情報を出力することができる。出力アダプタ1242は、他の出力装置1240の中でもとりわけモニタ、スピーカ、プリンタなどの特殊なアダプタを必要とする一部の出力装置1240が存在することを示すために与えられている。出力アダプタ1242には、例えば限定はしないが、出力装置1240とシステムバス1218との間の接続の手段を提供するビデオカードおよびサウンドカードが含まれる。リモートコンピュータ1244など、他の装置および/または装置のシステムは、入力機能と出力機能を共に提供することに留意されたい。
【0126】
コンピュータ1212は、リモートコンピュータ1244などの1つまたは複数のリモートコンピュータへの論理接続を使用するネットワーク環境で動作することができる。リモートコンピュータ1244は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ワークステーション、マイクロプロセッサベースのアプライアンス、ピア装置、または他の共通ネットワークノードなどでよく、一般にコンピュータ1212に関して説明した要素の多くまたはすべてを含む。簡潔にするために、リモートコンピュータ1244と共にメモリ記憶装置1246のみを図示する。リモートコンピュータ1244は、ネットワークインターフェース1248を介してコンピュータ1212に論理的に接続され、次いで通信接続1250を介して物理的に接続される。ネットワークインターフェース1248は、ローカルエリアネットワーク(LAN)や広域ネットワーク(WAN)など、有線および/または無線の通信ネットワークを包含する。LAN技術には、光ファイバ分散データインターフェース(FDDI)、銅線分散データインターフェース(CDDI)、Ethernet(登録商標)、トークンリングなどが含まれる。WAN技術には、限定はしないが、ポイントツーポイントリンク、サービス総合デジタル網(ISDN)およびそのバリエーションなどの回線交換ネットワーク、パケット交換ネットワーク、デジタル加入者回線(DSL)などが含まれる。
【0127】
通信接続1250は、ネットワークインターフェース1248をバス1218に接続するために使用されるハードウェア/ソフトウェアを指す。通信接続1250は、図が見やすいようにコンピュータ1212内部に示しているが、コンピュータ1212の外部でもよい。ネットワークインターフェース1248への接続に必要なハードウェア/ソフトウェアには、例示の目的にすぎないが、通常の電話グレードモデム、ケーブルモデム、DSLモデムを含むモデム、ISDNアダプタ、Ethernet(登録商標)カードなどの内部技術および外部技術が含まれる。
【0128】
上記で説明したことは、本発明の例を含む。もちろん、本発明を説明するためにコンポーネントまたは方法の考えられるすべての組合せについて説明することは不可能であるが、本発明の他の多くの組合せおよび置換えが可能であることを当業者は理解できよう。したがって、本発明は、添付の特許請求の範囲の趣旨および範囲に含まれるすべての代替形態、変更形態、および変形形態を含むものとする。
【0129】
特に、上述のコンポーネント、装置、回路、システムなどによって実行される様々な機能に関して、こうしたコンポーネントの説明に使用した用語(「手段」への言及を含む)は、本明細書で示した本発明の例示的態様の機能を実行する、開示された構造に構造上同じではない場合であっても、別段の指定のない限り、記載のコンポーネントの指定の機能(例えば、機能的同等物など)を実行する任意のコンポーネントに対応するものとする。この点において、本発明は、本発明の様々な方法の動作および/またはイベントを実行するコンピュータ実行可能命令を有するシステムならびにコンピュータ可読媒体を含むことも理解されたい。
【0130】
さらに、本発明の特定の特徴を、いくつかの実装形態のうちの1つのみを参照して開示したが、こうした特徴は、所与または特定の任意の応用例にとって望ましく有利である他の実装形態の1つまたは複数の他の特徴と組み合わせることができる。さらに、「含む(include)」および「含んでいる(including)」という用語およびその変形が詳細な説明または特許請求の範囲において使用されている範囲で、これらの用語は「備える(comprising)」という用語と同じように包括的なものとする。
【図面の簡単な説明】
【0131】
【図1】それぞれの特徴を有するデータモデルに少なくとも部分的に基づくデータの操作を容易にする例示的システムのブロック図である。
【図2】データ記憶システムの特徴内のデータの操作を容易にする例示的システムのブロック図である。
【図3】データ記憶システムに関連するデータの操作を用いたデータ完全性およびセキュリティの実施を容易にする例示的システムのブロック図である。
【図4】データ記憶システムに関連するデータを操作するAPIの実装を容易にする例示的システムのブロック図である。
【図5】データ記憶システムの特徴内のデータを操作するAPIの起動を容易にする例示的システムのブロック図である。
【図6】データ記憶システムの特徴内のデータを操作するAPIの起動を容易にする例示的システムのブロック図である。
【図7】APIコンポーネントを使用してデータ記憶システム内のデータの操作を容易にする例示的システムのブロック図である。
【図8】データモデルに少なくとも部分的に基づくデータの操作を容易にする例示的システムのブロック図である。
【図9】少なくとも1つのモデル制約を実施しながら、データベースに基づいたシステムに少なくとも部分的に基づいてデータ操作を起動する例示的方法を示す図である。
【図10】それぞれの特徴が実施される、データモデルに少なくとも部分的に基づいてデータを操作する例示的方法を示す図である。
【図11】本発明の新規な態様を使用することのできる例示的ネットワーキング環境を示す図である。
【図12】本発明に従って使用することのできる例示的動作環境を示す図である。
【技術分野】
【0001】
本発明は一般に、データベースに関し、より詳細には、それぞれのデータ記憶システムに関連する、データモデルおよび/またはセキュリティ実装に基づくデータの操作を容易にするシステムおよび/または方法に関する。
【背景技術】
【0002】
コンピュータ技術の進歩(例えば、マイクロプロセッサの速度、メモリ容量、データ転送帯域幅、ソフトウェア機能など)は、一般に、様々な産業でのコンピュータの利用の増大に寄与した。サーバのアレイとしてしばしば構成される、より強力なサーバシステムさえも、例えば、ワールドワイドウェブなどの外部ソースから生じる要求に対するサービスを提供するために、一般的に提供される。
【0003】
利用可能な電子データ量が増大するにつれて、ユーザフレンドリかつ迅速なデータ検索および抽出を容易にする管理可能な方式で、そのようなデータを格納することがより重要となる。今日、一般的な手法は、電子データを1つまたは複数のデータベースに格納することである。一般には、典型的なデータベースは、例えばコンピュータプログラムがデータの所望の部分を迅速に検索および選択することができるようにデータが構築された、編成された情報の集合と呼ぶことができる。一般には、データベース内のデータが、1つまたは複数のテーブルを介して編成される。そのようなテーブルは、行および列の配列として構成される。
【0004】
さらに、テーブルは1組のレコードを含むことができ、レコードは1組のフィールドを含む。レコードは一般に、テーブル内の行として索引付けされ、レコードフィールドは一般に、列として索引付けされ、それによって添字の行/列対が、テーブル内の特定のデータを参照することができる。例えば、行は、販売取引、個人、またはプロジェクトに関する完全なデータレコードを格納することができる。同様に、テーブルの列は、同一の一般的データフォーマットを有する行の離散的部分を定義することができ、レコードのフィールドを定義することができる。
【0005】
独立したデータのそれぞれの個々の部分は、一般にあまり情報を与えるものではない。データベースアプリケーションがデータをより有用なものとする。データベースアプリケーションは、ユーザがデータを編成および処理する助けとなるからである。データベースアプリケーションは、ユーザがデータを比較、ソート、配列、結合、分離、および相互接続することを可能にし、その結果、有用な情報をデータから生成することができる。データベースの容量および汎用性が信じられないほど向上し、データベースを使用するほぼ無限の記憶容量が可能となった。しかし、典型的なデータベースシステムの提供する照会能力は、時間、ファイル拡張子、位置、およびサイズに基づく限られたものである。例えば、データベースに関連する膨大な量のデータを探索するために、典型的な探索は、ファイル名、ファイルサイズ、作成日などに限定され、そのような技法は不十分で不適切である。
【0006】
エンドユーザからのデータの作成は引き続き増大し、そのようなデータの発見、関係付け、操作、および格納を取り巻く問題および困難が増大している。エンドユーザは、文書を書き、写真を格納し、コンパクトディスクから音楽をリッピングし、Eメールを受信し、送信したEメールのコピーを保持したりする。例えば、音楽コンパクトディスクを作成する単純なプロセスでは、エンドユーザは数メガバイトのデータを作成することがある。コンパクトディスクから音楽をリッピングし、ファイルを適切なフォーマットに変換し、ジュエルケースカバーを作成し、コンパクトディスクラベルをデザインすることはすべて、データの作成を必要とする。
【発明の開示】
【発明が解決しようとする課題】
【0007】
ユーザを取り巻く問題だけでなく、開発者もデータに伴う同様な問題を抱えている。開発者は、パーソナルアプリケーションから高度に開発された企業アプリケーションにわたる無数のアプリケーションを作成する。作成および/または開発中に、開発者は、常にではないとしても頻繁にデータを集める。そのようなデータを得るときに、データを格納する必要がある。言い換えると、データの発見、関係付け、操作、および格納を取り巻く問題および困難は、開発者とエンドユーザのどちらにも影響を及ぼす。具体的には、従来のシステムおよび/またはデータベース内で、混乱させ、かつ/またはどんな不安定な条件も引き起こすことなく、そのようなデータをどう操作してもデータの完全性を保証しなければならない。
【課題を解決するための手段】
【0008】
以下に、本発明のいくつかの態様の基本的理解を与えるために、単純化した本発明の概要を提示する。この概要は、本発明の包括的な概要ではない。本発明の主要な要素または重要な要素を識別するものではなく、本発明の範囲を概略するものではない。その唯一の目的は、後で提示するより詳細な説明の前置きとして、本発明のいくつかの概念を単純化した形で提示することである。
【0009】
本発明は、特徴および/または制約に関連するデータモデルに少なくとも部分的に基づくデータの操作を容易にするシステムおよび/または方法に関する。データモデルは、データ記憶システム(例えば、データベースに基づいたファイル記憶システム)を表すことができ、そのようなモデルは、データ記憶システム内の情報を複合タイプのインスタンスとして表すことのできる、永続エンティティおよびサブエンティティの階層モデルである。データを操作することを容易にするために、データ操作コンポーネントは、特徴および/または制約のうちの少なくとも1つを実施および/または実装しながら、データ記憶システムに関連するデータ操作手続きを提供することができる。言い換えれば、データ操作コンポーネントは、任意の適切なデータ操作中にデータ記憶システム内のデータを永続させる。
【0010】
本発明の一態様によれば、データ操作コンポーネントは、少なくとも1つの手続き(procedure)を提供する手続きコンポーネントを含むことができ、この手続きはデータを操作する。データに対する手続きは、コピー、更新、置換、取得、設定、作成、削除、移動、修正などを実装することができる。さらに、データ操作コンポーネントは、データ記憶システムを表すデータモデルに関連する特徴および/または制約を実施および/または実装するエンフォーサコンポーネント(enforcer component)を含むことができる。データ操作に関連する特徴および/または制約を使用することにより、データモデルの完全性がデータ記憶システム全体にわたって維持される。
【0011】
本発明の別の態様によれば、データ操作コンポーネントは、アプリケーションプログラミングインターフェース(API)を使用することができる。APIは、クライアント(例えば、呼出し元)に対して公開することができ、1つまたは複数のプライベート実装ルーチンを呼び出してクライアント要求を実施することのできるパブリックサーフェスエリア(public surface area)である。一態様では、APIは、ルーチン(例えば、サブルーチンを含むことができない)を提供することができる。ユーザがデータ記憶システム内のデータを操作することに関連する少なくとも1つの手続きを呼び出し、かつ/または使用すると共に、それに関連する少なくとも1つの特徴および/または制約を維持することを可能にするように、APIを使用することができる。APIは、データ記憶システム内で適切なオペレーションを実施することを可能にする様々な関数および/または手続きを定義することのできるAPI定義コンポーネントをさらに使用することができる。
【0012】
さらに別の態様によれば、データ操作コンポーネントは、複数の同時呼出し元をサポートすると同時にデッドロックをなくすことを容易にするロッキングコンポーネント(locking component)を含むことができる。例えば、各呼出し元が他の呼出し元を待ち続けているのでどの要求も満たすことができず、したがってデッドロックが生じ得る形で共通の1組の資源の所有権を要求する複数の同時呼出し元があるというシナリオを仮定する。そのような場合、ロッキングコンポーネントはロックアップ(lock up)することができ(例えば、呼出し元がブロックされる)、そのようなケースから外れる唯一の方法は、呼出し元の1つを去らせることである。ロッキングコンポーネントは、個々の要求が原子的に成功または失敗することを複合ロッキングロジックが保証することができるように、複数の同時呼出し元もサポートすることができる。さらに、データ操作コンポーネントは、楽観的同時性(optimistic concurrency)技法を使用する楽観的同時性コンポーネントを含むことができ、そのような技法は、第1プロセスが第2プロセスとほぼ同様の時間に変更を行う可能性は低く、変更がデータ記憶システムにコミットされるまでロックが使用されないと仮定する。複数の呼出し元による同時アクセスが、ストアの状態についての特定の呼出し元の仮定を無効にした場合、無効な仮定を検出することができ、呼出し元がシステム状態の理解を再同期し、要求を再サブミットするまで、データ変更要求がシステムによって拒絶される。この技法は、命令を実行してロックを取り出す必要をなくすことによって、システムの性能を改善することができる。さらに、この技法は、長期ロックを取り出す必要をなくすことによって、システムのデッドロックを低減することができる。
【0013】
本発明の別の態様によれば、データ操作コンポーネントは、そのようなシステムで使用される様々なデータ操作に対応することのできるセキュリティ技法を提供する、セキュリティコンポーネントを含むことができる。セキュリティコンポーネントは、限定はしないが、ログイン、パスワード、生体的特徴(例えば、指紋、網膜走査、インダクタンスなど)、音声認識などのユーザプロファイルおよび/または様々なセキュリティ手段を使用して、データを操作する特定のエンティティの完全性および有効性を保証することができる。さらに、データ操作コンポーネントは、データ操作により特徴および/または制約が実施されないことになる場合にエラーコードを提供する、エラーコンポーネントを含むことができる。データ操作が不完全であることを知らせるようにエラーコードを実装することができ、エラーコードは、エラーを記述するテキストに対応することができる。本発明の他の態様では、データモデルに準拠しながら、データの操作を容易にする方法が提供される。
【0014】
以下の説明および添付の図面において、本発明のいくつかの例示的態様を詳細に説明する。しかし、こうした態様は、本発明の原理を利用することができる様々な方式のうちのいくつかを示すにすぎず、本発明は、そのようなすべての態様およびその均等物を含むものとする。本発明の他の利点および新規な特徴は、以下の本発明の詳細な説明を図面と共に考慮すると明らかになるだろう。
【発明を実施するための最良の形態】
【0015】
本明細書では、「コンポーネント」、「システム」、「インターフェース」などの用語は、ハードウェア、(例えば実行中の)ソフトウェア、および/またはファームウェアのいずれかのコンピュータ関連のエンティティを指すものとする。例えば、コンポーネントは、プロセッサ上で実行中のプロセス、プロセッサ、オブジェクト、実行可能ファイル、プログラム、および/またはコンピュータでよい。例えば、サーバ上で実行中のアプリケーションとサーバは、どちらもコンポーネントでよい。1つまたは複数のコンポーネントがプロセス内に存在することができ、コンポーネントを1つのコンピュータ上に配置し、かつ/または2つ以上のコンピュータ間に分散させることができる。
【0016】
全体を通して同様の要素を指すのに同様の参照番号が使用される図面を参照しながら、本発明を説明する。以下の説明では、説明の都合上、本発明の完全な理解を与えるために多数の特定の詳細を記載している。しかし、こうした特定の詳細なしに本発明を実施できることは明らかである。他の例では、本発明を説明しやすくするために、周知の構造および装置をブロック図形式で示す。
【0017】
次に図を参照すると、図1は、それぞれの特徴を有するデータモデルに少なくとも基づくデータの操作を容易にするシステム100を示す。データモデル102は、データベース構造に少なくとも基づく複合モデル(complex model)でよく、複合タイプのインスタンスとしてのデータ記憶システム内の情報の表現が可能となるように項目、副項目、プロパティ、および関係が定義される。データモデル102は、リッチ永続オブジェクトおよびオブジェクト間のリンクを作成し、管理するために、1組の基本ビルディングブロックを使用することができる。データモデル102内の整合性の最小単位として項目を定義することができ、整合性の最小単位を個々に保護、シリアル化、同期、コピー、バックアップ/復元することなどができる。項目はタイプのインスタンスであり、データモデル102内のすべての項目を、項目の単一グローバル範囲内に格納することができる。データモデル102は、少なくとも1つの項目および/またはコンテナ構造に基づくことができる。さらに、データモデル102は、ファイル内に項目として埋め込まれるリッチメタデータを公開する記憶プラットフォーム(storage platform)でよい。データモデル102は、上述の機能をサポートするためのデータベースに基づいたファイル記憶システムを表すことができ、任意の適切な特徴および/または属性を実装することができることを理解されたい。さらに、データモデル102は、コンテナ階層構造を使用するデータベースに基づいたファイル記憶システムを表すことができ、コンテナは、0個以上の項目を含むことのできる項目である。包含概念(containment concept)は、関連するクラス内部のコンテナIDプロパティを介して実装される。ストアが物理的組織的管理可能ユニットとなることができるように、ストアはコンテナでもよい。さらに、ストアは、階層構造内のコンテナのツリーに対するルートコンテナを表す。さらに、データモデル102は、少なくとも1つの永続エンティティと各エンティティごとの0個以上のサブエンティティの階層モデルを定義して情報を複合タイプとして表すデータベースに基づいたシステムであるデータ記憶システムを表すことができる。
【0018】
データ操作コンポーネント104は、データモデル102に関するデータを操作することができ、データモデル102の特徴に関連するデータの完全性および安定性を保証する。データモデル102は、データベースに基づいたファイル記憶システムに関連する任意の適切な特徴および/またはガイドラインを含むことができる。データ操作コンポーネント104は、安定システムを保証しながら(例えば、データモデル102によって表されるデータベースに基づいたファイル記憶システムに関連する任意の特徴に準拠しながら)、少なくとも1つのオブジェクトに対する移動、削除、コピー、作成、更新、置換などを実現することができる。例えば、データモデル102は、コンテナに関する各IDが固有であるような、特徴を有するデータベースに基づいたファイル記憶システムを表すことができる。この例を進めると、データ操作コンポーネント104は、コンテナに関するIDの固有性を実施および/または維持しながら、任意の適切なデータ操作(例えば、コピー、更新、置換、取得、設定、作成、削除、移動など)を使用することができる。上述した関数を本発明に関する制限とみなすべきではなく、データモデル102に関する任意の適切なデータ操作を使用すると共に、それに関する任意の適切な特徴を維持することができることを理解されたい。さらに、データ操作コンポーネント104は、データモデル102に基づいて(例えば、ストア、コンテナなどの少なくとも1つを使用して)階層構造に対応するデータを操作できることを理解されたい。
【0019】
本発明の一態様によれば、データの操作は、例えばアプリケーションプログラミングインターフェース(API)(図示せず)を使用することにより、ユーザからの入力に少なくとも部分的に基づくことができる。APIを使用することにより、データモデル102および対応するデータベースに基づいたファイル記憶システムに関する対話および/または操作を実装し、それに関連する任意の適切な特徴を維持/実施することができる。データ操作コンポーネント104、データ操作コンポーネント104に組み込まれた別々のコンポーネント、および/またはそれらの任意の組合せによって、APIを起動(invoke)することができる。
【0020】
システム100は、データ操作コンポーネント104をほぼ任意のオペレーティングシステムおよび/またはデータベースシステムに統合するために様々なアダプタ、コネクタ、チャネル、通信経路などを提供する、インターフェースコンポーネント106をさらに含む。さらに、インターフェースコンポーネント106は、データおよびデータ操作コンポーネント104との対話を実現する様々なアダプタ、コネクタ、チャネル、通信経路などを提供することができる。インターフェースコンポーネント106はデータ操作コンポーネント104に組み込まれるが、そのような実装はそのように限定されるわけではないことを理解されたい。例えば、インターフェースコンポーネント106は、システム100に関連してデータを受信または送信するためのスタンドアロンコンポーネントでよい。
【0021】
図2に、データ記憶システムの特徴内のデータの操作を容易にするシステム200を示す。データ記憶システム202は、少なくとも階層構造を使用することによってデータのインスタンスを複合タイプとして表す、データベースに基づいたファイル記憶システムでよい。データ記憶システム202は、データの操作中にデータ記憶システム202の特徴を保証するように実施される、少なくとも1つの特徴を含むことができる。データモデル(図示せず)はデータ記憶システム202を表すことができることを理解されたい。さらに、複合タイプのインスタンスとしての情報の表現が可能となるように、データ記憶システム202内で項目、副項目、プロパティ、および関係を定義することができる。データ記憶システム202は、データの形を記述することができ、データに関する一定の意味整合性を示唆する制約を宣言することができ、データ間の意味関連(semantic consistency)を定義することのできるデータモデルでよい。データ記憶システム202は、リッチ永続オブジェクトおよびオブジェクト間のリンクを作成し、管理するために、1組の基本ビルディングブロック(building block)を使用することができる。
【0022】
例えば、ビルディングブロックは、「Item」、「ItemExtension」、「Link」、および「ItemFragment」を含むことができる。「Item」は、データ記憶システム202内の整合性の最小単位として定義することができ、整合性の最小単位を個々に保護、シリアル化、同期、コピー、バックアップ/復元することなどができる。例えば、項目(item)は、整合性の最小単位でよいが、項目の周りに引かれる境界は、項目によって論理的に所有することのできるリンク、項目拡張(item extension)、項目フラグメント(item fragment)を含むことができる。したがって、項目は、テーブル内の行でよいが、項目行およびその2次部分のすべても参照する。言い換えれば、項目の削除、コピーなどを行うことができると共に、そのようなオペレーションが項目およびその部分のすべてに原子的に適用されることが保証される。項目はタイプのインスタンスであり、データ記憶システム202内のすべての項目を、項目の単一グローバル範囲内に格納することができる。「ItemExtension」は、エンティティ拡張を使用して拡張される項目タイプである。エンティティ拡張は、それぞれの属性(例えば、名前、拡張される項目タイプ、プロパティ宣言など)と共にスキーマ内に定義することができる。「ItemExtension」は、拡張される項目タイプに適用することのできる1組のプロパティをグループ化するように実装することができる。「Link」は、2つの項目インスタンス間の関連を定義するエンティティタイプであり、リンクが指示される(例えば、1つの項目がリンクのソースであり、他の項目がリンクのターゲットである)。「ItemFragment」は、項目タイプおよび/または項目拡張での大きな集合の宣言を可能とするエンティティタイプであり、集合の要素はエンティティでよい。データ記憶システム202は、複合タイプのインスタンスとしてのデータの表現を提供する、任意の適切なデータベースに基づいたファイル記憶システムを表すことができ、上記の記述を本発明の制限とみなすべきではないことを理解されたい。データ記憶システム202は、図1に示すデータモデル102の表現とほぼ同様でよい。
【0023】
データ操作コンポーネント204は、データ記憶システム202内のデータの操作を実現すると共に、そのようなデータ記憶システム202に関連する少なくとも1つの特徴を実施することができる。データ操作コンポーネント204は、限定はしないが、(例えば、複合タイプのインスタンスによって表される)データに対するコピー、更新、置換、取得、設定、作成、削除、移動などの操作を実現することができる。データ操作コンポーネント204は、図1に示すデータ操作コンポーネント104とほぼ同様でよいことを理解されたい。
【0024】
データ操作コンポーネント204は、データ記憶システム202に関連する特徴に従ってデータを操作するための特定の関数を提供する手続きコンポーネント206を含むことができる。言い換えれば、手続きコンポーネント206は、データ記憶システム202に関する操作技法を提供することができる。例えば、手続きコンポーネント206は、データおよび/または複合タイプのインスタンスとしてのデータの表現に対するコピー、移動、置換、設定、削除、作成、取得、更新を含むことができる。手続きコンポーネント206は、データ記憶システム202と共に実装することのできる任意の適切なデータ操作技法および/または関数を提供することができる。手続きコンポーネント206がデータ操作コンポーネント204に組み込まれているように示されているが、本発明はそのように限定されない。手続きコンポーネント206は、スタンドアロンコンポーネントでよく、またはデータ記憶システム202に組み込むことができる(例えば、データモデル概念のインスタンス化でよい)。
【0025】
データ操作コンポーネント204は、データの操作と共にデータ記憶システム202の少なくとも1つの特徴を組み込むためのエンフォーサコンポーネント208をさらに含むことができる。上述したように、データ記憶システム202は、データ記憶システム202内のデータの操作に関するガイダンスを提供することのできる任意の適切な数の特徴を含むことができる。言い換えれば、エンフォーサコンポーネント208は、データ記憶システム202に関するデータモデル制約を乱すことなくデータ記憶システム202内のデータの操作を可能にする。(図示するように)エンフォーサコンポーネント208はデータ操作コンポーネント204内に組み込むことができ、スタンドアロンコンポーネントでもよく、データ記憶システム202に組み込むこともでき、それらの任意の組合せでもよいことを理解されたい。
【0026】
例えば、データ記憶システム202は、(上述したように)項目、コンテナ、およびストア構造階層を使用することができる。エンフォーサコンポーネント208は、データ記憶システム202に関連するコンテナIDに関する特徴を実装することができる。例えば、エンフォーサコンポーネント208は、以下のうちの少なくとも1つを提供することができる。(1)項目の非ヌル項目IDをストアに含めるためのコンテナID(例えば、これは、以下で説明する操作関数および/または技法「CreateItem」、「CreateComplexItems」、「MoveItem」、および「ReplaceItem」で実装することができる)、(2)コンテナIDが(以下で説明する)操作関数および/または技法「UpdateItem」を使用して更新されない、(3)コンテナIDを「MoveItem」への呼出しを介して変更することができる。本発明は、上記の関数および/または技法の参照名に限定されないことを理解されたい。
【0027】
別の例では、エンフォーサコンポーネント208は、データの操作と共に、トランザクションセマンティックス(transaction semantics)を実装することができる。エンフォーサコンポーネント208は、以下のトランザクションセマンティクスを実装することができる。(1)トランザクションがアクティブでない場合、エラーコードを返すことができ、バッチ(batch)が処理されない。(2)オペレーションを検証および適用する試みが行われる。オペレーションを検証することおよび適用することが成功した場合、オペレーションが呼出し元によって供給されるトランザクションでコミットされないという効果と共に、制御を呼出し元に返すことができる。オペレーションを検証することまたは適用することが失敗した場合、トランザクションは失敗し、エラーが生じ、制御を呼出し元に返すことができる。失敗したトランザクションは、呼出し元がそのトランザクションに関する照会を発行することができるが、トランザクションをコミットできない(例えば、コミットに対する呼出しの結果がエラーとなることができる)ことを意味する。API要求が原子的に成功することができ、または完全に失敗することができることを理解されたい。複合APIは、基礎となる記憶テーブルに対する少なくとも1つの変更を行うことができ、複合の1組の整合性および/または完全性テストを実装することができる。さらに、システム200は、矛盾する状態および/または無効な状態のままには決してされないことを理解されたい。
【0028】
図3は、データ記憶システムに関連するデータの操作を用いたデータ完全性およびセキュリティの実施を容易にするシステム300を示す。データ記憶システム302は、少なくとも部分的にデータモデルに基づくデータベースに基づいたファイル記憶システムでよく、データは複合タイプのインスタンスとして表される。データ操作コンポーネント304は、データ記憶システム302に関連するデータ操作を提供することができる。データ操作コンポーネント304は、データ記憶システム302内のデータを操作することに関する少なくとも1つの関数および/または技法を提供することのできる手続きコンポーネント306を含むことができる。さらに、データ操作コンポーネント304は、それぞれのデータ記憶システム302についての少なくとも1つの特徴および/またはガイドラインを設けるエンフォーサコンポーネント308を含むことができ、そのような特徴は、データモデル制約をデータの操作と共に実装することを保証する。データ記憶システム302、データ操作コンポーネント304、手続きコンポーネント306、およびエンフォーサコンポーネント308は、図3のデータ記憶システム202、データ操作コンポーネント204、手続きコンポーネント206、およびエンフォーサコンポーネント308とほぼ同様でよいことを理解されたい。
【0029】
データ操作コンポーネント304は、データ記憶システム302内のデータを操作することに関連する少なくとも1つの手続きを格納し、かつ/またはそれにアクセスすることを容易にするためにデータストア310を含むことができる。例えば、データストア310は、APIで使用することのできる手続き(例えばコード)を格納することができ、データ記憶システム302に関連する少なくとも1つの特徴を維持しながら、データ操作をユーザが受信し、起動することができる。別の例では、データストア310は、データ記憶システム302および/または様々なAPIデータ(例えばサブルーチンなど)に関連する様々な特徴を格納することができる。1つの例では、データストア310はハードドライブでよい。データストア310は、例えば揮発性メモリまたは不揮発性メモリでよく、あるいは揮発性メモリと不揮発性メモリのどちらも含むことができる。例えば、限定はしないが、不揮発性メモリは、読取り専用メモリ(ROM)、プログラマブルROM(PROM)、電気的プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、またはフラッシュメモリを含むことができる。揮発性メモリはランダムアクセスメモリ(RAM)を含むことができ、これは外部キャッシュメモリとして働く。例えば、限定はしないが、RAMは、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、シンクロナスDRAM(SDRAM)、ダブルデータレートSDRAM(DDR SDRAM)、拡張SDRAM(ESDRAM)、シンクリンクDRAM(SLDRAM)、ラムバスダイレクトRAM(RDRAM)、ダイレクトラムバスダイナミックRAM(DRDRAM)、ラムバスダイナミックRAM(RDRAM)などの多くの形態で入手可能である。このシステムおよび方法のデータストア310は、限定はしないが、上記およびその他の任意の適切なタイプのメモリを含むものとする。さらに、データストア310は、サーバおよび/またはデータベースでよいことを理解されたい。
【0030】
データ操作コンポーネント304は、少なくとも1つのセキュリティ属性をシステム300に与えるために、セキュリティコンポーネント312をさらに含むことができる。例えば、セキュリティコンポーネント304は、特定のデータ操作関数および/または技法がユーザプロファイルと関連付けられるように、ユーザプロファイルを使用することができる。さらに、セキュリティコンポーネント304は、限定はしないが、ログイン、パスワード、生体的特徴(例えば、指紋、網膜走査、インダクタンスなど)、音声認識などの様々なセキュリティ手段を使用して、データを操作する特定のエンティティの完全性および有効性を保証することができる。セキュリティコンポーネント312はさらに、データ記憶システム302に関連する任意の適切なセキュリティ属性を使用することができる。言い換えれば、セキュリティコンポーネント312は、データ記憶システム302のセキュリティ制約が実施されるように、セキュリティ規定を実装することができる。
【0031】
図4に、データ記憶システムに関連するデータを操作するAPIの実装を容易にするシステム400を示す。データ記憶システム402は、それに関連する少なくとも1つの特徴を有するデータベースに基づいたファイル記憶システムでよく、データ記憶システム402をデータモデル(図示せず)によって表現することができる。データ操作コンポーネント404は、限定はしないが、それぞれデータ記憶システム402に対するコピー、移動、置換、設定、削除、作成、取得、データに対する更新を含むデータ操作を可能にする。データ記憶システム402およびデータ操作コンポーネント404は、それぞれ図3および2のデータ記憶システム302、データ記憶システム202、データ操作コンポーネント304、データ操作コンポーネント204とほぼ同様の機能を使用することができることを理解されたい。
【0032】
データ操作コンポーネント404は、エンティティがデータ記憶システム402内のデータを操作することを可能にする、APIコンポーネント406(本明細書では「API406」と呼ぶ)をさらに含むことができる。エンティティは、限定はしないが、ユーザ、コンピュータ、データベースなどでよい。API406は、ユーザ入力がデータ記憶システム402内のデータの操作に関するコマンドおよび/または関数であるようなユーザ入力を少なくとも受け取ることができる。データ操作コンポーネント404に組み込まれるように示したが、API406は、データ記憶システム402に組み込まれたスタンドアロンコンポーネント、および/またはそれらの組合せでよいことを理解されたい。さらに、API406は、上述した様々なコンポーネントを使用して、特定の手続きを使用するデータの操作を実現すると共に、それぞれデータ記憶システム402に対する特徴を実施することができる。
【0033】
図5に、データ記憶システムの特徴内のデータを操作するアプリケーションプログラミングインターフェース(API)の起動を容易にするシステム500を示す。データ記憶システム502は、少なくとも1つの定義特徴(defining characteristic)を有するデータベースに基づいたファイル記憶システムでよく、データ記憶システム502は、少なくとも部分的にデータモデル(図示せず)に基づくことができる。データ操作コンポーネント504は、それぞれデータ記憶システム502に対するコピー、移動、置換、設定、削除、作成、取得、データに対する更新を含むデータ操作を可能にする。データ記憶システム502およびデータ操作コンポーネント504は、それぞれ図4、図3、および図2のデータ記憶システム402、データ記憶システム302、データ記憶システム202、データ操作コンポーネント404、データ操作コンポーネント304、データ操作コンポーネント204とほぼ同様でよいことを理解されたい。
【0034】
データ操作コンポーネント504は、APIコンポーネント506(「API506」と呼ぶ)を含むことができる。API506は、ストアドプロシージャを実行することによってデータ操作(例えば、ストア内のデータの作成、更新、削除)を実現することができる。API506は、ユーザがデータ操作を実行することを可能にすると共に、データ記憶システム502に関連する特徴の完全性および/または純度(purity)を保証することができる。データの操作は、例えばAPI506を使用することにより、少なくとも部分的にユーザからの入力に基づくことができる。API506を使用することにより、データ記憶システム502に関する対話および/または操作を実装することができると共に、それに関連する任意の適切な特徴が維持/実施される。API506をデータ操作コンポーネント504、データ操作コンポーネント504に組み込まれた別々のコンポーネント、および/またはそれらの任意の組合せによって起動することができることを理解されたい。
【0035】
データ操作コンポーネント504は、完全性を保証する適切なロッキング戦略を使用することにより、1つまたは複数のアプリケーションでデータに同時にアクセスすることを容易にするロッキングコンポーネント508をさらに含むことができる。例えば、各呼出し元が他の呼出し元を待っている(例えば、デッドロックが生じる可能性がある)ので単一の要求も満たすことができないように共通の1組の資源の所有権を要求する複数の呼出しがあるというシナリオを仮定する。そのような場合、ロッキングコンポーネント508は、呼出し元をブロック(例えばロックアップ)することを可能にし、そのようなケースから外れる唯一の方法は、呼出し元の1つを去らせることである。この状況を回避するために、ロッキングコンポーネント508は、個々の要求が自動的に成功または失敗することを複合ロッキングロジックが保証することができるように、複数の同時呼出し元をサポートすることができる。さらに、ロッキングコンポーネント508は、デッドロックを検出し、それに反応することができる。ロッキングコンポーネント508は、ロッキングを介するデータ記憶システムのある部分(例えばストア)へのシリアル化アクセスを使用することにより、データの整合性を保つことができる。ロッキングは、グラニュラ(granular)レベルに対して行うことができ、所与の操作および/またはオペレーションによって影響を受けるデータ記憶システム内の資源(例えばストア)を、そのような操作および/またはオペレーションの期間中にロックすることができる。異なるオペレーションおよび/またはほぼ同様のオペレーションが異なる順序でロックする可能性があり、デッドロッキングが生じる可能性があることを理解されたい。例えば、ロッキングコンポーネント508は、性能に対する著しい損失を有するデッドロックを回避することができる。さらに、ロッキングコンポーネント508は、API506にデッドロックエラーコードを提供して、そのような状況を通知することができる。
【0036】
データ操作コンポーネント504は、楽観的同時性コンポーネント510を含むことができる。API506は、データ記憶システム502内のデータに対する操作および/または変更を適用するために楽観的同時性(optimistic concurrency)を使用することができる。同時性は、少なくとも2つのプロセスがほぼ同様のデータをほぼ同様の時間に更新しようと試みるときに生じる。楽観的同時性コンポーネント510は楽観的同時性を使用し、楽観的同時性は、別のプロセスがほぼ同様の時間に変更を行う可能性が低いことを仮定し、したがって、変更をデータ記憶システム(例えばストア)に対してコミットする準備ができるまで、ロックを行わない。そのような技法を使用することにより、楽観的同時性コンポーネント510はロック時間を削減し、より良好なデータベース性能を提供する。複数の呼出し元による同時アクセスが、ストアの状態についての特定の呼出し元の仮定を無効にさせる場合、無効仮定を検出することができ、呼出し元がシステム状態の理解を再同期し、要求を再サブミットするまで、データ変更要求がシステムによって拒絶される。
【0037】
例えば、楽観的同時性コンポーネント510は、各修正に伴って変化する項目に関連するトークン(token)を追跡することができる。トークンは、データがメモリに読み取られるときに呼出し元に渡される。呼出し元は、更新オペレーションに対するパラメータとしてトークンをストアに戻すことができる。ストアは、渡されたトークンをストア内の現トークン値と比較することができる。トークンが等しい場合、書込みが成功し、実施される。しかし、メモリ内の呼出し元のバージョンがストア内のものとは異なる値である場合、項目が別のアプリケーションによって修正されたことを知らせ、書込みは失敗する。
【0038】
別の例では、2つのアプリケーションによる同時アクセスによる失敗が検査される。以下の表では、項目を修正しようと試みるデータ記憶システム502上で同時に動作する2つのアプリケーションが存在する。
【0039】
【表1】
【0040】
API506は、それぞれの作成および/または更新オペレーションに関するトークン情報を返すことにより、この技法をサポートすることができる。例えば、create関数からの出力トークンパラメータを、「concurrencyToken」と命名することができる。API506は、更新および/または削除オペレーションに関する入力パラメータとして、トークン情報を取得することもできる。更新および/または削除オペレーションに渡されるトークン情報も、「concurrencyToken」と呼ぶことができる。パラメータは、入力パラメータと出力パラメータの両方でよいことを理解されたい。入力において、「concurrencyToken」は、オブジェクトがキャッシュ内に読み取られ、作成され、かつ/または更新されたときに受け取られる値である。これは、オブジェクトへの書込みがない場合のストア内の「期待値」でよい。出力において、ストアは、オペレーションが首尾よく完了した後に、オブジェクトの新しい「concurrencyToken」を返すことができる。
【0041】
「concurrencyToken」」パラメータは、BIGINT(例えば、64ビット整数)としてタイプ付けすることができる。パラメータは、データベースのタイムスタンプでよいが、値が増加することはできないことを理解されたい。バックアップから項目を回復することにより、時間に関して過去のステータスを引き起こすことができる。2つの「concurrencyToken」間のサポートされる唯一のオペレーションは、等号(equality)および/または不等号(inequality)に関するものである。この値は、ストアによってサポートされる様々なビューでも利用可能である。ビュー内の列名は、項目、項目拡張、リンク、および項目フラグメントに関する「LastUpdateLocalTS」である。セキュリティ記述子について、列名は「SDLastUpdateLocalTS」である。
【0042】
図6に、データ記憶システムの特徴内のデータを操作するAPIの起動を容易にするシステム600を示す。データ記憶システム602は、データモデルに少なくとも部分的に基づくデータベースに基づいたファイル記憶システムでよく、データが複合タイプのインスタンスとして表される。データ操作コンポーネント604は、データ記憶システム602に関連するデータ操作を提供することができる。データ操作コンポーネント604は、APIコンポーネント606(本明細書では「API606」と呼ぶ)を起動することができる。API606は、ストアドプロシージャを実行することによってデータ操作(例えば、ストア内のデータの作成、更新、および削除)を提供することができる。API606は、例えば、ユーザがデータ操作を実行することを可能にすると共に、データ記憶システム602に関連する特徴の完全性および/または純度を保証する。データ記憶システム602、データ操作コンポーネント604、およびAPI606は、それぞれ図5、4、3および2のデータ記憶システム502、402、302、および202、データ操作コンポーネント504、404、304、および204、API506、406とほぼ同様でよい。
【0043】
データ操作コンポーネント604は、API606によって使用される少なくとも1つのデータ構造を使用することのできる、データ構造コンポーネント608を含むことができる。例えば、データ構造コンポーネント608は、様々なシノニムおよび/または汎用リストタイプを使用することができる。1つの例では、以下の表が、シノニムおよび構造化照会言語(SQL)タイプと、リストタイプと、対応する共通言語ランタイム(CLR)とを定義することができる。以下の表は例であり、本発明はそのように限定されないことを理解されたい。
【0044】
【表2】
【0045】
【表3】
【0046】
データ構造コンポーネント608は、変更定義(change definition)タイプを使用することができる。API606およびデータ操作コンポーネント604は、プロパティグラニュラリティレベル(property granularity level)において更新オペレーションおよび/または修正を提供することができる。そのような技法を使用することにより、呼出し元は、変更後データを更新メソッドに渡すことができると共に、オペレーションのサイズを、変更されたデータのサイズに比例して保つ。グラニュラ更新は、ChangeDefinitionタイプを使用して記述することができる。データ記憶システム602においては、オブジェクトがストア内に永続し、テーブルの特定のセルが、Contactの格納インスタンス、または複合でよいプロパティを有するその他の複合タイプである。ChangeDefinitionタイプは、構造化オブジェクトに適用することのできる1組の変更をモデル化することができることを理解されたい。
【0047】
例えば、コンタクトの名前フィールドを更新するために、呼出し元は、ChangeDefinitionオブジェクトのインスタンスを作成し、オブジェクトに2つのノード(例えば、項目タイプを記述するノードと、フィールド名を含むノード)をポピュレートすることができる。次いで、クライアントは、ChangeDefinitionのコンパイル済みバージョンおよび対応する値のリストうちの少なくとも1つを、ストア内の修正を行うUpdateItemメソッドに渡すことができる。ほぼ同様のパターンを、項目拡張および/またはリンク内のフィールドを修正することに適用できることを理解されたい。
【0048】
ChangeDefinitionインスタンスは、ツリー構造を使用して各プロパティの変更をモデル化し、ツリー内の各レベルは、オブジェクトタイプ内のプロパティのネストされたレベルに対応することができる。プロパティ値に対する変更は、割当てノードと呼ばれるリーフノード(leaf node)によって表される。割当てノードタイプは割当てでよい。これらのノードは、プロパティへの割当てを表すことができ、プロパティ名を含むことができる。非リーフノード(ルートを除く)は、トップレベルプロパティおよび/または別のネストされたタイプのプロパティのメンバであるネストされたタイプを表す。これをトラバーサルノード(traversal node)と呼ぶことができる。トラバーサルノードは、ノードのリスト(割当てまたはトラバーサル)と、任意選択で、適切なキャストを実装するためにストアによって使用されるタイプとを含む。トラバーサルノードタイプは、PathComponentである。
【0049】
データ構造コンポーネント608は、トラバーサルノードおよび割当てノードを作成することによってChangeDefinitionを構築することができる。例えば、ChangeDefinitionによってノードを追加することができ、ChangeDefinitionクラスは、ノードを作成し、ツリーをウォークするメソッドを有する。1つの例では、ChangeDefinitionクラスはユーザ定義タイプ(UDT)ではない。別の例では、以下が定義済み割当てタイプである。1)スカラ値を深さにおいて割り当てる、2)ネストされたタイプのインスタンスを深さにおいて割り当てる、3)集合(例えば、マルチセットおよび/またはsqlList)を深さにおいて割り当てる。スカラプロパティ(例えば、XMLおよびFileStreamプロパティ)を置換できることを理解されたい。別の例では、そのようなスカラプロパティが部分的に更新される。ツリーが完了すると、データ構造コンポーネント608は、コンパイルメソッドを使用することができ、コンパイルメソッドは、バイナリフォーマットに変更することのできるプロパティの記述を返すことができる(例えば、コンパイル済み変更定義とも呼ばれる)。1つの例では、更新メソッド内のchangeDefinitionパラメータとして値を渡すことができる。
【0050】
以下は、データ構造コンポーネント608の実装の一例であり、本発明の限定とみなすべきではない。呼出し元は、ChangeDefinitionツリー内に記述されたプロパティに対応する値のリストを構築することに関与することができる。呼出し元が割当てノードをChangeDefinitionツリーに追加するとき、索引を割当てノードに割り当てることができる。索引はn−1に等しくすることができる(ただし、nはそれまでのツリーへの挿入数である)。例えば、第1割当てノードは索引0を得、第2割当てノードは索引1を得、というようにすることができる。索引をaddAssignmentの呼出し元に返すこともできる。次いで、呼出し元は、ChangeDefinitionツリーに追加されるプロパティの値を含むAssignmentValueオブジェクトを構築する。次いでAssignmentValueがAssignmentValueListに追加され、それによってAssignmentValueList内のその位置をChangeDefinitionツリーの割当てノード内の索引にマッピングすることができる。割当てノードをChangeDefinitionに追加することができ、AssignmentValueオブジェクトをリストの最後に付加する追加メソッドを使用して、対応するAssignmentValueオブジェクトをAssignmentValueリストに追加することができる。得られるAssignmentValueListは、更新メソッドのvalueListパラメータに渡される値である。
【0051】
データ操作コンポーネント604は、データ記憶システム602の特徴と矛盾するオペレーションおよび/またはデータ操作に関連するエラーを処理するためのエラーコンポーネント610をさらに含むことができる。例えば、API606は、現項目ドメインを保証する。項目ドメインとは、関連するプロパティ、エンティティ、および/またはサブエンティティと共に項目が定義し、かつ/または含む論理エリアである。項目ドメイン外部の項目が参照される場合(例えば、項目を介して、あるいはリンク、項目拡張、または項目フラグメントを介して)、項目が存在しないかのように見える。言い換えれば、「項目が存在しない」というエラーコードを使用することができる。
【0052】
エラーコンポーネント610は、エラーコードを起動することができる。エラーコードは、不完全なデータ操作を知らせるように実装することができ、エラーを記述するテキストに対応することができる。データ記憶システム602内のデータの操作に関する手続きおよび/またはオペレーションは、関数(例えば、削除、コピー、移動、取得、設定、更新など)に関するリターンコードとすることができる整数値を返すことができる。1つの例では、オペレーションが成功した場合には値は0でよく、オペレーションが失敗した場合には非0値でよい。それぞれの操作手続き/オペレーションおよび/または関数をエラーコードと関連付けることができる。例えば、API606は、テキストを表示するのではなく、エラーコードを返すことができる。エラーコードは、次いで、対応するテキストメッセージにリンクすることができ、必要なら、データベース内のテーブルからテキストメッセージを取り出すことができる。
【0053】
図7に、APIコンポーネントを使用してデータ記憶システム内のデータの操作を容易にするシステム700を示す。データ記憶システム702は、データモデルに少なくとも部分的に基づくデータベースに基づいたファイル記憶システムでよく、データは、複合タイプのインスタンスとして表される。データ操作コンポーネント704は、データ記憶システム702に関連するデータ操作を提供することができると共に、データ記憶システム702に関連する少なくとも1つの特徴の実施を保証する。データ操作コンポーネント704は、APIコンポーネント706(本明細書では「API706」と呼ぶ)を起動することができる。API706は、それぞれ受け取ったユーザ入力に対するストアドプロシージャを実行することによって、データ操作(コピー、更新、置換、取得、設定、作成、削除、移動など)を提供することができる。API706は、それぞれデータ操作要求/コマンドに対するユーザ入力を受け取ることができ、そのようなユーザ入力が実行されると共に、データ記憶システム702に関連する特徴の完全性および/または純度が保証される。データ記憶システム702、データ操作コンポーネント704、およびAPI706は、それぞれ図6、5、4、3、2のデータ記憶システム602、502、402、302、および202、データ操作コンポーネント604、504、404、304、および204、API606、506、406とほぼ同様でよいことを理解されたい。
【0054】
データ操作コンポーネント704は、(データ記憶システム702を開発するために使用される)どんなデータモデルの制約も無効にすることなく、ユーザがデータ記憶システム702に関連するデータを操作することを可能にする手続きおよび/またはオペレーションを定義する、API定義コンポーネント708を含むことができる。API定義コンポーネント708は、データ記憶システム702内のデータの操作に関連して任意の適切な関数および/または手続きを実装することができる。手続きについての以下の説明は一例であり、本発明はそのように限定されないことを理解されたい。さらに、以下の手続きは、名前、機能、プロパティを参照し、説明は、本発明を限定するべきではない。
【0055】
API定義コンポーネント708は手続きを使用して、データ記憶システム702内の項目を作成することができ、より具体的には、データ記憶システム702内のストア内の項目を作成することができる。例えば、以下の表は、作成項目手続きに関連するパラメータを示す。
【0056】
【表4】
【0057】
【表5】
【0058】
上記で示されるように、作成項目手続きは、データ記憶システム702に関する制約を保証することに少なくとも部分的に基づいて、作成項目手続きに関連する様々なエラーコードを有することができる。そのようなエラーコードは任意の適切なフォーマットでよく、コードは、対応するエラーを記述するテキストメッセージを表すことができる。例えば、ユーザがfile−backedフォルダを作成しようと試みるときにエラーコードを生成することができる。別の例では、タイプ汎用ファイルの項目がfile−backedでない場合に、エラーコードを生成することができる。
【0059】
作成項目の例示的手続きに続いて、各項目は、コンテナ項目のItemIdであるContainerIdと呼ばれるプロパティを有する。コンテナ項目は、ストア内に既に存在していなければならず、クライアントの接続ポイントから到達可能でなければならない。呼出し元が項目に関するCreationTimeを提供しない(例えば、値ヌルを提供する)場合、ストアは、CreationTimeを現在時間に設定する。呼出し元が項目に関するLastModificationTimeを提供しない(例えば、値ヌルを提供する)場合、ストアは、LastModificationTimeを現在時間に設定する。両方の値が提供されない場合、ストアは、item.CreationTimeを提供し、生成されるitem.LastModification時間はほぼ同様となる。
【0060】
別の例では、API定義コンポーネント708は、SecurityDescriptorを使用することができる。任意選択のSecurityDescriptorを含むことは、クライアントが新しい項目を自動的に作成することができ、セキュリティおよび検証パラメータを明示的に設定することができるための要件を満たす。SecurityDescriptorは、上述したセキュリティコンポーネント(図示せず)と共に機能できることを理解されたい。さらに、API定義コンポーネント708は、ツームストーン化項目(tombstoned item)の実装を定義することができる。手続きに渡されたものと厳密に同じ項目idを有するツームストーン化項目がストア内に存在する場合、手続きは失敗する。ツームストーン化項目が復活し、CreateItemに対するこの呼出しに渡された新しいデータが、復活した項目内に置かれる。
【0061】
上述したように、concurrencyTokenが返され、項目に対する後続の更新時に、クライアントが楽観的同時性検出を使用することが可能となる。返されるconcurrencyTokenは、項目に関するトークンである。別の例では、ファイルシステムエージェントがCreateItemを呼び出したとき、APIコンポーネント706は監査(audit)を生成しない。呼出しは、ユーザのコンテキストで行われ(例えば、exec_as_htoken)、アクセスチェックが、API706において行われる。このイベントに対するファイルシステム(例えば、従来型ファイル記憶システムであり、ビットベースのシステムが、同様のビットサイズのAPIをオペレーティングシステムと共に使用する)監査が、ファイルシステムエージェントによって生成される。さらに、API定義コンポーネント708は、file−backed項目に関して様々な実施を実現することができる。例えば、項目がfile−backed項目である(例えば、「isFileBacked」フラグが真に設定される)場合、以下が当てはまる。1)FileBackedItemを別のfilebacked項目ツリー内に含めることができず(例えば、親項目について、EntityState.RootFileBackedItemIdはNULLであるべきである)、2)「CompoundItem」タイプとなるように宣言される項目のみをfile backすることができる。
【0062】
API定義コンポーネント708は、少なくとも1つの複合項目を作成するための手続きを実装することができる。この手続きは、データ記憶システム702に関連するストア内の複数の項目を作成することができる。API定義コンポーネント708は1組の項目拡張と、各項目との1組のリンクを作成できることを理解されたい。タイプComplexItemは、不変のUDTである。これは本質的には、オペレーション/手続きに関連するデータを渡すためのコンテナである。以下は、ComplexItemの例示的定義である。
public class ComplexItem
{
Public ComplexItem(Item item,
SqlInt32promotionStatus,
SqlBoolean isFileBacked,
SqlString namespaceName,
SqlBoolean isGhost,
SyncEntityVersion syncInfo,
ItemSyncMetadata syncMetadata);
public void AddLink(Link link,
SyncEntityInformation syncInfo,
LinkSyncMetadata syncMetadata);
public void AddItemExtension(ItemExtension itemExtension,
SyncEntityVersion syncInfo);
public void AddItemFragment(ItemFragment itemFragment,
SyncEntityVersion syncInfo);
}
さらに、以下の表に、作成複合項目手続きに関連するパラメータの一例を示す。
【0063】
【表6】
【0064】
API定義コンポーネント708は、以下の機能を提供できることを理解されたい。トランザクションセマンティクスは、すべての項目が原子的に追加されるようなものとなる。関数の間に何らかの障害があった場合、複合項目はストアに挿入されない。complexItemsリストが空である場合、オペレーションはノーオペレーション(noop)であり、成功を返す。手続きに渡されるもののうちのいずれかと同じ項目IDを有するツームストーン化項目がストア内に存在する場合、手続きは失敗する。項目拡張リストは、ヌル、または0個以上のエントリを有する非ヌルでよい。リンクリストは、ヌル、または0個以上のエントリを有する非ヌルでよい。項目フラグメントリストは、ヌル、または0個以上のエントリを有する非ヌルでよい。concurrencyTokenが返され、後続の更新時にクライアントが楽観的同時性検出を使用することが可能となる。concurrencyToken値は、このオペレーションの結果として作成されるすべての項目、リンク、および項目拡張に適用する。file−backed項目に関して、以下を適用することができる。1)FileBackedItemを別のfilebacked項目ツリー内に含めることができず(例えば、親項目について、EntityState.RootFileBackedItemIdはNULLであるべきである)、2)「CompoundItem」タイプとなるように宣言される項目のみをfile backすることができる。
【0065】
API定義コンポーネント708は、データ記憶システム702内のストア内にリンクを作成するための手続きを実装することができる。例えば、以下の表は、リンクを作成するために使用される手続きに関連する様々なパラメータを示す。
【0066】
【表7】
【0067】
API定義コンポーネント708は、データ記憶システム702に関連する様々な特徴を保証することを理解されたい。例えば、ターゲット項目idは、(このリンクタイプについてのスキーマで指定されるような)正しいタイプの有効な項目を指すことができ、かつ/またはターゲット項目idは、ヌルでなければならない。CreateLinkを使用して、既存のデータ記憶システム702項目間の1つのリンクを作成することができる。手続きに渡されたものとほぼ同様のリンクidおよびソース項目idを有するツームストーン化リンクがストア内に存在する場合、手続きは失敗しないことを理解されたい。ツームストーン化リンクが復活することができ、CreateLinkに対するこの呼出しに渡された新しいデータが、復活したリンク内に置かれる。さらに、このリンクに対する後続の更新時にクライアントが楽観的同時性検出を使用することが可能となるようにconcurrencyTokenを返すことができる。
【0068】
API定義コンポーネント708は、ストア内の項目拡張を作成するために手続きを使用することができる。例えば、以下の表は、項目拡張を作成するために使用される手続きに関連する様々なパラメータを示す。
【0069】
【表8】
【0070】
この項目拡張に対する後続の更新時にクライアントが楽観的同時性検出を使用することができるように、上記で使用されるconcurrencyTokenを返すことができる。
【0071】
API定義コンポーネント708は、ストア内の項目を修正するための手続きを起動することができ、ストアは、データ記憶システム702に関する永続データである。以下の表は、項目手続きの修正に対応するパラメータおよび説明の一例である。
【0072】
【表9】
【0073】
API定義コンポーネント708は、ストア内のリンクを修正するための手続きを起動することができる。以下の表は、リンク手続きの修正に対応するパラメータおよび説明の一例である。
【0074】
【表10】
【0075】
リンクのソースは不変であり、このストアドプロシージャを使用することによって変更することはできない。リンクのターゲットは可変であり、UpdateLinkを呼び出すことによって変更することができる。ターゲット項目idのタイプは、ヌルまたは非ヌルでよい。非ヌルである場合、ストア内に存在する項目を指すことができ、リンクに対して宣言されたタイプと合致することができる。
【0076】
さらに、API定義コンポーネント708は、ストア内のItemExtensionを修正することができる。以下の表は、API定義コンポーネント708で使用される手続きの一例であり、様々なプロパティおよび/またはそれに関連する説明を示す。
【0077】
【表11】
【0078】
さらに、API定義コンポーネント708は、ストア内の項目を削除することを可能にするAPI706で、手続きを起動することができる。以下は、ストアから項目を削除する手続きの例示的パラメータおよび説明を伴う表である。
【0079】
【表12】
【0080】
項目が見つからなかった場合、手続きは成功を返す。項目をターゲットとするストア内の任意のリンクが、ヌルに設定されたTargetItemIdプロパティを有することができる。TargetItemIdをヌルに設定することは、呼出し元がリンクに対して有する有効な許可の如何に関わらず、成功することができる。項目を削除するとき、項目をソースとするリンク、項目に関連するItemExtensionおよびItemFragmentを削除することができる。項目が子を有さない(例えば、itemidに等しいコンテナidを有する項目が存在しない)場合、削除は成功することができる。1つの例では、項目のツリーのカスケード削除を強制する方法はない。このことは、呼出し元のみによって実装することができる。項目idがツームストーン化される場合、concurrencyToken/LastUpdateTS値の状態の如何に関わらず、成功が返される。concurrencyTokenが合致せず、項目がツームストーン化されない場合、エラーコードを返すことができる。ファイルシステムエージェントは、それ自体のコンテキストでDeleteItemを呼び出すことができる。API706ではアクセスチェックまたは監査は行われない。
【0081】
API定義コンポーネント708は、ストア内のリンクを削除する手続きを起動することができる。以下の表は、リンク手続きの削除に対応するパラメータおよび説明の一例である。
【0082】
【表13】
【0083】
API定義コンポーネント708は、データ記憶システム702内のストア内の項目拡張を削除するための手続きを使用することができる。以下の表は、本発明と共に使用される項目拡張手続きの削除に対応するパラメータおよび説明の一例である。
【0084】
【表14】
【0085】
さらに、API定義コンポーネント708は、ストア内にItemFragmentを作成するための手続きを使用することができる。以下の表は、ユーザがItemFragmentを作成することを可能にする手続きに対応するパラメータおよび説明の一例である。
【0086】
【表15】
【0087】
API定義コンポーネント708は、ストア内のItemFragmentを修正するための手続きを起動することができる。このストアドプロシージャを、タイプの名前およびItemFragmentプロパティの名前がストアドプロシージャの名前に含まれるように、タイプごとに生成することができる。より明確には、上述した「CreateItemFragment」を参照されたい。以下の表は、ストア内のItemFragmentの修正に対応するパラメータおよび説明の一例である。
【0088】
【表16】
【0089】
API定義コンポーネント708は、ストア内のItemFragmentを削除するための手続きを定義および/または実装することができる。以下は、データ記憶システム702内のItemFragmentを削除するための手続きの一例として様々なパラメータを示す表である。
【0090】
【表17】
【0091】
さらに、API定義コンポーネント708は、項目のセキュリティ記述子を得る手続きを使用することができる。以下の表は、データ記憶システム702内の項目のセキュリティ記述子を取得するための手続きに関連する様々なパラメータの一例である。
【0092】
【表18】
【0093】
concurrencyTokenが返され、セキュリティ記述子に対する後続の更新時にクライアントが楽観的同時性検出を使用することが可能となる。concurrencyTokenをセキュリティ記述子と関連付けることができる。1つの例では、セキュリティ記述子に関するconcurrencyTokenが、itemIdに対応する項目のconcurrencyToken値に関係付けられない。ファイルシステムエージェントは、それ自体のコンテキストでGetItemSecurityを呼び出すことができる。
【0094】
API定義コンポーネント708は、ストア内の項目のセキュリティ記述子を設定することができる。以下の表は、API706で使用されるセキュリティ記述子を設定するための手続きの一例であり、それに関連する様々なプロパティおよび/または説明を示す。
【0095】
【表19】
【0096】
API定義コンポーネント708は、項目をあるコンテナから別のコンテナに移動し、かつ/または項目のnamespaceNameを変更する手続きを使用することができる。以下の表は、そのような手続きに関連する様々なパラメータの一例である。
【0097】
【表20】
【0098】
移動すべき項目または新しいコンテナのいずれかが現在の接続ポイントから到達可能でない場合、手続きはエラーを返すことができる。同じ名前を有する項目がターゲットコンテナ内に既に存在している場合、このオペレーションは失敗する。この関数を使用するための3つの有効な方法がある。これらの使用法は、以下の表に示される。
【0099】
【表21】
【0100】
MoveItemがどのように呼び出されるかに関わらず(例えば、項目を移動し、かつ/または項目をリネームする)、項目に関する(concurrencyTokenで返される)LastUpdateTS値を更新することができる。ファイルシステムエージェントは、ユーザのコンテキストでMoveItemを呼び出すことができる。リネームされるファイル/ディレクトリに関するアクセスチェックまたは監査はない。新しい親に関して行われるアクセスチェックおよび監査が、ユーザが項目を新しい宛先に移動するためのアクセスを有するかどうかを判定する。
【0101】
API定義コンポーネント708は、項目を新しい項目で置換する手続きを使用することができ、新しい項目は異なるタイプでよい。以下の表は、そのような手続きに関連する様々なパラメータの一例である。
【0102】
【表22】
【0103】
ReplaceItemオペレーションを使用して、項目オブジェクトを別の項目オブジェクトで置換することができる。こうしたオブジェクトをOldItemおよびNewItemと呼ぶことができる。OldItemおよびNewItemは同じItemIdを有することができるが、異なるタイプを有することもできる。例えば、オペレーションが使用されるあるアプリケーションは、プロパティプロモーションである。以下の説明をReplaceItemオペレーションと関連付けることができる。1)コンテナIDを変更することができない(この機能を取得するために、呼出し元はMoveItemを呼び出さなければならない)。2)既存のnamespaceNameは変化しない。3)項目がfile−backedである場合、置換される項目をソースとするすべての項目を常に削除する。4)置換項目オペレーションが(ターゲットタイプ制約がもはや有効ではないので)無効とすべき項目をターゲットとするリンクを引き起こす場合、ReplaceItemは失敗する。5)置換項目オペレーションが(ソースタイプ制約がもはや有効でないので)無効とすべき項目をソースとするリンクを引き起こす場合、ReplaceItemは失敗する。6)新しい項目の変更ユニットがすべてデフォルト値に設定される。少なくとも2つの例外が存在することができる。項目がsyncに関与する場合、ChangeInformation.SyncInformation.CreationSyncVersion値を古い項目から新しい項目に持ち越すことができる。さらに、項目がsyncに関与し、file backedである場合、ファイルストリームに関する変更ユニットが、古い項目から新しい項目に持ち越される。7)すべてのファイルベースのプロパティを指定しなければならない。CreateItemとは異なり、ユーザによって設定されない場合、親フォルダからのFileプロパティの継承はない。8)file backed項目について、DeleteItemOwnedContentフラグが指定されない限り、どんなファイルストリームデータも修正されない(以下の表を参照)。
【0104】
【表23】
【0105】
さらに、9)ReplaceItemは、項目がGeneric ItemタイプからCompound Itemタイプに切り替わることを許可せず、逆もまた同様である(以下の表を参照)。
【0106】
【表24】
【0107】
図8に、インテリジェンスを使用して、それぞれの特徴を有するデータモデルに少なくとも部分的に基づくデータの操作を容易にするシステム800を示す。システム800は、上述した図で説明したそれぞれのコンポーネントとすべてほぼ同様でよい、(データモデル表現によって表すことのできる)データ記憶システム802、データ操作コンポーネント804、およびインターフェース106を含むことができる。システム800は、インテリジェントコンポーネント806をさらに含む。インテリジェントコンポーネント806はデータ操作コンポーネント804によって使用され、データ記憶システム802に関連する少なくとも1つの特徴に従うデータの操作(例えば、コピー、更新、置換、取得、設定、作成、削除、移動など)を容易にすることができる。例えば、インテリジェントコンポーネント806を使用して、データ記憶システム802に関連する特徴を分析することができ、かつ/またはそれぞれデータ記憶システム802に対する各特徴の完全性を保証することができる。
【0108】
インテリジェントコンポーネント806は、イベントおよび/またはデータを介して取り込まれる1組の観測(observation)から、システム、環境、および/またはユーザの状態についての推理を与えること、またはその状態について推論できることを理解されたい。例えば、推論を使用して、特定の状況またはアクションを識別することができ、または各状態にわたる確率分布を生成することができる。推論は、確率的、すなわちデータおよびイベントの考慮に基づく注目の各状態にわたる確率分布の計算でよい。推論は、1組のイベントおよび/またはデータからより高いレベルのイベントを構成するために使用される技法を参照することもできる。そのような推論の結果、各イベントが時間的に近接して相関されようとそうでなかろうと、またイベントおよびデータが1つの、またはいくつかのイベントおよびデータソースに由来しようと、1組の観測されたイベントおよび/または格納されたイベントデータから、新しいイベントまたはアクションが構築される。様々な(明示的および/または暗黙的に訓練された)分類方式および/またはシステム(例えば、サポートベクトルマシン、ニューラルネットワーク、エキスパートシステム、ベイズの信念ネットワーク(Bayesian belief network)、ファジィ論理、データフュージョンエンジンなど)を、本発明に関連する自動および/または推定アクションを実施することに関連して使用することができる。
【0109】
クラシファイア(classifier)は、入力属性ベクトルx=(x1,x2,x3,x4,xn)を、入力がクラスに属する信頼度に対応付ける関数であり、すなわち、f(x)=confidence(クラス)である。そのような分類は、確率および/または統計に基づいた分析(例えば、分析効用およびコストへの分解(factoring))を使用して、ユーザが自動的に実施することを望むアクションを予測または推論することができる。サポートベクトルマシン(SVM)は、使用することのできるクラシファイアの一例である。SVMは、可能な入力の空間内の超曲面を見つけることによって動作し、その超曲面は、非トリガリングイベントからトリガリング基準を分割しようと試みる。直感的に、これにより、トレーニングデータに近いが同一ではないテストデータに関して正しい分類が行われる。他の有向および無向モデル分類手法は、例えば、独立性の様々なパターンを与えるナイーブベイズ、ベイズのネットワーク、デシジョンツリー、ニューラルネットワーク、ファジィ論理モデルおよび確率分類モデルを含む。本明細書で使用される分類は、優先順位のモデルを開発するために使用される統計的回帰も含む。
【0110】
図9〜10に、本発明による方法を示す。話を簡単にするために、本発明による方法を一連の動作として図示し、説明する。本発明は図示される動作および/または動作の順序によって限定されず、例えば動作は、本明細書で提示および説明されていない他の動作と共に、様々な順序で、かつ/または同時に行うことができることを理解されたい。さらに、本発明による方法を実装するために、図示されるすべての動作が必要であるわけではない。さらに、状態ダイアグラムまたはイベントを介して、一連の相互に関係する状態として本発明による方法を表すことができることも当業者には理解されよう。
【0111】
図9に、少なくとも1つのモデル制約を実施しながら、データベースに基づいたシステム内のデータ操作の起動を容易にする方法900を示す。参照番号902においては、データモデルを使用してデータ記憶システムを表すことができる。データモデルは、データベース構造に少なくとも部分的に基づく複合モデルでよく、複合タイプのインスタンスとしてのデータ記憶システム内の情報の表現が可能となるように項目、副項目、プロパティ、および関係が定義される。データモデルは、リッチ永続オブジェクトおよびオブジェクト間のリンクを作成し、管理するために、1組の基本ビルディングブロックを使用することができる。データモデルは、表現されるデータ記憶システムの構造および/または機能を反映する少なくとも1つの特徴を含むことができることを理解されたい。言い換えれば、データモデルは、データモデル、データ記憶システム、およびそれに関連するデータの完全性を保証するように実施することのできる制約を含むことができる。
【0112】
参照番号904においては、(データモデルに基づく)データ記憶システムに関連する特徴を求めることができる。例えば、特徴は、そのような特徴に従ってデータ記憶システムを提供するためのガイドライン、制限、青写真などからなることができる。そのような特徴を使用することにより、対応するデータモデルの完全性および精度を保証することができる。参照番号906においては、少なくとも1つの手続きを実装することによってデータ操作を起動することができる。データ記憶システムに関連する任意の適切なデータ操作を提供する間、そのようなデータ記憶システムの特徴が実施され、安定な環境が得られる。1つの例では、データ記憶システムと共に任意の適切なデータ操作を可能とするためにAPIを使用することができる。例えば、ユーザはAPIを使用することができ、データを修正することができる。データ操作は、限定はしないが、コピー、更新、置換、取得、設定、作成、削除、移動などを含むことができることを理解されたい。例えば、データ記憶システムはコンテナ階層システムを含むことができ、そのような特徴が、データ記憶システム内のデータを操作するのに使用される任意の手続き中に実施される。
【0113】
図10に、それぞれの特徴が実施される、データモデルに少なくとも部分的に基づいてデータを操作する方法1000を示す。参照番号1002においては、データモデルを使用してデータ記憶システムを表すことができる。データ記憶システムはデータベースに基づいたファイルシステムでよく、情報がタイプの複合インスタンスとして表される。参照番号1004においては、表現されるデータ記憶システムに関連する特徴が求められる。特徴は、限定はしないが、制限、ガイドライン、規則、目標、青写真、および/または正確な実装を促進するデータ記憶システムに関連する任意のその他の適切な要素を含むことができる。
【0114】
参照番号1006においては、少なくとも1つの手続きを使用することによってデータの操作を起動することができる。データ操作は、APIによって提供することができ、ユーザは少なくとも1つの手続きを呼び出すことができ、手続きは少なくとも1つのデータ操作に対応することができる。データ記憶システムに関連する特徴の維持および/または実施中に、データ操作が起動されることを理解されたい。参照番号1008においては、エラーコードを使用することができ、かつ/またはセキュリティを使用することができる。例えば、データ操作がデータ記憶システムの特徴に違反するとき、エラーコードを生成し、使用することができる。APIを介してユーザにエラーコードを表示することができ、コードは、コードをテキストメッセージに関係付けるルックアップテーブルに対応することができることを理解されたい。データ操作および/またはAPIに関連するセキュリティは、様々な許可レベルおよび/またはログインおよび/またはパスワードを含むことができる。言い換えれば、各データ操作をセキュリティレベルに関係付けることができ、一定のセキュリティレベルのみが手続きを実行することができ、かつ/またはログインおよびパスワードが必要とされる。
【0115】
参照番号1010においては、データ記憶システム内のデータ操作に関連して楽観的同時性および/またはデッドロッキングを実装することができる。楽観的同時性は、ほぼ同様の時間に別のプロセスが変更を行う可能性が低いことを仮定し、したがってデータ記憶システム(例えばストア)に変更をコミットする準備ができるまでロックを行わない。そのような技法を使用することにより、ロック時間が削減され、より良好なデータベース性能が提供される。1つの例では、項目の各修正に伴う変化を項目と関連付けるようにトークンを保つことができる。言い換えれば、楽観的同時性は、2つの同時アプリケーション間のデータのアクセスを容易にすることができる。さらに、ロッキングは、複数の同時呼出し元のサポートを容易にすることができる。例えば、各呼出し元が他の呼出し元を待っているのでどの要求も満たすことができないように、共通の1組の資源の所有権を要求する複数の同時呼出し元が存在するシナリオを想定する。そのような場合、システムは呼出し元をブロックする(例えば、呼出し元をロックアウトする)ことができ、そのようなケースから外れる唯一の方法は、呼出し元の1つを去らせることである。この状況を回避するために、個々の要求が自動的に成功または失敗することを複合ロッキング論理が保証することができるように、ロッキングは複数の同時呼出し元をサポートすることができる。さらに、個々の要求が原子的に成功または失敗することを複合ロッキング論理が保証することができるように、複数の同時呼出し元をサポートすることができる。
【0116】
本発明の様々な態様を実装する追加の状況を示すために、図11〜12および以下の説明は、本発明の様々な態様を実装することのできる適切なコンピューティング環境を簡潔、かつ一般的に示す。上述した説明では、ローカルコンピュータおよび/またはリモートコンピュータ上で動作するコンピュータプログラムのコンピュータ実行可能命令の一般的な文脈において本発明を説明したが、本発明を他のプログラムモジュールと組み合わせて実施できることが当業者には理解されよう。一般に、プログラムモジュールは、特定のタスクを実施し、かつ/または特定の抽象データタイプを実装するルーチン、プログラム、コンポーネント、データ構造などを含む。
【0117】
さらに、単一プロセッサまたはマルチプロセッサコンピュータシステム、ミニコンピュータ、メインフレームコンピュータ、ならびにパーソナルコンピュータ、ハンドヘルドコンピューティング装置、マイクロプロセッサベースの、および/またはプログラム可能な家庭用電子機器などを含む他のコンピュータシステム構成と共に本発明の方法を実施することができ、それぞれを1つまたは複数の関連する装置に動作可能に結合することができることを当業者は理解されよう。本発明の図示される態様を、いくつかのタスクが通信ネットワークを介してリンクされるリモート処理装置で実行される分散コンピューティング環境でも実施することができる。しかし、本発明のすべてではないとしても、一部の態様をスタンドアロンコンピュータ上で実施することができる。分散コンピューティング環境では、プログラムモジュールをローカルおよび/またはリモートメモリ記憶装置に配置することができる。
【0118】
図11は、本発明が相互に通信することのできる例示的なコンピューティング環境1100のブロック図である。システム1100は、1つまたは複数のクライアント1110を含む。クライアント1110は、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティング装置)でよい。システム1100は、1つまたは複数のサーバ1120も含むことができる。サーバ1120は、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティング装置)でよい。例えば、サーバ1120は、本発明を使用することにより、スレッドを収容して変換を実施することができる。
【0119】
クライアント1110とサーバ1120との間の1つの可能な通信は、2つ以上のコンピュータプロセス間で伝送されるように適合されたデータパケットの形態でよい。システム1100は、クライアント1110とサーバ1120との間の通信を容易にするように使用することのできる通信フレームワーク1140を含む。クライアント1110は、クライアント1110に対してローカルに情報を格納するように使用することのできる1つまたは複数のクライアントデータストア1150に動作可能に接続される。同様に、サーバ1120は、サーバ1120対してローカルに情報を格納するのに使用することのできる1つまたは複数のサーバデータストア1130に動作可能に接続される。
【0120】
図12を参照すると、本発明の様々な態様を実装するための例示的環境1200は、コンピュータ1212を含む。コンピュータ1212は、処理装置1214、システムメモリ1216、およびシステムバス1218を含む。システムバス1218は、限定はしないが、システムメモリ1216を含むシステム構成要素を処理装置1214に結合する。処理装置1214は、様々な入手可能なプロセッサのうちのいずれでもよい。デュアルマイクロプロセッサおよびその他のマルチプロセッサアーキテクチャを、処理装置1214として使用することもできる。
【0121】
システムバス1218は、限定はしないが、業界標準アーキテクチャ(ISA)、マイクロチャネルアーキテクチャ(MSA)、拡張ISA(EISA)、Intelligent Drive Electronics(IDE)、VESAローカルバス(VLB)、Peripheral Component Interconnect(PCI)、カードバス、ユニバーサルシリアルバス(USB)、Advanced Graphics Port(AGP)、Personal Computer Memory Card International Associationバス(PCMCIA)、Firewire(IEEE1394)、およびSmall Computer Systems Interface(SCSI)を含む任意の様々な入手可能なバスアーキテクチャを使用する、メモリバスまたはメモリコントローラ、周辺バスまたは外部バス、および/またはローカルバスを含むいくつかのタイプのバス構造のいずれでもよい。
【0122】
システムメモリ1216は、揮発性メモリ1220および不揮発性メモリ1222を含む。起動中などにコンピュータ1212内の要素間で情報を転送する基本ルーチンを含む基本入出力システム(BIOS)は、不揮発性メモリ1222に格納される。例えば、限定はしないが、不揮発性メモリ1222は、読取り専用メモリ(ROM)、プログラマブルROM(PROM)、電気的プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリを含むことができる。揮発性メモリ1220は、外部キャッシュメモリとして働くランダムアクセスメモリ(RAM)を含む。例えば、限定はしないが、RAMは、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、シンクロナスDRAM(SDRAM)、ダブルデータレートSDRAM(DDR SDRAM)、拡張SDRAM(ESDRAM)、シンクリンクDRAM(SLDRAM)、ラムバスダイレクトRAM(RDRAM)、ダイレクトラムバスダイナミックRAM(DRDRAM)、ラムバスダイナミックRAM(RDRAM)などの多くの形態で入手可能である。
【0123】
コンピュータ1212は、取外し可能/取外し不可能な揮発性/不揮発性コンピュータ記憶媒体も含む。図12は、例えば、ディスクストレージ1224を示す。ディスクストレージ1224は、限定はしないが、磁気ディスクドライブ、フロッピー(登録商標)ディスクドライブ、テープドライブ、Jazドライブ、Zipドライブ、LS−100ドライブ、フラッシュメモリカード、またはメモリスティックなどの装置を含む。さらに、ディスクストレージ1224は、記憶媒体を別個に含むことができ、または、限定はしないが、コンパクトディスクROM装置(CD−ROM)、CDレコーダブルドライブ(CD−R Drive)、CDリライタブルドライブ(CD−RW Drive)、またはデジタルバーサタイルディスクROMドライブ(DVD−ROM)などの光ディスクドライブを含む他の記憶媒体と組み合わせて含むことができる。ディスク記憶装置1224のシステムバス1218への接続を容易にするために、インターフェース1226などの取外し可能または取外し不可能インターフェースが通常は使用される。
【0124】
図12は、ユーザと、適切な動作環境1200で説明した基本的なコンピュータ資源との間の媒介として働くソフトウェアを説明することを理解されたい。そのようなソフトウェアには、オペレーティングシステム1228が含まれる。オペレーティングシステム1228はディスクストレージ1224上に格納することができ、コンピュータシステム1212の資源を制御し、割り振るように動作する。システムアプリケーション1230は、システムメモリ1216またはディスクストレージ1224のいずれかに格納されたプログラムモジュール1232およびプログラムデータ1234を介してオペレーティングシステム1228による資源の管理を利用する。本発明は、様々なオペレーティングシステムまたはオペレーティングシステムの組合せで実施できることを理解されたい。
【0125】
ユーザは、入力装置1236を介してコマンドまたは情報をコンピュータ1212に入力する。入力装置1236には、限定はしないが、マウス、トラックボール、スタイラス、タッチパッドなどのポインティングデバイス、キーボード、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナ、TVチューナカード、デジタルカメラ、デジタルビデオカメラ、Webカメラなどが含まれる。上記およびその他の入力装置は、インターフェースポート1238を介してシステムバス1218によって処理装置1214に接続される。インターフェースポート1238には、例えば、シリアルポート、パラレルポート、ゲームポート、およびユニバーサルシリアルバス(USB)が含まれる。出力装置1240は、入力装置1236と同じタイプのポートのいくつかを使用する。したがって、例えばUSBポートを使用して、コンピュータ1212への入力を提供し、コンピュータ1212から出力装置1240に情報を出力することができる。出力アダプタ1242は、他の出力装置1240の中でもとりわけモニタ、スピーカ、プリンタなどの特殊なアダプタを必要とする一部の出力装置1240が存在することを示すために与えられている。出力アダプタ1242には、例えば限定はしないが、出力装置1240とシステムバス1218との間の接続の手段を提供するビデオカードおよびサウンドカードが含まれる。リモートコンピュータ1244など、他の装置および/または装置のシステムは、入力機能と出力機能を共に提供することに留意されたい。
【0126】
コンピュータ1212は、リモートコンピュータ1244などの1つまたは複数のリモートコンピュータへの論理接続を使用するネットワーク環境で動作することができる。リモートコンピュータ1244は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ワークステーション、マイクロプロセッサベースのアプライアンス、ピア装置、または他の共通ネットワークノードなどでよく、一般にコンピュータ1212に関して説明した要素の多くまたはすべてを含む。簡潔にするために、リモートコンピュータ1244と共にメモリ記憶装置1246のみを図示する。リモートコンピュータ1244は、ネットワークインターフェース1248を介してコンピュータ1212に論理的に接続され、次いで通信接続1250を介して物理的に接続される。ネットワークインターフェース1248は、ローカルエリアネットワーク(LAN)や広域ネットワーク(WAN)など、有線および/または無線の通信ネットワークを包含する。LAN技術には、光ファイバ分散データインターフェース(FDDI)、銅線分散データインターフェース(CDDI)、Ethernet(登録商標)、トークンリングなどが含まれる。WAN技術には、限定はしないが、ポイントツーポイントリンク、サービス総合デジタル網(ISDN)およびそのバリエーションなどの回線交換ネットワーク、パケット交換ネットワーク、デジタル加入者回線(DSL)などが含まれる。
【0127】
通信接続1250は、ネットワークインターフェース1248をバス1218に接続するために使用されるハードウェア/ソフトウェアを指す。通信接続1250は、図が見やすいようにコンピュータ1212内部に示しているが、コンピュータ1212の外部でもよい。ネットワークインターフェース1248への接続に必要なハードウェア/ソフトウェアには、例示の目的にすぎないが、通常の電話グレードモデム、ケーブルモデム、DSLモデムを含むモデム、ISDNアダプタ、Ethernet(登録商標)カードなどの内部技術および外部技術が含まれる。
【0128】
上記で説明したことは、本発明の例を含む。もちろん、本発明を説明するためにコンポーネントまたは方法の考えられるすべての組合せについて説明することは不可能であるが、本発明の他の多くの組合せおよび置換えが可能であることを当業者は理解できよう。したがって、本発明は、添付の特許請求の範囲の趣旨および範囲に含まれるすべての代替形態、変更形態、および変形形態を含むものとする。
【0129】
特に、上述のコンポーネント、装置、回路、システムなどによって実行される様々な機能に関して、こうしたコンポーネントの説明に使用した用語(「手段」への言及を含む)は、本明細書で示した本発明の例示的態様の機能を実行する、開示された構造に構造上同じではない場合であっても、別段の指定のない限り、記載のコンポーネントの指定の機能(例えば、機能的同等物など)を実行する任意のコンポーネントに対応するものとする。この点において、本発明は、本発明の様々な方法の動作および/またはイベントを実行するコンピュータ実行可能命令を有するシステムならびにコンピュータ可読媒体を含むことも理解されたい。
【0130】
さらに、本発明の特定の特徴を、いくつかの実装形態のうちの1つのみを参照して開示したが、こうした特徴は、所与または特定の任意の応用例にとって望ましく有利である他の実装形態の1つまたは複数の他の特徴と組み合わせることができる。さらに、「含む(include)」および「含んでいる(including)」という用語およびその変形が詳細な説明または特許請求の範囲において使用されている範囲で、これらの用語は「備える(comprising)」という用語と同じように包括的なものとする。
【図面の簡単な説明】
【0131】
【図1】それぞれの特徴を有するデータモデルに少なくとも部分的に基づくデータの操作を容易にする例示的システムのブロック図である。
【図2】データ記憶システムの特徴内のデータの操作を容易にする例示的システムのブロック図である。
【図3】データ記憶システムに関連するデータの操作を用いたデータ完全性およびセキュリティの実施を容易にする例示的システムのブロック図である。
【図4】データ記憶システムに関連するデータを操作するAPIの実装を容易にする例示的システムのブロック図である。
【図5】データ記憶システムの特徴内のデータを操作するAPIの起動を容易にする例示的システムのブロック図である。
【図6】データ記憶システムの特徴内のデータを操作するAPIの起動を容易にする例示的システムのブロック図である。
【図7】APIコンポーネントを使用してデータ記憶システム内のデータの操作を容易にする例示的システムのブロック図である。
【図8】データモデルに少なくとも部分的に基づくデータの操作を容易にする例示的システムのブロック図である。
【図9】少なくとも1つのモデル制約を実施しながら、データベースに基づいたシステムに少なくとも部分的に基づいてデータ操作を起動する例示的方法を示す図である。
【図10】それぞれの特徴が実施される、データモデルに少なくとも部分的に基づいてデータを操作する例示的方法を示す図である。
【図11】本発明の新規な態様を使用することのできる例示的ネットワーキング環境を示す図である。
【図12】本発明に従って使用することのできる例示的動作環境を示す図である。
【特許請求の範囲】
【請求項1】
データの操作を容易にするシステムであって、
タイプの複合インスタンスを部分的に表し、制約および特徴のうちの少なくとも一方を含むデータモデルと、
前記データモデルに関連するデータを操作し、前記制約および前記特徴のうちの少なくとも一方を実施するデータ操作コンポーネントと
を備えることを特徴とするシステム。
【請求項2】
前記データモデルは、少なくとも1つの永続エンティティと各エンティティごとの0個以上のサブエンティティとの階層モデルを定義して情報を複合タイプとして表すデータベースに基づいたシステムであるデータ記憶システムを表すことを特徴とする請求項1に記載のシステム。
【請求項3】
前記データの操作は、コピー、更新、置換、取得、設定、作成、削除、移動、および修正のうちの少なくとも1つであることを特徴とする請求項1に記載のシステム。
【請求項4】
前記データの操作に対応するセキュリティ技法を使用して前記データ記憶システム上で起動することのできるセキュリティコンポーネントをさらに備えることを特徴とする請求項1に記載のシステム。
【請求項5】
前記セキュリティ技法は、ユーザに関連するログイン、パスワード、生体的特徴、音声認識、およびセキュリティレベルのうちの少なくとも1つであることを特徴とする請求項4に記載のシステム。
【請求項6】
データベース内の前記データ記憶システムに関連するデータを永続させるAPIコンポーネントをさらに備え、少なくとも1つの手続きが、前記データモデル制約および特徴のうちの少なくとも一方を実施するために使用されることを特徴とする請求項2に記載のシステム。
【請求項7】
前記データ記憶システムに関連する前記制約および特徴のうちの少なくとも一方に従ってデータを操作するための少なくとも1つの手続きを提供する手続きコンポーネントをさらに備えることを特徴とする請求項2に記載のシステム。
【請求項8】
前記データ記憶システムの特徴および制約のうちの少なくとも一方を前記データの操作と共に組み込むエンフォーサコンポーネントをさらに備えることを特徴とする請求項2に記載のシステム。
【請求項9】
複合ロッキング論理を提供して、個々の要求が原子的に成功すること、および個々の要求が原子的に失敗することのうちの一方を保証するロッキングコンポーネントをさらに備えることを特徴とする請求項2に記載のシステム。
【請求項10】
楽観的同時性技法を使用する楽観的同時性コンポーネントをさらに備え、前記楽観的同時性技法は、第2のプロセスとほぼ同様の時間に第1のプロセスが変更を行う可能性が低いことを仮定し、前記変更が前記データ記憶システムに対してコミットされるまでロックが使用されないことを特徴とする請求項2に記載のシステム。
【請求項11】
前記データ操作が前記特徴および制約のうちの少なくとも一方を実施しないときにエラーコードを提供することのできるエラーコンポーネントをさらに備え、前記エラーコードは、エラーを記述するテキストに対応することができ、手続きは実行されないことを特徴とする請求項2に記載のシステム。
【請求項12】
前記APIコンポーネントよって実装されるべき少なくとも1つのデータ構造を使用することのできるデータ構造コンポーネントをさらに備えることを特徴とする請求項3に記載のシステム。
【請求項13】
前記データ構造コンポーネントは、シノニムタイプおよび汎用リストタイプのうちの少なくとも一方を使用することを特徴とする請求項12に記載のシステム。
【請求項14】
前記データ構造コンポーネントは、グラニュラ更新を提供する変更定義タイプを使用し、ユーザは、変更後データを更新メソッドに渡すことができると共に、手続きのサイズを変更されたデータのサイズに比例して保つことを特徴とする請求項12に記載のシステム。
【請求項15】
前記APIコンポーネントと共に使用すべき、1)作成項目、2)作成複合項目、3)作成リンク、4)作成項目拡張、5)更新項目、6)更新リンク、7)更新項目拡張、8)削除項目、9)削除リンク、10)削除項目拡張、11)作成項目フラグメント、12)更新項目フラグメント、13)削除項目フラグメント、14)取得項目セキュリティ、15)設定項目セキュリティ、16)移動項目、および17)置換項目の各手続きのうちの少なくとも1つを定義するAPI定義コンポーネントをさらに備えることを特徴とする請求項3に記載のシステム。
【請求項16】
前記APIコンポーネントは、ユーザから入力を受け取ってデータを操作することを特徴とする請求項3に記載のシステム。
【請求項17】
請求項1に記載の前記システムの前記コンポーネントが格納されていることを特徴とするコンピュータ可読媒体。
【請求項18】
データの操作を容易にする、コンピュータに実装される方法であって、
データモデルを使用して、データベースに基づいたファイルシステムであるデータ記憶システムを表すこと、
前記データ記憶システムに関連する特徴および制約のうちの少なくとも一方を求めること、
前記データ記憶システム内のデータを操作すると共に、前記特徴および制約のうちの少なくとも一方を実施すること、および
ユーザが前記データを操作することが可能となるようにAPIを起動すること
を含むことを特徴とする方法。
【請求項19】
データ操作コンポーネントとインターフェースとの間で通信するデータパケットであって、請求項18に記載の方法を容易にすることを特徴とするデータパケット。
【請求項20】
データの操作を容易にする、コンピュータに実装されるシステムであって、
特徴および制約のうちの少なくとも一方を有するデータ記憶システムをデータモデルで表す手段と、
前記データモデルに関連するデータを操作し、前記制約および前記特徴のうちの少なくとも一方を実施する手段と、
APIを起動してデータを操作する手段と
を備えることを特徴とするシステム。
【請求項1】
データの操作を容易にするシステムであって、
タイプの複合インスタンスを部分的に表し、制約および特徴のうちの少なくとも一方を含むデータモデルと、
前記データモデルに関連するデータを操作し、前記制約および前記特徴のうちの少なくとも一方を実施するデータ操作コンポーネントと
を備えることを特徴とするシステム。
【請求項2】
前記データモデルは、少なくとも1つの永続エンティティと各エンティティごとの0個以上のサブエンティティとの階層モデルを定義して情報を複合タイプとして表すデータベースに基づいたシステムであるデータ記憶システムを表すことを特徴とする請求項1に記載のシステム。
【請求項3】
前記データの操作は、コピー、更新、置換、取得、設定、作成、削除、移動、および修正のうちの少なくとも1つであることを特徴とする請求項1に記載のシステム。
【請求項4】
前記データの操作に対応するセキュリティ技法を使用して前記データ記憶システム上で起動することのできるセキュリティコンポーネントをさらに備えることを特徴とする請求項1に記載のシステム。
【請求項5】
前記セキュリティ技法は、ユーザに関連するログイン、パスワード、生体的特徴、音声認識、およびセキュリティレベルのうちの少なくとも1つであることを特徴とする請求項4に記載のシステム。
【請求項6】
データベース内の前記データ記憶システムに関連するデータを永続させるAPIコンポーネントをさらに備え、少なくとも1つの手続きが、前記データモデル制約および特徴のうちの少なくとも一方を実施するために使用されることを特徴とする請求項2に記載のシステム。
【請求項7】
前記データ記憶システムに関連する前記制約および特徴のうちの少なくとも一方に従ってデータを操作するための少なくとも1つの手続きを提供する手続きコンポーネントをさらに備えることを特徴とする請求項2に記載のシステム。
【請求項8】
前記データ記憶システムの特徴および制約のうちの少なくとも一方を前記データの操作と共に組み込むエンフォーサコンポーネントをさらに備えることを特徴とする請求項2に記載のシステム。
【請求項9】
複合ロッキング論理を提供して、個々の要求が原子的に成功すること、および個々の要求が原子的に失敗することのうちの一方を保証するロッキングコンポーネントをさらに備えることを特徴とする請求項2に記載のシステム。
【請求項10】
楽観的同時性技法を使用する楽観的同時性コンポーネントをさらに備え、前記楽観的同時性技法は、第2のプロセスとほぼ同様の時間に第1のプロセスが変更を行う可能性が低いことを仮定し、前記変更が前記データ記憶システムに対してコミットされるまでロックが使用されないことを特徴とする請求項2に記載のシステム。
【請求項11】
前記データ操作が前記特徴および制約のうちの少なくとも一方を実施しないときにエラーコードを提供することのできるエラーコンポーネントをさらに備え、前記エラーコードは、エラーを記述するテキストに対応することができ、手続きは実行されないことを特徴とする請求項2に記載のシステム。
【請求項12】
前記APIコンポーネントよって実装されるべき少なくとも1つのデータ構造を使用することのできるデータ構造コンポーネントをさらに備えることを特徴とする請求項3に記載のシステム。
【請求項13】
前記データ構造コンポーネントは、シノニムタイプおよび汎用リストタイプのうちの少なくとも一方を使用することを特徴とする請求項12に記載のシステム。
【請求項14】
前記データ構造コンポーネントは、グラニュラ更新を提供する変更定義タイプを使用し、ユーザは、変更後データを更新メソッドに渡すことができると共に、手続きのサイズを変更されたデータのサイズに比例して保つことを特徴とする請求項12に記載のシステム。
【請求項15】
前記APIコンポーネントと共に使用すべき、1)作成項目、2)作成複合項目、3)作成リンク、4)作成項目拡張、5)更新項目、6)更新リンク、7)更新項目拡張、8)削除項目、9)削除リンク、10)削除項目拡張、11)作成項目フラグメント、12)更新項目フラグメント、13)削除項目フラグメント、14)取得項目セキュリティ、15)設定項目セキュリティ、16)移動項目、および17)置換項目の各手続きのうちの少なくとも1つを定義するAPI定義コンポーネントをさらに備えることを特徴とする請求項3に記載のシステム。
【請求項16】
前記APIコンポーネントは、ユーザから入力を受け取ってデータを操作することを特徴とする請求項3に記載のシステム。
【請求項17】
請求項1に記載の前記システムの前記コンポーネントが格納されていることを特徴とするコンピュータ可読媒体。
【請求項18】
データの操作を容易にする、コンピュータに実装される方法であって、
データモデルを使用して、データベースに基づいたファイルシステムであるデータ記憶システムを表すこと、
前記データ記憶システムに関連する特徴および制約のうちの少なくとも一方を求めること、
前記データ記憶システム内のデータを操作すると共に、前記特徴および制約のうちの少なくとも一方を実施すること、および
ユーザが前記データを操作することが可能となるようにAPIを起動すること
を含むことを特徴とする方法。
【請求項19】
データ操作コンポーネントとインターフェースとの間で通信するデータパケットであって、請求項18に記載の方法を容易にすることを特徴とするデータパケット。
【請求項20】
データの操作を容易にする、コンピュータに実装されるシステムであって、
特徴および制約のうちの少なくとも一方を有するデータ記憶システムをデータモデルで表す手段と、
前記データモデルに関連するデータを操作し、前記制約および前記特徴のうちの少なくとも一方を実施する手段と、
APIを起動してデータを操作する手段と
を備えることを特徴とするシステム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公表番号】特表2008−538632(P2008−538632A)
【公表日】平成20年10月30日(2008.10.30)
【国際特許分類】
【出願番号】特願2008−507654(P2008−507654)
【出願日】平成18年3月9日(2006.3.9)
【国際出願番号】PCT/US2006/008268
【国際公開番号】WO2006/115589
【国際公開日】平成18年11月2日(2006.11.2)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】
【公表日】平成20年10月30日(2008.10.30)
【国際特許分類】
【出願日】平成18年3月9日(2006.3.9)
【国際出願番号】PCT/US2006/008268
【国際公開番号】WO2006/115589
【国際公開日】平成18年11月2日(2006.11.2)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】
[ Back to top ]