(57)【要約】【課題】非構造化データを構造化フレームワークに記憶する技術を提供する。【解決手段】１つの実施形態において、方法は、非構造化データ・レコードを受信することと、非構造化データ・レコードの特性を判定するために非構造化データ・レコードを構文解析することとを含む。特性は、フィールドの数、フィールドの長さおよび非構造化データ・レコードに記憶されているフィールドの順序の判定を含む。方法は、また、第１のキーバリューに関連付けられたプライマリ・キー名を含む第１のキー・ペアを取得することと、ハッシュ値を取得するために少なくとも第１のキーバリューをハッシュすることとを含む。さらに、方法は、インデックス付与キーとしてハッシュ値を含むように非構造化データ・レコードを更新し、それによって修正済みデータ・レコードを生成することを含む。また、方法は、修正済みデータ・レコードを構造化データベースに記憶することを含む。さらに、方法は、修正済みデータ・レコードのためのエントリを含むように構造化データベースのインデックスを更新することであって、エントリがハッシュ値を含む、更新することを含む。【選択図】図６
2021506030.tif 000002
【特許請求の範囲】
【請求項１】
非構造化データ・レコードを受信することと、
前記非構造化データ・レコードの特性を判定するために前記非構造化データ・レコードを構文解析することであって、前記特性が、
前記非構造化データ・レコードの合計長、
フィールドの数、
前記フィールドの長さ、および
前記非構造化データ・レコードに記憶されている前記フィールドの順序
の判定を含む、前記構文解析することと、
第１のキーバリューに関連付けられたプライマリ・キー名を含む、第１のキー・ペアを取得することと、
ハッシュ値を取得するために少なくとも前記第１のキーバリューをハッシュすることと、
インデックス付与キーとして前記ハッシュ値を含むように前記非構造化データ・レコードを更新し、それによって修正済みデータ・レコードを生成することと、
前記修正済みデータ・レコードを構造化データベースに記憶することと、
前記修正済みデータ・レコードのためのエントリを含むように前記構造化データベースのインデックスを更新することであって、前記エントリが前記ハッシュ値を含む、前記更新することと、
を含む、方法。
【請求項２】
前記ハッシュ値が、前記第１のキー・ペアをハッシュすることによって生成され、前記方法が、
前記非構造化データ・レコードからメタデータを識別することと、
前記修正済みデータ・レコードの生成において、前記非構造化データ・レコードを前記第１のキー・ペアに関連付けられた前記メタデータおよび前記ハッシュ値で更新することと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記第１のキー・ペアを前記取得することが、
前記非構造化データ・レコードを含む非構造化データ・レコードのセットに関連付けられる前記プライマリ・キー名を生成することであって、前記プライマリ・キー名が、前記非構造化データ・レコードのセット内の全ての非構造化データ・レコードに使用される、前記生成することと、
整数値を１ずつインクリメントし、その結果もたらされるインクリメントされた整数を前記第１のキーバリューとして選択することによって、前記非構造化データ・レコードに関連付けられる前記第１のキーバリューを生成することと、
をさらに含む、請求項１に記載の方法。
【請求項４】
前記第１のキー・ペアを前記取得することが、
前記プライマリ・キー名を非構造化データ・レコードのセットから識別することであって、前記非構造化データ・レコードのセット内の各非構造化データ・レコードが、前記プライマリ・キー名を含む、前記識別することと、
前記非構造化データ・レコードのセットの任意の他の非構造化データ・レコードにおいてキーバリューとして使用されていない整数値を選択することによって、前記非構造化データ・レコードに関連付けられる前記第１のキーバリューを生成することと、
をさらに含む、請求項１に記載の方法。
【請求項５】
前記非構造化データ・レコードにアクセスするためのリクエストを受信することと、
前記修正済みデータ・レコードの位置を判定するために、前記構造化データベースの前記インデックスを照会することと、
前記非構造化データ・レコードにアクセスするための前記リクエストを受信することに応答して、前記非構造化データ・レコードを含む前記修正済みデータ・レコードの一部を出力することと、
をさらに含む、請求項１に記載の方法。
【請求項６】
前記構造化データベースについてのセカンダリ・インデックスを生成することをさらに含み、前記セカンダリ・インデックス内の各エントリが、前記構造化データベースの１つのデータ・レコードに関連し、
前記セカンダリ・インデックス内の各エントリが、
特定のデータ・レコードのメタデータと、
前記特定のデータ・レコードのためのベース・ポインタの数と、
前記セカンダリ・インデックスのバージョン標識と、
セカンダリ・インデックス・キーの長さと、
前記セカンダリ・インデックス・キーの値と、
１つまたは複数のベース・キーであって、前記１つまたは複数のベース・キーが、修正済みデータ・レコードとして前記構造化データベースに記憶される特定の非構造化データ・レコードの個々のプライマリ・キーバリューのハッシュされた値に個別に合致するハッシュ値であり、前記構造化データベースが、前記１つまたは複数のベース・キーを用いて検索可能である、前記１つまたは複数のベース・キーと、
を含む、請求項１に記載の方法。
【請求項７】
コンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品が、具現化されたプログラム命令を有するコンピュータ可読記憶媒体を含み、前記コンピュータ可読記憶媒体が、本来一過性信号ではなく、前記具現化されたプログラム命令が、処理回路に、
前記処理回路によって、非構造化データ・レコードを受信させ、
前記処理回路によって、前記非構造化データ・レコードの特性を判定するために前記非構造化データ・レコードを構文解析させ、前記特性が、
前記非構造化データ・レコードの合計長、
フィールドの数、
前記フィールドの長さ、および
前記非構造化データ・レコードに記憶されている前記フィールドの順序
の判定を含み、
前記処理回路によって、第１のキーバリューに関連付けられたプライマリ・キー名を含む第１のキー・ペアを取得させ、
前記処理回路によって、ハッシュ値を取得するために少なくとも前記第１のキーバリューをハッシュさせ、
前記処理回路によって、インデックス付与キーとして前記ハッシュ値を含むように前記非構造化データ・レコードを更新させ、それによって修正済みデータ・レコードを生成し、
前記処理回路によって、前記修正済みデータ・レコードを構造化データベースに記憶させ、
前記処理回路によって、前記修正済みデータ・レコードのためのエントリを含むように前記構造化データベースのインデックスを更新させ、前記エントリが前記ハッシュ値を含む、
ように、前記処理回路によって実行可能である、コンピュータ・プログラム製品。
【請求項８】
前記ハッシュ値が、前記第１のキー・ペアをハッシュすることによって生成され、前記具現化されたプログラム命令が、前記処理回路に、
前記処理回路によって、前記非構造化データ・レコードからメタデータを識別させ、
前記処理回路によって、前記修正済みデータ・レコードの生成において、前記非構造化データ・レコードを前記第１のキー・ペアに関連付けられた前記メタデータおよび前記ハッシュ値で更新させる、
ように、前記処理回路によってさらに実行可能である、請求項７に記載のコンピュータ・プログラム製品。
【請求項９】
前記処理回路に前記第１のキー・ペアを取得させる前記具現化されたプログラム命令が、前記処理回路に、
前記処理回路によって、前記非構造化データ・レコードを含む非構造化データ・レコードのセットに関連付けられる前記プライマリ・キー名を生成させ、前記プライマリ・キー名が、前記非構造化データ・レコードのセット内の全ての非構造化データ・レコードに使用され、
前記処理回路によって、整数値を１ずつインクリメントし、その結果もたらされるインクリメントされた整数を前記第１のキーバリューとして選択することによって、前記非構造化データ・レコードに関連付けられる前記第１のキーバリューを生成させる、
請求項７に記載のコンピュータ・プログラム製品。
【請求項１０】
前記処理回路に前記第１のキー・ペアを取得させる前記具現化されたプログラム命令が、前記処理回路に、
前記処理回路によって、前記プライマリ・キー名を非構造化データ・レコードのセットから識別させ、前記非構造化データ・レコードのセット内の各非構造化データ・レコードが、前記プライマリ・キー名を含み、
前記処理回路によって、前記非構造化データ・レコードのセットの任意の他の非構造化データ・レコードにおいてキーバリューとして使用されていない整数値を選択することによって、前記非構造化データ・レコードに関連付けられる前記第１のキーバリューを生成させる、
請求項７に記載のコンピュータ・プログラム製品。
【請求項１１】
前記具現化されたプログラム命令が、前記処理回路に、
前記処理回路によって、前記非構造化データ・レコードにアクセスするためのリクエストを受信させ、
前記処理回路によって、前記修正済みデータ・レコードの位置を判定するために、前記構造化データベースの前記インデックスを照会させ、
前記処理回路によって、前記非構造化データ・レコードにアクセスするための前記リクエストを受信することに応答して、前記非構造化データ・レコードを含む前記修正済みデータ・レコードの一部を出力させる、
ように、前記処理回路によってさらに実行可能である、請求項７に記載のコンピュータ・プログラム製品。
【請求項１２】
前記具現化されたプログラム命令が、前記処理回路に、前記処理回路によって、前記構造化データベースについてのセカンダリ・インデックスを生成させるように、前記処理回路によってさらに実行可能であり、前記セカンダリ・インデックス内の各エントリが、前記構造化データベースの１つのデータ・レコードに関連し、
前記セカンダリ・インデックス内の各エントリが、
特定のデータ・レコードのメタデータと、
前記特定のデータ・レコードのためのベース・ポインタの数と、
前記セカンダリ・インデックスのバージョン標識と、
セカンダリ・インデックス・キーの長さと、
前記セカンダリ・インデックス・キーの値と、
１つまたは複数のベース・キーであって、前記１つまたは複数のベース・キーが、修正済みデータ・レコードとして前記構造化データベースに記憶される特定の非構造化データ・レコードの個々のプライマリ・キーバリューのハッシュされた値に個別に合致するハッシュ値であり、前記構造化データベースが、前記１つまたは複数のベース・キーを用いて検索可能である、前記１つまたは複数のベース・キーと、
を含む、請求項７に記載のコンピュータ・プログラム製品
【請求項１３】
処理回路と、
メモリと、
前記メモリに記憶されるロジックであって、前記処理回路によって実行されるときに、前記処理回路に、
非構造化データ・レコードを受信させ、
前記非構造化データ・レコードの特性を判定するために前記非構造化データ・レコードを構文解析させ、前記特性が、
フィールドの数、
前記フィールドの長さ、および
前記非構造化データ・レコードに記憶されている前記フィールドの順序
の判定を含み、
第１のキーバリューに関連付けられたプライマリ・キー名を含む、第１のキー・ペアを取得させ、
ハッシュ値を取得するために少なくとも前記第１のキーバリューをハッシュさせ、
前記ハッシュ値を含むように前記非構造化データ・レコードを更新させ、それによって修正済みデータ・レコードを生成し、
前記修正済みデータ・レコードを構造化データベースに記憶させ、
前記修正済みデータ・レコードのためのエントリを含むように前記構造化データベースのインデックスを更新させ、前記エントリが前記ハッシュ値を含む、
前記ロジックと、
を備える、システム。
【請求項１４】
前記ハッシュ値が、前記第１のキー・ペアをハッシュすることによって生成され、前記ロジックが、前記処理回路にさらに、
前記非構造化データ・レコードからメタデータを識別させ、
前記修正済みデータ・レコードの生成において、前記非構造化データ・レコードを前記第１のキー・ペアに関連付けられた前記メタデータおよび前記ハッシュ値で更新させる、
請求項１３に記載のシステム。
【請求項１５】
前記処理回路に前記第１のキー・ペアを取得させる前記ロジックが、前記処理回路にさらに、
前記非構造化データ・レコードを含む非構造化データ・レコードのセットに関連付けられる前記プライマリ・キー名を生成させ、前記プライマリ・キー名が、前記非構造化データ・レコードのセット内の全ての非構造化データ・レコードに使用され、
整数値を１ずつインクリメントし、その結果もたらされるインクリメントされた整数を前記第１のキーバリューとして選択することによって、前記非構造化データ・レコードに関連付けられる前記第１のキーバリューを生成させる、
請求項１３に記載のシステム。
【請求項１６】
前記処理回路に前記第１のキー・ペアを取得させる前記ロジックが、前記処理回路にさらに、
前記プライマリ・キー名を非構造化データ・レコードのセットから識別させ、前記非構造化データ・レコードのセット内の各非構造化データ・レコードが、前記プライマリ・キー名を含み、
前記非構造化データ・レコードのセットの任意の他の非構造化データ・レコードにおいてキーバリューとして使用されていない整数値を選択することによって、前記非構造化データ・レコードに関連付けられる前記第１のキーバリューを生成させる、
請求項１３に記載のシステム。
【請求項１７】
前記ロジックが、前記処理回路にさらに、
前記非構造化データ・レコードにアクセスするためのリクエストを受信させ、
前記修正済みデータ・レコードの位置を判定するために、前記構造化データベースの前記インデックスを照会させ、
前記非構造化データ・レコードにアクセスするための前記リクエストを受信することに応答して、前記非構造化データ・レコードを含む前記修正済みデータ・レコードの一部を出力させる、
請求項１３に記載のシステム。
【請求項１８】
前記ロジックが、前記処理回路にさらに、前記構造化データベースについてのセカンダリ・インデックスを生成させ、前記セカンダリ・インデックス内の各エントリが、前記構造化データベースの１つのデータ・レコードに関連し、
前記セカンダリ・インデックス内の各エントリが、
特定のデータ・レコードのメタデータと、
前記特定のデータ・レコードのためのベース・ポインタの数と、
前記セカンダリ・インデックスのバージョン標識と、
セカンダリ・インデックス・キーの長さと、
前記セカンダリ・インデックス・キーの値と、
１つまたは複数のベース・キーであって、前記１つまたは複数のベース・キーが、修正済みデータ・レコードとして前記構造化データベースに記憶される特定の非構造化データ・レコードの個々のプライマリ・キーバリューのハッシュされた値に個別に合致するハッシュ値であり、前記構造化データベースが、前記１つまたは複数のベース・キーを用いて検索可能である、前記１つまたは複数のベース・キーと、
を含む、請求項１３に記載のシステム。
【請求項１９】
ＪＳＯＮ（Ｊａｖａ（Ｒ）Ｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）またはＢＳＯＮ（ｂｉｎａｒｙ  Ｊａｖａ（Ｒ）Ｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）に準拠する非構造化データ・レコードを受信することと、
前記非構造化データ・レコードの合計長、
フィールドの数、
前記フィールドの長さ、および
前記データ・レコードに記憶されている前記フィールドの順序
を判定するために、前記データ・レコードを構文解析することと、
プライマリ・キー名を生成し、前記プライマリ・キー名を前記データ・レコードを含むデータ・レコードのセットに関連付けることと、
整数値を１ずつインクリメントし、その結果もたらされる値を選択することによって、前記データ・レコードに関連付けられるプライマリ・キーバリューを生成することと、
ハッシュ値を取得するために前記プライマリ・キーバリューをハッシュすることと、
前記プライマリ・キー名と前記プライマリ・キーバリューとのペアおよび前記ハッシュ値をインデックス付与キーとして追加することによって、修正済みデータ・レコードを生成するように前記データ・レコードを更新することと、
前記修正済みデータ・レコードを仮想記憶アクセス法（ＶＳＡＭ）データベースに記憶することと、
前記修正済みデータ・レコードのためのエントリを含むようにキー順データ・セット（ＫＳＤＳ）ＶＳＡＭデータベース・インデックスを更新することであって、前記エントリが前記ハッシュ値を含む、前記更新することと、
を含む、方法。
【請求項２０】
前記データ・レコードからメタデータを識別することと、
前記修正済みデータ・レコードの生成において、前記プライマリ・キー名と前記プライマリ・キーバリューとのペアに関連付けられた前記メタデータおよび前記ハッシュ値で前記データ・レコードを更新することと、
をさらに含む、請求項１９に記載の方法。
【請求項２１】
前記データ・レコードにアクセスするためのリクエストを受信することであって、前記リクエストが、前記プライマリ・キー名とキーバリューのペアを含む、前記受信することと、
前記ハッシュ値を取得するために前記プライマリ・キーバリューをハッシュすることと、
前記ハッシュ値に基づいて前記修正済みデータ・レコードの位置を判定するために、前記ＫＳＤＳ  ＶＳＡＭデータベースのインデックスを照会することと、
前記データ・レコードにアクセスするための前記リクエストを受信することに応答して、前記データ・レコードを含む前記修正済みデータ・レコードの一部を出力することと、
をさらに含む、請求項１９に記載の方法。
【請求項２２】
前記ＶＳＡＭデータベースについてのセカンダリ・インデックスを生成することをさらに含み、前記セカンダリ・インデックス内の各エントリが、前記ＶＳＡＭデータベースの１つのデータ・レコードに関連し、
前記セカンダリ・インデックス内の各エントリが、
特定のデータ・レコードのメタデータと、
前記特定のデータ・レコードのためのベース・ポインタの数と、
前記セカンダリ・インデックスのバージョン標識と、
セカンダリ・インデックス・キーの長さと、
前記セカンダリ・インデックス・キーの値と、
１つまたは複数のベース・キーであって、前記１つまたは複数のベース・キーが、修正済みデータ・レコードとして前記ＶＳＡＭデータベースに記憶される特定のデータ・レコードの個々のプライマリ・キーバリューのハッシュされた値に個別に合致するハッシュ値であり、前記ＶＳＡＭデータベースが、前記１つまたは複数のベース・キーを用いて検索可能である、前記１つまたは複数のベース・キーと、
を含む、請求項１９に記載の方法。
【請求項２３】
複数の非構造化データ・レコードを含む非構造化データベースを受信することと、
少なくとも１つのデータ・レコードの合計長、
前記少なくとも１つのデータ・レコード内のフィールドの数、
前記少なくとも１つのデータ・レコードの前記フィールドの長さ、および
前記少なくとも１つのデータ・レコードに記憶されている前記フィールドの順序
を判定するために、前記複数の非構造化データ・レコードの前記少なくとも１つのデータ・レコードを構文解析することと、
プライマリ・キー名を生成し、前記プライマリ・キー名を前記複数の非構造化データ・レコードに関連付けることと、
複数のキーバリューを生成することであって、各キーバリューが、前記複数の非構造化データ・レコードの各データ・レコードについて、一意の整数値をキーバリューとして個別に選択することによって、前記複数の非構造化データ・レコードのうちの１つのデータ・レコードに関連付けられる、前記生成することと、
複数のハッシュ値を取得するために、前記複数の非構造化データ・レコードの各データ・レコードについてのプライマリ・キーバリューをハッシュすることと、
複数の修正済みデータ・レコードを生成するために、各修正済みデータ・レコードに固有の前記プライマリ・キー名と前記プライマリ・キーバリューとのペアおよびハッシュ値を個別に追加することによって、前記複数の非構造化データ・レコードの各データ・レコードを更新することと、
前記複数の修正済みデータ・レコードを構造化データベースまたは半構造化データベースに記憶することと、
前記修正済みデータ・レコードの全てについてのエントリを含むように、前記構造化データベースまたは半構造化データベースのプライマリ・インデックスを更新することであって、各エントリが、前記複数のハッシュ値のうちの１つを含む、前記更新することと、
を含む、方法。
【請求項２４】
前記複数の非構造化データ・レコードの前記データ・レコードそれぞれからメタデータを識別することであって、前記複数のハッシュ値の各ハッシュ値が、対応するデータ・レコードに固有の識別されたメタデータとともに、各データ・レコードについての前記プライマリ・キー名と前記プライマリ・キーバリューとのペアをハッシュすることによって生成される、前記識別することをさらに含む、請求項２３に記載の方法。
【請求項２５】
前記構造化データベースまたは半構造化データベースについてのセカンダリ・インデックスを生成することをさらに含み、前記セカンダリ・インデックス内の各エントリが、前記構造化データベースまたは半構造化データベースに記憶されたデータ・レコードに関連し、
前記セカンダリ・インデックス内の各エントリが、
特定のデータ・レコードのメタデータと、
前記特定のデータ・レコードのためのベース・ポインタの数と、
前記セカンダリ・インデックスのバージョン標識と、
セカンダリ・インデックス・キーの長さと、
前記セカンダリ・インデックス・キーの値と、
１つまたは複数のベース・キーであって、前記１つまたは複数のベース・キーが、前記構造化データベースまたは半構造化データベースに記憶される特定の修正済みデータ・レコードの個々のプライマリ・キーバリューのハッシュされた値に個別に合致するハッシュ値であり、前記構造化データベースまたは半構造化データベースが、前記１つまたは複数のベース・キーを用いて検索可能である、前記１つまたは複数のベース・キーと、
を含む、請求項２３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、非構造化データを記憶することに関し、より詳細には、構造化フレームワークを利用するアーキテクチャに非構造化ドキュメント指向非リレーショナル・データを記憶することに関する。
【背景技術】
【０００２】
ネットワーク、大規模システム、グループ、および既存の通信チャネルにハードワイヤードおよびワイヤレス接続技術を介してますます追加されている何千ものデバイスおよびシステムによって、大量のデータが生み出されている。「スマート」デバイスおよびモノのインターネット（ＩｏＴ）デバイスの需要の増加が、分析、記憶、および管理に利用可能なデータ量の増加を引き起こしている。スマートウォッチ、スマート冷蔵庫および他の電気製品、自動車、携帯電話、タブレットおよびノートブック、バイオトラッカ（フィットネス・バンド、心拍数モニタ、ランニング・ウォッチなど）、医療デバイス、医療診断デバイスなど、豊富な情報を生み出す多くの異なる種類のデバイスが、現在存在する。典型的には、これらのデバイスによって生み出されているこのデータの大部分は、非構造化データである。
【０００３】
一般的なＭｏｎｇｏＤＢ（Ｒ）およびＣｏｕｃｈＤＢ（Ｒ）などのドキュメント指向非リレーショナル・データベースは、非構造化クエリ言語（ＮｏＳＱＬ）データベースなどの非構造化データを保持し、処理する。これらのデータベースは、文書が、ＪＳＯＮ（Ｊａｖａ（Ｒ）（商標）Ｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）またはバイナリＪＳＯＮ（ＢＳＯＮ）などの複数の標準フォーマットのうちの１つにデータをカプセル化および符号化すると仮定する。ドキュメント指向データベースでは、「レコード」は、一般に「ドキュメント」を指し、両者は以下の説明において交換可能に使用される。これらのデータベースは、データ記憶のための最新パラダイムを使用し、そのようなデータベースの急速な展開を見込んでいる。これらの属性は、データベース方式が必要とされないため可能とされ、非リレーショナル・データベースの中の任意のオブジェクトが、任意のパラメータのセットで定義され得る。しかしながら、現在非構造化データのセットを記憶するためには、典型的には、データは連続的なバイト・ストリーム内に保存される。ドキュメントの任意の特定の態様について特定のドキュメントの全てのデータを検索するために、大量のデータがデータベースから順次読み出されなければならず、それは、時間とリソースがかかる。さらに、このやり方で非リレーショナル・データベースにデータを記憶することは、データを記憶し取り出すための高度なアクセス方法、および構造化データベースで利用可能な、利用されるべきデータ管理技術の最大限の利点を可能にしない。Ｊａｖａ（Ｒ）およびＪａｖａ（Ｒ）に基づく商標およびロゴは、Ｏｒａｃｌｅ（Ｒ）またはその関連会社あるいはその両方の商標または登録商標である。
【０００４】
さらに、非構造化データを連続的なデータ・ストリームまたはファイルとして記憶することに依存する構造化データベースに、非構造化データを記憶しようとする試みは、構造化データベースに一旦記憶されたデータにインデックスを付与することを可能としない。構造化データベースのプライマリ・インデックスの上の、またはプライマリ・インデックスとは別の、追加インデックスの生成に依存する構造化データベースに、非構造化データを記憶しようとする試みは、データを記憶する際に追加のオーバヘッドを必要とし、データベース内の特定ドキュメントを検索しようとする際に、不必要な遅延を必要とする。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
したがって、当技術分野において、前述の問題に対処する必要がある。
【課題を解決するための手段】
【０００６】
１つの実施形態において、方法は、非構造化データ・レコードを受信することと、非構造化データ・レコードの特性を判定するために非構造化データ・レコードを構文解析することと、を含む。特性は、非構造化データ・レコードの合計長、フィールドの数、フィールドの長さ、および非構造化データ・レコードに記憶されているフィールドの順序の判定を含む。方法は、また、第１のキーバリューに関連付けられたプライマリ・キー名を含む第１のキー・ペアを取得することと、ハッシュ値を取得するために少なくとも第１のキーバリューをハッシュすることと、を含む。さらに、方法は、インデックス付与キーとしてハッシュ値を含むように非構造化データ・レコードを更新し、それによって修正済みデータ・レコードを生成することを含む。また、方法は、修正済みデータ・レコードを構造化データベースに記憶することを含む。さらに、方法は、修正済みデータ・レコードのためのエントリを含むように構造化データベースのインデックスを更新することであって、エントリがハッシュ値を含む、更新することを含む。
【０００７】
別の実施形態において、コンピュータ・プログラム製品は、具現化されたプログラム命令を有するコンピュータ可読記憶媒体を含む。コンピュータ可読記憶媒体は、本来一過性信号ではなく、具現化されたプログラム命令は、処理回路に、処理回路によって、非構造化データ・レコードを受信させ、処理回路によって、非構造化データ・レコードの特性を判定するために非構造化データ・レコードを構文解析させるように、処理回路によって実行可能である。特性は、非構造化データ・レコードの合計長、フィールドの数、フィールドの長さ、および非構造化データ・レコードに記憶されているフィールドの順序の判定を含む。具現化されたプログラム命令は、また、処理回路に、処理回路によって、第１のキーバリューに関連付けられたプライマリ・キー名を含む第１のキー・ペアを取得させる。さらに、具現化されたプログラム命令は、処理回路に、処理回路によって、ハッシュ値を取得するために少なくとも第１のキーバリューをハッシュさせ、処理回路によって、インデックス付与キーとしてハッシュ値を含むように非構造化データ・レコードを更新させ、それによって修正済みデータ・レコードを生成する。さらに、具現化されたプログラム命令は、処理回路に、処理回路によって、修正済みデータ・レコードを構造化データベースに記憶させる。さらに、具現化されたプログラム命令は、処理回路に、処理回路によって、修正済みデータ・レコードのためのエントリを含むように構造化データベースのインデックスを更新させ、エントリがハッシュ値を含む。
【０００８】
さらに別の実施形態において、システムは、処理回路と、メモリと、メモリに記憶されるロジックであって、処理回路によって実行されるときに、処理回路に非構造化データ・レコードを受信させるロジックと、を含む。ロジックは、また、処理回路に、非構造化データ・レコードの特性を判定するために非構造化データ・レコードを構文解析させる。特性は、非構造化データ・レコードの合計長、フィールドの数、フィールドの長さ、および非構造化データ・レコードに記憶されているフィールドの順序の判定を含む。さらに、ロジックは、処理回路に、第１のキーバリューに関連付けられたプライマリ・キー名を含む第１のキー・ペアを取得させ、ハッシュ値を取得するために少なくとも第１のキーバリューをハッシュさせる。さらに、ロジックは、処理回路に、ハッシュ値を含むように非構造化データ・レコードを更新させ、それによって修正済みデータ・レコードを生成する。追加的に、ロジックは、処理回路に、修正済みデータ・レコードを構造化データベースに記憶させる。さらに、ロジックは、処理回路に、修正済みデータ・レコードのためのエントリを含むように構造化データベースのインデックスを更新させ、エントリがハッシュ値を含む。
【０００９】
別の実施形態によれば、方法は、ＪＳＯＮ（Ｊａｖａ（Ｒ）Ｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）またはＢＳＯＮ（ｂｉｎａｒｙ  Ｊａｖａ（Ｒ）Ｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）に準拠する非構造化データ・レコードを受信することを含む。方法は、また、非構造化データ・レコードの合計長、フィールドの数、フィールドの長さ、およびデータ・レコードに記憶されているフィールドの順序を判定するために、データ・レコードを構文解析することを含む。方法は、また、プライマリ・キー名を受信または生成することと、プライマリ・キー名をデータ・レコードを含むデータ・レコードのセットに関連付けることと、を含む。また、方法は、整数値を１ずつインクリメントし、その結果もたらされる値を選択することによって、データ・レコードに関連付けられるプライマリ・キーバリューを生成することと、ハッシュ値を取得するためにプライマリ・キーバリューをハッシュすることと、を含む。さらに、方法は、プライマリ・キー名とプライマリ・キーバリューとのペアおよびハッシュ値をインデックス付与キーとして追加することによって、修正済みデータ・レコードを生成するようにデータ・レコードを更新することを含む。方法は、また、修正済みデータ・レコードを仮想記憶アクセス法（ＶＳＡＭ）データベースに記憶することを含む。さらに、方法は、修正済みデータ・レコードのためのエントリを含むようにキー順データ・セット（ＫＳＤＳ）ＶＳＡＭデータベース・インデックスを更新することであって、エントリがハッシュ値を含む、更新することを含む。
【００１０】
さらに別の実施形態によれば、方法は、複数の非構造化データ・レコードをその中に含む非構造化データベースを受信することを含む。方法は、また、少なくとも１つのデータ・レコード内のフィールドの数、少なくとも１つのレコードの合計長、少なくとも１つのデータ・レコードのフィールドの長さ、および少なくとも１つのデータ・レコードに記憶されているフィールドの順序を判定するために、複数の非構造化データ・レコードの少なくとも１つのデータ・レコードを構文解析することを含む。方法は、追加的に、プライマリ・キー名を受信または生成することと、プライマリ・キー名を複数の非構造化データ・レコードに関連付けることと、を含む。また、方法は、複数のキーバリューを生成することであって、各キーバリューが、複数の非構造化データ・レコードの各データ・レコードについて一意の整数値をキーバリューとして個別に選択することによって、複数の非構造化データ・レコードのうちの１つのデータ・レコードに関連付けられる、生成することを含む。さらに、方法は、複数のハッシュ値を取得するために、複数の非構造化データ・レコードの各データ・レコードについてのプライマリ・キーバリューをハッシュすることを含む。追加的に、方法は、複数の修正済みデータ・レコードを生成するために、各修正済みデータ・レコードに固有のプライマリ・キー名とプライマリ・キーバリューとのペアおよびハッシュ値を個別に追加することによって、複数の非構造化データ・レコードの各データ・レコードを更新することを含む。方法は、また、複数の修正済みデータ・レコードを構造化データベースまたは半構造化データベースに記憶することを含む。さらに、方法は、修正済みデータ・レコードの全てについてのエントリを含むように、構造化データベースまたは半構造化データベースのプライマリ・インデックスを更新することであって、各エントリが、複数のハッシュ値のうちの１つを含む、更新することを含む。
【００１１】
これらの実施形態のいくつかの恩恵は、構造化フレームワークに記憶された後の非構造化データに対するアクセス速度の高速化、ならびにプライマリ・インデックス（および非構造化データに基づいて生成される任意の代替インデックス）による拡張された検索可能性を含む。さらに、その中のデータ・レコードのうちのいずれかを更新するためにデータ・セット全体が書き換えられることに依存する、バイトストリームとしてデータ・セットに記憶された非構造化データとは対照的に、データ・セット全体（複数のデータ・レコードをその中に含み得る）が、その中の１つまたは複数のデータ・レコードを更新するときに書き換えされない。本実施形態に従って構造化フレームワークに記憶される非構造化データは、ドキュメントまたはレコード・レベルで更新されてもよく、それによって、更新プロセスにおいて利用されるＩ／Ｏの全体量が減少し、その中に記憶された非構造化データ・レコードを処理することに関連する構造化データベースの性能が向上する。
【００１２】
本発明の他の態様および実施形態は、図面と併せて用いられる際に例として本発明の原理を示す、以下の詳細な説明から明らかとなるであろう。
【００１３】
本発明の好適な実施形態は、単なる例として、以下の図面を参照してここで説明される。
【図面の簡単な説明】
【００１４】
【図１】発明の実施形態による、コンピューティング・ノードを示す。
【図２】１つの実施形態による、ネットワーク・アーキテクチャを示す。
【図３】１つの実施形態による、階層型データ記憶システムを示す。
【図４】１つの実施形態による、非構造化データを構造化フレームワークに記憶するためのシステムを示す。
【図５】構造化データベースのために生成されるべきセカンダリ・インデックスに能力を提供するシステムを示す。
【図６】１つの実施形態による、方法のフローチャートを示す。
【図７】別の実施形態による、方法のフローチャートを示す。
【図８】さらなる別の実施形態による、方法のフローチャートを示す。
【発明を実施するための形態】
【００１５】
以下の説明は、本発明の一般原則を示すために行われ、ここで特許請求される発明概念を限定するように意味されない。さらに、本明細書で説明される特定の特徴は、様々な可能性のある組み合わせおよび交換のそれぞれにおいて他の説明される特徴と組み合わせて使用され得る。
【００１６】
本明細書において特段の定義がされない限り、全ての用語は、明細書から暗示される意味、および当業者によって理解される意味または辞書、論文などにおいて定義される意味あるいはその両方を含む、最も広範囲の可能な解釈を与えられるものとする。
【００１７】
明細書および添付の特許請求の範囲において使用される単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、特段の指定がない限り、複数の指示物を含むことにも留意されなければならない。「comprises（備える）」または「comprising（備えている）」という用語、あるいはその両方は、本明細書で使用されるとき、述べられた特徴、整数、ステップ、動作、要素、またはコンポーネント、あるいはそれらの組み合わせの存在を示しているが、１つまたは複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、またはそれらの集合、あるいはそれらの組み合わせの存在または追加を排除するものではないと、さらに理解されたい。本明細書において使用される「約」という用語は、当業者により理解されるように、「約」という用語が前にある値に適度に近い任意の値とともに、「約」という用語が前にある値を示す。特段の指示がないとき、「約」という用語は、「約」という用語が前にある値±値の１０％を示す。例えば、「約１０」は、９．０を含む、９．０〜１１．０の全ての値を示す。
【００１８】
以下の説明は、構造化フレームワークを利用するアーキテクチャに非構造化データを記憶するためのシステム、方法、およびコンピュータ・プログラム製品の複数の好適な実施形態を開示する。
【００１９】
１つの概略的実施形態において、方法は、非構造化データ・レコードを受信することと、非構造化データ・レコードの特性を判定するために非構造化データ・レコードを構文解析することと、を含む。特性は、非構造化データ・レコードの合計長、フィールドの数、フィールドの長さ、および非構造化データ・レコードに記憶されているフィールドの順序の判定を含む。方法は、また、第１のキーバリューに関連付けられたプライマリ・キー名を含む第１のキー・ペアを取得することと、ハッシュ値を取得するために少なくとも第１のキーバリューをハッシュすることと、を含む。さらに、方法は、インデックス付与キーとしてハッシュ値を含むように非構造化データ・レコードを更新し、それによって修正済みデータ・レコードを生成することを含む。また、方法は、修正済みデータ・レコードを構造化データベースに記憶することを含む。さらに、方法は、修正済みデータ・レコードのためのエントリを含むように構造化データベースのインデックスを更新することであって、エントリがハッシュ値を含む、更新することを含む。
【００２０】
別の概略的実施形態において、コンピュータ・プログラム製品は、具現化されたプログラム命令を有するコンピュータ可読記憶媒体を含む。コンピュータ可読記憶媒体は、本来一過性信号ではなく、具現化されたプログラム命令は、処理回路に、処理回路によって、非構造化データ・レコードを受信させ、処理回路によって、非構造化データ・レコードの特性を判定するために非構造化データ・レコードを構文解析させるように、処理回路によって実行可能である。特性は、非構造化データ・レコードの合計長、フィールドの数、フィールドの長さ、および非構造化データ・レコードに記憶されているフィールドの順序の判定を含む。具現化されたプログラム命令は、また、処理回路に、処理回路によって、第１のキーバリューに関連付けられたプライマリ・キー名を含む第１のキー・ペアを取得させる。さらに、具現化されたプログラム命令は、処理回路に、処理回路によって、ハッシュ値を取得するために少なくとも第１のキーバリューをハッシュさせ、処理回路によって、インデックス付与キーとしてハッシュ値を含むように非構造化データ・レコードを更新させ、それによって修正済みデータ・レコードを生成する。追加的に、具現化されたプログラム命令は、処理回路に、処理回路によって、修正済みデータ・レコードを構造化データベースに記憶させる。さらに、具現化されたプログラム命令は、処理回路に、処理回路によって、修正済みデータ・レコードのためのエントリを含むように構造化データベースのインデックスを更新させ、エントリがハッシュ値を含む。
【００２１】
さらに別の概略的実施形態において、システムは、処理回路と、メモリと、メモリに記憶されるロジックであって、処理回路によって実行されるときに、処理回路に非構造化データ・レコードを受信させるロジックと、を含む。ロジックは、また、処理回路に、非構造化データ・レコードの特性を判定するために非構造化データ・レコードを構文解析させる。特性は、非構造化データ・レコードの合計長、フィールドの数、フィールドの長さ、および非構造化データ・レコードに記憶されているフィールドの順序の判定を含む。また、ロジックは、処理回路に、第１のキーバリューに関連付けられたプライマリ・キー名を含む第１のキー・ペアを取得させ、ハッシュ値を取得するために少なくとも第１のキーバリューをハッシュさせる。さらに、ロジックは、処理回路に、ハッシュ値を含むように非構造化データ・レコードを更新させ、それによって修正済みデータ・レコードを生成する。追加的に、ロジックは、処理回路に、修正済みデータ・レコードを構造化データベースに記憶させる。さらに、ロジックは、処理回路に、修正済みデータ・レコードのためのエントリを含むように構造化データベースのインデックスを更新させ、エントリがハッシュ値を含む。
【００２２】
別の概略的実施形態によれば、方法は、ＪＳＯＮ（Ｊａｖａ（Ｒ）Ｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）またはＢＳＯＮ（ｂｉｎａｒｙ  Ｊａｖａ（Ｒ）Ｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）に準拠する非構造化データ・レコードを受信することを含む。方法は、また、非構造化データ・レコードの合計長、フィールドの数、フィールドの長さ、およびデータ・レコードに記憶されているフィールドの順序を判定するために、データ・レコードを構文解析することを含む。方法は、また、プライマリ・キー名を受信または生成することと、プライマリ・キー名をデータ・レコードを含むデータ・レコードのセットに関連付けることと、を含む。また、方法は、整数値を１ずつインクリメントし、その結果もたらされる値を選択することによって、データ・レコードに関連付けられるプライマリ・キーバリューを生成することと、ハッシュ値を取得するためにプライマリ・キーバリューをハッシュすることと、を含む。さらに、方法は、プライマリ・キー名とプライマリ・キーバリューとのペアおよびハッシュ値をインデックス付与キーとして追加することによって、修正済みデータ・レコードを生成するようにデータ・レコードを更新することを含む。方法は、また、修正済みデータ・レコードを仮想記憶アクセス法（ＶＳＡＭ）データベースに記憶することを含む。さらに、方法は、修正済みデータ・レコードのためのエントリを含むようにキー順データ・セット（ＫＳＤＳ）ＶＳＡＭデータベース・インデックスを更新することであって、エントリがハッシュ値を含む、更新することを含む。
【００２３】
さらに別の概略的実施形態によれば、方法は、複数の非構造化データ・レコードをその中に含む非構造化データベースを受信することを含む。方法は、また、少なくとも１つのデータ・レコード内のフィールドの数、少なくとも１つのデータ・レコードの合計長、少なくとも１つのデータ・レコードのフィールドの長さ、および少なくとも１つのデータ・レコードに記憶されているフィールドの順序を判定するために、複数の非構造化データ・レコードの少なくとも１つのデータ・レコードを構文解析することを含む。方法は、追加的に、プライマリ・キー名を生成することと、プライマリ・キー名を複数の非構造化データ・レコードに関連付けることと、を含む。さらに、方法は、複数のキーバリューを受信または生成することであって、各キーバリューが、複数の非構造化データ・レコードの各データ・レコードについて一意の整数値をキーバリューとして個別に選択することによって、複数の非構造化データ・レコードのうちの１つのデータ・レコードに関連付けられる、受信または生成することを含む。さらに、方法は、複数のハッシュ値を取得するために、複数の非構造化データ・レコードの各データ・レコードについてのプライマリ・キーバリューをハッシュすることを含む。追加的に、方法は、複数の修正済みデータ・レコードを生成するために、各修正済みデータ・レコードに固有のプライマリ・キー名：キーバリュー・ペアおよびハッシュ値を個別に追加することによって、複数の非構造化データ・レコードの各データ・レコードを更新することを含む。方法は、また、複数の修正済みデータ・レコードを構造化データベースまたは半構造化データベースに記憶することを含む。さらに、方法は、修正済みデータ・レコードの全てについてのエントリを含むように、構造化データベースまたは半構造化データベースのプライマリ・インデックスを更新することであって、各エントリが、複数のハッシュ値のうちの１つを含む、更新することを含む。
【００２４】
図１を参照すると、１つの実施形態による、コンピューティング・ノード１０の例の概略が示される。コンピューティング・ノード１０は、適当なコンピューティング・ノードの単なる一例であり、本明細書で説明される発明の実施形態の使用または機能性の範囲に関するいかなる限定も示唆するように意図されない。それにかかわらず、コンピューティング・ノード１０は、実施されること、または本明細書で述べる機能性のいずれかを実行すること、あるいはその両方が可能である。さらに、コンピューティング・ノード１０は、本明細書で説明される、または当業者に既知の、あるいはその両方の任意のシステム、ネットワーク、クラウド、クラスタ、またはデータ記憶環境、あるいはそれらの組み合わせに含まれ得る。
【００２５】
コンピューティング・ノード１０には、コンピュータ・システム／サーバ１２が存在し、コンピュータ・システム／サーバ１２は、多数の他の汎用または専用コンピューティング・システム環境または構成を用いて動作可能である。コンピュータ・システム／サーバ１２を伴った使用に適当であり得る周知のコンピューティング・システム、環境、または構成、あるいはそれらの組み合わせの例は、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、手持ち式デバイス、ラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベース・システム、セット・トップ・ボックス、プログラマブル家電、ネットワーク・パーソナル・コンピュータ（ＰＣ）、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記システムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境などを含むが、これらに限定されない。
【００２６】
コンピュータ・システム／サーバ１２は、コンピュータ・システムによって実行されている、プログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的状況において説明され得る。概して、プログラム・モジュールは、特定のタスクを実行し、または特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含み得る。コンピューティング・システム／サーバ１２は、通信ネットワークを通してリンクされたリモート処理デバイスによってタスクが実行される、分散型クラウド・コンピューティング環境において実施され得る。分散型クラウド・コンピューティング環境では、プログラム・モジュールが、メモリ記憶デバイスを含むローカルおよびリモート両方のコンピュータ・システム記憶媒体に位置し得る。
【００２７】
図１に示されるように、コンピューティング・ノード１０内のコンピュータ・システム／サーバ１２は、汎用コンピューティング・デバイスの形態で示される。コンピュータ・システム／サーバ１２のコンポーネントは、１つまたは複数のプロセッサ、処理回路、または処理ユニット、あるいはそれらの組み合わせ（まとめて、プロセッサ１６）、システム・メモリ２８、およびシステム・メモリ２８を含む様々なシステム・コンポーネントをプロセッサ１６に連結するバス１８を含み得るが、これらに限定されない。
【００２８】
バス１８は、メモリ・バス、メモリ・コントローラ、周辺バス、高速グラフィック・ポート、プロセッサ、および多様なバス・アーキテクチャのいずれかを使用するローカル・バスを含む、複数種類のバス構造のいずれかの１つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャは、インダストリ・スタンダード・アーキテクチャ（ＩＳＡ）・バス、マイクロ・チャネル・アーキテクチャ（ＭＣＡ）・バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（ＶＥＳＡ）・ローカル・バス、およびペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）・バスを含む。
【００２９】
コンピュータ・システム／サーバ１２は、典型的には多様なコンピュータ可読記憶媒体を含む。このような媒体は、コンピュータ・システム／サーバ１２によってアクセス可能な任意の利用可能な媒体であってもよく、それは、揮発性媒体および不揮発性媒体の両方、リムーバブル媒体および非リムーバブル媒体の両方などを含む。
【００３０】
システム・メモリ２８は、コンピュータ可読記憶媒体を、ランダム・アクセス・メモリ（ＲＡＭ）３０またはキャッシュ・メモリ３２あるいはその両方などの揮発性メモリの形態で含み得る。コンピュータ・システム／サーバ１２は、他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータ可読記憶媒体をさらに含み得る。単なる例として、記憶システム３４は、非リムーバブル不揮発性磁気記憶媒体（図示せず、かつ典型的には「ハード・ドライブ」または「ソリッド・ステート・ドライブ」と呼ばれる）から読み出し、かつ書き込むために提供され得る。図示されないが、リムーバブル不揮発性磁気ディスク（例えば、「フロッピー（Ｒ）・ディスク」）からの読み出しおよび書き込みのための磁気ディスク・ドライブ、ならびにＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光学媒体、あるいはそれらの組み合わせなどのリムーバブル不揮発性光ディスクからの読み出しまたは書き込みあるいはその両方のための光学ディスク・ドライブが、提供され得る。このような場合、それぞれが、１つまたは複数のデータ媒体インターフェースによってバス１８に接続され得る。以下でさらに示され説明されるように、メモリ２８は、発明の実施形態において説明される機能を実行するように構成されるプログラム・モジュールのセット（例えば、少なくとも１つ）を有する少なくとも１つのコンピュータ・プログラム製品を含み得る。
【００３１】
プログラム・モジュール４２のセット（少なくとも１つ）を有するプログラム／ユーティリティ４０は、限定ではなく例として、オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様に、メモリ２８に記憶され得る。オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データまたはそれらの何らかの組み合わせのそれぞれが、ネットワーキング環境の実施を含み得る。プログラム・モジュール４２は、概して、本明細書に説明される発明の実施形態の機能または方法論あるいはその両方を実行する。
【００３２】
コンピュータ・システム／サーバ１２は、また、キーボード、ポインティング・デバイス、ディスプレイ２４などの１つもしくは複数の外部デバイス１４、ユーザがコンピュータ・システム／サーバ１２と対話することを可能にする１つもしくは複数のデバイス、またはコンピュータ・システム／サーバ１２が１つもしくは複数の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス（例えば、ネットワーク・カード、モデムなど）、あるいはそれらの組み合わせと通信し得る。このような通信は、入力／出力（Ｉ／Ｏ）インターフェース２２を介して発生し得る。さらに、コンピュータ・システム／サーバ１２は、ネットワーク・アダプタ２０を介して、ローカル・エリア・ネットワーク（ＬＡＮ）、汎用ワイド・エリア・ネットワーク（ＷＡＮ）、または公衆ネットワーク（例えば、インターネット）、あるいはそれらの組み合わせなどの１つまたは複数のネットワークと通信し得る。図示されるように、ネットワーク・アダプタ２０は、バス１８を介してコンピュータ・システム／サーバ１２の他のコンポーネントと通信する。図示されないが、他のハードウェア・コンポーネントまたはソフトウェア・コンポーネント、あるいはその両方が、コンピュータ・システム／サーバ１２と併せて使用され得ると理解されるべきである。例は、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、独立ディスクの冗長アレイ（ＲＡＩＤ）・システム、テープ・ドライブ、データ・アーカイブ記憶システムなどを含むが、これらに限定されない。
【００３３】
コンピュータ・システム／サーバ１２は、Ｍｉｃｒｏｓｏｆｔ（Ｒ）Ｗｉｎｄｏｗｓ（Ｒ）オペレーティング・システム（ＯＳ）、Ａｐｐｌｅ（Ｒ）ＯＳ、ＵＮＩＸ（Ｒ）ＯＳ、ＩＢＭ（Ｒ）ｚ／ＯＳ（Ｒ）などのオペレーティング・システムがその上に常駐し得る。好適な実施形態は、記載されるもの以外のプラットフォームおよびオペレーティング・システム上でも実施され得ると理解されるものとする。好適な実施形態は、オブジェクト指向プログラミング方法論とともに、ＰＬ／Ｉ、ＸＭＬ、Ｃ、もしくはＣ＋＋言語、またはそれらの組み合わせ、あるいは他のプログラミング言語を用いて書かれてもよい。複雑なアプリケーションを開発するためにますます使用されるようになっているオブジェクト指向プログラミング（ＯＯＰ）が、使用されてもよい。Ｍｉｃｒｏｓｏｆｔ（Ｒ）、Ｗｉｎｄｏｗｓ（Ｒ）、Ｗｉｎｄｏｗｓ（Ｒ）  ＮＴ（Ｒ）、およびＷｉｎｄｏｗｓ（Ｒ）ロゴは、米国、その他の国々、またはその両方におけるＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎの商標である。ＵＮＩＸ（Ｒ）は、米国およびその他の国々におけるＯｐｅｎ  Ｇｒｏｕｐの登録商標である。ＩＢＭおよびｚ／ＯＳは、米国またはその他の国々、あるいはその両方におけるＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎの登録商標である。
【００３４】
図２は、１つの実施形態による、アーキテクチャ１００を示す。図１に示されるコンピューティング・ノード１０は、図２に示されるようなアーキテクチャ１００において利用され得る。さらに、アーキテクチャ１００は、第１のリモート・ネットワーク１０４および第２のリモート・ネットワーク１０６を含む複数のリモート・ネットワーク１０２を含み得る。ゲートウェイ１０１は、リモート・ネットワーク１０２と近接ネットワーク１０８との間に連結され得る。本アーキテクチャ１００の状況において、ネットワーク１０４、１０６は、それぞれＬＡＮ、インターネットなどのＷＡＮ、公衆交換電話網（ＰＳＴＮ）、内線電話網などを含むがこれらに限定されない任意の形態を取り得る。
【００３５】
使用中、ゲートウェイ１０１は、リモート・ネットワーク１０２から近接ネットワーク１０８への入口ポイントとしての役割をする。このように、ゲートウェイ１０１は、ゲートウェイ１０１に到達する所与のデータ・パケットを方向付けすることが可能なルータ、および所与のパケットのためにゲートウェイ１０１内外に実際のパスを供給するスイッチとして機能し得る。
【００３６】
近接ネットワーク１０８に連結される少なくとも１つのデータ・サーバ１１４がさらに含まれ、近接ネットワーク１０８は、ゲートウェイ１０１を介してリモート・ネットワーク１０２からアクセス可能である。データ・サーバ１１４は、任意の種類のコンピューティング・デバイス／グループウェアを含み得ることに留意すべきである。各データ・サーバ１１４に連結されるのは、複数のユーザ・デバイス１１６である。ユーザ・デバイス１１６は、また、ネットワーク１０４、１０６、１０８のうちの１つを通して直接接続され得る。そのようなユーザ・デバイス１１６は、デスクトップ・コンピュータ、ラップトップ・コンピュータ、手持ち式コンピュータ、プリンタ、または任意の他の種類のロジック、あるいはそれらの組み合わせを含み得る。ユーザ・デバイス１１１は、また、１つの実施形態においてネットワークのうちのいずれかに直接連結され得ることに留意すべきである。
【００３７】
例えば、ファクシミリ機械、プリンタ、ネットワーク化記憶ユニットもしくはシステムまたはローカル記憶ユニットもしくはシステムあるいはその両方などの、周辺装置１２０または一連の周辺装置１２０が、ネットワーク１０４、１０６、１０８のうちの１つまたは複数に連結され得る。データベースまたは追加コンポーネント、あるいはその両方が、ネットワーク１０４、１０６、１０８に連結される任意の種類のネットワーク素子とともに利用されてもよく、または任意の種類のネットワーク素子に統合されてもよいことに留意すべきである。本説明の文脈において、ネットワーク素子は、ネットワークの任意のコンポーネントを指し得る。
【００３８】
いくつかの手法によれば、本明細書に説明される方法およびシステムは、ＩＢＭ（Ｒ）  ｚ／ＯＳ（Ｒ）環境をエミュレートするＵＮＩＸ（Ｒ）システム、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（Ｒ）環境を仮想的にホストするＵＮＩＸ（Ｒ）システム、ＩＢＭ（Ｒ）  ｚ／ＯＳ（Ｒ）環境をエミュレートするＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（Ｒ）システムなどの、仮想システムまたは１つもしくは複数の他のシステムをエミュレートするシステムあるいはその両方を用いて、またはその上で、あるいはその両方で、実施され得る。この仮想化またはエミュレーション、あるいはその両方は、いくつかの実施形態において、ＶＭＷＡＲＥソフトウェアまたは何らかの他の既知の仮想レイヤの使用を通して強化され得る。
【００３９】
さらなる手法において、１つまたは複数のネットワーク１０４、１０６、１０８は、一般に「クラウド」と呼ばれるシステムのクラスタを表し得る。クラウド・コンピューティングにおいて、処理電力、周辺装置、ソフトウェア、データ、サーバなどの共有リソースが、オンデマンド関係でクラウド内の任意のシステムに提供され、それによって、多くのコンピューティング・システムにわたるアクセスおよびサービスの分散を可能にする。クラウド・コンピューティングは、典型的には、クラウド内で動作するシステム間のインターネット接続を含むが、システムを接続する他の技術も使用され得る。
【００４０】
ここで図３を参照すると、１つの実施形態による階層型記憶システム３００が示されている。図３に示される要素のうちのいくつかは、様々な実施形態に従って、ハードウェアまたはソフトウェアあるいはその両方として実施され得ることに留意されたい。記憶システム３００は、少なくとも１つの上位記憶層３０２および少なくとも１つの下位記憶層３０６の上に複数の媒体と通信するための記憶システム・マネージャ３１２を含み得る。記憶システム・マネージャは、様々な実施形態に従ってさらに詳細に本明細書に説明されるように、ジョブ・リクエストを管理するためのジョブ制御マネージャも含み得る。上位記憶層３０２は、好適には、不揮発性メモリ（ＮＶＭ）、ソリッド・ステート・ドライブ（ＳＳＤ）内のソリッド・ステート・メモリ、フラッシュ・メモリ、ＳＳＤアレイ、フラッシュ・メモリ・アレイ、ハード・ディスク・ドライブ（ＨＤＤ）内のハード・ディスクなど、または本明細書に記載されたその他のもの、もしくは当技術分野において既知のその他のもの、あるいはそれらの組み合わせなどの、１つまたは複数のランダム・アクセスまたは直接アクセスあるいはその両方の媒体３０４を含み得る。下位記憶層３０６は、好適には、低速アクセスＨＤＤ、テープ・ドライブまたは光学媒体あるいはその両方における磁気テープなどのシーケンシャル・アクセス媒体など、または本明細書に記載されたその他のもの、もしくは当技術分野において既知のその他のもの、あるいはそれらの組み合わせを含む、１つまたは複数の低性能記憶媒体３０８を含み得る。１つまたは複数の追加記憶層３１６は、システム３００の設計者による所望の通り記憶メモリ媒体の任意の組み合わせを含み得る。また、上位記憶層３０２または下位記憶層３０６あるいはその両方のうちのいずれかが、記憶デバイスまたは記憶媒体あるいはその両方の何らかの組み合わせを含み得る。
【００４１】
記憶システム・マネージャ３１２は、図２に示されるようなストレージ・エリア・ネットワーク（ＳＡＮ）、または何らかの他の適当なネットワーク種類などのネットワーク３１０を通して、上位記憶層３０２および下位記憶層３０６上の記憶媒体３０４、３０８と通信し得る。記憶システム・マネージャ３１２は、また、ホスト・インターフェース３１４を通して１つまたは複数のホスト・システム（図示せず）と通信してもよく、ホスト・インターフェース３１４は、記憶システム・マネージャ３１２の一部であってもなくてもよい。記憶システム・マネージャ３１２または記憶システム３００の任意の他のコンポーネントあるいはその両方が、ハードウェアまたはソフトウェアあるいはその両方において実施されてもよく、コマンドを実行するために、中央処理装置（ＣＰＵ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）などの当技術分野において既知の種類のプロセッサ（図示せず）を使用してもよい。当然ながら、本説明を読むと当業者には明らかであるように、記憶システムの任意の配列が使用されてもよい。
【００４２】
さらなる実施形態において、記憶システム３００は、任意の数のデータ記憶層を含んでもよく、各記憶層内の同一または異なる記憶メモリ媒体を含んでもよい。例えば、各データ記憶層は、ＨＤＤ、ＳＳＤ、シーケンシャル・アクセス媒体（テープ・ドライブ内のテープ、光ディスク・ドライブ内の光ディスクなど）、直接アクセス媒体（ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなど）、または媒体記憶種類の任意の組み合わせなどの、同一種類の記憶メモリ媒体を含み得る。１つのそのような構成において、上位記憶層３０２は、高性能記憶環境にデータを記憶するためにＳＳＤ記憶媒体の大部分（ＳＳＤ記憶媒体全てに至るまで）を含み得る。下位記憶層３０６および追加記憶層３１６を含む残りの記憶層は、低性能記憶環境にデータを記憶するためにＳＤＤ、ＨＤＤ、テープ・ドライブなどの任意の組み合わせを含み得る。このように、より頻繁にアクセスされるデータ、より高い優先度を有するデータ、より高速にアクセスされる必要があるデータなどが、上位記憶層３０２に記憶されてもよく、これらの属性のうちの１つを有しないデータが、下位記憶層３０６を含む追加記憶層３１６に記憶され得る。当然ながら、本説明を読むと当業者は、本明細書に提示される実施形態に従って、異なる記憶方式へ実施するための記憶媒体種類の多くの他の組み合わせを考案し得る。
【００４３】
１つの特定の実施形態において、記憶システム３００は、ＳＳＤおよびＨＤＤの組み合わせを含んでもよく、上位記憶層３０２はＳＳＤ（およびおそらく何らかのバッファ・メモリ）を含み、下位記憶層３０６はＨＤＤ（およびおそらく何らかのバッファ・メモリ）を含む。別の実施形態によれば、記憶システム３００は、ＳＳＤおよび磁気テープ・ドライブを有する磁気テープの組み合わせを含んでもよく、上位記憶層３０２はＳＳＤ（およびおそらく何らかのバッファ・メモリ）を含み、下位記憶層３０６は磁気テープ（およびおそらく何らかのバッファ・メモリ）ならびに磁気テープからデータにアクセスするための磁気テープ・ドライブを含む。さらに別の実施形態において、記憶システム３００は、ＨＤＤおよび磁気テープの組み合わせを含んでもよく、上位記憶層３０２は、ＨＤＤ（およびおそらく何らかのバッファ・メモリ）を含み、下位記憶層３０６は、磁気テープ（およびおそらく何らかのバッファ・メモリ）を含む。
【００４４】
図４を参照すると、１つの実施形態による、システム４００が示される。システム４００は、処理回路４１２と、様々な実施形態において本明細書に説明される、あるデータ管理機能性を処理回路に実行させるロジックと、１つまたは複数のコンピュータ可読記憶媒体４０４と、を含む。このシステム４００では、非構造化データ４０２は、１つまたは複数のコンピュータ可読記憶媒体４０４上の構造化フレームワーク４０６に記憶され得る。非構造化データ４０２とは、各データ・レコードが、事前定義されたデータ・モデルを有しない情報、事前定義された方式で編成されない情報、事前定義されたデータ・フォーマットに従って記憶されない情報などを含むことを意味する。非構造化データ４０２は、構造化フレームワーク４０６の１つまたは複数のコンピュータ可読記憶媒体４０４上に記憶される前に、任意の既知の非構造化フォーマットまたは半構造化フォーマットに従って記憶されてもよい。いくつかの例示的な非構造化または半構造化フォーマットは、ＪＳＯＮ（Ｊａｖａ（Ｒ）Ｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）データ・フォーマット、バイナリＪＳＯＮ（ＢＳＯＮ）データ・フォーマット、ＭｅｓｓａｇｅＰａｃｋ（商標）、ＹＡＭＬ、拡張マークアップ言語（ＸＭＬ）、または何らかの他の適当な非構造化または半構造化データ・フォーマットを含むが、これらに限定されない。さらに、いくつかの手法において、この非構造化データ４０２は、構造化フレームワーク４０６への記憶の前に、ＭｏｎｇｏＤＢ（Ｒ）、ＡｒａｎｇｏＤＢ（商標）などの非リレーショナルＮｏＳＱＬデータベースに記憶されてもよい。データ内に何のフィールドが存在するか、フィールドの長さ、フィールドの順序などが分からないため、この種のデータは扱うことが困難である。この情報は、非構造化データ４０２の非構造化データ・レコードのそれぞれに含まれるものを確認するのに有用である。
【００４５】
本明細書で使用される構造化データは、高度な編成を有する情報を指し、それは、リレーショナル（または構造化）データベースへの素早くシームレスな追加を可能にし、単純で簡単な検索エンジン・アルゴリズムまたは他の検索動作によって容易に検索可能である。本明細書で使用される構造化フレームワーク４０６は、リレーショナル方式でデータを記憶し、または１つもしくは複数のコンピュータ可読記憶媒体４０４上で構築するように構成されるフレームワークまたはアーキテクチャを示す。構造化フレームワーク４０６は、各データ・レコードがＩＢＭ（Ｒ）ＤＢ２（Ｒ）、Ｍｉｃｒｏｓｏｆｔ（Ｒ）ＳＱＬサーバ、Ｏｒａｃｌｅ（Ｒ）データベースなどの事前定義されたフォーマットを有することを示す完全構造化であってもよく、またはその中のデータ・レコードがＩＢＭ（Ｒ）仮想記憶アクセス法（ＶＳＡＭ）などの指定されたガイドラインの下でプリセット・フォーマットからカスタマイズされ、もしくは変更され得ることを示す半構造化であってもよい。ＩＢＭ（Ｒ）仮想記憶アクセス法（ＶＳＡＭ）は、レコード・レベル共有（ＲＬＳ）を介したデータ・レコードへのアクセスを可能にしてもしなくてもよい。
【００４６】
構造化フレームワーク４０６において、１つまたは複数のコンピュータ可読記憶媒体４０４上の記憶されたデータ４０８（構造化データ、および本明細書に説明される実施形態に従って記憶されるときは、非構造化データ４０２の修正版）は、ＶＳＡＭベース・データベースのキー順データ・セット（ＫＳＤＳ）、または本技術分野において既知の構造化もしくは半構造化アーキテクチャの他のインデックス付与メカニズムなど、プライマリ・インデックス４１０を介して迅速にアクセスされ得る。このように、アクセス速度の高速化および拡張された検索可能性を含む構造化データおよび構造化フレームワーク４０６の恩恵が、そこに記憶される非構造化データ４０２に提供され得る。
【００４７】
本実施形態に従って非構造化データ４０２を記憶することの別の恩恵は、記憶されたデータ４０８への更新がリクエストされ処理されることに応答して、構造化フレームワーク４０６に記憶されるデータ・セット全体が、従来のバイトストリーム・データ・セットのように書き換えされないということである。構造化データとして記憶されたデータ・セットの場合、記憶されたデータ４０８は、ドキュメント・レベルで更新されてもよく、それによって、Ｉ／Ｏの全体量が減少し、構造化フレームワーク４０６内のデータの使用に関連する性能が向上する。
【００４８】
これは、連続するデータ・ストリームもしくはファイルを利用して非構造化データを記憶する構造化フレームワークに非構造化データを記憶する他の方法、または構造化データベースおよびそのインデックスの上に、もしくはそれとは別に追加インデックスを生成する方法に対する改善である。これらの方法が、データベース内の特定ドキュメントを検索しようとするときに追加のオーバヘッドまたは遅延あるいはその両方を作り出すためである。
【００４９】
１つの実施形態において、非構造化データ４０２は、非構造化データ４０２またはドキュメントを取ること、データの特性を判定するためにパーサ４１４を用いて非構造化データ４０２またはドキュメントを構文解析すること、データにインデックス付与するためのプライマリ・キーを生成すること、可能な限りいくつかの実施においてメタデータをプライマリ・キーに追加すること、プライマリ・キー（およびいくつかの実施ではメタデータ）を含むように非構造化データ４０２またはドキュメントを修正すること、修正済みデータまたはドキュメントを構造化フレームワーク４０６に記憶すること、ならびにプライマリ・インデックス４１０の「キー名：キーバリュー」ペアの関係検索に基づいて、ＧＥＴ、ＰＵＴ、およびＥＲＡＳＥなどのある基本データベース管理コマンドへのアクセスを可能にする１つまたは複数のアプリケーション・プログラミング・インターフェース（ＡＰＩ）４１６を提供することによって、構造化データベースまたは半構造化データベースなどの構造化フレームワーク４０６に記憶される。本実施形態において、一貫したプライマリ・キー名が、非構造化データ４０２またはドキュメントに使用され、それは、非構造化データ（例えば、ドキュメント、データ・レコードなど）の各セットについて受信され、発見され、または生成される。
【００５０】
本実施形態によれば、プライマリ・キー名とプライマリ・キーバリューとのペア（「キー名：キーバリュー」）におけるプライマリ・キーバリューは、当業者に広く利用可能な複数の周知のハッシュ・アルゴリズムのうちの１つを用いてハッシュされる。結果となるハッシュ値は、ＶＳＡＭ内で使用されるＫＳＤＳ、または何らかの他の適当なインデックスおよび管理プロトコルなどの、使用されている特定のデータベース管理プロトコルに適当なプライマリ・インデックス４１０において、インデックス付与するためのキーとして使用される。このプライマリ・キーは、キー・ペアを介した任意のドキュメントへの迅速なアクセスを提供する。キー・ペアは、キーバリューに関連付けられたプライマリ・キー名、例えば、プライマリ「キー名：キーバリュー」ペアを含む。
【００５１】
さらに、１つの実施形態では、セカンダリ・インデックスまたは代替インデックスが、プライマリ・インデックス４１０に追加して生成されてもよく、それらは、構造化フレームワーク４０６内の非構造化データ４０２またはドキュメントを参照する代替方法を可能にする。
【００５２】
構造化フレームワーク内に非構造化データを記憶するこれらの技術を用いることのいくつかの恩恵は、プライマリ・キー名：キーバリューのペアを用いて特定のドキュメントを参照する際の探索速度の高速化を含むが、これに限定されない。所与のキー名：キーバリュー・ペアに合致するレコードを見つけるために非構造化データベース内のあらゆるレコードを再読み出しする、非構造化データベースの基本実施と比較して、より高速の探索速度が可能である。ＶＳＡＭなどの構造化または半構造化インデックス付与方式を用いると、所望のレコードが、著しくさらに速くデータベース内で見つけられ得る。
【００５３】
さらに、恩恵は、レコードまたはドキュメント・レベルにおいてロックする能力を含む、高度なシリアライズを含み、それは、データ・セット全体をロックすることと比較して、より高いスループットをもたらす。また、恩恵は、最近参照されたドキュメントまたはレコードのみに対してバッファすること、および大部分のデータ・セットの書き換えまたは取り出しを必要とすることなく個々のドキュメントまたはレコードを更新することを含む。これは、データベースのアクティビティにおいて利用されるバッファ量を低下させ、ドキュメントまたはレコードを更新する際により高いスループットをもたらす。
【００５４】
ここで図５を参照すると、システム５００は、セカンダリ・インデックス５１４の生成を自動的に引き起こす、（ユーザ、管理者、または何らかの他の適当な人もしくはプロセスなどによって）指定されるべき１つまたは複数のデータ・レコード内のあるキー５１６について能力を提供する。これらのセカンダリ・インデックスまたは代替インデックス（ＡＩＸ）５１４は、キー名：キーバリューについての可能な値およびそれに関連付けられたハッシュされたキー５１８のレコードを含む。ハッシュされたキー５１８は、非構造化データ５０２またはドキュメントとして作り出された構造化フレームワーク５０６内の記憶されたデータ５０８またはドキュメントを位置特定するためにも使用され得る。システム５００は、処理回路５１２と、様々な実施形態において本明細書に説明される、あるデータ管理機能性を処理回路５１２に実行させるロジックと、１つまたは複数のコンピュータ可読記憶媒体５０４と、を含む。
【００５５】
１つの実施形態によれば、ＡＩＸ５１４内部のエントリに使用され得るフォーマットは、＜メタデータ＞＜ベース・ポインタの＃＞＜ＡＩＸバージョン＞＜ＡＩＸフラグ＞＜ＡＩＸキー長さ＞＜ＡＩＸキーバリュー＞＜ベース・キー１＞＜ベース・キー２＞＜ベース・キー３＞．．．を含む。
【００５６】
本実施形態において、「ＡＩＸキー」は、任意の特定のＡＩＸエントリ５１８を他のＡＩＸエントリ５１８から区別することが可能な代替インデックス内部の値である。「メタデータ」は、バージョン数、ドキュメント長、生成または修正された日付などの非構造化データ５０２またはドキュメントについての情報を含む。「キー長さ」は、代替キーバリューのセット長を示し、「ＡＩＸキーバリュー」は、キー名：キーバリュー・ペアからの値である。ＡＩＸレコード内の各「ベース・キー」は、１つの特定の非構造化データ５０２またはドキュメントに固有のハッシュされたキーバリューであり、記憶されたベース・データ５０８またはドキュメントを、プライマリ・インデックス５１０を通して参照するために使用され得る。そのベース・キーバリューを有する各ベース・ドキュメントは、代替インデックス５１４のベース・キー・リスト内にエントリを有する。
【００５７】
ＡＩＸ５１４が生成されている特定のキー名に関連付けられた、あるキーバリューを探索するために、リクエストが受信されることに応答して、ＡＩＸ５１４は、そのあるキーバリューを記述するエントリを見つけるために検索される。エントリ内にリストされているベース・キーは、次いでプライマリ・インデックス５１０を介して探索を実行するために利用され、それによって、所望のドキュメントへのアクセスを提供する。
【００５８】
例えば、３つのドキュメントが、ＪＳＯＮベースのデータベース内に位置していると仮定する。
｛“ｉｄ”：“０００３”，“名”：“Ｐａｔｔｙ”，“姓”：“Ｊｏｈｎｓｏｎ”｝
｛“ｉｄ”：“０００２”，“名”：“Ｊａｎｅ”，“姓”：“Ｓｍｉｔｈ”｝
｛“ｉｄ”：“０００１”，“名”：“Ｊｏｈｎ”，“姓”：“Ｓｍｉｔｈ”｝
【００５９】
この例におけるプライマリ・インデックスは、「ｉｄ」のプライマリ・キー名から構築されてもよく、ハッシュ値から構築されるＶＳＡＭキーを有するＶＳＡＭ  ＫＳＤＳ内に各ドキュメントが記憶されるように構築され得る。この例では、プライマリ・インデックスの簡略化表現が、単に説明のために以下のように表され得る。
８８２０｛“ｉｄ”：“０００３”，“名”：“Ｐａｔｔｙ”，“姓”：“Ｊｏｈｎｓｏｎ”｝
９Ｇ５６｛“ｉｄ”：“０００２”，“名”：“Ｊａｎｅ”，“姓”：“Ｓｍｉｔｈ”｝
Ａ００１｛“ｉｄ”：“０００１”，“名”：“Ｊｏｈｎ”，“姓”：“Ｓｍｉｔｈ”｝
【００６０】
このプライマリ・インデックスの例では、９Ｇ５６、Ａ００１、および８８２０は、「ｉｄ」の値０００１、０００２、０００３から導出されるハッシュされたプライマリ値である。これらのハッシュされた値は、データベース内のＶＳＡＭキーによって順番に整列され、それによって、３つの元のドキュメントの順番から再配置する。この構造を考慮すると、キー名「姓」に対して構築される代替インデックスは、以下のように表される（ここでも簡略化される）。
メタデータ  ０００１  ０１  ００  ０７  Ｊｏｈｎｓｏｎ  ８８２０
メタデータ  ０００２  ０１  ００  ０５  Ｓｍｉｔｈ  ９Ｇ５６  Ａ００１
【００６１】
このＡＩＸの例では、０００１および０００２は、各リスト内のベース・キーの数字であり、０１は、バージョン標識、００は、１つまたは複数のフラグの標識（カスタマイズ可能であり、全ての実施形態において存在するわけではない）、０７および０５は、キーバリュー「Ｊｏｈｎｓｏｎ」および「Ｓｍｉｔｈ」それぞれの長さである。
【００６２】
このＡＩＸの例では、Ｊｏｈｎｓｏｎは、プライマリ・インデックスからＰａｔｔｙ  Ｊｏｈｎｓｏｎであるベース・キー８８２０とペアにされる。また、Ｓｍｉｔｈは、２つのエントリ、９Ｇ５６およびＡ００１を有し、そのそれぞれが、キー名「姓」が「Ｓｍｉｔｈ」の値を有するが、異なるドキュメントであるドキュメントを指している。
【００６３】
１つの特定の実施において、キーバリューは、例えば一例では２５２バイト、または他の実施形態では１２８バイト、５１４バイトなど、より多くもしくは少ない、切り詰め閾値で切り詰められてもよい。キーバリューの長さが、例えば、この例では２５２バイトの長さよりも長いプリセット切り詰め閾値を超える場合、プリセット切り詰め閾値までの最初のバイト量だけが、例えばこの例ではキーバリューの最初の２５２バイトが、検索のために記憶され、使用される。追加的に、ハッシュされたプライマリＶＳＡＭキーもまた、一例では１２８バイトの長さ、または他の実施形態では、６４バイト、２５６バイトなどさらに長くもしくは短く、長さが制限されてもよい。
【００６４】
代替インデックスは、ユーザが開始するプロセスを介して「オン・ザ・フライ」もしくはオンデマンドまたはその両方で、あるいは自動的に、構築されてもよく、それは、データベースのドキュメントまたはレコードの全てをスキャンし、インデックスを構築するための関連情報を抽出する。
【００６５】
さらに、１つの手法では、新たなドキュメントをスキャンすること、および新たなドキュメント内の任意の新たな、または修正済みの情報に従って影響を受ける代替インデックスを更新することによって、代替インデックスは、ＩＮＳＥＲＴ、ＵＰＤＡＴＥ、およびＥＲＡＳＥアクティビティ中などの標準データベース管理動作中に更新され得る。
【００６６】
ここで図６を参照すると、１つの実施形態による、方法６００が示される。方法６００は、様々な実施形態において、特に図１〜５に示される環境のいずれかにおいて本発明に従って実行され得る。当然ながら、本説明を読むと当業者に理解されるように、図６において具体的に説明されるものよりも多くの、または少ない動作が、方法６００に含まれ得る。
【００６７】
方法６００のステップのそれぞれが、動作環境の任意の適当なコンポーネントによって実行され得る。例えば、様々な実施形態において、方法６００は、マイクロプロセッサ、サーバ、メインフレーム・コンピュータ、１つもしくは複数のプロセッサをその中に有する処理回路、または１つもしくは複数のプロセッサを含む何らかの他のデバイスによって、部分的にまたは完全に実行され得る。処理回路、例えば、ハードウェアまたはソフトウェアあるいはその両方において実施され、好適には少なくとも１つのハードウェア・コンポーネントを有するプロセッサ、チップ、またはモジュール、あるいはこれらの組み合わせなどが、方法６００の１つまたは複数のステップを実行するために任意のデバイスにおいて利用され得る。例となるプロセッサは、ＭＰＵ、ＣＰＵ、ＡＳＩＣ、ＦＰＧＡなど、それらの組み合わせ、または本技術分野において既知の任意の他の適当なコンピューティング・デバイスを含むがこれらに限定されない。
【００６８】
１つの実施形態では、動作環境は、環境内の追加システムのクラスタのうちの１つであり得るデータ・システムを含み得る。別の実施形態では、データ・システムは、サーバ、パーソナル・コンピュータ、モバイル・デバイス、またはプログラム命令を実行することが可能な任意のデバイスを含み得る。さらなる別の実施形態では、データ・システムは、仮想記憶環境内に含まれ得る。例えば、データ・システムは、ＶＳＡＭ環境の一部であってもよい。
【００６９】
図６に示されるように、方法６００は、動作６０２で開始し得る。動作６０２において、非構造化データ・レコードが、受信される。この非構造化データ・レコードは、任意の既知のフォーマットに従って記憶されてもよく、データベース、データ・ストリームなどにおいて、非構造化データ・レコードのより大きなコレクションまたはセットの一部として受信されてもよい。
【００７０】
動作６０４において、非構造化データ・レコードが、非構造化データ・レコードの特性を判定するために構文解析される。１つの実施形態において、既知の利用可能なパーサが、非構造化データ・レコードを構文解析するために使用されてもよい。代替の実施形態において、独自パーサまたはカスタマイズされたパーサ、あるいはその両方が、非構造化データ・レコードを構文解析するために採用されてもよく、それは、ユーザ、管理者、または非構造化データ・レコードが記憶されるフォーマットの知識を有する何らかの他の人もしくはエンティティによって提供され得る。
【００７１】
代替インデックス・レコードにおいて、非構造化データ・レコードの特性は、情報がデータ・レコード内に記憶されるフォーマットを示す。１つの実施形態では、非構造化データ・レコードの特性は、少なくとも以下の情報、レコードの合計長、非構造化データ・レコード内のフィールドの数（コレクション内の全ての非構造化データ・レコードにわたって異なっていてもよく、または同一であってもよい）、非構造化データ・レコード内の様々なフィールドの長さ（これらの値は、典型的にはコレクション内の各非構造化データ・レコードについて一意である）、および非構造化データ・レコードに記憶されているフィールドの順序（典型的には、同一フィールドを含む任意の２つの非構造化データ・レコードについて、フィールドの順序は同一であるが、フィールドの順序は、異なるフィールドを含む非構造化データ・レコードについて変化し得る）の判定を含む。
【００７２】
動作６０６において、プライマリ・キーバリューに関連付けられたプライマリ・キー名を含む、第１のキー・ペアが取得される。１つの実施形態において、第１のキー・ペアは、指定されたプライマリ・キー名について非構造化データ・レコードを検索することによって取得され得る。プライマリ・キー名は、構造化データベース内のデータ・セットに記憶される全てのレコードについて使用されるが、第１のキーバリューは、その中のそれぞれの特定のデータ・レコードに一意である。
【００７３】
別の実施形態において、第１のキー・ペアは、プライマリ・キー名が非構造化データ・レコード内に存在しないことに応答して、その全てが構造化データベースへの記憶対象である非構造化データ・レコードを含む非構造化データ・レコードのコレクションまたはセットに関連付けられている、または関連付けられるプライマリ・キー名を生成することによって取得され得る。構造化データベースに記憶されるコレクション内の全てのドキュメントに、一貫したキー名が関連付けられるように、プライマリ・キー名が、非構造化データ・レコードのセット内の全ての非構造化データ・レコードについて使用される。さらに、非構造化データ・レコード内にキーバリューが存在しないことに応答して、特定の非構造化データ・レコードについて一意である整数値を含むことによって、非構造化データ・レコードに関連付けられる第１のキーバリューが、生成される。
【００７４】
１つの実施形態において、整数値は、最後に使用された値から整数値を１ずつインクリメントし、その結果もたらされるインクリメントされた整数を第１のキーバリューとして、例えば、００００＋１＝０００１、０００１＋１＝０００２、．．．として選択することによって、生成される。
【００７５】
別の実施形態によれば、第１のキー・ペアは、セット内の非構造化データ・レコードの１つまたは複数からの非構造化データ・レコードのコレクションまたはセットから、プライマリ・キー名を識別することによって取得される。本実施形態では、非構造化データ・レコードのセット内の各非構造化データ・レコードは、データ・レコードそれ自体の中のどこかにプライマリ・キー名を含む。さらに、このプライマリ・キー名は、構造化データベースに記憶された他のデータ・セット内で使用される他のプライマリ・キー名から一意である。このように、非構造化データ・レコードのセットに固有であり、データ・セットとして構造化データベースに記憶された後、その中に記憶された他のデータ・セットからこれらのデータ・レコードを区別するプライマリ・キー名が提供される。
【００７６】
さらなる実施形態において、非構造化データ・レコードのコレクションまたはセットの任意の他の非構造化データ・レコードにおいて、キーバリューとして使用されていない整数値を選択することによって、非構造化データ・レコードに関連付けられる第１のキーバリューが生成される。このように、非構造化データ・レコードは、その中に含まれるキーバリューによって、非構造化データ・レコードのコレクションまたはセット内の全ての他のデータ・レコードから区別され得る。
【００７７】
動作６０８において、ハッシュ値を取得するために、プライマリ・キーバリューがハッシュされる。任意の既知のハッシュ・アルゴリズムが、ハッシュ値を生成するために使用され得る。好適な手法では、ハッシュ・アルゴリズムは、任意の予期される入力、例えば非構造化データ・レコードに基づいて、最小限の数の衝突をもたらす。
【００７８】
１つの実施形態において、ハッシュ・アルゴリズムは、第１のキーバリューだけでなく第１のキー・ペア全体に適用され得る。さらなる実施形態において、方法６００は、非構造化データ・レコードからメタデータを識別することを含み得る。本実施形態では、ハッシュ・アルゴリズムは、第１のキーバリューだけでなく、メタデータに追加して第１のキー・ペア全体に適用され得る。この手法によれば、非構造化データ・レコードは、修正済みデータ・レコードの生成において、第１のキー・ペアおよびメタデータに基づくハッシュ値を用いて更新される。
【００７９】
動作６１０において、非構造化データ・レコードは、インデックス付与キーとしてハッシュ値を含むように更新され、それによって、修正済みデータ・レコードのためのインデックス付与キーを含む構造化フレームワークのインデックスを用いて構造化フレームワーク内で検索され得る、修正済みデータ・レコードを生成する。
【００８０】
動作６１２において、修正済みデータ・レコードは、構造化データベースに記憶される。さらに、いくつかの手法では、修正済みデータ・レコードに関連する非構造化データ・レコードのコレクションまたはセットからの全ての残りの非構造化データ・レコードも、方法６００による修正後に構造化データベースに記憶され得る。
【００８１】
動作６１４において、構造化データベースのインデックスは、修正済みデータ・レコードのためのエントリを含むように更新される。インデックスに含まれるエントリは、少なくともハッシュ値を含み、ハッシュ値は、非構造化データ・レコードに関連付けられる少なくとも第１のキーバリューを取得するために逆ハッシュされ得る。さらに、インデックスの更新後、非構造化データ・レコードは、それが素早く位置特定され得るように、インデックスを用いて検索されてもよく、それは、構造化フレームワークまたは非構造化フレームワーク内で非構造化データ・レコードを位置特定するためのより低速またはより扱いにくい、あるいはその両方である技術に依存する従来技術に対する改善である。
【００８２】
いくつかの手法において、構造化データベースのインデックスは、方法６００に従って非構造化データ・レコードのコレクションまたはセットからの全ての残りの非構造化データ・レコードについてのエントリを含むように更新され得る。
【００８３】
１つの実施形態によれば、方法６００は、非構造化データ・レコードにアクセスするための要求を受信することをさらに含み得る。この要求は、所望のデータ・レコードに固有のハッシュ値、またはプライマリ・キー名：キーバリューのペア、または単に所望のデータ・レコードに固有のプライマリ・キーバリューを含み得る。方法６００は、修正済みデータ・レコードの位置を判定するために、構造化データベースのインデックスを（ハッシュ値を用いて）照会することをさらに含み得る。修正済みデータ・レコード（構造化データベースに記憶される前は非構造化データ・レコードであった）が位置特定された後、修正済みデータ・レコードの元の未修正データ・レコード部分が、非構造化データ・レコードにアクセスするためのリクエストを受信することに応答して、出力され得る（例えば、プリントされ、モニタまたは画面に表示され、リモート・コンピュータに転送または送信される、など）。
【００８４】
別の実施形態によれば、方法６００は、構造化データベースのためのセカンダリ・インデックスを生成することを含み得る。本実施形態では、セカンダリ・インデックス内の各エントリは、構造化データベースの１つのデータ・レコードに関連する。各エントリは、少なくとも以下の情報、特定のデータ・レコードのメタデータ、特定のデータ・レコードのためのベース・ポインタの数、セカンダリ・インデックスについてのバージョン標識、セカンダリ・インデックス・キーの長さ、セカンダリ・インデックス・キーの値、および１つまたは複数のベース・キーを含む。これらのフィールドのそれぞれについては、後でより詳細に説明される。１つまたは複数のベース・キーは、修正済みデータ・レコードとして構造化データベースに記憶された特定の非構造化データ・レコードの個別のプライマリ・キーバリューのハッシュされた値に、個別で（例えば、異なるベース・キーがハッシュ値のそれぞれについて合致される１対１ベースで）合致するハッシュ値である。セカンダリ・インデックスが、特定のデータ・レコードについてのベース・ポインタのうちの１つを用いて調べられた後、プライマリ・インデックス内の１つまたは複数のエントリが、ベース・キーのうちの１つまたは複数を用いて判定され得るように、構造化データベースは、１つまたは複数のベース・キーを用いて検索可能であり、それによって、所望のデータ・レコードが構造化データベース内で位置特定されることを可能にする。
【００８５】
方法６００は、様々な手法において、ＩＢＭ（Ｒ）ｚ／ＯＳ（Ｒ）環境などの中でＶＳＡＭを利用するデータ・システム、または当技術分野において既知となるＶＳＡＭを利用する任意の他のシステムを用いて実行され得る。
【００８６】
方法６００は、システムまたはコンピュータ・プログラム製品、あるいはその両方において実施され得る。例えば、システムは、処理回路、および処理回路と統合されたロジック、処理回路によって実行可能なロジック、または処理回路と統合され、かつ処理回路によって実行可能なロジックを含み得る。統合されるとは、処理回路が、ＡＳＩＣ、ＦＰＧＡなど、それとともに含まれるハードコード・ロジックを有するハードウェア・プロセッサであることを意味する。実行可能とは、処理回路が、ソフトウェア・ロジックによって指示される機能性を達成するためにソフトウェア・ロジックを実行するように構成され、プロセッサはおそらくＭＰＵ、ＣＰＵ、マイクロプロセッサなどであることを意味する。ロジックは、処理回路に方法６００を実行させるように構成され、処理回路にアクセス可能なコンピュータ可読記憶媒体に記憶される。
【００８７】
別の例では、コンピュータ・プログラム製品は、それとともに具現化されたプログラム命令を有するコンピュータ可読記憶媒体を含み得る。コンピュータ可読記憶媒体は、記憶し、その中に記憶された情報へのコンピュータ・アクセスを可能にするように構成される、本技術分野において既知の任意の適当な記憶デバイスであってもよい。本実施形態において、具現化されたプログラム命令は、処理回路に方法６００を実行させるように処理回路によって実行可能である。
【００８８】
図６において説明される実施形態のいくつかの恩恵は、構造化フレームワークに記憶された後の非構造化データに対するアクセス速度の高速化、ならびにプライマリ・インデックス（および非構造化データに基づいて生成される任意の代替インデックス）による拡張された検索可能性を含む。さらに、その中のデータ・レコードのうちのいずれかを更新するためにデータ・セット全体が書き換えられることに依存する、バイトストリームとしてデータ・セットに記憶された非構造化データとは対照的に、データ・セット全体（複数のデータレコードをその中に含み得る）が、その中の１つまたは複数のデータ・レコードを更新するときに書き換えされない。本実施形態に従って構造化フレームワークに記憶される非構造化データは、ドキュメントまたはレコード・レベルで更新されてもよく、それによって、更新プロセスにおいて利用されるＩ／Ｏの全体量が減少し、その中に記憶された非構造化データ・レコードを処理することに関連する構造化データベースの性能が向上する。
【００８９】
非構造化データ・レコードは、任意の特定のフォーマットを有してもよく、任意の既知の種類の非構造化フレームワークに記憶されてもよい。この例では、非構造データ・レコードは、ＢＳＯＮまたはＪＳＯＮドキュメント、あるいはその両方であり、非構造化データベースは、ＮｏＳＱＬデータベースであると仮定する。ＮｏＳＱＬデータベースに記憶される各ＢＳＯＮまたはＪＳＯＮドキュメントあるいはその両方が、文字のシーケンスとして記憶されるキー名：キーバリューのペアのセットを含む。これらのドキュメントのグループは、コレクションまたはデータベースと呼ばれる。ＶＳＡＭデータベースもまた、レコードのコレクションであるが、各レコードは、ＶＳＡＭデータベースに記憶される特定のデータ・セットに固有の各レコード内に記憶されるオフセットおよび長さによって指定される一貫したプライマリ・キーを有する。ＮｏＳＱＬデータベースとＶＳＡＭデータベースとの間の１つの重要な差異は、各ＶＳＡＭキーが、固定のオフセットを介してレコード内のデータから構築される一方、ＮｏＳＱＬドキュメントは、データ内に記憶される、あるキーと値とのペアを含むが、各ペアについて固定のオフセットを有しないということである。
【００９０】
この例では、ＪＳＯＮフォーマットを用いて記憶されるドキュメントが、この文字列を含むと仮定する。
｛“名”：“Ｔｏｍ”，“姓”：“Ｊｏｎｅｓ”，“郵便番号”：１１１１１｝
【００９１】
この文字列内には、３つのキー名：キーバリューのペアがある。第１のキー名は、「名」であり、「Ｔｏｍ」のキーバリューを有する。キー名の最初の文字が、（０に基づくインデックス付与を用いて）キー名：キーバリュー文字列内の位置１において始まるため、この特定フィールドのオフセットは１である。しかしながら、可変長のフィールドを考慮すると、第２のフィールドのオフセットは、ドキュメントを検査せずには明確に分からず、ドキュメントの存続時間を超えて変化し、または変更され得る。各フィールドは、コロンの前の名前によってのみ参照され、データ値は、次のコンマまたは閉括弧の前のコロンの後に続く。
【００９２】
逆に、ＶＳＡＭレコードは、各データ値についてのオフセットが固定され変化しないフォーマットを使用する。追加的に、ＶＳＡＭは、ＪＳＯＮまたはＢＳＯＮのような非構造化ドキュメントとは異なり、データ内にキー名を記憶しない。例えば、前述の例でのように、同一の情報が、レコード内に記憶されていると仮定すると、ＶＳＡＭレコードは、以下のフォーマットを有し得る。
［Ｔｏｍ．．．．．Ｊｏｎｅｓ．．．１１１１］
【００９３】
このレコードについてのＶＳＡＭキーは、オフセットおよび長さに基づいて構築される。例えば、オフセット０および長さ８を有するキー、例えば、ＫＥＹ（０  ８）は、名（オフセット０  長さ８）に基づいてデータを編成するキーをもたらす。
【００９４】
１つの実施形態によれば、非構造化ドキュメントは、ＶＳＡＭリクエストがキー名：キーバリューのペアに基づいてＶＳＡＭデータベース内の非構造化ドキュメントを素早く見つけることを可能にするために、ＶＳＡＭデータベースのフレームワーク内に記憶され得る。これは、非構造化データの柔軟性とＶＳＡＭインデックス付与の速度の両方を活用する。
【００９５】
本実施形態では、各非構造化ドキュメントは、一貫したキー名に割り当てられるか、または各非構造化レコード内の一貫したキー名が発見される。このキー名は、ＶＳＡＭプライマリ・キーを構築するために関連付けられたキーバリューとともに使用される。ＶＳＡＭプライマリ・キーは、ＶＳＡＭインデックスが構築されるＶＳＡＭデータベース内でドキュメントを位置特定するためのＶＳＡＭインデックスを構築するために使用される。特定の実施形態において、デフォルト・キーは、「＿ｉｄ」またはドキュメント内に既に現れそうにない何らかの他の適当なデフォルト・キー文字列などであり、全ての非構造化データ・レコードに使用され得る。第２の実施形態において、インデックス付与に使用されるキー名：キーバリューのペアを含むドキュメントをユーザが提供できないことに応答して、キー名は、非構造化ドキュメント内に自動的に挿入され、値は、対応するキーバリューのために生成される。さらなる実施において、このキーバリューは、追加レコード毎に増加し、キーバリュー長と一致する所定の長さを有し、１で開始する整数値であってもよく、例えば、「０００００００１」、「０００００００２」などである。このデフォルト・キー名は、１つの手法によれば、データ・セット定義中に設定される。
【００９６】
ＶＳＡＭに提供されている特定の文書のためのＰＵＴまたはＵＰＤＡＴＥリクエストに応答して、１つの実施形態において、渡されるドキュメント（ＶＳＡＭに転送されるリクエスト）が、リクエストにおいて指定されたキー名：キーバリュー・ペアについてスキャンされ得る。このペアからのキーバリューは、次いで、固定長ハッシュ値フィールド（６４バイト、１２８バイト、２５６バイトなど、または何らかの他の適当な所定値）にハッシュされる。渡されるドキュメント内にキー名が見つからないことに応答して、リクエストされるキー名が自動的に追加され、キーバリューが生成される。キーバリューは、インクリメンタル・カウンタ、またはデータベース内で二重化されない一意のキーバリューを生成する何らかの他の体系的方法に基づき得る。この値は、次いで、ドキュメントから取られる内部メタデータと結合され、元のドキュメントに追加される。
【００９７】
例えば、以下のドキュメント｛“＿ｉｄ”：０００１，“名”：“Ｊｏｈｎ”，“姓”：“Ｓｎｏｗ”｝に対するＰＵＴについてデータベース・リクエストが発行される場合、方法は、＿ｉｄキー名フィールドを探し、０００１のキーバリューを使用する。キーバリューは、次いで、所定の固定長値にハッシュされる。このハッシュは、それが任意の可能性のある入力について衝突を最小にする限り、任意のハッシュ・アルゴリズムを用いて実行され得る。この値は、ハッシュされたＩＤを生成するために、元のドキュメント、およびおそらく何らかのメタデータと結合される。一例では、ハッシュされたＩＤは、＜固定バイト数のハッシュされた＿ｉｄフィールド＋予約スペース＞＜メタデータ＞｛“＿ｉｄ”：０００１，“名”：“Ｊｏｈｎ”，“姓”：“Ｓｎｏｗ”｝であってもよい。この新たなレコードは、ＶＳＡＭデータ・セット内に記憶するために基礎となるＶＳＡＭ構造に渡され、新たに構築された一意なキーに基づいてインデックス付与される。これは、１つのドキュメントを保持する各ＶＳＡＭレコードを有するＶＳＡＭデータ・セットをもたらす。この例では、ＶＳＡＭは、ＶＳＡＭインデックス・オフセット０および閾値バイト数に対応する長さを用いることによって、例えば、最初の６６バイト、最初の１３２バイト、最初の２６４バイトなど、レコードの最初の閾値バイト数に基づいて、レコードにインデックス付与する。
【００９８】
別の実施形態において、ＧＥＴ  ＤＩＲＥＣＴリクエストについて、値は、ユーザ、管理者、または何らかの他のルーチンなどによってＶＳＡＭ構造に渡されてもよい。一例では、「ＧＥＴ  ０００１」を指定する値が渡され得る。本実施形態では、この値（０００１）が、ＶＳＡＭキーを生成するために上述した同じハッシュ・アルゴリズムを用いてハッシュされる。この生成されたＶＳＡＭキーは、ＧＥＴ  ＤＩＲリクエストなどを介して、基礎となるＶＳＡＭ構造に渡される。ＧＥＴ  ０００１の例において、０００１の値は、ハッシュ値を生成するために、１２８バイトなど所定の長さにハッシュされる。予約スペースが連結され、このハッシュされた値が、ＲＰＬリクエストなどを介して、ＶＳＡＭキーとしてＶＳＡＭ構造に提出される。
【００９９】
別の実施形態では、ＥＲＡＳＥ機能性が、ＧＥＴ  ＤＩＲＥＣＴリクエストに類似の動作をし、その場合に、渡される値がハッシュされ、ＶＳＡＭキーが、ハッシュされた値から構築される。次いで、ＥＲＡＳＥリクエストが、基礎となるＶＳＡＭ構造に渡される。
【０１００】
一例では、典型的なＢＳＯＮオブジェクトが、以下に示されるようにＶＳＡＭレコード内に記憶され得る。
BSON in UTF-8 (simple case, just "_id:00001")
HEX: 13000000 02 5F6964 00 05000000 3030303031 00
Fields: total length, type, "_id",end indicator, length, "0 0 0 0 1", end indicator
Or to break it out by field:
Total length: x'13000000' (little-endian)
Type: x'02'
Key "_id": x'5F6964'
End marker: x'00'
Value length: x'05000000' (little-endian)
Value "00001": x'3030303031'
End marker: x'00'
【０１０１】
この例では、ＶＳＡＭレコード内に記憶されるデータは、以下の情報を含み得る。
000000 4F564AA0 14F4C21C 28C71304 ED75EA01 916E8199 DA4F9A75 7924235B 6056D613 *|.c..4B..G.......＞...|.....$-.O.*
000020 88EA7F08 04A56275 293D33EB 713FFB78 E2AB6E7C F6245A45 9FD7DC12 BD77DC68 *.."............S.＞@6.!.oP.......*
000040 00000000 00000000 00000000 00000028 00000000 00000000 00000000 00000000 *................................*
000060 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 *................................*
000080 00000001 00000001 00000000 00049000 00D11014 F0D1B771 06000000 07D80001  *...........{.....J..0J.......Q..*
0000A0 E2E8E2E3 C5D4F140 01130000 00025F69 64000500 00003030 30303100 *SYSTEM1......^.............*
【０１０２】
この例では、１６進数を用いて、ＫＥＹが、オフセットｘ‘００’からｘ‘８３’に位置する。キーについてのメタデータは、オフセットｘ‘８４’からｘ‘Ａ９’に位置し、キー生成およびハッシュ前の実際のＢＳＯＮドキュメントは、オフセットｘ‘ＡＢ’からｘ‘ＢＥ’に位置する。さらに、さらなる例において、ＧＥＴ  ＦＲＤインターフェースは、コレクション内の最初のドキュメントに戻るために使用され得る。このＧＥＴ  ＦＲＤの後にＧＥＴ  ＳＥＱが続く場合、ハッシュされたキーと合致する最初のドキュメントで始まり、最後のドキュメントが返されるまでＶＳＡＭデータ・セットの初めから終わりまで、各レコードがハッシュされたキー・シーケンスにおいて逐次的に返される。
【０１０３】
１つの実施形態によれば、本明細書で説明される方法の上で動作するアプリケーション層は、キー名：キーバリュー・ペアの中から特定の値を検索するためにこれらの返されたドキュメントをスキャンし得る。さらに、前述したように、代替キーが生成されてもよく、それは、プライマリ・キーと同様にキー名：キーバリュー・ペアに基づく。代替インデックス（ＡＩＸ）が生成されてもよく、代替インデックスは、データ・セット内のドキュメント全てをスキャンし、（キー名：キーバリュー・ペアから）キー名を検索し、次いで、代替キーをプライマリ・キーとペアにするＶＳＡＭレコードを返す。このデータは、代替キー名：キーバリュー・ペアに基づいてドキュメントを探索するために使用され得る。
【０１０４】
１つの実施形態によれば、一意ではない代替キーについて、後続のＧＥＴリクエストは、それらが代替インデックスに記憶される順序で各ドキュメントを返す。ユーザが、この新たな代替インデックスで値および特定のキー名：キーバリュー・ペアの探索を開始することに応答して、ユーザは、特定の代替インデックスを使用するようにインターフェースに命令し（ＰＡＴＨ  ＯＰＥＮ）、次いでリクエストされる値を用いてＧＥＴリクエストを発行する。そのようなリクエストに応答して、代替インデックスは、代替キーに対応するプライマリ・キーを見つけるために検索される。その情報が取得されると、プライマリ・インデックスは、リクエストされたドキュメントを直接指すプライマリ・キーについて検索され、次いで、リクエストされたドキュメントがユーザに返され得る。
【０１０５】
ここで図７を参照すると、１つの実施形態による、方法７００が示される。方法７００は、様々な実施形態において、特に図１〜５に示される環境のいずれかにおいて本発明に従って実行され得る。当然ながら、本説明を読むと当業者に理解されるように、図７において具体的に説明されるものよりも多くの、または少ない動作が、方法７００に含まれ得る。
【０１０６】
方法７００のステップのそれぞれが、動作環境の任意の適当なコンポーネントによって実行され得る。例えば、様々な実施形態において、方法７００は、マイクロプロセッサ、サーバ、メインフレーム・コンピュータ、１つもしくは複数のプロセッサをその中に有する処理回路、または１つもしくは複数のプロセッサを含む何らかの他のデバイスによって、部分的にまたは完全に実行され得る。処理回路、例えば、ハードウェアまたはソフトウェアあるいはその両方において実施され、好適には少なくとも１つのハードウェア・コンポーネントを有するプロセッサ、チップ、またはモジュール、あるいはこれらの組み合わせが、方法７００の１つまたは複数のステップを実行するために任意のデバイスにおいて利用され得る。例となるプロセッサは、ＭＰＵ、ＣＰＵ、ＡＳＩＣ、ＦＰＧＡなど、それらの組み合わせ、または本技術分野において既知の任意の他の適当なコンピューティング・デバイスを含むがこれらに限定されない。
【０１０７】
１つの実施形態では、動作環境は、環境内の追加システムのクラスタのうちの１つであり得るデータ・システムを含み得る。別の実施形態では、データ・システムは、サーバ、パーソナル・コンピュータ、モバイル・デバイス、またはプログラム命令を実行することが可能な任意のデバイスを含み得る。さらなる別の実施形態では、データ・システムは、仮想記憶環境内に含まれ得る。例えば、データ・システムは、ＶＳＡＭ環境の一部であってもよい。
【０１０８】
図７に示すように、方法７００は、動作７０２で開始し得る。動作７０２において、ＪＳＯＮ（Java（Ｒ）Script  Object  Notation）またはＢＳＯＮ（binary  Java（Ｒ）Script  Object  Notation）に準拠する非構造化データ・レコードが、データベース管理インターフェース、または構造化データベースを管理するように構成される何らかの他の論理構造もしくは物理デバイスなどにおいて、受信される。
【０１０９】
動作７０４において、データ・レコードが、少なくとも以下の情報、非構造化データ・レコードの合計長、非構造化データ・レコード内のフィールドの数、非構造化データ・レコード内のフィールドの長さ、および非構造化データ・レコードに記憶されているフィールドの順序を判定するために、独自の、またはユーザ提供されるパーサを用いて構文解析される。
【０１１０】
動作７０６において、プライマリ・キー名が、取得され、プライマリ・キー名が、非構造化データ・レコードを含むデータ・レコードのセットに関連付けられる。データ・レコードのセット内のこれらの他のデータ・レコードは、１つの手法では、構造化データベースに記憶された後に非構造化データ・レコードに関連付けられてもよい。
【０１１１】
動作７０８において、非構造化データ・レコードに関連付けられるプライマリ・キーバリューが、生成される。１つの手法では、プライマリ・キーバリューは、整数値を１ずつインクリメントし、その結果もたらされる値をプライマリ・キーバリューとして選択することによって生成され得る。別の手法では、非構造化レコードを含む構造化データベースに記憶されるデータ・セット内のいかなる他のデータ・レコードにも利用されていない限り、乱数が選択されてもよい。
【０１１２】
動作７１０において、プライマリ・キー名：キーバリュー・ペア内のプライマリ・キーバリューは、ハッシュ値を取得するために、任意の既知のハッシュ・アルゴリズムを用いてハッシュされる。ハッシュ・アルゴリズムは、非構造化データ・レコードを含むデータ・セット内の全てのデータ・レコードについて衝突を避けるべきである。
【０１１３】
動作７１２において、非構造化データ・レコードは、修正済みデータ・レコードを生成するために、その中の元のデータとともに、プライマリ・キー名：キーバリュー・ペアおよびハッシュ値をインデックス付与キーとして追加することまたは含むことによって、更新され、または書き換えられる。
【０１１４】
動作７１４において、修正済みデータ・レコードは、プライマリ・インデックス、例えば、ＫＳＤＳを介して検索可能なＶＳＡＭデータベースに記憶される。
【０１１５】
動作７１６において、ＶＳＡＭデータベースのインデックス（ＫＳＤＳ）は、修正済みデータ・レコードのためのエントリを含むように更新される。このエントリは、最小限、非構造化データ・レコードのプライマリ・キーバリューから生成されるハッシュ値を含む。
【０１１６】
１つの実施形態において、方法７００は、データ・レコードからメタデータを識別することと、修正済みデータ・レコードの生成において、プライマリ・キー名：キーバリュー・ペアに関連付けられたメタデータおよびハッシュ値でデータ・レコードを更新することと、を含み得る。
【０１１７】
別の実施形態によれば、方法７００は、データ・レコードにアクセスするためのリクエストを受信することを含み得る。本実施形態において、リクエストは、プライマリ・キー名：キーバリュー・ペア、データ・レコードに固有のハッシュ値、またはデータ・レコードに固有のプライマリ・キーバリューを含み得る。リクエストを受信後、プライマリ・キー名：キーバリュー・ペアのプライマリ・キーバリューは、データ・レコードをデータベースに記憶する際に使用されるハッシュ・アルゴリズムに対する逆ハッシュ・アルゴリズムを用いて、ハッシュ値を取得するためにハッシュされ得る。その後、ＫＳＤＳ  ＶＳＡＭデータベース・インデックスは、データベース内の修正済みデータ・レコードの位置を判定するために照会されてもよく、データ・レコードを含む修正済みデータ・レコードの一部が、データ・レコードにアクセスするためのリクエストを受信することに応答して出力され得る。
【０１１８】
別の実施形態によれば、方法７００は、ＶＳＡＭデータベースについてのセカンダリ・インデックスを生成することを含み得る。本実施形態では、セカンダリ・インデックス内の各エントリは、ＶＳＡＭデータベースの１つのデータ・レコードに関連する。さらに、セカンダリ・インデックス内の各エントリは、少なくとも以下の情報、特定のデータ・レコードのメタデータ、特定のデータ・レコードのためのベース・ポインタの数、セカンダリ・インデックスについてのバージョン標識、セカンダリ・インデックス・キーの長さ、セカンダリ・インデックス・キーの値、および１つまたは複数のベース・キーを含む。１つまたは複数のベース・キーは、修正済みデータ・レコードとしてＶＳＡＭデータベースに記憶される特定のデータ・レコードの個々のプライマリ・キーバリューのハッシュされた値に個別に合致するハッシュ値である。さらに、ＶＳＡＭデータベースは、１つまたは複数のベース・キーを用いて検索可能である。
【０１１９】
方法７００は、様々な手法において、ＩＢＭ（Ｒ）ｚ／ＯＳ（Ｒ）環境などの中でＶＳＡＭを利用するデータ・システム、または当技術分野において既知となるＶＳＡＭを利用する任意の他のシステムを用いて実行され得る。
【０１２０】
方法７００は、システムまたはコンピュータ・プログラム製品、あるいはその両方において実施され得る。例えば、システムは、処理回路、および処理回路と統合されたロジック、処理回路によって実行可能なロジック、または処理回路と統合され、かつ処理回路によって実行可能なロジックを含み得る。統合されるとは、処理回路が、ＡＳＩＣ、ＦＰＧＡなど、それとともに含まれるハードコード・ロジックを有するハードウェア・プロセッサであることを意味する。実行可能とは、処理回路が、ソフトウェア・ロジックによって指示される機能性を達成するためにソフトウェア・ロジックを実行するように構成され、プロセッサはおそらくＭＰＵ、ＣＰＵ、マイクロプロセッサなどであることを意味する。ロジックは、処理回路に方法７００を実行させるように構成され、処理回路にアクセス可能なコンピュータ可読記憶媒体に記憶される。
【０１２１】
別の例では、コンピュータ・プログラム製品は、それとともに具現化されたプログラム命令を有するコンピュータ可読記憶媒体を含み得る。コンピュータ可読記憶媒体は、記憶し、その中に記憶された情報へのコンピュータ・アクセスを可能にするように構成される、本技術分野において既知の任意の適当な記憶デバイスであってもよい。本実施形態において、具現化されたプログラム命令は、処理回路に方法７００を実行させるように処理回路によって実行可能である。
【０１２２】
図７において説明される実施形態のいくつかの恩恵は、構造化フレームワークに記憶された後の非構造化データに対するアクセス速度の高速化、ならびにプライマリ・インデックス（および非構造化データに基づいて生成される任意の代替インデックス）による拡張された検索可能性を含む。さらに、その中のデータ・レコードのうちのいずれかを更新するためにデータ・セット全体が書き換えられることに依存する、バイトストリームとしてデータ・セットに記憶された非構造化データとは対照的に、データ・セット全体（複数のデータ・レコードをその中に含み得る）が、その中の１つまたは複数のデータ・レコードを更新するときに書き換えされない。本実施形態に従って構造化フレームワークに記憶される非構造化データは、ドキュメントまたはレコード・レベルで更新されてもよく、それによって、更新プロセスにおいて利用されるＩ／Ｏの全体量が減少し、その中に記憶された非構造化データ・レコードを処理することに関連する構造化データベースの性能が向上する。
【０１２３】
ここで図８を参照すると、１つの実施形態による、方法８００が示される。方法８００は、様々な実施形態において、特に図１〜５に示される環境のいずれかにおいて本発明に従って実行され得る。当然ながら、本説明を読むと当業者に理解されるように、図８において具体的に説明されるものよりも多くの、または少ない動作が、方法８００に含まれ得る。
【０１２４】
方法８００のステップのそれぞれが、動作環境の任意の適当なコンポーネントによって実行され得る。例えば、様々な実施形態において、方法８００は、マイクロプロセッサ、サーバ、メインフレーム・コンピュータ、１つもしくは複数のプロセッサをその中に有する処理回路、または１つもしくは複数のプロセッサを含む何らかの他のデバイスによって、部分的にまたは完全に実行され得る。処理回路、例えば、ハードウェアまたはソフトウェアあるいはその両方において実施され、好適には少なくとも１つのハードウェア・コンポーネントを有するプロセッサ、チップ、またはモジュール、あるいはこれらの組み合わせなどが、方法８００の１つまたは複数のステップを実行するために任意のデバイスにおいて利用され得る。例となるプロセッサは、ＭＰＵ、ＣＰＵ、ＡＳＩＣ、ＦＰＧＡなど、それらの組み合わせ、または本技術分野において既知の任意の他の適当なコンピューティング・デバイスを含むがこれらに限定されない。
【０１２５】
１つの実施形態では、動作環境は、環境内の追加システムのクラスタのうちの１つであり得るデータ・システムを含み得る。別の実施形態では、データ・システムは、サーバ、パーソナル・コンピュータ、モバイル・デバイス、またはプログラム命令を実行することが可能な任意のデバイスを含み得る。さらなる別の実施形態では、データ・システムは、仮想記憶環境内に含まれ得る。例えば、データ・システムは、ＶＳＡＭ環境の一部であってもよい。
【０１２６】
図８に示されるように、方法８００は、動作８０２で開始し得る。動作８０２において、非構造化データベースが、受信される。非構造化データベースは、非リレーショナル・データベースとも呼ばれてもよく、複数の非構造化データ・レコードをその中に含む。非構造化データ・レコードは、任意の既知のフォーマットに従って記憶され得る。
【０１２７】
動作８０４において、複数の非構造化データ・レコードのうちの少なくとも１つのデータ・レコードが、少なくとも以下の情報、非構造化データ・レコードの合計長、少なくとも１つのデータ・レコード内のフィールドの数、少なくとも１つのデータ・レコード内のフィールドの長さ、および少なくとも１つのデータ・レコードに記憶されているフィールドの順序を判定するために、非構造データ・レコードが記憶されるフォーマットに固有の、独自の、またはユーザ提供されるパーサなどを用いて構文解析される。情報のこれらの部分のそれぞれが、情報がデータ・レコード内にどのように記憶されるかを定義し説明するのに役立つ。それは、構造化データベース内のデータ・レコードを管理する際に、構造化フォーマットに非構造化データ・レコードを書き換えることなく、そのような情報が識別されソートされることを可能にする。
【０１２８】
動作８０６において、プライマリ・キー名が、取得され、プライマリ・キー名が、複数の非構造化データ・レコードに関連付けられる。１つの実施形態において、プライマリ・キー名を関連付けることは、非構造化データ・レコードのそれぞれにプライマリ・キー名を記憶することを含む。
【０１２９】
１つの実施形態によれば、プライマリ・キー名は、同一のデータ・セット内に記憶されている非構造化データ・レコードのそれぞれに、“＿ｉｄ”、“｜ｎａｍｅ｜”、“％ｋｅｙ”などのデフォルト識別子、またはデータ・レコードにおいて典型的には現れない何らかの他の適当なマーカもしくは識別子を割り当てることによって生成され得る。
【０１３０】
動作８０８において、複数の非構造化データ・レコードのそれぞれの非構造化データ・レコードにつき１つ、複数のキーバリューが生成される。１つの実施形態によれば、複数のキーバリューは、複数の非構造化データ・レコードの各データ・レコードについて個別に一意な整数値を選択すること、およびこれらの値を非構造化データ・レコードに個別に割り当てることによって、生成され得る。
【０１３１】
動作８１０において、複数の非構造化データ・レコードの各データ・レコードについてのプライマリ・キーバリューは、複数の非構造化データ・レコードに１対１で複数のハッシュ値、例えば、データ・レコード１つにつき１つのハッシュ値を取得するように、既知のハッシュ・アルゴリズムを用いて、ハッシュされる。
【０１３２】
動作８１２において、複数の非構造化データ・レコードの各データ・レコードは、プライマリ・キー名：キーバリュー・ペア、および各データ・レコードに固有のハッシュ値を個別に追加することによって、更新または修正、あるいはその両方が行われる。これは、対応するプライマリ・キー名：キーバリュー・ペアおよびハッシュ値を含む各修正済みデータ・レコードを有する複数の修正済みデータ・レコードを生成する。
【０１３３】
別の実施形態では、プライマリ・キー名：キーバリュー・ペアにおけるキーバリューは、修正済みデータ・レコード内の値を記憶する前に、ハッシュされ得る。
【０１３４】
動作８１４において、複数の修正済みデータ・レコードが、ＶＳＡＭデータベースなどの構造化データベースまたは半構造化データベースに記憶される。
【０１３５】
動作８１６において、構造化データベースまたは半構造化データベースのプライマリ・インデックスは、修正済みデータ・レコードの全てについてのエントリを含むように更新される。１つの実施形態において、プライマリ・インデックスは、ＫＳＤＳ  ＶＳＡＭデータベース・インデックスであってもよい。各エントリは、複数のハッシュ値のうちの１つを含み、それによって、プライマリ・インデックスを介して非構造化データ・レコードの全てにインデックス付与することをもたらす。
【０１３６】
１つの実施形態において、方法８００は、複数の非構造化データ・レコードの各データ・レコードからメタデータを識別することを含み得る。この実施形態において、複数のハッシュ値の各ハッシュ値は、ハッシュ値を提供するために、各データ・レコードについてのプライマリ・キーバリューを、対応するデータ・レコードに固有の識別されたメタデータとともにハッシュすることによって、生成される。「メタデータ」は、バージョン数、修正日もしくは生成日、またはデータ・レコードのうちの少なくともいくつかにおいて異なると見られるデータ・レコードに含まれる何らかの他の既知の情報など、個別に非構造化データ・レコードのそれぞれから選択される情報または非構造化データ・レコードのそれぞれについての情報、あるいはその両方を含む。追加メタデータは、名前、住所、時間、値、パラメータなどを含むが、これらに限定されない。
【０１３７】
別の実施形態によれば、方法８００は、構造化データベースまたは半構造化データベースのための１つまたは複数のセカンダリ・インデックスを生成することを含み得る。セカンダリ・インデックス内の各エントリは、構造化データベースまたは半構造化データベースに記憶されるデータ・レコードに関連し、少なくとも以下の情報、特定のデータ・レコードのメタデータ、特定のデータ・レコードのためのベース・ポインタの数、セカンダリ・インデックスについてのバージョン標識、セカンダリ・インデックス・キーの長さ、セカンダリ・インデックス・キーの値、および１つまたは複数のベース・キーを含み得る。ベース・キーのそれぞれが、ベース構造化または半構造化データベースに記憶される特定のデータ・レコードのハッシュされたキーバリューに合致するハッシュ値である。構造化データベースまたは半構造化データベースは、１つまたは複数のベース・キーを用いて検索可能であり、したがって、セカンダリ・インデックスは、プライマリ・インデックスを検索するため、および特定のデータ・レコードを位置特定するために使用され得る情報を取得するために使用され得る。
【０１３８】
方法８００は、様々な手法において、ＩＢＭ（Ｒ）ｚ／ＯＳ（Ｒ）環境などの中でＶＳＡＭを利用するデータ・システム、または当技術分野において既知となるＶＳＡＭを利用する任意の他のシステムを用いて実行され得る。
【０１３９】
方法８００は、システムまたはコンピュータ・プログラム製品、あるいはその両方において実施され得る。例えば、システムは、処理回路、および処理回路と統合されたロジック、処理回路によって実行可能なロジック、または処理回路と統合され、かつ処理回路によって実行可能なロジックを含み得る。統合されるとは、処理回路が、ＡＳＩＣ、ＦＰＧＡなど、それとともに含まれるハードコード・ロジックを有するハードウェア・プロセッサであることを意味する。実行可能とは、処理回路が、ソフトウェア・ロジックによって指示される機能性を達成するためにソフトウェア・ロジックを実行するように構成され、プロセッサはおそらくＭＰＵ、ＣＰＵ、マイクロプロセッサなどであることを意味する。ロジックは、処理回路に方法８００を実行させるように構成され、処理回路にアクセス可能なコンピュータ可読記憶媒体に記憶される。
【０１４０】
別の例では、コンピュータ・プログラム製品は、それとともに具現化されたプログラム命令を有するコンピュータ可読記憶媒体を含み得る。コンピュータ可読記憶媒体は、記憶し、その中に記憶された情報へのコンピュータ・アクセスを可能にするように構成される、本技術分野において既知の任意の適当な記憶デバイスであってもよい。本実施形態において、具現化されたプログラム命令は、処理回路に方法８００を実行させるように処理回路によって実行可能である。
【０１４１】
図８において説明される実施形態のいくつかの恩恵は、構造化フレームワークに記憶された後の非構造化データに対するアクセス速度の高速化、ならびにプライマリ・インデックス（および非構造化データに基づいて生成される任意の代替インデックス）による拡張された検索可能性を含む。さらに、その中のデータ・レコードのうちのいずれかを更新するためにデータ・セット全体が書き換えられることに依存する、バイトストリームとしてデータ・セットに記憶された非構造化データとは対照的に、データ・セット全体（複数のデータ・レコードをその中に含み得る）が、その中の１つまたは複数のデータ・レコードを更新するときに書き換えされない。本実施形態に従って構造化フレームワークに記憶される非構造化データは、ドキュメントまたはレコード・レベルで更新されてもよく、それによって、更新プロセスにおいて利用されるＩ／Ｏの全体量が減少し、その中に記憶された非構造化データ・レコードを処理することに関連する構造化データベースの性能が向上する。
【０１４２】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはそれらの組み合わせであってもよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体（または複数の媒体）を含んでもよい。
【０１４３】
コンピュータ可読記憶媒体は、命令実行デバイスにより使用するための命令を保持し、記憶し得る有形デバイスであり得る。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または前述したものの任意の適当な組み合わせであってもよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、静的ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー（Ｒ）・ディスク、パンチカードまたはその上に記録された命令を有する溝内の隆起構造などの機械的に符号化されたデバイス、および前述したものの任意の適当な組み合わせを含む。本明細書で用いられるコンピュータ可読記憶媒体は、本来、電波もしくは他の自由伝播する電磁波、導波管もしくは他の送信媒体を通って伝播する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、または電線を通って送信される電気信号などの、一過性信号であると解釈されるべきではない。
【０１４４】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、あるいはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはそれらの組み合わせを介して外部コンピュータまたは外部記憶デバイスに、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組み合わせを含み得る。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、それぞれのコンピューティング／処理デバイス内のコンピュータ可読記憶媒体の記憶用にコンピュータ可読プログラム命令を転送する。
【０１４５】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはＳｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つもしくは複数のプログラミング言語の任意の組み合わせで書かれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に、ユーザのコンピュータ上で部分的に、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータ上で部分的にかつリモート・コンピュータ上で部分的に、またはリモート・コンピュータもしくはサーバ上で完全に、実行してもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを通して、ユーザのコンピュータに接続されてもよい。あるいは、接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを通して）外部コンピュータに対して行われてもよい。いくつかの実施形態では、例えば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個別化することによって、コンピュータ可読プログラム命令を実行し得る。
【０１４６】
本発明の態様は、発明の実施形態による、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して、本明細書において説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組み合わせは、コンピュータ可読プログラム命令によって実施され得ると理解されたい。
【０１４７】
コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行する命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作を実施する手段を作り出すように、これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または機械を製造するための他のプログラマブル・データ処理装置のプロセッサに提供されてもよい。コンピュータ可読記憶媒体に記憶される命令を有するコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作の態様を実施する命令を含む製品を含むように、これらのコンピュータ可読プログラム命令は、また、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはそれらの組み合わせが特定のやり方で機能するように指示し得る、コンピュータ可読記憶媒体に記憶されてもよい。
【０１４８】
コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作を実施するように、コンピュータ可読プログラム命令は、また、コンピュータ実施されたプロセスを作り出すために、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるコンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされてもよい。
【０１４９】
図面中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の考えられる実施のアーキテクチャ、機能性、および動作を示している。この点に関して、フローチャートまたはブロック図の各ブロックは、指定された論理機能を実施するための１つまたは複数の実行可能命令を含む、モジュール、セグメント、または命令の一部を表してもよい。いくつかの代替的な実施において、ブロック内に記載された機能は、図面中に記載された順序以外で発生してもよい。例えば、連続して示される２つのブロックが、実際には、実質的に同時に実行されてもよく、または、ブロックが、関係する機能性次第で逆の順序で実行されることがあってもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせが、指定された機能もしくは動作を実行し、または専用ハードウェアおよびコンピュータ命令の組み合わせを実行する専用ハードウェア・ベース・システムによって実施され得ることにも留意されたい。
【０１５０】
さらに、様々な実施形態によるシステムは、プロセッサと、プロセッサに統合されたロジックまたはプロセッサにより実行可能なロジックあるいはその両方を含んでもよく、ロジックは、本明細書に列挙されるプロセス・ステップのうちの１つまたは複数を実行するように構成される。統合されるとは、プロセッサが、それとともに具現化されたロジックをＡＳＩＣ、ＦＰＧＡなどのハードウェア・ロジックとして有することを意味する。プロセッサにより実行可能とは、ロジックが、ハードウェア・ロジック、ファームウェア、オペレーティング・システムの一部、アプリケーション・プログラムの一部などのソフトウェア・ロジック、またはプロセッサによりアクセス可能であり、プロセッサによる実行時に何らかの機能性をプロセッサに実行させるように構成される、ハードウェア・ロジックおよびソフトウェア・ロジックの何らかの組み合わせであることを意味する。ソフトウェア・ロジックは、当技術分野において既知の任意のメモリタイプのローカル・メモリまたはリモート・メモリあるいはその両方の上に記憶され得る。ソフトウェア・プロセッサ・モジュールまたはＡＳＩＣ、ＦＰＧＡ、ＣＰＵ、集積回路（ＩＣ）、グラフィック処理ユニット（ＧＰＵ）などのハードウェア・プロセッサ、あるいはその両方などの、本技術分野において既知の任意のプロセッサが使用され得る。
【０１５１】
前述のシステムまたは方法論あるいはその両方の様々な特徴が、上記で提示された説明から複数の組み合わせを生成して、任意のやり方で組み合わされ得ることは明らかである。
【０１５２】
様々な実施形態が上記で説明されたが、それらは、限定ではなく例示としてのみ提示されていると理解されるべきである。よって、好適な実施形態の幅および範囲は、上述した例示的実施形態のうちのいずれかによって限定されるべきでなく、以下の特許請求の範囲およびその等価物に従ってのみ定義されるべきである。
【図１】
2021506030.tif 000003
【図２】
2021506030.tif 000004
【図３】
2021506030.tif 000005
【図４】
2021506030.tif 000006
【図５】
2021506030.tif 000007
【図６】
2021506030.tif 000008
【図７】
2021506030.tif 000009
【図８】
2021506030.tif 000010
【国際調査報告】
2021506030.tif 000011
2021506030.tif 000012