(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-02
(45)【発行日】2024-09-10
(54)【発明の名称】異なるアプリケーションバージョンに対するデータベース実装
(51)【国際特許分類】
G06F 16/21 20190101AFI20240903BHJP
G06F 16/22 20190101ALI20240903BHJP
【FI】
G06F16/21
G06F16/22
(21)【出願番号】P 2022567071
(86)(22)【出願日】2021-01-26
(86)【国際出願番号】 US2021015025
(87)【国際公開番号】W WO2021225646
(87)【国際公開日】2021-11-11
【審査請求日】2022-11-02
(32)【優先日】2020-05-04
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】506332063
【氏名又は名称】セールスフォース インコーポレイテッド
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】リーラウ,サージ フィリップ
(72)【発明者】
【氏名】スパルテン,ランディー フィリップ
(72)【発明者】
【氏名】コーエン,ジェフリー アイラ
【審査官】齊藤 貴孝
(56)【参考文献】
【文献】特開2005-078237(JP,A)
【文献】特開2011-215984(JP,A)
【文献】国際公開第2014/181475(WO,A1)
【文献】米国特許出願公開第2011/0173168(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
データベース管理システム(DBMS)を実行するコンピュータシステムによって、データベースに対するデータベースクエリを受信することであって、前記データベースクエリは、複数のバージョンを有するアプリケーションの特定のバージョンから受信され、前記データベースクエリは、
前記特定のバージョンを指定する、受信することと、
前記コンピュータシステムによって、1つ以上のカタログテーブルを識別することであって、前記1つ以上のカタログテーブルは、
開始バージョン列を含む第1の列と、停止バージョン列を含む異なる第2の列と、を含み、所与のデータベースオブジェクトに対する前記開始バージョン列及び前記停止バージョン列は、前記所与のデータベースオブジェクトがアクセス可能であるアプリケーションバージョンの範囲を指定する、識別することと、
前記コンピュータシステムによって、
前記1つ以上のカタログテーブルに記憶されたバージョンアクセス情報に基づいて、前記データベースクエリに対応する1つ以上のデータベースオブジェクトが、前記アプリケーションの前記特定のバージョンでアクセス可能であること
を決定することと、
前記コンピュータシステムによって、前記決定に基づいて、前記データベースクエリに応答して、前記アプリケーションの前記特定のバージョンでアクセス可能な1つ以上のデータベースオブジェクトにアクセスすることと、を含む、方法。
【請求項2】
前記データベースに記憶されたデータベーステーブルオブジェクトに含まれた列データベースオブジェクトに対するカタログテーブルに含まれた前記開始バージョン列及び前記停止バージョン列は、前記列データベースオブジェクトがアクセス可能である2つ以上のアプリケーションバージョンの範囲を指定する、請求項1に記載の方法。
【請求項3】
前記開始バージョン列及び前記停止バージョン列は、
スキーマ、テーブル、列、インデックス、トリガ、プロシージャ、及び統計のうちの1つ以上
に対するバージョンアクセス情報を指定する、請求項1及び2のいずれか一項に記載の方法。
【請求項4】
前記データベースに対する前記データベースクエリを受信する前に、
前記コンピュータシステムによって、前記アプリケーションの前記特定のバージョンから、前記アプリケーションに対する更新を受信することであって、前記更新は、前記特定のバージョンに関連付けられている、受信することと、
前記コンピュータシステムによって、前記受信した更新に基づいて、前記1つ以上のカタログテーブルを変更することであって、前記変更は、前記特定のバージョンでアクセス可能な前記データベースに記憶された1つ以上のデータベースオブジェクトを指定する前記カタログテーブルに記憶されたメタデータを変更することと、を更に含む、請求項1~3のいずれか一項に記載の方法。
【請求項5】
前記更新は、前記特定のバージョンでアクセス可能なデータベースオブジェクトと、前記アプリケーションの以前のバージョンでアクセス可能なデータベースオブジェクトとの間の1つ以上の差異を示す、請求項4に記載の方法。
【請求項6】
前記カタログテーブルのうちの1つは、少なくとも1つのアプリケーションに対して、その1つのアプリケーションに適用可能なスキーマを指定するスキーマカタログテーブルである、請求項1~5のいずれか一項に記載の方法。
【請求項7】
前記データベースクエリに対する前記バージョンアクセス情報は、前記アプリケーションの前記特定のバージョンに対して、前記1つ以上のデータベースオブジェクトに含まれるデータの第1の部分へのアクセスを許可し、前記方法は、
前記アプリケーションの異なるバージョンから追加のデータベースクエリを受信することに応答して、前記コンピュータシステムによって、前記アプリケーションの前記異なるバージョンに対するバージョンアクセス情報に基づいて、前記1つ以上のデータベースオブジェクトに含まれる前記データの異なる第2の部分にアクセスすることを更に含む、請求項1~6のいずれか一項に記載の方法。
【請求項8】
前記識別されたカタログテーブルは、バージョンアクセス情報を第1のフォーマットで定義する第1のカタログテーブルと、バージョンアクセス情報を第2のフォーマットで定義する第2のカタログテーブルを含む、請求項1~7のいずれか一項に記載の方法。
【請求項9】
前記第1のフォーマットは、特定のアプリケーションバージョンとしてバージョンアクセス情報を指定し、前記第2のフォーマットは、アプリケーションバージョンの範囲としてバージョンアクセス情報を指定する、請求項8に記載の方法。
【請求項10】
少なくとも1つのプロセッサと、
請求項1~9のいずれか一項に記載の方法を実行するために前記少なくとも1つのプロセッサによって実行可能なプログラム命令を記憶したメモリと、を含む、コンピュータシステム。
【請求項11】
データベース管理システム(DBMS)を実行するコンピューティングデバイスに動作を実行させることができる命令を記憶した非一時的なコンピュータ可読媒体であって、前記動作は、
データベースに対するデータベースクエリを受信することであって、前記データベースクエリは、複数のバージョンを有するアプリケーションの特定のバージョンから受信され、前記データベースクエリは、前記特定のバージョンを指定する、受信することと、
1つ以上のカタログテーブルを識別することであって、前記1つ以上のカタログテーブルは、
開始バージョン列を含む第1の列と、停止バージョン列を含む異なる第2の列と、を含み、所与のデータベースオブジェクトに対する前記開始バージョン列及び前記停止バージョン列は、前記所与のデータベースオブジェクトがアクセス可能であるアプリケーションバージョンの範囲を指定する、識別することと、
前記1つ以上のカタログテーブルに記憶されたバージョンアクセス情報に基づいて、前記データベースクエリに対応する1つ以上のデータベースオブジェクトが、前記アプリケーションの前記特定のバージョンでアクセス可能であること
を決定することと、
前記決定に基づいて、前記データベースクエリに応答して、前記アプリケーションの前記特定のバージョンでアクセス可能な1つ以上のデータベースオブジェクトにアクセスすることと、を含む、非一時的なコンピュータ可読媒体。
【請求項12】
前記1つ以上のバージョン情報列は、
前記データベースに記憶されたデータベーステーブルオブジェクトに含まれた列データベースオブジェクトに対するカタログテーブルに含まれた前記開始バージョン列及び前記停止バージョン列は、前記列データベースオブジェクトがアクセス可能である2つ以上のアプリケーションバージョンの範囲を指定する、請求項11に記載の非一時的なコンピュータ可読媒体。
【請求項13】
前記開始バージョン列及び前記停止バージョン列は、前記データベースの少なくとも1つのスキーマオブジェクト及びデータベーステーブルオブジェクトに対するバージョンアクセス情報を指定し、前記スキーマオブジェクトは、テーブルの名付けられたコレクションであり、前記データベーステーブルオブジェクトは、前記複数のバージョンを有する前記アプリケーションに対する前記データベースにデータを記憶する特定のタイプのテーブルである、請求項11及び12のいずれか一項に記載の非一時的なコンピュータ可読媒体。
【請求項14】
前記動作は、
前記データベースに対する前記データベースクエリを受信する前に、
前記アプリケーションの前記特定のバージョンから、前記アプリケーションに対する更新を受信することであって、前記更新は、前記特定のバージョンに関連付けられている、受信することと、
前記受信した更新に基づいて、前記1つ以上のカタログテーブルを変更することであって、前記変更は、前記特定のバージョンでアクセス可能な前記データベースに記憶された1つ以上のデータベースオブジェクトを指定する前記カタログテーブルに記憶されたメタデータを変更することと、を更に含む、請求項11~13のいずれか一項に記載の非一時的なコンピュータ可読媒体。
【請求項15】
前記カタログテーブルのうちの1つは、少なくとも1つのアプリケーションに対して、その1つのアプリケーションに適用可能なスキーマを指定するスキーマカタログテーブルであり、前記スキーマカタログテーブルは、異なるアプリケーションに対応するスキーマ名を指定する、請求項11~14のいずれか一項に記載の非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に、データベースに関連し、より具体的には、複数のアプリケーションバージョンに対して単一のデータベースを実装することに関連する。
【背景技術】
【0002】
アプリケーションが更新されると、その対応するデータベースが更新される間に、例えば、データ定義言語(DLL、data definition language)ステートメントを使用して、シャットダウンされることが多い。例えば、更新されたアプリケーションに対してデータベースのスキーマが変更されることがある。これは、アプリケーションに対するダウンタイムを招くことが多く、これは、アプリケーションのパフォーマンス、ひいてはユーザ体験を妨げることがある。追加的に、アプリケーションの所有者又は開発者は、アプリケーションの更新された新しいバージョンと共に、アプリケーションの前のバージョンを維持することを希望することがある。このようなマルチバージョン実装は、アプリケーションの複数バージョンに対してデータベースを処理しているデータベース管理システム(DBMS)によるアプリケーションの実装中のエラー及び/又は遅延を招くことがある。例えば、新しいアプリケーションバージョンに対するデータベースインデックスは、アプリケーションの前のバージョンの実装に干渉することがある。具体的には、アプリケーションの前のバージョンに対応するインデックスが新しいバージョンにおいてドロップされるときに、DBMSは、新しく作成されたインデックスが前のバージョンに干渉することを防止する必要がある。この防止がうまく行かない場合、アプリケーションの前のバージョンからのクエリを処理する際に遅延を招くことがある。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、異なるアプリケーションバージョンからのデータベースクエリを処理するように構成されている例示的なシステムを例示するブロック図である。
【0004】
【
図2】いくつかの実施形態による、データベース管理システムのシステムの例示的なシステムカタログを例示するブロック図である。
【0005】
【
図3】いくつかの実施形態による、例示的なバージョンカタログテーブル及びスキーマカタログテーブルを例示するブロック図である。
【0006】
【
図4】いくつかの実施形態による、人事(HR)アプリケーションのための従業員テーブルを含む例示的なデータベースを例示するブロック図である。
【0007】
【
図5A】いくつかの実施形態による、データベーステーブルに対する列の追加に基づく列カタログテーブルの例示的な変更を例示するブロック図である。
【
図5B】いくつかの実施形態による、データベーステーブルに対する列のリタイアに基づく列カタログテーブルの例示的な変更を例示するブロック図である。
【
図5C】いくつかの実施形態による、データベーステーブルに対する列のリタイア解除に基づく列カタログテーブルの例示的な変更を例示するブロック図である。
【
図5D】いくつかの実施形態による、データベーステーブルに対する列のドロップに基づく列カタログテーブルの例示的な変更を例示するブロック図である。
【0008】
【
図6】いくつかの実施形態による、データベーステーブルの作成中の例示的なデータベーステーブルカタログテーブルを例示するブロック図である。
【0009】
【
図7】いくつかの実施形態による、データベースインデックスの作成中の例示的なインデックスカタログテーブルを例示するブロック図である。
【0010】
【
図8】いくつかの実施形態による、データベーストリガの追加中の例示的なトリガカタログテーブルを例示するブロック図である。
【0011】
【
図9】いくつかの実施形態による、データベースプロシージャの追加中の例示的なプロシージャカタログテーブルを例示するブロック図である。
【0012】
【
図10】いくつかの実施形態による、データベース統計の追加中の例示的な統計カタログテーブルを例示するブロック図である。
【0013】
【
図11】いくつかの実施形態による、例示的なデータベースクエリを例示するブロック図である。
【0014】
【
図12】いくつかの実施形態による、複数の異なるアプリケーションバージョンからのデータベースクエリを処理するための方法を例示するフロー図である。
【0015】
【
図13】いくつかの実施形態による、例示的なコンピューティングデバイスを例示するブロック図である。
【発明を実施するための形態】
【0016】
本開示は、「一実施形態」又は「ある実施形態」への言及を含む。「一実施形態において」又は「ある実施形態において」という語句があっても、必ずしも同じ実施形態を指す訳ではない。特定の特徴、構造、又は特性は、本開示と矛盾しない任意の好適な様式で組み合わされ得る。
【0017】
本開示においては、異なるエンティティ(「ユニット」、「回路」、他の構成要素などと様々に称され得る)は、1つ以上のタスク又は動作を実行するように「構成」されていると記載されるか、又は特許請求の範囲において記載され得る。この定式化、つまり、[1つ以上のタスクを実行する]ように構成されている[エンティティ]は、本明細書において構造(すなわち、電子回路などの何らかの物理的なもの)を指すために使用される。より具体的には、この定式化は、この構造が、動作中に1つ以上のタスクを実行するように配置されていることを示すために使用される。構造は、たとえその構造が現在動作していなくても、いくつかのタスクを実行するように「構成」されているということができる。「データベースに対するデータベースクエリを受信するように構成されているコンピュータシステム」は、当該コンピュータシステムが現在使用されていない場合(例えば、電源が接続されていない場合)でも、例えば、動作中にはこの機能を実行するために、プロセッサ、ネットワークインターフェース、プログラム命令を有するメモリなどを有するコンピュータシステムをカバーすることが意図される。したがって、いくつかのタスクを実行するように「構成されている」と記載されるか、又は規定されるエンティティは、デバイス、回路、タスクを実行するために実行可能なプログラム命令を記憶するメモリなどの何らかの物理的なものを指す。この語句は、本明細書において何らかの無形のものを指すためには使用されない。
【0018】
用語「~ように構成されている」が、「~ように構成可能である」ことを意味するように意図されていない。例えば、プログラムされていないFPGAは、何らかの指定の機能を実行する「ように構成可能で」あり得、プログラミングされた後は、その機能を実行するように「構成されている」が、その機能を実行するように「構成されている」とはみなされないだろう。
【0019】
本明細書において使用される場合、用語「第1」、「第2」などは、先行して名詞のラベルとして使用され、具体的に記載されない限り、いかなる種類の順序付け(例えば、空間的、時間的、論理的など)も示唆しない。例えば、複数のユーザアカウントを有するコンピューティングシステムでは、用語「第1の」及び「第2の」ユーザアカウントは、任意のユーザを指すように使用され得る。言い換えれば、「第1」及び「第2」のユーザアカウントは、例えば、最初に作成される2つのユーザアカウントに限定されない。
【0020】
本明細書において使用される場合、用語「~に基づいて」は、決定に影響する1つ以上の要因を記載するために使用される。この用語は、追加的な要因が決定に影響を及ぼす可能性を排除しない。すなわち、決定は、指定された要因のみに基づくか、又は指定された要因及び他の指定されていない要因に基づき得る。「Bに基づいてAを決定する」という語句を考える。この語句は、BがAを決定するために使用される要因であるか、又はBがAの決定に影響を及ぼすこと指定する。この語句は、Aの決定がCなどの他の要因にも基づき得ること除外しない。この語句は、AがBのみに基づいて決定される実施形態をもカバーすることを意図している。したがって、本明細書で使用される場合、「~に基づいて」という語句は、語句「~に少なくとも部分的に基づいて」と同義である。
【0021】
従来のDBMS実装では、複数のアプリケーションバージョンを処理するための1つのアプローチは、ユーザ要求を処理するためにデータを検索するためにデータベース管理システム(DBMS)にアクセスする新しいバーションのアプリケーションを含んでいた。この実装では、DBMSは、そのアプリケーションのための新しいデータベーススキーマを新しいスキーマ名でデータベースにロードし得る。この例では、新しいデータベーススキーマは、単に以前のバージョンのアプリケーションのスキーマの重複であるが、新しいアプリケーションの実行に対応する変更を有している。この実装は、簡単にコピーされるデータベースオブジェクト(トリガ、インデックス、統計などの非永続性オブジェクト)に対してはうまく機能するものの、テーブルなどの永続性データベースオブジェクトに対しては問題を招く。例えば、複数の異なるスキーマに対してデータベーステーブルの全内容を複数回コピーすることは、コストが高く、非効率的である。
【0022】
本開示は、単一のデータベースにおいて複数の異なるアプリケーションバージョンのためのデータを維持するための技術を記載する。例えば、開示された技術は、データベース内の異なるオブジェクトに対するデータベースのシステムカタログ内のアプリケーションバージョニングを実装することによって、所与の時点における複数のアプリケーションバージョンからのクエリを処理する。システムカタログは、データベースに記憶されたデータベースオブジェクトを記載するメタデータを保持する。例えば、アプリケーションは、データベース内の特定のスキーマに関連付けられてもよく、このスキーマは、名前とバージョンを含む(スキーマバージョンが、所与のアプリケーションバージョンに対応するようにする)。新しいバージョニング技術は、追加の列をデータベースカタログテーブルに追加して、データベースに記憶されている様々なデータベースオブジェクトに関連付けられたアプリケーションバージョンを指定することを伴う。例えば、これらの列は、開始バージョンと停止バージョンを使用してアプリケーションバージョンの範囲を指定するか、又はデータベース内のオブジェクトに対して特定のアプリケーションバージョンを指定し得る。これらのデータベースオブジェクトは、テーブル、列、トリガ、インデックス、統計、プロシージャ、ビューなどを含み得る。
【0023】
本明細書に記載される実施形態では、クライアントアプリケーションの新しいバージョンは、「販売(sales)」データベーステーブルに新しい列「通貨(currency)」を追加し得る。この例では、データベース管理システムは、データベース列に対するメタデータ含むシステムカタログ内のテーブルに新しい行を追加する。この列カタログテーブルは、データベーステーブルの名前(売上)、追加される列の名前(通貨)、及びこの追加されるデータベース列に関連付けられたアプリケーションの開始バージョンと停止バージョンを指定する。本開示に記載されるデータベース管理技術は、データベースに記憶されるデータの重複を低減又は回避しつつ、アプリケーションの複数の異なるバージョンのサービス提供を同時に有利に可能にし得る。
【0024】
例示的なDBMS
図1は、異なるアプリケーションバージョンからのデータベースクエリを処理するように構成されている例示的なシステムを例示するブロック図である。例示される実施形態では、システム100は、アプリケーション要求を処理するために通信するように構成されているユーザコンピューティングシステム110及びDBMS130を含む。
【0025】
ユーザコンピューティングシステム110は、例示される実施形態では、アプリケーション120を含む。ユーザコンピューティングシステム110は、様々な異なるユーザによるアプリケーション120の使用を容易にするように構成されているアプリケーションサーバであり得る。例えば、いくつかの実施形態では、システム110は、様々な異なる顧客に対するアプリケーションを管理する顧客関係管理システムであり得る。いくつかの状況では、(同じ又は異なる顧客の)異なるユーザが同じアプリケーションを使用するが、このアプリケーションの異なるバージョンを実装する。例えば、システム110は、2つの異なるユーザに対して人事アプリケーションを管理し得るが、各ユーザは、DBMSによって維持される異なるデータへのアクセスを有する異なるバージョンの人事アプリケーションを実装する。いくつかの実施形態では、システム110以外のコンピューティングシステムは、アプリケーション120の異なるバージョンを含み、これらのアプリケーションからのクエリを処理するためにDBMS130と通信するように構成されている。例示される実施形態では、ユーザコンピューティングシステム110は、アプリケーション120に対するクエリ102をDBMS130に送信する。このクエリ102は、特定のアプリケーションバージョンを指定する。
【0026】
例示される実施形態では、DBMS130は、システムカタログ140及びデータベース150を含む。本明細書において使用される場合、用語「システムカタログ」は、その十分に理解された意味に従って解釈されることを意図しており、これは、データベースオブジェクトを定義するスキーマなどの、データベースに記憶されるデータに関するメタデータを記憶するデータベースの一部分を含む。例えば、システムカタログは、様々なカタログテーブル及び/又はカタログビューを含み得る。これらのカタログテーブルは、例えば、データベースのテーブル、列、トリガ、インデックス、統計、プロシージャ、ビューなど、DBMSによって管理されるデータベースに含まれる様々なオブジェクトに記憶されるデータを記載するメタデータを含み得る。これらのカタログテーブルは、例えば、アプリケーションから受信した構造化クエリ言語(SQL)クエリを評価する最善の方法を決定するために使用され得る。用語「カタログ」及び「カタログテーブル」という用語は、互換的に使用され得る。本開示では、カタログテーブルは、どのデータベーステーブルが特定のアプリケーションに対して可視であるかを含む、異なるアプリケーションバージョンでアクセス可能であるデータベースに記憶されているデータセットのサブセットを指定する。
【0027】
例示される実施形態では、システムカタログ140は、データベース150に記憶されたデータベースオブジェクトに関する情報を含むテーブルのコレクションである。例えば、システムカタログ140は、異なるバージョンのアプリケーション(又は異なるアプリケーション)に対応するスキーマ識別子のリストを含み得る。システムカタログ140は、各々が異なるバージョンに対するメタデータを含む様々なカタログテーブル142A~142Nを含む。例えば、
図1では、カタログテーブル142A~142Nは、アプリケーション120のバージョンA及びバージョンBに対するメタデータ144を含む。
図2を参照して、例示的なカタログテーブルが以下に議論される。
【0028】
同様に、例示される実施形態では、データベース150は、各々がアプリケーション120のバージョンA及びバージョンBの両方に対するデータ154含む様々なデータベーステーブル152A~152Nを含む。いくつかの実施態様では、カタログテーブル142A~142N及びデータベーステーブル152A~152Nは、異なるアプリケーションに対するメタデータ及びデータを含む。例えば、これらのテーブルは、人事アプリケーションと会計アプリケーションの両方に対するメタデータ及びデータを含み得る。追加的に、これらのテーブルは、異なるアプリケーション及び同じアプリケーションの異なるバージョンに対するメタデータ及びデータを含み得る。例えば、アプリケーションバージョンAは、特定のアプリケーションの古いバージョンであり得、特定のアプリケーションの新しいバージョンであるアプリケーションバージョンBに対するデータベースに追加された列内のデータを見ることができない。この例では、バージョンAでも、バージョンBで除去又はリタイアした列のデータを見ることができる。別の言い方をすれば、両方のアプリケーションバージョンも異なる列のセットでデータの同じ行を見ることができる。DBMS130は、PostgreSQL、MySQL、ORACLEなどを含む様々なデータベース管理システムのうちの任意のものであり得る。
【0029】
カタログテーブル142に記憶されたメタデータは、データベース150に記憶されたデータベースオブジェクトの位置、及びこれらのオブジェクトに対するバージョンアクセス情報を指定し得る。すなわち、カタログテーブル142に含まれるメタデータは、特定のアプリケーションバージョンに対しては、そのアプリケーションバージョンにとってアクセス可能なデータデースに記憶されたデータベースオブジェクトを示し得、特定のアプリケーションバージョンからのクエリに応答するために使用され得る。
【0030】
例示される実施形態では、DBMS130は、クエリ102に基づいてシステムカタログ140にアクセスして、クエリにおいて指定されたアプリケーションバージョンでアクセス可能なデータベース150に記憶されたデータベースオブジェクトを決定する。この決定に基づいて、DBMS130は、データベース150に対する実行のクエリ計画を生成するためにクエリ最適化器を使用し得る。次いで、DBMS130は、この計画に基づいてデータベース150にアクセスして、クエリ102に応答するデータを検索する。DBMS130は、クエリ結果106をアプリケーション120に対してユーザコンピューティングシステム110に送信する。これらの結果は、クエリ102において指定されたアプリケーションバージョンに関連付けられている。
【0031】
本明細書中で使用される場合、用語「アプリケーションバージョン」とは、アプリケーションの以前の形式又は後の形式とは異なるアプリケーションの特定の形式を指す。例えば、アプリケーションバージョンは、アプリケーションの異なるバージョンに対する様々なデータベースコンテンツのアクセシビリティを支配する単調に増加するナンバリングスキームを使用して、アプリケーションの新しいバージョン又は更新されたバージョンに割り当てられ得る。具体的な一例として、HRアプリケーションの第1のバージョンにはバージョン4.1.3が割り当てられ得、HRアプリケーションの第2のバージョンにはバージョン4.1.4が割り当てられ得る。本明細書において使用する場合、用語「メタデータ」は、その十分に理解された意味に従って解釈されることを意図しており、これは、他のデータを記述するデータのセットを含む。例えば、メタデータは、システムカタログのカタログテーブルに含まれ得る。具体的には、このメタデータは、データベース内の特定のスキーマに関連付けられたアプリケーションバージョンを指定し得る。システムカタログに記憶される例示的なメタデータは、
図3及び
図5A~
図10を参照して以下で詳細に論議される。
【0032】
例示的なシステムカタログ
図2は、DBMS130の例示的なシステムカタログ140を例示するブロック図である。例示される実施形態では、システムカタログ140は、バージョンカタログテーブル210、スキーマカタログテーブル220、列カタログテーブル230、データベーステーブルカタログテーブル240、インデックスカタログテーブル250、トリガカタログテーブル260、プロシージャカタログテーブル270、及び統計カタログテーブル280を含む。様々な他のタイプのデータベースオブジェクトのための様々な他のカタログテーブルのいずれも、システムカタログ140に含まれ、DBMS130によって管理され得ることに留意する。
【0033】
図2に示されるカタログテーブルは、データベース150内の異なるオブジェクトに対するエントリ(行)を含み得る。例えば、列カタログテーブル230は、様々なデータベース列に対するエントリを含み得、これらのエントリは、データベース150内の列の位置を指定する値とバージョンアクセス情報とを有するフィールドを含む。異なるカタログテーブルに対するさらなる詳細は、
図3及び
図5A~
図10を参照して以下に議論される。
【0034】
例示的なバージョン及びスキーマカタログテーブル
図3は、例示的なバージョン及びスキーマカタログテーブルを例示するブロック図である。例示される実施形態では、システムカタログ140は、バージョンカタログテーブル210及びスキーマカタログテーブル220を含む。
【0035】
バージョンカタログテーブル210は、DBMS130が、アプリケーションの特定のバージョンに関連付けられた名前に対して特定のバージョンIDを検索し、その特定のバージョンのステータス(アプリケーションバージョンがアクティブ(active)か、リタイア(retired)かなど)を決定することを可能にするテーブルである。バージョンカタログテーブル210は、例示される実施形態では、3つの列、すなわち、バージョン識別子(ID)312、バージョン名314、及びバージョンステータス316の列を含む。テーブル内では、アプリケーションの3つの異なるバージョンに対して3つの異なるエントリ(行)が示されている。具体的には、バージョンカタログテーブル210内の第1のエントリは、バージョン名夏2019(Summer 2019)、及びこのアプリケーションバージョンがリタイアしたことを示すバージョンステータスを含む、アプリケーションバージョン204.7.2に対するスキーマ情報を含む。同様に、アプリケーションバージョン204.7.3は秋2019(Fall 2019)と名付けられ、アクティブである。アプリケーションバージョン204.7.4は春2020(Spring 2020)と名付けられ、現在構築中(under construction)である。バージョンカタログテーブル210は、アプリケーションが、様々なバージョンであり、一意のバージョンID及びアプリケーション名を有する様々な状態にある任意の数のエントリを含み得る。
【0036】
例示される実施形態では、システムカタログ140は、どの特定のスキーマが(そのスキーマIDに基づいて)所与のスキーマ名及び所与のアプリケーションバージョンに適用可能であるかを検索するために使用可能なスキーマカタログテーブル220を含む。具体的には、スキーマカタログテーブル220は、スキーマID322、スキーマ名324、及びバージョンID312を指定する3つの列を含む。スキーマカタログテーブル220のバージョンID312列は、バージョンカタログテーブル210のバージョンID列と同じである。(スキーマID1によって示される)第1のスキーマは、(
図3のスキーマ名324によって示される)HRと名付けられ、バージョンID204.7.2に対応する。このパターンは、他のスキーマIDに対して継続し、各新しいスキーマIDが新しいバージョンIDに対応する。しかし、スキーマID4はバージョニングされていないスキーマに対応する。バージョニングされていないスキーマは、アプリケーションの既存のバージョン可視であるスキーマである。いくつかの状況では、特定のデータベースオブジェクト(ビューや関数など)がバージョニングされていないスキーマに配置されることがある。これは、これらのデータベースオブジェクトがアプリケーションバージョン間で永続的であることが期待されるためである。データベーステーブルなどの他のデータベースオブジェクトが、バージョニングされていないスキーマに配置されてもよく、これらのオブジェクトに記憶されたデータが、例えば、アプリケーションの様々なバージョンにわたって利用可能であるようにし得る。いくつかのケースでは、0のバージョンIDは、データベースオブジェクトがリタイアしているか、又はドロップされていることを示す。
図5Dは、開始バージョン列に対してデータベース列及び対応する0のバージョンIDをドロップする例を示す。スキーマはアプリケーションごとに(特定の名前を使って)定義され得るが、所与のスキーマは同じアプリケーションの複数のインスタンスによって共有され得る。したがって、「HR」という名前は、特定のアプリケーションに対するスキーマの名前であってもよく、これは、いくつかの実施形態では「HR」とも呼ばれ得る。
【0037】
図3はHRと名付けられたスキーマに対するエントリを示しているが、このテーブルには、会計(Accounting)、雇用(Hiring)、プロセス(Process)など、異なる名を有するスキーマに対するエントリを含み得る。特定のアプリケーションは、複数の異なるスキーマを使用し得る。1つの具体例として、バージョン204.7.2に関連付けられ、2019年の夏に生成されたアプリケーションは、スキーマ「HR」と「Hiring」を使用し得る人事アプリケーションである。
【0038】
例示的なデータベース
図4は、人事(HR)アプリケーションのための従業員テーブル410を含む例示的なデータベース150を例示するブロック図である。例示される実施形態では、データベース150は、hr.employeeテーブル410、hr.emp_nameインデックス420、hr.emp_name_compインデックス430、及びhr.totalcompプロシージャ440を含む。
図4に示されるテーブルは、例えば、DBMS130内の同じアプリケーションの(又は、異なるアプリケーション)に対して記憶され得るデータのスーパーセットを示す。以下、後続の図に関してより詳細に記載されるように、所与のアプリケーションは、システムカタログ140のメタデータ144に定義されたバージョン情報に基づいて、データベース150に記憶された情報のサブセットのみをクエリすることが許可され得る。
【0039】
Hr.employeeテーブル410は、例示される実施形態では、従業員ID412、従業員名414、給与416、及び賞与418の4つの異なる列を含む。Hr.Employeeテーブル410は、Michael Smith、John Doe、及びJane Doeの各々に対して1つずつの3つのエントリを含む。例えば、Jane Doeは、従業員ID12347に関連付けられており、$120,000の給与、$6000の賞与を有する。いくつかの実施形態では、データベース150は、クライアントと名付けられた第2のテーブルを含む。このクライアントテーブルは、hr.employeeテーブル410と共に、HRアプリケーションの異なるバージョンに対するデータを含み得る。いくつかの状況では、従業員とクライアントのテーブルは、異なるアプリケーション(例えば、HRアプリケーションと会計アプリケーション)に対するデータが含む。
図5A~
図5D及び
図11を参照して以下に議論されるように、特定のアプリケーションバージョンは、hr.employeeテーブル410に含まれる列のいくつかにアクセスできないことがある。
【0040】
Hr.emp_nameインデックス420は、従業員テーブル410の従業員名414及び給与416列を含み、hr.emp_name_compインデックス430は、hr.employeeテーブル410の従業員名414列及び各従業員の給与及び賞与の合計値を含む合計432列を含む。例えば、合計432列に記憶される値は、給与及び賞与という2つの異なるパラメータの合計を計算する機能であるhr.totalcompプロシージャ440を実行することによって決定され得る。hr.totalcompプロシージャ440は、入力として従業員ID又は従業員名を受信し、その従業員に対する総報酬を出力する。
【0041】
いくつかの実施形態では、データベース150は、追加のデータベースオブジェクトを含む。例えば、データベース150は、トリガ及び統計、並びに様々な他のデータベースオブジェクトのうちの任意のものを含み得る。特に、データベース150は、テーブル410に列挙された全ての従業員の平均給与を追跡する、hr.employee410の給与416列に対する統計を含み得る。データベース150に記憶された情報は、
図11を参照して以下に議論されるように、それぞれのアプリケーションバージョンを指定するクエリを介してアプリケーションバージョンにアクセス可能であり得る。例えば、これらのデータベースインデックスは、特定のアプリケーションバージョンには可視でないことがあるが、特定のアプリケーションの他のバージョンには可視である。
【0042】
例示的なカタログテーブル
図5A~
図5Dは、それぞれ、データベーステーブルに対する列の追加、リタイア、リタイア解除、及びドロップに基づく列カタログテーブル230の例示的な変更を例示するブロック図である。
図5A~
図5Dでは、アプリケーション120は、データベースコマンドをDBMS130に送信し、アプリケーションの新しいバージョンに基づく更新を指定する。これらのデータベースコマンドは、例えば、データ定義言語(DDL)動作を含み得る。多くの状況では、アプリケーション120の新しいバージョンは、新しい情報が動作中にこのアプリケーションによって使用されることに基づいてDDL動作をDBMS130に送信している。
【0043】
図5Aでは、アプリケーション120は、データベース150に対するデータベースコマンド502を生成し、このコマンドをDBMS130に送信する。アプリケーション120からDBMS130に送信されるデータベースコマンドは、SQL、Postgres、MySQLなどのコマンドであり得る。データベースコマンド502は、2つの異なる動作を含む。最初の動作は、現在のアプリケーションバージョンが204.7.3であることを指定する。例えば、アプリケーションバージョン204.7.3は、第2の動作に関連付けられたアプリケーションバージョンである。第2の動作は、(例えば、従業員テーブルが賞与418列をまだ含んでいない場合)賞与418列を追加することによって、hr.employeeテーブル410を更新することを指定する。このデータベースコマンドに基づいて、DBMS130は、システムカタログ140に記憶されたメタデータ及びデータベース150に記憶されたデータベースオブジェクト(図示せず)を更新する。
【0044】
図5AのDBMS130は、データベース150に含まれるデータベース列に対するメタデータを記憶する列カタログテーブル230を含む。例えば、
図3に戻ると、データベース150は、従業員ID412、従業員名414、給与416、及び賞与418の4つのデータベース列を有するhr.employeeテーブル410を含む。
図5Aに戻ると、列カタログテーブル230は、テーブルID532、列番号534、列名536、開始バージョン590、及び停止バージョン592の5つの異なる列を含む。これらの5つの列は、データベース150に含まれるデータベース列に対するメタデータを指定する。例えば、列カタログテーブル230は、給与416と名付けられたデータベース列がテーブルID6(hr.employeeテーブル410)に含まれ、スキーマID3に関連付けられ、バージョン204.7.2から開始するアプリケーションに利用可能であることを指定するエントリを含む。1つの具体的な例として、PostgreSQLコンテキストでは、列カタログテーブル230はpg_attributeと呼ばれ、用語「属性(attribute)」は列と同等であり、歴史的な理由で使用される。
【0045】
例示される実施形態では、列カタログテーブル230に含まれる開始バージョン590列及び停止バージョン592列は、異なるデータベース列に対して、この列がアクセス可能なアプリケーションバージョン(開始バージョン590)及びこれらのデータベース列がもはやアクセス不可能となったアプリケーションバージョン(停止バージョン592)を指定する。例えば、列カタログテーブル230に含まれる開始バージョン列及び停止バージョン列は、特定のデータベース列に記憶されたデータを認識するアプリケーションバージョンの範囲を指定する。例えば、アプリケーションバージョン204.7.2がhr.employeeテーブル410の全ての列にアクセスしようとする場合、賞与列データは、アプリケーションに返される列データの中にリストされない。追加的に、このアプリケーションバージョンがクエリ内の賞与列を直接参照しようとする場合、クエリ応答メッセージは「賞与列が見つかりません」と指定する。
【0046】
開始バージョン列と停止バージョン列の実装は、これらのバージョンが新しいアプリケーションバージョンでドロップされたインデックスに依存していることに起因して、古いアプリケーションバージョンが遅くなるのを有利に防止し得る。これはまた、より新しいアプリケーションバージョンがサービスレベルアグリーメント(SLA)に違反することを防止し得る(例えば、クライアントアプリケーションからのクエリは、しきい値時間未満で満たされる必要がある)。追加的に、開始バージョン列と停止バージョン列を使用すると、各々が特定のバージョン専用である複数のテーブルではなく、複数のアプリケーションバージョンに関する情報を単一のテーブルに記憶し得る。これにより、DBMSが複数のテーブル間で同期されたデータを保持する必要性を低減又は除去し得る。列データのバージョニングは、例えば、全てのアプリケーションバージョンに可視である列を含むデータベーステーブルの単一コピーに起因して、アプリケーションを意味的に破壊するリスクを低減又は除去し得る。この例示的な状況では、「SELECT*FROM employee Table」というクエリは余分な列を返す。また、開示されたバージョニング技術は、新しいバージョンにおけるデータベーステーブルからリタイアされる予定の列に記憶されたデータが、アプリケーション開発者がこのデータがリタイアされるオブジェクトに記憶されることを認識していなかった状況において、新しいバージョンのアプリケーションによって誤ってアクセスされることを低減又は防止し得る。
【0047】
DBMS130は、アプリケーション120からデータベースコマンド502を受信し、このコマンドに基づいて、列(
図4の賞与418)をデータベース150に追加するために実行可能なDDL動作を実行する。DBMS130は、データベース150に対するDDL動作に加えて、同時に、列追加512動作を実行することによって、列カタログテーブル230を更新する。例えば、列追加504動作は、列カタログテーブル230にエントリを追加するために実行可能である。具体的には、DBMS130は、列カタログテーブル230に、新しい列が「賞与(bonus)」と名付けられ、テーブルID6に対応する従業員テーブルに含まれることを指定する値を有する行を追加する(この新しい行は、図中において太字で示されている)。描写された例では、賞与データベース列はアプリケーションバージョン204.7.3以降のバージョンではアクセス可能であるが、アプリケーションバージョン204.7.2以前のバージョンではアクセス可能ではない。
【0048】
いくつかの実施形態では、システムカタログ140は、異なるカタログテーブルに対するプライマリキー及び一意の制約を含む。プライマリキーは、別のテーブルから参照されたときに行を識別するために使用される、テーブル内に一意の値を持つ列のセットを含み得る。例えば、列カタログテーブル230は、テーブルID532列及び列番号534列から構成されるプライマリキーを含み得る。このプライマリキーは、列カタログテーブル230内の特定の行を識別するために使用可能である。同様に、一意の制約は、一意の値を持つ列のセットを含み得る。例えば、列カタログテーブル230は、テーブルID532列及び列名536列から構成される一意の制約を含み得る。
【0049】
いくつかの実施形態では、データベースコマンドは、所与のアプリケーションバージョンに対する複数の更新を含む。例えば、データベースコマンド502は、前のバージョンでアクセス可能なデータベースオブジェクトとバージョン204.7.3でアクセス可能なデータベースオブジェクトとの間の差異を示す複数の異なる動作(例えば、第2の動作「ALTER TABLE」)を含み得る。
【0050】
図5Bでは、アプリケーション120は、アプリケーションバージョン204.7.4を指定し、データベース列をリタイアさせるための動作を含むデータベースコマンド504をDBMS130に送信する。データベースコマンド504に基づいて、DBMS130は、列リタイア514動作を実行して、賞与データベース列に対するメタデータを含むテーブル230の行に対して停止バージョン592(204.7.4)を追加することによって列カタログテーブル230を変更する。この例では、従業員データベーステーブルに含まれる賞与列は、人事アプリケーションのバージョン204.7.3のみでアクセス可能である。
【0051】
いくつかの状況では、アプリケーションバージョン204.7.3の開発中(例えば、新しいアプリケーションリリースを介してリタイアされた列を公開する前)に、賞与列のリタイアメントがエラーとなることがある。このリタイアは、同じアプリケーションバージョン内で覆される可能性がある。このエラーを軽減するために、アプリケーション120は、賞与列をリタイア解除(unretire)し得る。例えば、
図5Cでは、アプリケーション120は、アプリケーションバージョン204.7.4を指定するデータベースコマンド506をDBMS130に送信する。データベースコマンド506は、データベース150内の賞与列をリタイア解除するための動作を含む。このコマンドに基づいて、DBMS130は、列リタイア解除516動作を実行して、列カタログテーブル230を更新して、賞与データベース列に対して「0」の停止バージョン592を指定する。
【0052】
図5Dでは、アプリケーション120は、データベース150内の賞与列をドロップすることを指定する動作を含むデータベースコマンド508をDBMS130に送信する。データベースコマンド508に基づいて、DBMS130は、列ドロップ動作518を実行して、その開始バージョン列590が賞与データベース列に対して「0」のバージョンを指定するようにするように列カタログテーブル230を更新する。いくつかの状況では、アプリケーション120は、列がもはや他のアプリケーションバージョンで利用できなくなったときにのみ、列(又は他のデータベースオブジェクト)をドロップすることが許可される。つまり、賞与列に対する停止バージョン592列は、アプリケーションの最も古いバージョンより古い、又は最も古いバージョンと同じアプリケーションバージョンを指定する必要がある。例えば、アプリケーションの最後にサポートされたバージョンよりも古いアプリケーションバージョンで列がリタイアされたときに、列がドロップされ得る。
【0053】
図6は、データベーステーブルの作成中の例示的なデータベーステーブルカタログテーブルを例示するブロック図である。例示される実施形態では、データベースカタログテーブル240は、データベース150内のテーブルに記憶されたデータを指定するメタデータを含む以下の列、すなわち、テーブルID542、スキーマID322、テーブル名644、開始バージョン590、及び停止バージョン592を含む。データベースカタログテーブル240は、データベース150内のデータベーステーブルに記憶された情報が異なるアプリケーションバージョンで可視かどうかを指定するメタデータを含む。例えば、データベーステーブルカタログテーブル240の第1の行は、6のテーブルID、4のスキーマIDを含み、「従業員(Employee)」という名付けられ、アプリケーションバージョン204.7.1から始まるアプリケーションにアクセス可能である。スキーマID4は、バージョニングされていないスキーマを指し、したがって、従業員テーブル(テーブルID6)は、複数の異なるアプリケーションバージョンで可視であり得る。いくつかの状況では、データベーステーブルがアプリケーションバージョンをまたいでで可視であるようにすることが望ましいことがあり、そのため、これらのデータベーステーブルはバージョニングされていないスキーマにおいて存在し得る。
【0054】
例示される実施形態では、アプリケーション120は、データベースコマンド602をDBMS130に送信する。このデータベースコマンドは、「クライアント(client)」と呼ばれるデータベース150内のテーブルを作成するための動作を含む。データベース150内のクライアントテーブルを生成した後、DBMS130は、データベーステーブル作成動作612を実行して、システムカタログ140内のデータベーステーブルカタログテーブル240にエントリを追加する。例示される実施形態では、データベーステーブルカタログテーブル240の第2の行は、アプリケーションバージョン204.7.1をクライアントデータベーステーブルに対する開始バージョン590として指定する。この例では、従業員データベーステーブルとクライアントデータベーステーブルの両方とも、バージョン204.7.1以降に関連付けられたアプリケーションにアクセス可能である。
【0055】
図7は、データベースインデックスの作成中の例示的なインデックスカタログテーブルを例示するブロック図である。例示される実施形態では、インデックスカタログテーブル250は、データベース150内のインデックスに記憶されたデータを指定するメタデータを含む列、すなわち、テーブルID542、インデックス名764、開始バージョン590、及び停止バージョン592を含む。例えば、インデックス名764列は、様々なデータベースインデックスの名前を指定する値を指定する。
【0056】
例示される実施形態では、DBMS130は、データベース150内に新しいインデックスを作成するために指定するデータベースコマンド702をアプリケーション120から受信する。このコマンドに基づいて、DBMS130は、新しいインデックスhr.emp_name_comp430を生成する。DBMS130は、新しいインデックスを生成した後、インデックス作成動作712を実行して、インデックス430に対してインデックスカタログテーブル250にエントリを追加して、このインデックスがアプリケーションバージョン204.7.3(及びより新しいバージョン)にアクセス可能であり、したがって、このインデックスはアプリケーションバージョン204.7.2及びより古いバージョンでは使用不可能であることを示す。しかし、DBMS130は、特定のアプリケーションバージョン(バージョン204.7.2以前など)によって、これらのインデックスが使用可能ではない(利用できない)状況であっても、データベース内に存在するインデックスを維持する。
【0057】
図8は、データベーストリガの追加中の例示的なトリガカタログテーブルを例示するブロック図である。例示される実施形態では、トリガカタログテーブル260は、データベース150に記憶されたトリガを指定するメタデータを有する以下の列、すなわち、テーブルID532、トリガID862、トリガ名864、開始バージョン590、及び停止バージョン592を含む。トリガID862及びトリガ名864は、例えば、様々なデータベーストリガに対して、それぞれ識別子及び名前を指定する値を記憶する。
【0058】
例示される実施形態では、DBMS130は、データベース150にトリガを追加することを指定するデータベースコマンド802をアプリケーション120から受信する。このコマンドに基づいて、DBMS130は、データベース150内の従業員テーブルの賞与列に新しいトリガを生成する。DBMSは、データベース150にトリガを追加した後、トリガ追加動作812を実行して、アプリケーションバージョン204.7.3に対する新しい「bonus_trigger」のためのトリガカタログテーブル260にエントリを追加する。この例では、「bonus_trigger」は、バージョン204.7.3以降に関連付けられたアプリケーションに対してのみ実行する。
【0059】
図9は、データベースプロシージャの追加中の例示的なプロシージャカタログテーブルを例示するブロック図である。例示される実施形態では、プロシージャカタログテーブル270は、データベース150に記憶されたプロシージャを指定するメタデータを有する以下の列、すなわち、プロシージャID972、スキーマID974、及びプロシージャ名976を含む。プロシージャID972列及びプロシージャ名976列は、例えば、様々なデータベースプロシージャの識別子及び名前をそれぞれ指定する値を記憶する。
【0060】
例示される実施形態では、DBMS130は、データベース150にプロシージャを追加することを指定するデータベースコマンド902をアプリケーション120から受信する。このコマンドに基づいて、DBMS130は、データベース150内の特定のスキーマ(
図3のスキーマカタログテーブル220によるアプリケーションバージョン204.7.4に対応する)に対して「リタイア(retirement)」と呼ばれる新しいプロシージャを生成する。DBMS130は、新しいプロシージャをデータベース150に追加した後、プロシージャ追加動作912を実行して、スキーマID3に対する新しい「リタイア(retirement)」プロシージャに対するエントリをプロシージャカタログテーブル270に追加する。この例では、プロシージャ「リタイア(retirement)」は、バージョン204.7.4に関連付けられたアプリケーションに対するクエリでのみ可視である。
【0061】
図10は、データベース統計の追加中の例示的な統計カタログテーブルを例示するブロック図である。例示される実施形態では、統計カタログテーブル280は、データベース150に記憶された異なるデータベーステーブルに対する統計を指定するメタデータを有する以下の列、すなわち、テーブルID532、幅統計982、ヌル統計984、開始バージョン590、及び停止バージョン592を含む。幅統計982及びヌル統計984は、所与のデータベーステーブルに対して生成され得る統計のタイプの非限定的な例である。幅統計982は、例えば、所与のデータベーステーブル内のヌルではないエントリの平均記憶幅をバイト単位で指定し得る。
【0062】
例示される実施形態では、データベースコマンド1002は、hr.employeeデータベーステーブル410に対する統計をデータベース150にロードするための動作を含む。DBMS130は、この動作を実行した後、統計加算動作1012を実行して、人事アプリケーションバージョン204.7.2に対する幅及びヌル統計を指定するエントリを統計カタログテーブル280に追加する。この例では、DBMS130に対するクエリ最適化プログラムは、バージョン204.7.2以降に関連付けられたアプリケーションからのクエリに対するヌル統計を使用することができるのみである。
【0063】
図11は、例示的なデータベースクエリを例示するブロック図である。例示される実施形態では、システム1100は、アプリケーション120及びDBMS130を含む。アプリケーション120は、クエリ1102をDBMS130に送信する。クエリ1102は、アプリケーション120が現在バージョン204.7.2の下で動作しており、したがって、このクエリは、このバージョンでアクセス可能なデータベースオブジェクトにアクセスすることを要求していることを指定する。加えて、クエリ1102は、「John Doe」という名前の従業員について、hr.totalcompプロシージャ440によって生成されるデータを選択することを指定する。
【0064】
以下の例示的な説明は、
図4に示されるデータベースオブジェクトへの参照を含む。
図11に示されるアプリケーション120は、特定の従業員(John Doe)に対する報酬情報を要求する人事アプリケーションであり得る。クエリ1102に応答するために、DBMS130は、システムカタログ140にアクセスして、プロシージャ「totalcomp」がスキーマID1に属するかどうかを決定する。DBMS130は、それが実際にスキーマ1に属していると決定することに基づいて、1)スキーマID1は、「HR」と名付けられたスキーマであり、2)スキーマID1は、アプリケーションバージョン204.7.2に一致するスキーマであることを検証する。この情報に基づいて、DBMS130は、データベース150にアクセスして、John Doeに対する総報酬(給与+賞与)の計算結果を取得する。
【0065】
クエリ1102は、John Doeの給与及び賞与情報を取得するために、hr.employeeテーブル410にアクセスし、Hr.totalcompプロシージャ440にアクセスし、次いで、これらの値をプロシージャ440にプラグインすること、又はhr.emp_name_compインデックス430(このインデックスがアプリケーションバージョン204.7.3でアクセス可能である場合、この場合は、アクセス可能である)にアクセスし、John Doeに対する給与416列及び賞与418列の合計432を取得することのいずれかによって、満たされ得ることに留意する。DBMS130がhr.emp_name_compインデックスを使用して、クエリ1102に応答する場合、このシステムは、最初にインデックスカタログテーブル250にアクセスして、アプリケーションバージョン204.7.3から開始するhr.emp_name_compインデックスがアクセス可能であることを決定する。この例示的なシナリオでは、DBMS130は、次いで、hr.employeeテーブル410の給与列、賞与列、及び名前列が、バージョン204.7.3のアプリケーションに可視であることをチェックする。次いで、DBMSは、emp_nameインデックスとemp_name_compインデックスが、バージョン204.7.3のアプリケーションに可視であることを決定する。この情報に基づいて、DBMS130は、次いで、データベースインデックス430にアクセスして、アプリケーション120によって要求されたデータを取得する。アプリケーションバージョン204.7.3ではなく、204.7.4においてemp_name_compインデックスが追加されていると、DBMS130はこのインデックスを使用するのを控える必要がある。例示される実施形態では、DBMS130は、データベース150にアクセスしてJohn Doeに対する総報酬を取得した後に、John Doeに対する総報酬が$210,000であることを指定するクエリ結果1104をアプリケーション120に送信する。
【0066】
例示的な方法ここで、
図12を参照すると、異なるアプリケーションバージョンからのデータベースクエリを処理するための例示的な方法1200を例示するフロー図である。
図12に示される方法は、他のデバイスの中でも、コンピュータ回路、システム、デバイス、要素、又は構成要素のいずれかと併せて使用され得る。様々な実施形態では、示されている方法要素のいくつかは、示されているものとは異なる順序で同時に実行され得るか、又は省略され得る。追加の方法要素もまた、所望に応じて実行され得る。
【0067】
1210において、例示される実施形態では、データベース管理システム(DBMS)を実行するコンピュータシステムは、データベースに対するデータベースクエリを受信し、データベースクエリは、複数のバージョンを有するアプリケーションの特定のバージョンから受信され、データベースクエリは、特定のバージョンを指定する。いくつかの実施形態では、コンピュータシステムは、データベースに対するデータベースクエリを受信する前に、アプリケーションの特定のバージョンから、アプリケーションに対する更新を受信し、更新は、特定のバージョンに関連付けられている。いくつかの実施形態では、コンピュータシステムは、受信した更新に基づいて、1つ以上のカタログテーブルを変更し、変更は、特定のバージョンでアクセス可能なデータベースに記憶された1つ以上のデータベースオブジェクトを指定するカタログテーブルに記憶されたメタデータを変更することを含む。いくつかの実施態様では、更新は、特定のバージョンでアクセス可能なデータベースオブジェクトと、アプリケーションの以前のバージョンでアクセス可能なデータベースオブジェクトとの間の1つ以上の差異を示す。
【0068】
いくつかの実施形では、DBMSは、特定のアプリケーションバージョンを指定しないデータベースクエリを受信し得る。例えば、いくつかの状況では、現行のアプリケーションバージョンがDBMSに既知であり得、この既知のアプリケーションバージョンは、DBMSが異なるアプリケーションバージョンを指定するSETコマンド(例えば、
図5A~
図8及び
図10~
図11に示されるSETコマンド)を受信しない限り及び受信するまで、クエリを受信するために使用される。
【0069】
1220において、コンピュータシステムは、1つ以上のカタログテーブルを識別し、1つ以上のカタログテーブルは、バージョンアクセス情報を記憶する1つ以上のバージョン情報列を含む。いくつかの実施形態では、1つ以上のバージョン情報列は、データベースに記憶された1つ以上のデータベースオブジェクトがアクセス可能であるアプリケーションバージョンの範囲を指定する開始バージョン列及び停止バージョン列を含む。例えば、開始バージョン列は、データベースオブジェクトが利用可能になり始めたアプリケーションバージョンを示し得、停止バージョン列は、データベースオブジェクトがもはやアクセス不可能となったアプリケーションバージョンを示し得る。言い換えると、停止バージョン列は、データベースオブジェクトにアクセスできないアプリケーションバージョン(及び任意の以降のアプリケーションバージョン)を指定し得る。いくつかの実施形態では、バージョン情報列は、1つ以上のデータベースオブジェクトに対するバージョンアクセス情報を指定する。いくつかの実施形態では、1つ以上のデータベースオブジェクトは、以下のタイプのオブジェクト、すなわち、スキーマ、テーブル、列、インデックス、トリガ、プロシージャ、及び統計のうちの1つ以上を含む。1つ以上のデータベースオブジェクトは、このリストに含まれるオブジェクトタイプの様々な組み合わせの任意のもの、又は上記リストに明示的に規定されていない様々な他のタイプのデータベースオブジェクトの任意のものを含み得る。例えば、データベースに記憶されたデータベースオブジェクトは、スキーマオブジェクト及びデータベースオブジェクト、スキーマオブジェクト若しくはテーブルオブジェクトであるがその両方ではないもの、7つ全てのタイプのデータベースオブジェクト、又はそれらの任意の組み合わせを含み得る。いくつかの実施形態では、カタログテーブルのうちの1つは、少なくとも1つのアプリケーションに対して、その1つのアプリケーションに適用可能なスキーマを指定するスキーマカタログテーブルである。いくつかの実施形態では、スキーマカタログテーブルは、異なるアプリケーションに対応するスキーマ名を指定する。
【0070】
いくつかの実施形態では、データベースオブジェクトは、単一のアプリケーションバージョンでアクセス可能である。他の実施形態では、データベースオブジェクトは、アプリケーションの複数のバージョンにわたる存続期間を有し得る。データベースオブジェクトの存続期間は、開始バージョン列と停止バージョン列によって指定され得る。しかしながら、他の状況では、データベースオブジェクトの存続期間は、間隔データタイプを使用する単一の列によって指定され得る。この状況では、単一の列は、データベースオブジェクトへのアクセスを有するアプリケーションバージョンの範囲を指定する。
【0071】
いくつかの実施形態では、バージョン情報列は、データベースの少なくとも1つのスキーマオブジェクト及びデータベーステーブルオブジェクトに対するバージョンアクセス情報を指定し、スキーマオブジェクトは、テーブルの名付けられたコレクションであり、データベーステーブルオブジェクトは、複数のバージョンを有するアプリケーションに対するデータベースにデータを記憶する特定のタイプのテーブルである。いくつかの実施形態では、識別されたカタログテーブルは、バージョンアクセス情報を第1のフォーマットで定義する第1のカタログテーブルと、バージョンアクセス情報を第2のフォーマットで定義する第2のカタログテーブルを含む。いくつかの実施形態では、第1のフォーマットは、特定のアプリケーションバージョンとしてバージョンアクセス情報を指定し、第2のフォーマットは、アプリケーションバージョンの範囲としてバージョンアクセス情報を指定する。
【0072】
1230において、コンピュータシステムは、データベースクエリに対応する1つ以上のデータベースオブジェクトが、アプリケーションの特定のバージョンでアクセス可能であることをデータベースクエリに対するバージョンアクセス情報が示すことを決定する。
【0073】
1240において、コンピュータシステムは、決定に基づいて、データベースクエリに応答して、アプリケーションの特定のバージョンでアクセス可能な1つ以上のデータベースオブジェクトにアクセスする。いくつかの実施形態では、データベースクエリに対するバージョンアクセス情報は、アプリケーションの特定のバージョンに対して、1つ以上のデータベースオブジェクトに含まれるデータの第1の部分へのアクセスを許可する。例えば、hr.employeeテーブル410に含まれる給与列416に記憶された情報(データベースオブジェクトの一例)は、アプリケーションの特定のバージョンでアクセス可能であり得る。いくつかの実施形態では、アプリケーションの異なるバージョンから追加のデータベースクエリを受信することに応答して、コンピューティングシステムは、アプリケーションの異なるバージョンに対するバージョンアクセス情報に基づいて、1つ以上のデータベースオブジェクトに含まれるデータの第2の部分にアクセスする。例えば、給与列416及び賞与列418の両方に記憶された情報は、hr.employeeテーブルに含まれ、アプリケーションの異なるバージョンにアクセス可能であり得る。いくつかの実施形態では、アプリケーションの2つの異なるバージョンからのデータベースクエリ及びそれらのそれぞれのバージョンアクセス情報を受信することに基づいて、コンピュータシステムは、異なるデータベースオブジェクトにアクセスする。例えば、コンピューティングシステムは、hr.employeeテーブル410(1つの例示的なデータベースオブジェクト)が第1のアプリケーションバージョンでアクセス可能であるのに対し、クライアントテーブル(別の例示的なデータベースオブジェクト)が第2のアプリケーションバージョンでアクセス可能であると決定し得る。
【0074】
いくつかの実施形態では、コンピュータシステムは、インデックステーブルをデータベースに追加する。いくつかの実施形態では、インデックステーブルを追加することに基づいて、コンピュータシステムは、データベース内の1つ以上のインデックステーブルに対するメタデータを含むインデックスカタログテーブルに行を追加し、行は、データベースに記憶された1つ以上のデータベースオブジェクトがアクセス可能であるアプリケーションの1つ以上のバージョンを示す情報を指定する開始バージョン列及び停止バージョン列に対するそれぞれの値を含む。
【0075】
いくつかの実施形態では、アプリケーションの特定のバージョンは、データベースに対するデータベースクエリをDBMSに送信し、データベースクエリは、アプリケーションの特定のバージョンを指定する。いくつかの実施形態では、データベースは、1つ以上のカタログテーブルの1つ以上のバージョン情報列内にバージョンアクセス情報を維持する。いくつかの実施形態では、アプリケーションの特定のバージョンは、データベース照会に応答するデータをDBMSから受信する。いくつかの実施形態では、データは、データがアプリケーションの特定のバージョンでアクセス可能であることを指定するバージョンアクセス情報に基づいてデータベースから検索される。いくつかの実施形態では、アプリケーションの特定のバージョンは、1つ以上のデータベースオブジェクトに対する更新をDBMSに送信し、更新は、特定のバージョンに関連付けられている。いくつかの実施態様では、更新は、1つ以上のカタログテーブルに記憶されたメタデータに対する変更を含む。
【0076】
例示的なコンピューティングデバイスここで、
図13を参照すると、いくつかの実施形態によれば、コンピューティングデバイス(コンピューティングシステムとも称される)1310のブロック図が示される。コンピューティングデバイス1310は、本開示の様々な部分を実施するために使用され得る。コンピューティングデバイス1310は、本開示の一部分を実装するモバイルデバイス、サーバコンピュータシステム、クライアントコンピュータシステム、又は任意の他のコンピューティングシステムとして使用され得る装置の一例である。例えば、コンピューティングデバイス1310は、コンピューティングシステム110及び/又はDBMS130を実装し得る。いくつかの状況では、コンピューティングデバイス1310はアプリケーション130を実行する。
【0077】
コンピューティングデバイス1310は、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップコンピュータ又はノートブックコンピュータ、携帯電話、メインフレームコンピュータシステム、ウェブサーバ、ワークステーション、又はネットワークコンピュータを含むが、これらに限定されない、任意の好適なタイプのデバイスであり得る。示されるように、コンピューティングデバイス1310は、処理ユニット1350、記憶サブシステム1312、及び相互接続1360(例えば、システムバス)を介して結合された入出力(I/O)インターフェース1330を含む。入出力インターフェース1330は、1つ以上のI/Oデバイス1340に結合され得る。コンピューティングデバイス1310は、例えば他のコンピューティングデバイスと通信するためにネットワーク1320に結合され得るネットワークインターフェース1332をさらに含む。
【0078】
処理ユニット1350は、1つ以上のプロセッサを含み、いくつかの実施形態では、1つ以上のコプロセッサユニットを含む。いくつかの実施形態では、処理ユニット1350の複数のインスタンスは、相互接続1360に結合され得る。処理ユニット1350(又は処理ユニット1350内の各プロセッサ)は、キャッシュ又は他の形式のオンボードメモリを含み得る。いくつかの実施形態では、処理ユニット1350は、汎用処理ユニットとして実装され得、他の実施形態では、特殊目的処理ユニット(例えば、ASIC)として実装され得る。一般に、コンピューティングデバイス1310は、任意の特定のタイプの処理ユニット又はプロセッササブシステムに限定されない。
【0079】
本明細書で使用される場合、用語「処理ユニット」は、動作を実行するように構成されている回路を指す。したがって、処理ユニットは、様々な方法で実装されるハードウェア回路として実装され得る。ハードウェア回路は、例えば、カスタム超大規模集積(VLSI)回路又はゲートアレイ、論理チップ、トランジスタ、又は他のディスクリート構成要素などの市販の半導体を含み得る。処理ユニットはまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイロジック、プログラマブルロジックデバイスなどのプログラマブルハードウェアデバイスに実装され得る。
【0080】
記憶サブシステム1312は、処理ユニット1350によって使用可能である(例えば、処理ユニット1350によって実行可能な命令及びこれによって使用されるデータを記憶する)。記憶サブシステム1312は、ハードディスク記憶装置、フロッピーディスク記憶装置、リムーバブルディスク記憶装置、フラッシュメモリ、ランダムアクセスメモリ(RAM-SRAM、EDO RAM、SDRAM、DDR SDRAM、RDRAMなど)、ROM(PROM、EEPROMなど)などを含む、任意の好適なタイプの物理メモリ媒体によって実装され得る。記憶サブシステム1312は、いくつかの実施形態では、揮発性メモリのみから構成され得る。記憶サブシステム1312は、処理装置1350を使用してコンピューティングデバイス1310によって実行可能なプログラム命令を記憶することができ、このプログラム命令は、コンピューティングデバイス1310に本明細書に開示されている様々な技術を実行させるように実行可能なプログラム命令を含む。
【0081】
I/Oインターフェース1330は、1つ以上のインターフェースを表し得、様々な実施形態に従って、他のデバイスに結合して通信するように構成されている様々なタイプのインターフェースのいずれであり得る。いくつかの実施形態では、I/Oインターフェース1330は、フロントサイドから1つ以上のバックサイドバスへのブリッジチップである。I/Oインターフェース1330は、1つ以上の対応するバス又は他のインターフェースを介して、1つ以上のI/Oデバイス1340に結合され得る。I/Oインターフェースの例は、記憶デバイス(ハードディスク、光学ドライブ、リムーバブルフラッシュドライブ、記憶アレイ、SAN、又は関連付けられたコントローラ)、ネットワークインターフェースデバイス、ユーザインターフェースデバイス、又は他のデバイス(例えば、グラフィック、サウンドなど)を含む。
【0082】
図13のコンピューティングデバイスは、開示された概念を実証するための一実施形態であることに留意する。他の実施形態では、コンピューティングデバイスの様々な態様が異なり得る。例えば、いくつかの実施形態では、例示された構成要素の追加の構成要素、又は複数のインスタンスが含まれ得る。
【0083】
出願の主題の実現は、以下の例1~20を含むが、これらに限定されない。
(例1)
データベース管理システム(DBMS)を実行するコンピュータシステムによって、データベースに対するデータベースクエリを受信することであって、データベースクエリは、複数のバージョンを有するアプリケーションの特定のバージョンから受信され、データベースクエリは、特定のバージョンを指定する、受信することと、
コンピュータシステムによって、1つ以上のカタログテーブルを識別することであって、1つ以上のカタログテーブルは、バージョンアクセス情報を記憶する1つ以上のバージョン情報列を含む、識別することと、
コンピュータシステムによって、データベースクエリに対応する1つ以上のデータベースオブジェクトが、アプリケーションの特定のバージョンでアクセス可能であることをデータベースクエリに対するバージョンアクセス情報が示すことを決定することと、
コンピュータシステムによって、決定に基づいて、データベースクエリに応答して、アプリケーションの特定のバージョンでアクセス可能な1つ以上のデータベースオブジェクトにアクセスすることと、を含む、方法。
(例2)
1つ以上のバージョン情報列は、データベースに記憶された1つ以上のデータベースオブジェクトがアクセス可能であるアプリケーションバージョンの範囲を示す情報を指定するバージョン列を含む、例1に記載の方法。
(例3)
バージョン情報列は、1つ以上のデータベースオブジェクトに対するバージョンアクセス情報を指定し、1つ以上のデータベースオブジェクトは、スキーマ、テーブル、列、インデックス、トリガ、プロシージャ、及び統計のうちの1つ以上のタイプのオブジェクトを含む、例1に記載の方法。
(例4)
データベースに対するデータベースクエリを受信する前に、
コンピュータシステムによって、アプリケーションの特定のバージョンから、アプリケーションに対する更新を受信することであって、更新は、特定のバージョンに関連付けられている、受信することと、
コンピュータシステムによって、受信した更新に基づいて、1つ以上のカタログテーブルを変更することであって、変更は、特定のバージョンでアクセス可能なデータベースに記憶された1つ以上のデータベースオブジェクトを指定するカタログテーブルに記憶されたメタデータを変更することと、を更に含む、例1に記載の方法。
(例5)
更新は、特定のバージョンでアクセス可能なデータベースオブジェクトと、アプリケーションの以前のバージョンでアクセス可能なデータベースオブジェクトとの間の1つ以上の差異を示す、例4に記載の方法。
(例6)
カタログテーブルのうちの1つは、少なくとも1つのアプリケーションに対して、その1つのアプリケーションに適用可能なスキーマを指定するスキーマカタログテーブルである、例1に記載の方法。
(例7)
データベースクエリに対するバージョンアクセス情報は、アプリケーションの特定のバージョンに対して、1つ以上のデータベースオブジェクトに含まれるデータの第1の部分へのアクセスを許可し、方法は、
アプリケーションの異なるバージョンから追加のデータベースクエリを受信することに応答して、コンピュータシステムによって、アプリケーションの異なるバージョンに対するバージョンアクセス情報に基づいて、1つ以上のデータベースオブジェクトに含まれるデータの異なる第2の部分にアクセスすることを更に含む、例1に記載の方法。
(例8)
識別されたカタログテーブルは、第1のフォーマットでバージョンアクセス情報を定義する第1のカタログテーブルと、第2のフォーマットでバージョンアクセス情報を定義する第2のカタログテーブルとを含む、例1に記載の方法。
(例9)
第1のフォーマットは、特定のアプリケーションバージョンとしてバージョンアクセス情報を指定し、第2のフォーマットは、アプリケーションバージョンの範囲としてバージョンアクセス情報を指定する、例8に記載の方法。
(例10)
データベース管理システム(DBMS)を実行するコンピューティングデバイスに動作を実行させることができる命令を記憶した非一時的なコンピュータ可読媒体であって、動作は、
データベースに対するデータベースクエリを受信し、データベースクエリは、複数のバージョンを有するアプリケーションの特定のバージョンから受信され、データベースクエリは、特定のバージョンを指定する、受信することと、
1つ以上のカタログテーブルを識別することであって、1つ以上のカタログテーブルは、バージョンアクセス情報を記憶する1つ以上のバージョン情報列を含む、識別することと、
データベースクエリに対応する1つ以上のデータベースオブジェクトが、アプリケーションの特定のバージョンでアクセス可能であることをデータベースクエリに対するバージョンアクセス情報が示すことを決定することと、
決定に基づいて、データベースクエリに応答して、アプリケーションの特定のバージョンでアクセス可能な1つ以上のデータベースオブジェクトにアクセスすることと、を含む、非一時的なコンピュータ可読媒体。
(例11)
1つ以上のバージョン情報列は、データベースに記憶された1つ以上のデータベースオブジェクトがアクセス可能であるアプリケーションバージョンの範囲を指定する開始バージョン列及び停止バージョン列を含む、例10に記載の非一時的なコンピュータ可読媒体。
(例12)
バージョン情報列は、データベースの少なくとも1つのスキーマオブジェクト及びデータベーステーブルオブジェクトに対するバージョンアクセス情報を指定し、スキーマオブジェクトは、テーブルの名付けられたコレクションであり、データベーステーブルオブジェクトは、複数のバージョンを有するアプリケーションに対するデータベースにデータを記憶する特定のタイプのテーブルである、例10に記載の非一時的なコンピュータ可読媒体。
(例13)
データベースに対するデータベースクエリを受信する前に、
アプリケーションの特定のバージョンから、アプリケーションに対する更新を受信することであって、更新は、特定のバージョンに関連付けられている、受信することと、
受信した更新に基づいて、1つ以上のカタログテーブルを変更することであって、変更は、特定のバージョンでアクセス可能なデータベースに記憶された1つ以上のデータベースオブジェクトを指定するカタログテーブルに記憶されたメタデータを変更することと、を更に含む、例10に記載の非一時的なコンピュータ可読媒体。
(例14)
カタログテーブルのうちの1つは、少なくとも1つのアプリケーションに対して、その1つのアプリケーションに適用可能なスキーマを指定するスキーマカタログテーブルである、スキーマカタログテーブルは、異なるアプリケーションに対応するスキーマ名を指定する、例10に記載の非一時的なコンピュータ可読媒体。
(例15)
インデックステーブルをデータベースに追加することと、
インデックステーブルを追加することに基づいて、データベース内の1つ以上のインデックステーブルに対するメタデータを含むインデックスカタログテーブルに行を追加し、行は、データベースに記憶された1つ以上のデータベースオブジェクトがアクセス可能であるアプリケーションの1つ以上のバージョンを示す情報を指定する開始バージョン列及び停止バージョン列に対するそれぞれの値を含む、例10に記載の非一時的なコンピュータ可読媒体。
(例16)
データベースクエリに対するバージョンアクセス情報は、アプリケーションの特定のバージョンに対して、1つ以上のデータベースオブジェクトに含まれるデータの第1の部分へのアクセスを許可し、動作は、
アプリケーションの異なるバージョンから追加のデータベースクエリを受信することに応答して、アプリケーションの異なるバージョンに対するバージョンアクセス情報に基づいて、1つ以上のデータベースオブジェクトに含まれるデータの異なる第2の部分にアクセスすることを更に含む、例10に記載の非一時的なコンピュータ可読媒体。
(例17)
アプリケーションの特定のバージョンによって、データベース管理システム(DBMS)に、データベースに対するデータベースクエリを送信することであって、データベースクエリは、アプリケーションの特定のバージョンを指定し、データベースは、1つ以上のカタログテーブルの1つ以上のバージョン情報列にバージョンアクセス情報を維持する、送信することと、
アプリケーションの特定のバージョンによって、DBMSから、データベースクエリに応答するデータを受信することであって、データは、1つ以上のデータベースオブジェクトが、アプリケーションの特定のバージョンにアクセス可能であることを示すバージョンアクセス情報に基づいて、データベースから検索される、受信することと、を含む、方法。
(例18)
アプリケーションの特定のバージョンによって、DBMSに、1つ以上のデータベースオブジェクトに対する更新を送信することであって、更新は、特定のバージョンに関連付けられており、更新は、1つ以上のカタログテーブルに記憶されたメタデータに対する変更を含む、送信することを更に含む、例17に記載の方法。
(例19)
カタログテーブルのうちの1つは、少なくとも1つのアプリケーションに対して、その1つのアプリケーションに適用可能なスキーマを指定するスキーマカタログテーブルである、例17に記載の方法。
(例20)
1つ以上のバージョン情報列は、データベースに記憶された1つ以上のデータベースオブジェクトがアクセス可能であるアプリケーションバージョンの範囲を示す情報を指定するバージョン列を含む、例17に記載の方法。
【0084】
特定の実施形態が上述されたが、これらの実施形態は、たとえ単一の実施形態が特定の特徴に関して記載されている場合でも、本開示の範囲を限定することを意図するものではない。本開示において提供される特徴の例は、特に断らない限り、限定的ではなく例示的であることを意図している。上記の説明は、本開示の利益を有する当業者に明らかなような代替、修正、及び等価をカバーすることを意図している。
【0085】
本開示の範囲は、本明細書において対処された問題のうちのいずれか又は全部を緩和するか否かにかかわらず、本明細書に開示されている任意の特徴又は特徴の組み合わせ(明示的又は暗示的のいずれか)、又はその任意の一般化を含む。したがって、新たな請求項が、この出願(又はその優先権を主張する出願)のこのような特徴の組み合せに対するプロセキューション中に明確にされることがある。特に、添付の特許請求の範囲を参照すると、従属請求項からの特徴は、独立請求項の特徴と組み合わせてもよく、それぞれの独立請求項からの特徴は、添付の特許請求の範囲に列挙された特定の組み合わせのみでなく、任意の適切な様式で組み合わされ得る。