(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-14
(45)【発行日】2023-12-22
(54)【発明の名称】ディクショナリ管理を用いない普遍的に一意のリソース
(51)【国際特許分類】
G06F 16/901 20190101AFI20231215BHJP
【FI】
G06F16/901
(21)【出願番号】P 2018246026
(22)【出願日】2018-12-27
【審査請求日】2021-10-11
(32)【優先日】2017-12-29
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】514180812
【氏名又は名称】ダッソー システムズ アメリカス コーポレイション
(74)【代理人】
【識別番号】110001243
【氏名又は名称】弁理士法人谷・阿部特許事務所
(72)【発明者】
【氏名】アレクサンドル ジュトン
(72)【発明者】
【氏名】ピエール-セブラン ランフランキ
(72)【発明者】
【氏名】デイビッド エドワード テュークスバリー
【審査官】原 秀人
(56)【参考文献】
【文献】特開昭63-233431(JP,A)
【文献】Luo 外,Storing and Indexing Massive RDF Data Sets,[online],2017年03月29日,[令和4年11月28日検索],インターネット <URL:https://web.archive.org/web/20170329080233/http://www.win.tue.nl/~yluo/seeqr/files/11survey.pdf>
【文献】小林 貴訓 外,オブジェクト指向言語Java,初版,日本,株式会社コロナ社,2016年11月02日,pp. 40-42
【文献】松信 嘉範,Linux-DBシステム構築/運用入門,第1版,日本,株式会社翔泳社 佐々木 幹夫,2009年11月05日,pp. 228-230
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
プロセッサおよびメモリを備えるコンピュータにおいて、前記プロセッサによって前記メモリにデータ操作のための命令とともに実装され、前記プロセッサによる前記命令の実行としてデータを操作するデータベースであって、
キーとデータとの間の関連付けを記憶するディクショナリと、
インデックスであって、前記インデックス内の各エントリは、データに対応する複数の値を含む、該インデックスと
を備え、
前記インデックスの所定エントリ内の値は、対応するデータの各表現を前記対応するデータのデータ型に基づいてそれぞれ含み、(1)前記対応するデータのデータ型が特定のデータ型の一つである場合、前記対応するデータの直接的な表現が前記インデックス内に記憶され、(2)前記対応するデータのデータ型が他のデータ型の一つである場合、前記対応するデータのハッシュが前記インデックス内に記憶され、前記ハッシュは、前記対応するデータにアクセスするために、前記ディクショナリ内において、前記対応するデータと関連付けられたキーとして使用され
、
所定のインデックス値の第1の数のビットは、前記所定のインデックス値によって表現されるデータのカテゴリを表し、(1)前記所定のインデックス値の前記第1の数のビットによって表現されるデータの前記カテゴリは、リテラル値のカテゴリであり、(2)前記所定のインデックス値の第2の数のビットは、前記リテラル値のデータ型を表し、(3)前記所定のインデックス値の残りのビットは、前記データの前記リテラル値を記憶し、残りのビットは、前記第1の数のビットまたは前記第2の数のビットに属さない前記インデックス値のビットである
ことを特徴とする
、データベース。
【請求項2】
前記データベースは、リソース ディスクリプション フレームワークデータベースであり、前記インデックスの前記複数の値は、主語、述語、および目的語に対応する、3つの値を含むことを特徴とする
、請求項1に記載のデータベース。
【請求項3】
前記インデックスの値は、整数、倍精度浮動小数点数、浮動小数点数、8文字以下の文字列、または普遍的に一意の識別子のデータ型のいずれかについては、対応するデータの直接的な表現を含むことを特徴とする
、請求項1に記載のデータベース。
【請求項4】
前記
所定のインデックス値は、128ビットであり、前記第1の数のビットは、2ビットであり、前記第2の数のビットは、62ビットであることを特徴とする、請求項
1に記載のデータベース。
【請求項5】
インデックス値の第1の数のビットは、前記インデックス値によって表現されるデータのカテゴリを表し、前記インデックス値の残りのビットは、前記データを記憶することを特徴とする、請求項
1に記載のデータベース。
【請求項6】
前記インデックス値の前記残りのビット内に記憶される前記データは、普遍的に一意の識別子であることを特徴とする
、請求項
5に記載のデータベース。
【請求項7】
インデックス値の第1の数のビットは、前記インデックス値によって表現されるデータのカテゴリを表し、前記インデックス値の残りのビットは、前記データのハッシュを記憶することを特徴とする
、請求項
1に記載のデータベース。
【請求項8】
プロセッサおよびメモリを備えるコンピュータにおいて、前記プロセッサによって前記メモリにデータ操作のための命令とともに実装され、前記プロセッサによる前記命令の実行としてデータを操作する、データベース内にデータを記憶するコンピュータ実施方法であって、前記データベースは、インデックスと、ディクショナリとを含み、
前記プロセッサは、
前記ディクショナリ内に、キーとデータとの間の関連付けを記憶するステップと、
前記インデックス内に、データに対応する複数の値を含む索引を記憶するステップと
を備え、
前記インデックスに索引を記憶することは、(1)所与のインデックス値の第1の数のビットに、前記所与のインデックス値によって表現されるデータのカテゴリの表現を記憶することであって、前記所与のインデックス値の前記第1の数のビットによって表現されるデータの前記カテゴリは、リテラル値のカテゴリであり、(2)前記所与のインデックス値の第2の数のビットに、前記リテラル値のデータ型の表現を記憶し、(3)前記所与のインデックス値の残りのビットに、前記データの前記リテラル値を記憶し、残りのビットは、前記第1の数のビットまたは前記第2の数のビットに属さない前記インデックス値のビットであり、
前記インデックスの所定エントリ内の値は、対応するデータの各表現を前記対応するデータのデータ型に基づいてそれぞれ含み、(1)前記対応するデータのデータ型が特定のデータ型の一つである場合、前記対応するデータの直接的な表現が前記インデックス内に記憶され、(2)前記対応するデータのデータ型が他のデータ型の一つである場合、前記対応するデータのハッシュが前記インデックス内に記憶され、前記ハッシュは、前記対応するデータにアクセスするために、前記ディクショナリ内において、前記対応するデータと関連付けられたキーとして使用されること
を
含む前記命令を実行することを特徴とする
、方法。
【請求項9】
前記データベースは、リソース ディスクリプション フレームワークデータベースであり、前記インデックスの前記複数の値は、主語、述語、および目的語に対応する、3つの値を含むことを特徴とする請求項
8に記載の方法。
【請求項10】
前記インデックス内に索引を記憶するステップは、整数、倍精度浮動小数点数、浮動小数点数、8文字以下の文字列、または普遍的に一意の識別子のデータ型のいずれかについては、対応するデータの直接的な表現として前記インデックスの値を記憶するステップを含むことを特徴とする請求項
8に記載の方法。
【請求項11】
前記インデックス内に索引を記憶するステップは、
(1)インデックス値の第1の数のビットに、前記値によって表現されるデータのカテゴリの表現を記憶し、(2)前記インデックス値の残りのビッ
トに前記データを記憶するステップを含むことを特徴とする
、請求項
8に記載の方法。
【請求項12】
前記インデックス内に索引を記憶するステップは、前記インデックス値の前記残りのビット内に、普遍的に一意の識別子を記憶するステップを含むことを特徴とする
、請求項
11に記載の方法。
【請求項13】
前記インデックス内に索引を記憶するステップは、
(1)インデックス値の第1の数のビットに、前記値によって表現されるデータのカテゴリの表現を記憶し、(2)前記インデックス値の残りのビッ
トに前記データのハッシュを記憶するステップを含むことを特徴とする
、請求項
8に記載の方法。
【請求項14】
プロセッサおよびメモリを備えるコンピュータにおいて、前記プロセッサによって前記メモリにデータ操作のための命令とともに実装され、前記プロセッサによる前記命令の実行としてデータを操作する、データベースにデータを記憶し、取り出す方法であって、
前記プロセッサは、
インデックスおよびディクショナリに従って、前記メモリを構成するステップであって、前記インデックス内の各エントリは、データに対応する複数の値を含み、前記ディクショナリは、キーとデータとの間の関連付けを記憶する、ステップと、
前記インデックスの所定エントリ内の値は、対応するデータの各表現を前記対応するデータのデータ型に基づいてそれぞれ含み、(1)前記対応するデータのデータ型が特定のデータ型の一つである場合、対応するデータの直接的な表現が前記インデックス内に記憶され、(2)前記対応するデータのデータ型が他のデータ型の一つである場合、前記対応するデータのハッシュが前記インデックス内に記憶され、前記ハッシュは、前記対応するデータにアクセスするために、前記ディクショナリ内において、前記対応するデータと関連付けられたキーとして使用され
ており、
所定のインデックス値の第1の数のビットは、前記所定のインデックス値によって表現されるデータのカテゴリを表し、(1)前記所定のインデックス値の前記第1の数のビットによって表現されるデータの前記カテゴリは、リテラル値のカテゴリであり、(2)前記所定のインデックス値の第2の数のビットは、前記リテラル値のデータ型を表し、(3)前記所定のインデックス値の残りのビットは、前記データの前記リテラル値を格納し、残りのビットは、前記第1の数のビットまたは前記第2の数のビットに属さない前記インデックス値のビットである、ステップと
を含む
前記命令を実行することを特徴とする
、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ディクショナリ管理を用いない普遍的に一意のリソースに関する。
【背景技術】
【0002】
結果整合性は、アイテムに対するすべての個々のアクセスが、同じ値を最終的に返すことを目的に、分散コンピューティングにおいて使用される、モデルである。結果整合的であるセマンティックウェブ上におけるシステムは、BASE(基本的に可用、柔軟な状態、結果整合性)としばしば呼ばれる。リソース ディスクリプション フレームワーク(RDF)は、ウェブ上におけるデータ交換のための例示的な規格である。RDFは、物事間の関係を(「トリプル」と呼ばれる)主語、述語、および目的語として記述するために、ユニバーサルリソースアイデンティファイア(URI)を使用する。URIは、リソースを識別するために使用される、文字列である。URIの1つの例は、「ウェブアドレス」としばしば呼ばれる、ユニフォームリソースロケータ(URL)である。RDFは、有向のラベル付けされたグラフとして表されることができ、ノードは、ウェブリソースを表し、ノード間のエッジは、リソース間の関係を表す。
【0003】
非常に大量のデータの生成を可能にするアプリケーションは、RDFデータセットを使用することから、利益を得ることができる。そのようなケースにおいては、非常に大量のURIの生成が、サポートされなければならない。RDFトリプルストレージにインデックスを提供して、非常に冗長な情報の持続性を最適化することを助けるために、ディクショナリが、使用されることができる。ディクショナリ(dictionary)およびインデックス(index)は、基本的に、以下の3つの操作を提供する。(1)挿入-RDFノードにインデックスを与え、それの値をディクショナリ内に記憶する。(2)ロケート-RDFノードと関連付けられたインデックスを提供する。(3)抽出-ディクショナリから、インデックスと関連付けられた値を提供する。ロケート操作および抽出操作は、正確なインデックスを分配するために、ディクショナリ全体に対する最新の更新に遠くのサイトからアクセスする必要があるので、それらは、ディクショナリが大きくなるにつれて、コスト高になることがある。2つの異なるサイトは、同じリソースを同時に挿入することを試みてよいので、挿入操作は、非集中的で分散的なディクショナリという状況において、問題となることができる。
【発明の概要】
【課題を解決するための手段】
【0004】
普遍的に一意の識別子(UUID)は、RDFデータベースにおいて、衝突のリスクがほとんどないデータ識別子を与えるために使用されることができる。UUIDは、文字列として表され、36バイトである、多くの従来のURIよりもコンパクト(すなわち、標準的なUUIDテキスト形式に従うと、16進フォーマットでバイト当たり2つの英数字文字、および4つのダッシュ)であってよいがUUIDを文字列として操作することは、それの自然な2進表現は、16バイト(128ビット)だけであるので、準最適である。文字列ディクショナリを使用して、大量のUUIDベースのURIを取り扱うことは、プロセッササイクルおよびメモリの浪費であり、2つの異なるサイトが同じUUIDを生成することは、きわめて可能性の低い出来事であるという、UUIDの特徴の利益を失う。可能性が低いので、それは、相互検証の必要がない、非集中的なシステムを構築する際の仮定として、採用されることができる。
【0005】
本明細書において開示されるデータベースおよび方法は、コスト高なディクショナリアクセス(書き込みおよび読み取り)を減少させるために、これを利用することができ、時間およびメモリを節約する。1つの例示的な実施形態は、ディクショナリと、インデックスとを含む、データベースである。ディクショナリは、キーとデータとの間の関連付けを記憶する。インデックス内の各エントリは、データに対応する複数の値を含む。インデックスの値は、(i)あるデータ型については、対応するデータの直接的な表現を、または(ii)他のデータ型については、対応するデータのハッシュのいずれかを含む。ハッシュ(hash)は、ディクショナリ内において、対応するデータと関連付けられたキーとして使用される。
【0006】
別の例示的な実施形態は、データベース内にデータを記憶する、コンピュータ実施方法であり、データベースは、インデックスと、ディクショナリとを含む。例示的な方法は、ディクショナリ内に、キーとデータとの間の関連付けを記憶するステップを含む。方法は、インデックス内に、データに対応する複数の値を含む索引を記憶するステップをさらに含む。インデックスの値は、(i)あるデータ型については、対応するデータの直接的な表現を、または(ii)他のデータ型については、対応するデータのハッシュのいずれかを含む。ハッシュは、ディクショナリ内において、対応するデータと関連付けられたキーとして使用される。
【0007】
別の例示的な実施形態は、コンピュータメモリ内にデータを記憶し、コンピュータメモリ内のデータを取り出す、方法である。例示的な方法は、インデックスおよびディクショナリに従って、メモリを構成するステップを含む。インデックス内の各エントリは、データに対応する複数の値を含む。ディクショナリは、キーとデータとの間の関連付けを記憶する。インデックスの各値は、(i)あるデータ型については、対応するデータの直接的な表現を、または(ii)他のデータ型については、対応するデータのハッシュのいずれかを含む。ハッシュは、ディクショナリ内において、対応するデータと関連付けられたキーとして使用される。
【0008】
いくつかの実施形態においては、データベースは、リソース ディスクリプション フレームワークデータベースであり、インデックスの複数の値は、主語、述語、および目的語に対応する、3つの値を含むことができる。いくつかの実施形態においては、インデックスの値は、型が整数、倍精度浮動小数点数、浮動小数点数、8文字以下の文字列、または普遍的に一意の識別子である任意のデータについては、対応するデータの直接的な表現を含むことができる。
【0009】
いくつかの実施形態においては、インデックス値の第1の数のビットは、値によって表されるデータのカテゴリを表すことができる。インデックス値の第1の数のビットによって表されるデータのカテゴリは、リテラル値カテゴリであることができ、そのケースにおいては、インデックス値の第2の数のビットは、リテラル値のデータ型を表すことができる。インデックス値の残りのビットは、データのリテラル値を記憶することができる。インデックス値は、128ビットであることができ、(データのカテゴリを表す)第1の数のビットは、2ビットであることができる。リテラル値カテゴリのケースにおいては、(データ型を表す)第2の数のビットは、62ビットであることができる。リテラル値以外のケースにおいては、(第1の数のビット以外の)インデックス値の残りのビットは、データを記憶することができる。いくつかのケースにおいては、インデックス値の残りのビット内に記憶されるデータは、普遍的に一意の識別子であることができ、他のケースにおいては、インデックス値の残りのビットは、データのハッシュを記憶することができる。
【図面の簡単な説明】
【0010】
上述したことは、添付の図面において図説されるように、例示的な実施形態についての以下のより具体的な説明から明らかであり、図面において、同様の参照文字は、どの異なる図においても、同じ部分を参照する。図面は、実寸に比例しているとは限らず、代わりに、実施形態を図説する際、強調が、施されることがある。
【0011】
【
図1】例示的な実施形態に従った、メモリ内のディクショナリおよびインデックスを示す、ブロック図である。
【
図2A】例示的な実施形態に従った、インデックス値の例を示す、ブロック図である。
【
図2B】例示的な実施形態に従った、インデックス値の例を示す、ブロック図である。
【
図2C】例示的な実施形態に従った、インデックス値の例を示す、ブロック図である。
【
図2D】例示的な実施形態に従った、インデックス値の例を示す、ブロック図である。
【
図3】例示的な実施形態に従った、データベース上における例示的な操作を示す、フロー図である。
【
図4】例示的な実施形態に従った、データベース内にデータを記憶するコンピュータ実施方法を示す、フロー図である。
【
図5】例示的な実施形態に従った、データベース内にデータを記憶することを示す、フロー図である。
【
図6】例示的な実施形態に従った、データベースからデータを読み取ることを示す、フロー図である。
【
図7】本明細書において提示される例示的な実施形態が実施されることができる、コンピュータネットワーク環境の概略図である。
【
図8】
図7のネットワークの例示的なコンピュータノードを示す、ブロック図である。
【発明を実施するための形態】
【0012】
例示的な実施形態についての説明は、以下の通りである。
【0013】
データセット内のデータを識別するために、命名体系が、必要とされる。衝突のリスクがほとんどないデータ識別子を与えるために、UUIDが、一般に使用される。UUIDは、コンピュータシステム内において、情報を識別するために使用される、128ビット数である。標準的な方法に従って生成されるとき、UUIDは、集中的管理、またはUUIDを生成した当事者間における調整に依存することなく、一意的である。UUIDが重複する確率は、無視できる。
【0014】
図1は、例示的な実施形態に従った、メモリ100内のディクショナリ110およびインデックス105を示す、ブロック図である。ディクショナリは、キー130a~nとデータ135a~nとの間の関連付けを記憶する。インデックス105内の各エントリ(インデックス105の行)は、データに対応する複数の値115a~m、120a~m、および125a~mを含む。インデックス105の値は、(i)あるデータ型については、対応するデータの直接的な表現を、または(ii)他のデータ型については、対応するデータのハッシュのいずれかを含む。ハッシュは、ディクショナリ110内において、対応するデータと関連付けられたキー(130a~nのうちの1つ)として使用される。
【0015】
特定の実施形態においては、ディクショナリ110は、128ビットハッシュキーを、いずれかの情報(例えば、RDFノード)に対するインデックスとして使用することができる。あるデータ型(例えば、整数、倍精度浮動小数点数、日付および時刻、またはショート文字列)のリテラル値は、64ビットの半キーに収まることができる。128ビット値のうちの2ビットは、データの分類のために、予約されることができ、残りの62ビットは、データ型をエンコードするために、使用されることができる。同様に、UUIDは、128ビットハッシュキーの全長を使用して、128ビット値内にエンコードされることができ、2つの予約ビットは、UUIDのケースを区別することを可能にする。
【0016】
図2Aないし
図2Dは、例示的な実施形態に従った、インデックス値205、225、250、270の例を示す、ブロック図である。
図2Aは、空白ノードを表す、例示的なインデックス値205を示している。インデックス値205の2つのビットは、空白ノードを示すために、使用されることができる。
図2Aのケースにおいては、値205のうちの最初の2つのビット210、215が、使用され、空白ノードを示すビット値は、示されるように、例えば、「00」であることができる。ビット値の異なる組み合わせが使用されてよいことが、理解されるべきである。
【0017】
図2Bは、リテラル形式のデータを表す、例示的なインデックス値225を示している。インデックス値225の2つのビットは、リテラル値のデータがインデックス内に記憶されることを示すために、使用されることができる。
図2Bのケースにおいては、値225のうちの最初の2つのビット230、235が、使用され、リテラルカテゴリを示すビット値は、示されるように、例えば、「01」であることができる。ビット値の異なる組み合わせが使用されてよいことが、理解されるべきである。いくつかのビット240は、データの型(例えば、整数、倍精度浮動小数点数、日付、時刻、またはショート文字列)を示すために、使用されることができる。残りのビット245は、リテラル値のデータを記憶するために、使用されることができる。例えば、
図2Bのケースにおいては、62ビットが、データ型を指定するために、使用されることができ、64ビットが、リテラル値のデータを記憶するために、使用されることができる。
【0018】
図2Cは、UUIDとしてデータを表す、例示的なインデックス値250を示している。インデックス値250の2つのビットは、データがUUIDとしてインデックス内に記憶されることを示すために、使用されることができる。
図2Cのケースにおいては、値250のうちの最初の2つのビット255、260が、使用され、UUIDカテゴリを示すビット値は、示されるように、例えば、「10」であることができる。ビット値の異なる組み合わせが使用されてよいことが、理解されるべきである。残りのビット265は、データをUUIDフォーマットで記憶するために、使用されることができる。
【0019】
図2Dは、ディクショナリ内においてデータを検索するために使用されるハッシュキー(例えば、
図1の110)である、例示的なインデックス値270を示している。インデックス値270の2つのビットは、データがディクショナリ内に記憶されることを示すために、使用されることができる。
図2Dのケースにおいては、値270のうちの最初の2つのビット275、280が、使用され、データがディクショナリ内に記憶されることを示すビット値は、示されるように、例えば、「11」であることができる。ビット値の異なる組み合わせが使用されてよいことが、理解されるべきである。残りのビット285は、ハッシュキーを記憶するために、使用されることができる。
【0020】
図3は、例示的な実施形態に従った、データベース上における例示的な操作を示す、フロー図である。本明細書において開示されるデータベースおよび方法のディクショナリは、抽出操作を実行するために、ハッシュキーを与えられて、値を計算することができる、逆ハッシュテーブルと見なされることができる。他方、挿入操作およびロケート操作は、一定の時間において動作し、遠いサイト間においていかなる同期も必要としない。RDFディクショナリのケースにおいては、ディクショナリは、基本的に、緩和されたトランザクション要件を有する、追加のみのBASEデータベースである。開示されるハッシュキーの使用は、挿入操作が、ディクショナリからの読み取りを行わずに、ディクショナリに書き込むことによって、実行されることを可能にする。設計によって、与えられたインデックスが、ディクショナリ内においてすでに使用されているかどうかをチェックする必要はない。加えて、正しいハッシュアルゴリズムが、知られている場合、キーは、値自体から推測されることができるので、ロケート操作は、「読み取りなしに読み取ること」によって、実行されることができる。
図3を参照すると、リソースに基づいてUUIDの生成310を行い、128ビットキーとしてUUIDのエンコード315を行うことによって、RDFリソースの生成305が、行われることができる。生成されたキーを使用して、RDFトリプルの記憶320が、行われることができる。キーに基づいてトリプルの検索330を行い、マッチした128ビットキーのデコード335を行うことによって、RDFリソースの検索325が、行われることができる。可能な場合は、ディクショナリを参照せずに、キーをデコードすることによって、リソースを獲得することが、好ましい。128ビットキーとしてUUIDのエンコードを行い、それらのキーを使用してトリプルのマッチング350を行うことによって、RDFリソースの読み取り340が、行われることができる。完全な非集中的なディクショナリについては、可能なときは、ディクショナリ内への記憶を回避することが、有益であり、それは、ここで開示されるデータベースおよび方法を使用して、ハッシュキー内のデータのインプレースエンコーディングによって、達成されることができる。ほとんどのリテラル値、すべてのUUIDベースの生成されたリソース、および(UUIDを使用する)匿名ノードについては、ディクショナリアクセスは、回避されることができる。十分に大きいデータセットを与えられた場合、(数桁までは)ほとんどすべてのノードは、ディクショナリ管理を必要としない。
【0021】
図4は、例示的な実施形態に従った、データベース内にデータを記憶するコンピュータ実施方法400を示す、フロー図である。例示的な方法は、ディクショナリ内に、キーとデータとの間の関連付けを記憶するステップ405を含む。方法は、データに対応する複数の値を含む索引をインデックス内に記憶するステップ410をさらに含む。インデックスの値は、(i)あるデータ型については、対応するデータの直接的な表現を、または(ii)他のデータ型については、対応するデータのハッシュのいずれかを含む。ハッシュは、ディクショナリ内において、対応するデータと関連付けられたキーとして使用される。
【0022】
図5は、例示的な実施形態に従った、データベース内にデータを記憶する方法500を示す、フロー図である。505において、データベース内に記憶されるデータのカテゴリ(例えば、URI)が、決定される。カテゴリが、「空白」(ヌルノード(null node))である場合、510において、データが空白であることを示すインジケーションが、インデックス値内に記憶されることができる。カテゴリが、「リテラル(literal)」であり、データ型が、例えば、整数、浮動小数点数、日付、または時刻である場合510において、データがリテラル値であることを示すインジケーションが、データ型のインジケーションおよびデータのリテラル値とともに、インデックス値内に記憶されることができる。リテラルのデータ型が、文字列である場合、525において、文字列のサイズが、決定されることができる。文字列のサイズが、8文字(64ビット)以下である場合、510において、データがリテラル値であることを示すインジケーションが、データ型(文字列)のインジケーションおよびデータのリテラル値とともに、インデックス値内に記憶されることができる。文字列のサイズが、8文字(64ビット)よりも大きい場合、530において、データがディクショナリ内に記憶されることを示すインジケーションが、データのハッシュとともに、インデックス値内に記憶されることができ、ハッシュは、ディクショナリ内において、キーとして使用される。
【0023】
データのカテゴリが、空白またはリテラルではない場合、535において、データのサイズが、決定されることができる。データのサイズが、16バイト(128ビット)以下である場合、データは、UUIDとして表されてよく、540において、データがUUIDとして表されことを示すインジケーションが、UUIDとともに、インデックス値内に記憶されることができる。545において、データのサイズが、16バイト(128ビット)よりも大きい場合、データがディクショナリ内に記憶されることを示すインジケーションが、データのハッシュとともに、インデックス値内に記憶されることができ、ハッシュは、ディクショナリ内において、キーとして使用される。
【0024】
図6は、例示的な実施形態に従った、データベースからデータを読み取る方法600を示す、フロー図である。605において、インデックス値内に記憶されるデータのカテゴリが、(例えば、上で説明されたように、インデックス値の2つのビットを解釈することによって)決定されることができる。カテゴリが、「空白」(ヌルノード)である場合、610において、データは、空白である。カテゴリが、リテラルである場合、615において、データの型が、(例えば、上で説明されたように、インデックス値の62ビットを解釈することによって)インデックス値から解釈されることができる。615において、データ型に基づいて、データが、リテラル値として、インデックス値から(例えば、残りの64ビットから)読み取られることができる。カテゴリが、UUIDである場合、620において、データが、UUIDとしてのデータの表現に基づいて、インデックス値から読み取られることができる。カテゴリが、ディクショナリ検索である場合、625において、ハッシュキーが、インデックス値から読み取られ、ディクショナリ内のデータにアクセスするために使用されることができる。
【0025】
図7は、本実施形態が実施されてよい、コンピュータネットワークまたは類似のデジタル処理環境を示している。クライアントコンピュータ/デバイス/プロセッサ50、およびサーバコンピュータ60は、アプリケーションプログラムなどを実行する、処理デバイス、記憶デバイス、および入力/出力デバイスを提供する。クライアントコンピュータ/デバイス50は、通信ネットワーク70を通して、他のクライアントデバイス/プロセッサ50、およびサーバコンピュータ60を含む、他のコンピューティングデバイスにリンクされることもできる。コミュニケーションネットワーク70は、リモートアクセスネットワーク、グローバルネットワーク(例えば、インターネット)、クラウドコンピューティングサーバまたはサービス、世界規模のコンピュータの集まり、ローカルエリアネットワークまたはワイドエリアネットワーク、および互いに通信するために現在はそれぞれのプロトコル(TCP/IP、Bluetoothなど)を使用するゲートウェイの部分であることができる。他の電子デバイス/コンピュータネットワークアーキテクチャも、適している。
【0026】
図8は、
図7のコンピュータシステムにおけるコンピュータ(例えば、クライアントプロセッサ/デバイス50、またはサーバコンピュータ60)の内部構造の図である。各コンピュータ50、60は、システムバス79を含み、バスは、コンピュータまたは処理システムの構成要素間におけるデータ転送のために使用される、ハードウェア線のセットである。バス79は、基本的に、コンピュータシステムの異なる要素(例えば、プロセッサ、ディスクストレージ、メモリ、入力/出力ポート、およびネットワークポート)を接続する共用導管であり、要素間における情報の転送を可能にする。様々な入力および出力デバイス(例えば、キーボード、マウス、ディスプレイ、プリンタ、およびスピーカ)をコンピュータ50、60に接続するために、システムバス79には、I/Oデバイスインターフェース82が、取り付けられる。ネットワークインターフェース86は、コンピュータが、ネットワーク(例えば、
図11のネットワーク70)に取り付けられた様々な他のデバイスに接続することを可能にする。メモリ90は、多くの実施形態を実施するために使用される、コンピュータソフトウェア命令92およびデータ94(例えば、ルーチン300、400、500、および600を含む、上で詳述された、
図3ないし
図6のコード)のための揮発性ストレージを提供する。ディスクストレージ95は、多くの実施形態を実施するために使用される、コンピュータソフトウェア命令92およびデータ94のための不揮発性ストレージを提供する。中央プロセッサユニット84も、システムバス79に取り付けられ、コンピュータ命令の実行を提供する。
【0027】
一実施形態においては、プロセッサルーチン92およびデータ94は、ソフトウェア命令の少なくとも一部をシステムに提供するコンピュータ可読媒体(例えば、1つまたは複数のDVD-ROM、CD-ROM、ディスケット、およびテープなどの、リムーバブル記憶媒体)を含む、(全体として92で参照される)コンピュータプログラム製品である。コンピュータプログラム製品92は、当技術分野においてよく知られた、任意の適切なソフトウェアインストール手順によって、インストールされることができる。別の実施形態においては、ソフトウェア命令の少なくとも一部は、ケーブル、通信、および/または無線接続を介して、ダウンロードされてもよい。他の実施形態においては、プログラムは、伝搬媒体(例えば、無線波、赤外線波、レーザ波、音波、またはインターネットなどのグローバルネットワークもしくは他のネットワーク上において伝搬される電波)上の伝搬される信号上に具現化された、コンピュータプログラム伝搬信号製品75(
図7)である。そのような搬送波媒体または信号は、ルーチン/プログラム92についてのソフトウェア命令の少なくとも一部を提供する。
【0028】
代替的な実施形態においては、伝搬される信号は、伝搬される媒体上において搬送される、アナログ搬送波またはデジタル信号である。例えば、伝搬される信号は、グローバルネットワーク(例えば、インターネット)、電気通信ネットワーク、または他のネットワーク上において伝搬される、デジタル化された信号であってよい。一実施形態においては、伝搬される信号は、ミリ秒、秒、分の、またはより長い期間にわたって、ネットワーク上において、パケットに収めて送信される、ソフトウェアアプリケーションのための命令など、時間期間にわたって、伝搬媒体上において送信される、信号である。別の実施形態においては、コンピュータプログラム製品92のコンピュータ可読媒体は、コンピュータプログラム伝搬信号製品について上で説明されたように、伝搬媒体を受信すること、および伝搬媒体内に具現化された伝搬される信号を識別することなどによって、コンピュータシステム50が受信し、読み取ってよい、伝搬媒体である。一般的に言うと、「搬送波媒体」または一時的搬送波という用語は、上述の一時的信号、伝搬される信号、伝搬される媒体、および記憶媒体などを包含する。他の実施形態においては、プログラム製品92は、いわゆるサービス型ソフトウェア(SaaS)、またはエンドユーザをサポートする他のインストールもしくは通信として実施されてよい。
【0029】
例示的な実施形態が、具体的に示され、説明されたが、添付の特許請求の範囲によって包含される実施形態の範囲から逸脱することなく、形態および細部における様々な変更が、それらに施されてよいことが、当業者には理解されよう。