特許第6982049号(P6982049)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ベイジン バイドゥ ネットコム サイエンス アンド テクノロジー カンパニー リミテッドの特許一覧

特許6982049インデックスを管理するための方法、装置、設備及び記憶媒体
<>
  • 特許6982049-インデックスを管理するための方法、装置、設備及び記憶媒体 図000002
  • 特許6982049-インデックスを管理するための方法、装置、設備及び記憶媒体 図000003
  • 特許6982049-インデックスを管理するための方法、装置、設備及び記憶媒体 図000004
  • 特許6982049-インデックスを管理するための方法、装置、設備及び記憶媒体 図000005
  • 特許6982049-インデックスを管理するための方法、装置、設備及び記憶媒体 図000006
  • 特許6982049-インデックスを管理するための方法、装置、設備及び記憶媒体 図000007
  • 特許6982049-インデックスを管理するための方法、装置、設備及び記憶媒体 図000008
  • 特許6982049-インデックスを管理するための方法、装置、設備及び記憶媒体 図000009
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6982049
(24)【登録日】2021年11月22日
(45)【発行日】2021年12月17日
(54)【発明の名称】インデックスを管理するための方法、装置、設備及び記憶媒体
(51)【国際特許分類】
   G06F 16/22 20190101AFI20211206BHJP
   G06F 16/215 20190101ALI20211206BHJP
【FI】
   G06F16/22
   G06F16/215
【請求項の数】19
【外国語出願】
【全頁数】19
(21)【出願番号】特願2019-211255(P2019-211255)
(22)【出願日】2019年11月22日
(65)【公開番号】特開2020-123320(P2020-123320A)
(43)【公開日】2020年8月13日
【審査請求日】2020年1月16日
(31)【優先権主張番号】201910088131.2
(32)【優先日】2019年1月29日
(33)【優先権主張国】CN
(73)【特許権者】
【識別番号】514322098
【氏名又は名称】ベイジン バイドゥ ネットコム サイエンス テクノロジー カンパニー リミテッド
(74)【代理人】
【識別番号】110000914
【氏名又は名称】特許業務法人 安富国際特許事務所
(72)【発明者】
【氏名】ウー, ジェン
(72)【発明者】
【氏名】ワン, ジェ
【審査官】 北村 学
(56)【参考文献】
【文献】 特開2003−281182(JP,A)
【文献】 特開2004−265015(JP,A)
【文献】 特表2000−501532(JP,A)
【文献】 米国特許出願公開第2013/0013617(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
IPC G06F 16/00 − 16/958
(57)【特許請求の範囲】
【請求項1】
インデックスを管理するための方法であって、
データベースに格納されている目標データについての目標インデックスを確定するステップであって、前記目標インデックスは、目標インデックスの記憶バージョンを識別するための対応するインデックスマークを含む、ステップと、
前記目標インデックスに基づいて、前記データベースに格納されている前記目標データを取得するステップであって、前記目標データは、前記目標データの記憶バージョンを識別するための対応するデータマークを含む、ステップと、
前記インデックスマークと前記データマークとがマッチングしていない場合、
前記目標データに関連付けられる1組のインデックスを生成するステップと、
前記1組のインデックスに前記目標インデックスが含まれていることに応答して、前記インデックスマークが、前記目標インデックスと前記目標データの相関性が不明確であることを示す所定マークであるか否かを判定するステップと、
前記インデックスマークが前記所定マークであることに応答して、前記インデックスマークと前記データマークとがマッチングするように、前記インデックスマークを前記データマークに修正するステップとを含む方法。
【請求項2】
前記1組のインデックスに前記目標インデックスが含まれていないことに応答して、前記目標インデックスと前記インデックスマークを削除することをさらに含む請求項に記載の方法。
【請求項3】
前記目標インデックスを確定するステップは、
前記目標データについてのクエリーリクエストを受信することと、
前記クエリーリクエストにおけるキーワードに基づいて、前記目標インデックスを確定することとを含む請求項1に記載の方法。
【請求項4】
前記インデックスマークと前記データマークとがマッチングしていることに応答して、前記目標データに基づいてクエリー結果を確定することと、
前記クエリー結果を前記クエリーリクエストへの応答として提供することとをさらに含む請求項に記載の方法。
【請求項5】
前記目標データを取得するステップは、
前記目標インデックスに基づいて、前記目標データの前記データベースにおける記憶位置を確定することと、
前記記憶位置に基づいて、前記データベースから前記目標データを取得することとを含む請求項1に記載の方法。
【請求項6】
前記目標データに基づいて、前記目標インデックスと前記インデックスマークを生成するステップをさらに含む請求項1に記載の方法。
【請求項7】
前記目標インデックスと前記インデックスマークを生成するステップは、
前記目標データ前記データベースに書き込もうとする場合、前記目標インデックスと前記データマークを生成することと、
生成された前記データマークに基づいて前記インデックスマークを確定することとを含む請求項に記載の方法。
【請求項8】
前記目標データはソースデータと介入フィールドとを含む場合、前記ソースデータと前記介入フィールドを合併し、合併後のデータを目標データとして目標インデックスを生成するステップであって、前記介入フィールドは前記ソースデータの中の属性を修正するためのものである、ステップと、
前記目標データの前記ソースデータにおけるインデックスに関連するフィールドを更新する場合、前記目標インデックスを生成、前記インデックスマークを、前記目標インデックスと前記目標データの相関性が不明確であることを示す所定マークするステップとを、さらに含む請求項に記載の方法。
【請求項9】
データベースに格納されている目標データについての目標インデックスを確定するように構成されるインデックス確定モジュールであって、前記目標インデックスは、目標インデックスの記憶バージョンを識別するための対応するインデックスマークを含む、インデックス確定モジュールと、
前記目標インデックスに基づいて、前記データベースに格納されている前記目標データを取得するように構成されるデータ取得モジュールであって、前記目標データは、前記目標データの記憶バージョンを識別するための対応するデータマークを含む、データ取得モジュールと、
前記インデックスマークと前記データマークとがマッチングしていない場合、前記目標データに関連付けられる1組のインデックスをデータ解析モジュールによって生成し、
前記1組のインデックスに前記目標インデックスが含まれていることに応答して、前記インデックスマークが、前記目標インデックスと前記目標データの相関性が不明確であることを示す所定マークであるか否かを、マーク判定モジュールによって判定し、
前記インデックスマークが前記所定マークであることに応答して、前記インデックスマークと前記データマークとがマッチングするように、所定修正モジュールによって前記インデックスマークを前記データマークに修正するように構成される動作決定モジュールと
を備える、インデックスを管理するための装置。
【請求項10】
前記1組のインデックスに前記目標インデックスが含まれていないことに応答して、前記目標インデックスと前記インデックスマークを削除するように構成されるインデックス削除モジュールをさらに備える請求項に記載の装置。
【請求項11】
前記インデックス確定モジュールは、
前記目標データについてのクエリーリクエストを受信するように構成されるリクエスト受信モジュールと、
前記クエリーリクエストにおけるキーワードに基づいて、前記目標インデックスを確定するように構成される目標確定モジュールとを備える請求項に記載の装置。
【請求項12】
前記インデックスマークと前記データマークとがマッチングしていることに応答して、前記目標データに基づいてクエリー結果を確定するように構成される結果確定モジュールと、
前記クエリー結果を前記クエリーリクエストへの応答として提供するように構成される結果提供モジュールとをさらに備える請求項11に記載の装置。
【請求項13】
前記データ取得モジュールは、
前記目標インデックスに基づいて、前記目標データの前記データベースにおける記憶位置を確定するように構成される位置確定モジュールと、
前記記憶位置に基づいて、前記データベースから前記目標データを取得するように構成される目標取得モジュールとを備える請求項に記載の装置。
【請求項14】
前記目標データに基づいて、前記目標インデックスと前記インデックスマークを生成するように構成されるマーク生成モジュールをさらに備える請求項に記載の装置。
【請求項15】
前記マーク生成モジュールは、
前記目標データ前記データベースに書き込もうとする場合、前記目標インデックスと前記データマークを生成するように構成される第1インデックス生成モジュールと、
生成された前記データマークに基づいて前記インデックスマークを確定するように構成されるインデックスマーク確定モジュールとを備える請求項14に記載の装置。
【請求項16】
前記目標データはソースデータと前記ソースデータを修正するための介入フィールドとを含む場合、前記ソースデータと前記介入フィールドを合併し、合併後のデータを目標データとして目標インデックスを生成し、前記介入フィールドは前記ソースデータの中の属性を修正するためのものであり
前記マーク生成モジュールは、
前記目標データの前記ソースデータにおけるインデックスに関連するフィールドを更新する場合、前記目標インデックスを生成するように構成される第2インデックス生成モジュールと、
前記インデックスマークを、前記目標インデックスと前記目標データの相関性が不明確であることを示す所定マークするように構成される所定マーク確定モジュールとを備える請求項14に記載の装置。
【請求項17】
1つ又は複数のプロセッサと、
1つ又は複数のプログラムを格納するための記憶装置であって、前記1つ又は複数のプログラムが前記1つ又は複数のプロセッサにより実行されると、前記1つ又は複数のプロセッサに請求項1〜のいずれか1項に記載の方法を実行させる記憶装置と
を備える設備。
【請求項18】
コンピュータプログラムが格納されているコンピュータ読み取り可能な記憶媒体であって、
前記プログラムがプロセッサにより実行されると、請求項1〜のいずれか1項に記載の方法が実行される記憶媒体。
【請求項19】
コンピュータプログラムであって、
前記コンピュータプログラムがプロセッサにより実行されると、請求項1〜のいずれか1項に記載の方法が実行されるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の実施例は主にコンピュータ分野に関し、さらに具体的に、インデックスを管理するための方法、装置、設備及びコンピュータ読み取り可能な記憶媒体に関する。
【背景技術】
【0002】
さまざまな分野のデータに対する需要が高まるにつれて、データベース技術がますます広く使用されるようになっている。必要なデータをさらに便利にクエリーするために、データベースにセカンダリインデックスを構築する必要がある。データの持続的な更新に伴い、構築されたインデックスの一部はそれが示すデータに適用しなくなる可能性があり、このようなインデックスはクリーンアップする必要がある。そのため、データベースの性能を高めるために、これらのインデックスを効率的に管理する必要がある。ところが、インデックス管理の従来方式において、各処理すべきインデックス及びそれが示すデータに対して一連の動作を実行しなければ該インデックスがクリーンアップされるべきか否かを判定できないため、データベースの性能が低下する。
【発明の概要】
【課題を解決するための手段】
【0003】
本開示の例示的な実施例により、インデックスを管理するための解決手段を提供する。
【0004】
本開示の第1態様において、インデックスを管理する方法を提供する。該方法は、データベースに格納されている目標データについての目標インデックスを確定するステップであって、目標インデックスは、目標インデックスの記憶バージョンを識別するための対応するインデックスマークを含む、ステップを含む。該方法は、目標インデックスに基づいて、データベースに格納されている目標データを取得するステップであって、目標データは、目標データの記憶バージョンを識別するための対応するデータマークを含む、ステップをさらに含む。該方法は、インデックスマークとデータマークとがマッチングしていないことに応答して、目標インデックスに関連付けられる動作を決定するステップをさらに含む。
【0005】
本開示の第2態様において、インデックスを管理するための装置を提供する。該装置は、データベースに格納されている目標データについての目標インデックスを確定するように構成されるインデックス確定モジュールであって、目標インデックスは、目標インデックスの記憶バージョンを識別するための対応するインデックスマークを含む、インデックス確定モジュールを備える。該装置は、目標インデックスに基づいて、データベースに格納されている目標データを取得するように構成されるデータ取得モジュールであって、目標データは、目標データの記憶バージョンを識別するための対応するデータマークを含む、データ取得モジュールをさらに備える。該装置は、インデックスマークとデータマークとがマッチングしていないことに応答して、目標インデックスに関連付けられる動作を決定するように構成される動作決定モジュールをさらに備える。
【0006】
本開示の第3態様において、1つ又は複数のプロセッサと、1つ又は複数のプログラムを格納するための記憶装置であって、1つ又は複数のプログラムが1つ又は複数のプロセッサにより実行されると、1つ又は複数のプロセッサに本開示の第1態様に記載の方法を実行させる記憶装置とを備える設備を提供する。
【0007】
本開示の第4態様において、コンピュータプログラムが格納されているコンピュータ読み取り可能な媒体であって、該プログラムがプロセッサにより実行されると、本開示の第1態様に記載の方法が実行される媒体を提供する。
【0008】
発明の概要の部分に説明した内容は、本開示の実施例の肝要又は重要な特徴を制限するものではなく、本開示の範囲を制限するものでもないことを理解すべきである。本開示のほかの特徴は以下の説明を通して容易に理解される。
【0009】
図面及び以下の詳しい説明を参照して、本開示の各実施例の上記及びほかの特徴、メリット及び態様がさらに明らかになる。図面において、同じ又は類似する図面の記号は同じ又は類似する要素を示す。
【図面の簡単な説明】
【0010】
図1】本開示の実施例が実行される例示的な環境の概略図を示す。
図2】本開示の実施例によるインデックスを管理するプロセスのフローチャートを示す。
図3】図示した本開示の一部の実施例によるデータ記憶構造の概略図を示す。
図4】図示した本開示の一部の実施例によるインデックスマークとデータマークを記憶するテーブルの概略図を示す。
図5】図示した本開示の一部の実施例による介入フィールドの概略図を示す。
図6】本開示の一部の実施例による目標インデックスに関連付けられる動作を決定するプロセスのフローチャートを示す。
図7】本開示の実施例によるインデックスを管理するための装置の概略ブロック図を示す。
図8】本開示の複数の実施例を実施できるコンピューティングデバイスのブロック図を示す。
【発明を実施するための形態】
【0011】
次に図面を参照して本開示の実施例をさらに詳しく説明する。図面には本開示の一部の実施例を示したが、本開示は様々な形式で実施でき、ここで説明した実施例に制限されると解釈すべきではなく、逆に本開示をさらに明確且つ完全に理解させるためにこれらの実施例を提供するものであることを理解すべきである。本開示の図面及び実施例は例示的な作用のみに用いられ、本開示の保護範囲を制限するためのものではないと理解すべきである。
【0012】
本開示の実施例の説明において、「含む」又は「備える」という用語及び類似する用語は、非限定(open−ended)の表現であると理解すべきであり、即ち、「それらを含むが、それらに限定されない」という意味である。「基づく」という用語は、「少なくとも部分的に基づく」として理解すべきである。「1つの実施例」又は「当該実施例」という用語は、「少なくとも1つの実施例」として理解すべきである。「第1」、「第2」などの用語は、異なる又は同じ対象を指してもよい。次の内容はほかの明確又は暗黙的な定義を含み得る。
【0013】
前文に記載したとおり、データクエリーリクエストにさらによく応答するように、場合によっては、データベースにセカンダリインデックスを構築する必要がある。次にデータベースHBaseを例として説明する。HBaseは高信頼性、高性能、列向けの拡張可能な分散型記憶システムである。ユーザは行キー(rowkey)と行キーの範囲を通してデータの検索と主キークエリー(行キーを主キーとする)を行い、性能を高めて大量データから目標データをクエリーすることができる。ところが、実際の使用においては、非主キーに対するクエリーの需要が多い。HBaseは非主キーをスキャンするためのフィルタリングの方式を提供したが、このような方式に必要なデータは全テーブルスキャンを必要とし、クラスター全体の性能に対して消耗が多く、且つクエリー性能が低く、データ量が非常に多い場合に適用されない。
【0014】
非主キークエリーを使用するために、現在では、通常HBaseソースデータテーブルにおけるデータに対して転置インデックス(即ち、セカンダリインデックス)を構築し、次に、転置インデックスにおける行キーを通して対応するHBaseソースデータテーブルの行キー情報を取得し、さらに目標データを特定する。転置インデックスの記憶は設計に関連し、HBaseソースデータテーブルと同一テーブルにしてもよく、別のテーブルにしてもよい。
【0015】
ストリーミングデータ制作中、HBaseソースデータテーブルにおけるデータが持続的に更新されるため、転置インデックスのうち、それが示すデータに適用しないインデックス(本明細書ではダーティインデックス(Dirty Index)とも称される)の存在をもたらす。この場合、ダーティインデックスをクリーンアップするために消去動作を実行する必要がある。データを書き込む時にダーティインデックスをクリーンアップすることは書き込み速度の低下につながる。書き込み性能が高いシステムは、通常、該動作を遅延してデータを読み取る際に行うようにする。
【0016】
従来、セカンダリインデックスの消去遅延は2種類の解決手段を用いる。第1の解決手段はバッチ消去遅延である。当該解決手段において、データを読み取るとともにデータのすべてのセカンダリインデックスに対して消去ロジック判断を行うことにより、あるセカンダリインデックスをクリーンアップするか否かを判定する。第2の解決手段はオンデマンド遅延消去である。当該解決手段において、データを読み取るとともにクエリーによりヒットしたセカンダリインデックスのみに対して消去ロジック判断を行い、多くともヒットしたインデックスデータに影響を与える。
【0017】
ところが、これらの2種類の従来の解決手段において、いずれも各処理すべきインデックスに対して一連の動作(即ち、消去ロジック判断)を実行しなければ該インデックスがクリーンアップされるべきか否かを判定できないので、データベースの性能が低下してしまう。そのほか、これらの2種類の従来の解決手段は使用の場面が異なるため、もたらす問題と欠陥も異なる。第1の解決手段はインデックスへのアクセスが集中する場合のみに応用でき、応用範囲が限られる。バッチ消去遅延は、多数の無関係なインデックスも消去する可能性があり、性能の低下を引き起こす。第2の解決手段は需要に応じてインデックスデータを消去できるが、クエリーを行う度にヒットしたインデックスをクリーンアップする必要があるか否かを判断する必要があるため、性能の低下につながる。
【0018】
本開示の実施例により、インデックスを管理する解決手段を提供する。該解決手段において、目標インデックスの記憶バージョンを識別するためのインデックスマークと、目標データの記憶バージョンを識別するためのデータマークを設定し、インデックスマークとデータマークを比較することにより、目標インデックスに関連付けられる動作を決定することができる。この方式により、目標インデックスが削除されるべきか否かを判定することに必要な動作を減少することができる。そのため、本開示の解決手段は、データベースインデックスの効果的な管理を実現し、後続の呼び出しに必要なタイムオーバヘッド(time overhead)を低減し、且つデータ読み取りの性能を高めることができる。
【0019】
次に図面を参照して本開示の実施例を詳しく説明する。
【0020】
図1は本開示の実施例が実行される例示的な環境100の概略図を示す。該例示的な環境100において、データベース101にデータ121、123が記憶されるが、データはデータの記憶バージョンを識別するための対応するデータマーク122、124を含む。データマークは、データの記憶バージョンを識別できるようなタイムスタンプ、又は所定ルールに基づいて定義した一連の数値であってもよい。インデックス111、113は、インデックスの記憶バージョンを識別するための対応するインデックスマーク112、114を含む。インデックスマークは、タイムスタンプ、所定ルールに基づいて定義した一連の数値、或いは所定マークであってもよい。次に、図3及び図4を参照してデータマークとインデックスマークを詳しく説明する。
【0021】
インデックス111、113は、データベース101に記憶された、対象とするデータを示すことができ、例えば、その対象とするデータのデータベース101における記憶位置を利用してデータを示すことができる。例えば、インデックス111はデータ121を対象とするインデックスであってもよい。インデックス111、113は、データベース101に記憶されたデータの現在バージョン或いは以前のバージョンに基づいて生成されてもよい。例えば、インデックス111、113はセカンダリインデックス又は転置インデックスであってもよい。
【0022】
前文に記載したとおり、データベース101に記憶されたデータの更新につれて、一部のインデックス(例えば、データの以前のバージョンに基づいて生成したインデックス)は、元々対象としたデータを示すのに適さなくなる場合がある。この場合、コンピューティングデバイス102でインデックス(例えば、インデックス111、113)を管理し、例えば、その中のダーティインデックスをクリーンアップする。図1に示された環境100は例示的なものであり、さらに複数のコンピューティングデバイスを用いてデータベース101の中のインデックスを決定して管理できることを理解すべきである。コンピューティングデバイス102は、固定型コンピューティングデバイスであってもよく、携帯電話、タブレットコンピュータなどのポータブルコンピューティングデバイスであってもよいことを理解すべきである。
【0023】
データベース101は、コンピューティングデバイス102の中に記憶されてもよく、コンピューティングデバイス102に遠隔で記憶されてもよい。コンピューティングデバイス102はクライアント側に構成されてもよく、サーバ側に構成されてもよく、本開示の範囲はこの面で制限されない。図1においてインデックス111、113をデータ121、123とともに同一データベース101の中に記憶することを示したが、インデックス111、113は、データ121、123とは別に記憶してもよく、例えば、ほかのデータベースに記憶してもよいことを理解すべきである。
【0024】
本開示の実施例により提供されるインデックス管理の解決手段をさらに明確に理解できるように、図2を参照して本開示の実施例をさらに説明する。図2は本開示の実施例によるインデックスを管理するプロセス200のフローチャートを示す。プロセス200は、図1のコンピューティングデバイス102により実行され得る。分かりやすくするために、図1を参照してプロセス200を説明する。
【0025】
ブロック210では、コンピューティングデバイス102は、データベース101に記憶された目標データを対象とする目標インデックスを確定する。分かりやすくするために、次にインデックス111を目標インデックスとして説明し、且つ目標インデックス111が対象とする目標データはデータ121であると仮定する。目標インデックス111は、目標インデックス111の記憶バージョンを識別するための対応するインデックスマーク112を含む。インデックスマーク112は、タイムスタンプ、一連の数値の1つ、或いは所定マークであってもよい。
【0026】
一部の実施例において、プロセス200はデータクエリーのプロセスと組み合わせてもよい。コンピューティングデバイス102は、目標データ121を対象とするクエリーリクエストなどのクエリーリクエストを受信し、且つ、クエリーリクエストにおけるキーワードに基づいて目標インデックス111を確定することができる。例えば、コンピューティングデバイス102は、ユーザからのクエリーリクエストを受信し、且つ該クエリーリクエストを解析することにより、目標インデックス111をヒットする。
【0027】
一部の実施例において、プロセス200は定期的に実行されてもよく、即ち、コンピューティングデバイス102はインデックスを定期的に管理することができる。プロセス200は、ユーザからの指令などに応答して開始してもよい。そのような実施例において、データベース101における各インデックスに対してプロセス200を実行することができ、目標インデックス111は任意のインデックスであってもよい。
【0028】
ブロック220では、コンピューティングデバイス102は、目標インデックス111に基づいて、データベース101に記憶された目標データ121を取得するが、目標データ121は、目標データ121の記憶バージョンを識別するための対応するデータマーク122を含む。データマーク122は、目標データ121の書き込み又は更新に関連するタイムスタンプ、一連の数値の1つなどであってもよい。
【0029】
一部の実施例において、コンピューティングデバイス102は、目標インデックス111に基づいて目標データ121のデータベース101における記憶位置を確定し、且つ、確定された記憶位置に基づいてデータベース101から目標データ121を取得することができる。例えば、目標インデックス111と目標データ121がデータベース101の同一テーブルの中に記憶される場合、目標インデックス111は目標データ121の該テーブルにおける行を示すことができ、目標インデックス111と目標データ121が異なるテーブルの中に記憶される場合、目標インデックス111は目標データ121を記憶するテーブルと目標データ121の該テーブルにおける行を示すことができる。
【0030】
次に、図3及び図4を参照して例示的に目標インデックス、インデックスマーク、目標データ及びデータマークの間の関係をさらに詳しく説明する。図3は図示した本開示の一部の実施例によるデータ記憶構造300の概略図を示す。図3はHBaseのデータ記憶構造を例として説明しており、それは例示的なものであることを理解すべきである。本開示の実施例は任意の構造で記憶されたデータとインデックスに応用できる。
【0031】
図3に示されるように、要素310は、該行の要素がそれぞれの列ファミリー(Column Family、CF)を表すことを識別し、要素320は、該行の要素が個々の列を表すことを識別する。データ記憶構造300は、d列ファミリー(CF:dと示されてもよい)、s列ファミリー312(CF:sと示されてもよい)及びi列ファミリー313(CF:iと示されてもよい)という3つの列ファミリーを含む。d列ファミリー311は、フォーマットがjsonであるソースデータなどを記憶するための1つのd:@cnt列321だけを含む。
【0032】
s列ファミリー312は、ソースデータに関連するシステムフィールドを記憶することに用いられる。例えば、s:@ts列322は、d:@cnt列321におけるデータの更新時間を記憶することができる。s:@tag列323は、データ(d列ファミリー311とs列ファミリー312のデータが含まれてもよい)の記憶バージョンを識別するためのデータマークを記憶することができる。
【0033】
i列ファミリー313は、インデックスマーク112などのインデックスのインデックスマークが記憶されるi:@tag列325を含む。その例示において、行330がインデックスに関連する情報を記憶することに用いられる場合、d列ファミリー311とs列ファミリー312はブランクであってもよく、行330がデータに関連する情報を記憶することに用いられる場合、i列ファミリーはブランクであってもよい。該例示において、インデックスとデータに異なる列ファミリーを割り当てることにより、物理ストレージにそれらを隔離することで、インデックスにアクセスする際に、この列に可能な限り少ないデータアクセスが指定され、アクセス速度を高めることができる。
【0034】
次に図4を参照して1つの具体的な例を説明する。図4は図示した本開示の一部の実施例によるインデックスマークとデータマークを記憶するテーブル400の概略図を示す。テーブル400の上の部分はインデックスに関連する情報を記憶することに用いられ、下の部分はデータに関連する情報を記憶することに用いられる。行430はデータの行キー421(該例において15とされる)、ソースデータ422、更新時間423(T1)及びデータマーク424(T1)を含む。該例において、データマーク424はソースデータ422の書き込みに対応するタイムスタンプである。行430に記憶されたデータは図1における目標データ121の1つの具体的な例であり、データマーク424は図1におけるデータマーク122の1つの具体的な例である。
【0035】
インデックス411と413は、行430に記憶されたデータ(例えば、ソースデータ422)に基づき、予め定義したルールによって生成される。インデックス411と413は、それぞれ対応するインデックスマーク412と414を含む。インデックス411を例とし、`Act_@type_15は、それが対象とする目標データに対して、「type」という属性に対応する属性値が「Act」であり、且つ該目標データが行キー15の行の中に記憶されることを示す。図4の例において、インデックス411と413は、ソースデータ422を書き込む時に生成され、そのため、データマーク424にマッチングするインデックスマークを含み、即ち、いずれもタイムスタンプT1である。インデックス411と413は図1における目標インデックス111の具体的な例であり、インデックスマーク412と414は図1におけるインデックスマーク112の具体的な例である。
【0036】
時間T2に、行430におけるデータが更新され、例えば「type」という属性の属性値が[“Act1”,“TVPlay1”]に修正される場合、データマーク424がタイムスタンプT2に更新される。同時に、`Act1_@type_15と`TVPlay1_@type_15などの新しいインデックスが生成され、且つこれらの2つの新しいインデックスに対応するインデックスマークがタイムスタンプT2に設定される。この場合、インデックス411と413は行430に記憶されたデータを示すことに適せず、且つインデックスマーク412と414もデータマーク424にマッチングしない。本開示の実施例において、データマークとインデックスマークはそれぞれデータトラストマークとインデックストラストマーク(トラストマーク(Trust Mark)と総称される場合がある)と称される。
【0037】
図4の例において、データマークとインデックスマークはタイムスタンプの形式を用いる。タイムスタンプは逓増するフィールドであり、且つデータが変化する時、タイムスタンプが変更されるため、データトラストマークとインデックストラストマークがマッチングしなくなり、したがってダーティインデックスの削除(又は消去)メカニズムをトリガーする。そのため、タイムスタンプをトラストマークとして使用することによって、データとインデックスの記憶バージョンを容易に識別することができる。
【0038】
さらに、予め定義した逓増数列などのほかの形式のデータマークとインデックスマークを用いることができる。例を挙げると、公差dの等差数列をトラストマークとして使用できる。データをデータベース101に最初に書き込む時、データマークをaに設定し、同時に、生成されたインデックスのインデックスマークもaとする。データが変更される時、データマークがdずつ逓増し、a+dになり、同時に生成された新しいインデックスのインデックスマークがa+dとされる。この場合、古いインデックスのインデックスマーク(値がaとされる)とデータマーク(a+d)が異なり、それらがマッチングしていないと判定される。他の例示として、公差2の等差数列をトラストマークとして使用できる。データをデータベース101に最初に書き込む時、データマークをbに設定し、同時に、生成されたインデックスのインデックスマークをb+1に設定する。データが変更される時、データマークが2ずつ逓増し、b+2になり、同時に生成された新しいインデックスのインデックスマークが(b+1)+2に設定される。
【0039】
図3図4の例において、データ及びそのインデックスが同一テーブルに記憶され、且つ、異なる列ファミリーで区別される。HBaseなどのデータベースに対して、指定された列ファミリーでデータを取得することができる。そのため、そのようなトラストマークの記憶設計は、その1つのメリットとして、データを取得すると同時に、列ファミリーにおける@trust列(即ち、トラストマーク)を取得し、予定以外のリクエストを追加する必要がない。本開示の実施例はデータ及びそのインデックスが異なるテーブルに記憶される場合にも適用されることを理解すべきである。
【0040】
一部の実施例において、d:@cnt列321におけるソースデータを容易に変更するために、s列ファミリー312は、d:@cnt列321におけるソースデータを変更するための1つ又は複数のフィールド(本明細書では介入フィールドとも称される)が記憶される1つ又は複数のs:@prop列324(図3を参照)を含んでもよい。この場合、最終的に出力したデータは、d列ファミリー311とs列ファミリー312を合併した後に生成された最終的なデータであり、同時に同じフィールドのデータはCF:sを基準とする。次に図5を参照して説明する。
【0041】
図5は図示した本開示の一部の実施例による介入フィールドの概略図500を示す。図5に示されたs:@type列524は、s:@prop列324の1つの具体的な実装であると認められ、それはソースデータ422の中の属性「type」の属性値を修正するか、或いはそれに介入することに用いられる。図に示されるように、介入フィールド501が[“Act2”,“TVPlay2”]である場合、最終的に出力する結果502はソースデータ422とは異なる。介入フィールドはソースデータよりも高い優先度を有する。
【0042】
そのような実施例において、インデックスマークはタイムスタンプ又は等差数列以外の所定マークをさらに含んでもよく、該所定マークは目標インデックスと目標データの相関性が不明確であることを示すことができる。例えば、所定マークは文字NULLであってもよい。例えば、ソースデータ422が更新されたが、介入フィールド501が更新されていない場合、生成したインデックスのインデックスマークが、NULLなどの所定マークに設定される。
【0043】
引き続き、図2を参照して説明する。ブロック230では、コンピューティングデバイス102は、インデックスマーク112とデータマーク122がマッチングするか否かを判定する。インデックスマーク112とデータマーク122が同じフォーマットのタイムスタンプである場合、インデックスマーク112とデータマーク122が同じであれば、それらがマッチングしていると判定され、インデックスマーク112とデータマーク122が異なれば、それらがマッチングしていないと判定される。インデックスマーク112とデータマーク122がいずれもタイムスタンプであるが、フォーマットが異なる場合、インデックスマーク112とデータマーク122が同じ時間を示すならば、それらがマッチングしていると判定され、インデックスマーク112とデータマーク122が異なる時間を示すならば、それらがマッチングしていないと判定される。
【0044】
インデックスマーク112とデータマーク122が前文に記載の公差dの等差数列を用いる場合、インデックスマーク112とデータマーク122が同じであれば、それらがマッチングしていると判定され、インデックスマーク112とデータマーク122が異なれば、それらがマッチングしていないと判定される。インデックスマーク112とデータマーク122が前文に記載の公差2の等差数列を用いる場合、インデックスマーク112がデータマーク122より1大きければ、それらがマッチングしていると判定され、そうでなければ、それらがマッチングしていないと判定される。
【0045】
前文に記載したようなインデックスマークがNULLなどの所定マークを含む実施例において、インデックスマーク112が所定マークであれば、インデックスマーク112とデータマーク122がマッチングしていないと判定される。
【0046】
ブロック230では、インデックスマーク112とデータマーク122がマッチングしていないと判定された場合、プロセス200はブロック240まで進む。ブロック240では、コンピューティングデバイス102は、目標インデックス111に関連付けられる動作を決定する。例えば、コンピューティングデバイス102は、目標インデックス111が削除されるべきか否かを判定するように、目標インデックス111を対象とする消去ロジック処理を実行することができる。次に、図6を参照してそのプロセスを説明する。
【0047】
ブロック230でインデックスマーク112とデータマーク122がマッチングしていると判定された場合、目標インデックス111と目標データ121が相関性を有することを意味し、目標データ121を示すことに用いられる。この場合、目標インデックス111及びそのインデックスマーク112が保持される。
【0048】
(ブロック210を参照して上述したように)プロセス200とデータクエリープロセスを合わせた実施例において、インデックスマーク112とデータマーク122がマッチングしていると判定された場合、コンピューティングデバイス102は目標データ121に基づいてクエリーリクエストに対する応答を提供することができる。例えば、コンピューティングデバイス102は目標データ121に基づいてクエリーの結果を確定し、クエリーの結果を提供してクエリーリクエストへの応答とすることができる。上記介入フィールドがない場合、コンピューティングデバイス102は目標データ121の対応する部分(例えば、ソースデータ422)をクエリーの結果として提供することができる。上記介入フィールド(例えば、介入フィールド501)がある場合、コンピューティングデバイス102はソースデータ422と介入フィールド501に基づいてクエリーの結果502(図5を参照)を確定し、クエリーの結果502をクエリーリクエストへの応答として提供することができる。
【0049】
以上、本開示の実施例によるインデックスを管理するプロセス200を説明した。この方式により、データマークとインデックスマークを利用して目標インデックスと目標データの間の相関性を示し、且つそれに基づいて目標インデックスが除去されるか否かを判定することができる。そのため、本開示の解決手段は、データベースインデックスを効果的に管理でき、したがって、後続の呼び出しに必要なタイムオーバヘッドを低減し、且つデータ読み取りの性能を高める。
【0050】
図6は、本開示の一部の実施例による目標インデックスに関連付けられる動作を決定するプロセス600のフローチャートを示す。プロセス600は、図1のコンピューティングデバイス102により実行され、図2におけるブロック240の1つの具体的な実装として認められる。
【0051】
インデックスマーク112とデータマーク122がマッチングしていないと判定された場合、ブロック610で、コンピューティングデバイス102は、目標データ121に関連付けられる1組のインデックスを生成する。コンピューティングデバイス102は目標データ121を解析し、目標インデックス111の生成と同じである所定ルールに基づいて該組のインデックスを生成することができる。例を挙げると、コンピューティングデバイス102は目標データ121を解析し、属性「type」について該組のインデックスを生成することができる。目標データ121がソースデータと介入フィールドを含む場合、該組のインデックスを生成する時、コンピューティングデバイス102は先にソースデータと介入フィールドを合併し、合併後のデータに基づいて該組のインデックスを生成する。
【0052】
ブロック620では、コンピューティングデバイス102はブロック610に生成した該組のインデックスが目標インデックス111を含むか否かを判定する。該組のインデックスが目標インデックス111を含む場合、目標インデックス111と目標データ121が関連することを意味し、プロセス600はブロック630まで進む。ブロック630では、コンピューティングデバイス102はデータマーク122に基づいてインデックスマーク112を修正することにより、インデックスマーク112とデータマーク122をマッチングさせる。例えば、トラストマークがタイムスタンプである場合、コンピューティングデバイス102はインデックスマーク112をデータマーク122と同じであるタイムスタンプに変更することができる。
【0053】
目標データ121がソースデータと介入フィールドを含む場合、インデックスマークはさらにNULLなどの所定マークであってもよい。そのため、一部の実施例において、コンピューティングデバイス102はインデックスマーク112が所定マークであるか否かを判定することができ、所定マークは目標インデックス111と目標データ121の相関性が不明確であることを示す。インデックスマーク112が所定マークであると判定された場合、コンピューティングデバイス102はインデックスマーク112をデータマーク122に変更することができる。
【0054】
(ブロック210を参照して上述したように)データクエリープロセスを合わせた実施例において、ブロック630では、コンピューティングデバイス102は目標データ121に基づいてクエリーへの応答を提供することができる。例えば、上記図2に説明したものと同様に、コンピューティングデバイス102は目標データ121に基づいてクエリーの結果を確定し、クエリーの結果をクエリーリクエストへの応答として提供することができる。
【0055】
コンピューティングデバイス102がブロック620で該組のインデックスに目標インデックス112が含まれないことを確定した場合、目標インデックス111は目標データ121をもはや示すべきではなく、即ち、目標インデックス111はクリーンアップすべきダーティインデックスになる。この場合、プロセス600はブロック640まで進行する。ブロック640では、コンピューティングデバイス102は目標インデックス111とインデックスマーク112を削除する。即ち、コンピューティングデバイス102はダーティインデックス消去動作を実行する。
【0056】
本明細書において、図6を参照しながら説明されたプロセス600は消去ロジック処理と称されてもよい。前文に記載したとおり、データクエリーのプロセス中、データマークとインデックスマークがマッチングしている場合、消去ロジック処理を実行せずに、クエリーの結果を直接提供することができる。これにより、主に従来のオンデマンド消去手段における2つの問題が解決された。1つは、クエリーを行う度にデータを解析する必要があること、もう1つは、クエリーを行う度に目標インデックスが目標データにより生成したインデックスの中にあるか否かを判断する必要があること、である。そのため、そのような実施例において、データマークとインデックスマークの使用により、データクエリーの効率とデータベースの読み取り性能を高めることができる。
【0057】
インデックスマークとデータマークを使用するために、コンピューティングデバイス102は、目標データ121に基づいて目標インデックス111とインデックスマーク112を生成する必要がある。目標データ121に介入フィールドが含まれていない場合、目標データ121をデータベース101に書き込もうとするか、或いは書き込んだと判定された場合、コンピューティングデバイス102は目標インデックス111とデータマーク122を生成し、生成したデータマーク122に基づいてインデックスマーク112を確定することができる。例えば、目標データ121がデータベース101に最初に書き込まれる時、或いは、目標データ121の更新がインデックスに関連するフィールド(インデックスの構成フィールド)に関わる時、目標インデックス111とデータマーク122を生成し、例えば、データマーク122は、最初に書き込むか或いは目標データ121を更新する時のタイムスタンプである。コンピューティングデバイス102は、その後、データマーク122に基づいてインデックスマーク112を修正することにより、両者をマッチングさせることができる。例えば、コンピューティングデバイス102は、インデックスマーク112をデータマーク122と同じであるタイムスタンプに設定することができる。
【0058】
次に、(図5に示されるように)目標データ121がソースデータとソースデータを修正するための介入フィールドとを含む場合を考慮する。目標インデックス111が目標データ121をデータベース101に最初に書き込む時に生成される場合、インデックスマーク112の設定は介入フィールドが含まれない場合と同じように、即ち、データマーク122にマッチングするように設定される。目標インデックス111が目標データ121を更新する時に生成される場合、更新されるのはソースデータであるか、介入フィールドであるかを考慮する必要がある。目標データ121のソースデータが更新されようとするか、或いはすでに更新されたと判定された場合、コンピューティングデバイス102は目標インデックス111(インデックスに関連するフィールドを更新する場合)を生成し、対応するインデックスマーク112をNULLなどの所定マークとして確定することができ、所定マークは、目標インデックス111と目標データ121の相関性が不明確であることを示す。それは、介入フィールドがソースデータよりも高い優先度を有し、ソースデータを更新する時に介入フィールドを読み取らないことが原因で、目標インデックスと目標データの間の相関性が不明確になってしまうためである。
【0059】
引き続き、図3図4及び図5における例を参照して、目標データにソースデータと介入フィールドの両部分が含まれる場合を説明する。データマークの更新は、d列ファミリー311とs列ファミリー312という2つの列ファミリーの更新に分けられる。(1)d列ファミリー311(即ちd:@cnt列321)を更新する時、即ち、ソースデータを更新する時、データマークを更新し、d列ファミリー311が元の加工データを保存するため、修正があればデータマークが必ず更新される。(2)s列ファミリー312を更新する時、更新されるフィールドがインデックスに関連するフィールドに含まれる時だけ、データマークが更新され、そうでなければ処理されない。図4における例に対して、更新されるフィールドが「type」フィールドに関連する時だけデータマークを更新し、更新されるフィールドが「name」である場合はデータマークを更新しない。
【0060】
インデックスマークの更新は以下の3種類の状況がある。(1)d列ファミリー311のデータ初期化が行われる時、データマークにマッチングされるインデックスマークを直接書き込む。(2)d列ファミリー311の更新によるインデックス書き込み(即ち、更新はインデックスに関連するフィールドに関わる)の場合、書き込み性能を高めるように、データを書き込む時に古いデータのs列ファミリー312を読み取って合併しなかったため、インデックスとデータの相関性が不明確になってしまい、そのため、生成したインデックスに対応するインデックスマークがNULLなどの所定マークに設定される。(3)s列ファミリー312の更新によるインデックスの書き込みの場合、更新されるフィールドはインデックスに関連するフィールドに関わり、インデックスマークをデータマークにマッチングするように設定し、そうでなければ処理しない。
【0061】
図7は本開示の実施例によるインデックスを管理するための装置700の概略ブロック図を示す。図7に示されるように、装置700は、データベースに格納されている目標データについての目標インデックスを確定するように構成されるインデックス確定モジュール710であって、目標インデックスは、目標インデックスの記憶バージョンを識別するための対応するインデックスマークを含む、インデックス確定モジュールと、目標インデックスに基づいて、データベースに記憶された目標データを取得するように構成されるデータ取得モジュール720であって、目標データは、目標データの記憶バージョンを識別するための対応するデータマークを含む、データ取得モジュールと、インデックスマークとデータマークがマッチングしていないと判定されたことに応答して、目標インデックスに関連付けられる動作を決定するように構成される動作決定モジュール730とを備える。
【0062】
一部の実施例において、動作決定モジュール730は、目標データに関連する1組のインデックスを生成するように構成されるデータ解析モジュールと、1組のインデックスが目標インデックスを含むか否かを判定するように構成されるインデックス判断モジュールと、1組のインデックスに目標インデックスが含まれることに応答して、インデックスマークとデータマークをマッチングさせるようにデータマークに基づいてインデックスマークを修正するように構成されるマーク修正モジュールとを備える。
【0063】
一部の実施例において、マーク修正モジュールは、インデックスマークが目標インデックスと目標データの相関性が不明確であることを示す所定マークであるか否かを判定するように構成されるマーク判定モジュールと、インデックスマークが所定マークであることに応答して、インデックスマークをデータマークに修正するように構成される所定修正モジュールとを備える。
【0064】
一部の実施例において、装置700は、1組のインデックスに目標インデックスが含まれないことに応答して、目標インデックスとインデックスマークを削除するように構成されるインデックス削除モジュールをさらに備える。
【0065】
一部の実施例において、インデックス確定モジュール710は、目標データを対象とするクエリーリクエストを受信するように構成されるリクエスト受信モジュールと、クエリーリクエストにおけるキーワードに基づいて、目標インデックスを確定するように構成される目標確定モジュールとを備える。
【0066】
一部の実施例において、装置700は、インデックスマークとデータマークがマッチングしていることに応答し、目標データに基づいて、クエリーの結果を確定するように構成される結果確定モジュールと、クエリーの結果をクエリーリクエストへの応答として提供するように構成される結果提供モジュールとをさらに備える。
【0067】
一部の実施例において、データ取得モジュール720は、目標インデックスに基づいて、目標データのデータベースにおける記憶位置を確定するように構成される位置確定モジュールと、記憶位置に基づいて、データベースから目標データを取得するように構成される目標取得モジュールとを備える。
【0068】
一部の実施例において、装置700は、目標データに基づいて、目標インデックスとインデックスマークを生成するように構成されるマーク生成モジュールをさらに備える。
【0069】
一部の実施例において、マーク生成モジュールは、目標データがデータベースに書き込まれるべきと判定されたことに応答して、目標インデックスとデータマークを生成するように構成される第1インデックス生成モジュールと、生成したデータマークに基づいてインデックスマークを確定するように構成されるインデックスマーク確定モジュールとを備える。
【0070】
一部の実施例において、目標データは、ソースデータとソースデータを修正するための介入フィールドとを含み、マーク生成モジュールは、目標データのソースデータが更新されるべきと判定されたことに応答して、目標インデックスを生成するように構成される第2インデックス生成モジュールと、インデックスマークを、目標インデックスと目標データの相関性が不明確であることを示す所定マークとして確定するように構成される所定マーク確定モジュールとを備える。
【0071】
図8は、本開示の実施例を実施できる例示的な設備800の概略ブロック図を示す。設備800は図1のコンピューティングデバイス102を実行することに用いられる。図に示されるように、設備800は中央処理装置(CPU)801を含み、それは、読み取り専用メモリ(ROM)802に格納されたコンピュータプログラム命令、又は記憶ユニット808からランダムアクセスメモリ(RAM)803にローディングされたコンピュータプログラム命令により、様々な適切な動作と処理を実行することができる。RAM803において、設備800の動作に必要な様々なプログラムとデータをさらに格納することができる。CPU801、ROM802及びRAM803はバス804を介して互いに接続される。入力/出力(I/O)インターフェース805もバス804に接続される。
【0072】
設備800において、キーボード、マウスなどの入力ユニット806、様々なタイプのディスプレー、スピーカなどの出力ユニット807、磁気ディスク、光ディスクなどの記憶ユニット808、及び、ネットワークカード、モデム、無線通信トランシーバーなどの通信ユニット809を備える複数のコンポーネントがI/Oインターフェース505に接続される。通信ユニット809は、設備800がインターネットなどのコンピュータネットワーク及び/又は様々な通信ネットワークを介してほかの設備と情報/データを交換することを許可する。
【0073】
処理ユニット801は、プロセス200及び600のいずれかなど、前文に記載の各方法及び処理を実行する。例えば、一部の実施例において、プロセス200及び600のいずれかはコンピュータソフトウェアプログラムとして実装され、それは記憶ユニット808などの機械可読媒体に具体的に包含される。一部の実施例において、コンピュータプログラムの一部又は全部はROM802及び/又は通信ユニット809によって設備800にローディング及び/又はインストールされる。コンピュータプログラムがRAM803にローディングされ、且つCPU801により実行される場合、前文に記載のプロセス200又は600の1つ又は複数のステップを実行することができる。必要に応じて、ほかの実施例において、CPU801は、ほかの任意の適切な方式(例えば、ファームウェア)により、プロセス200及び600のいずれかを実行するように構成される。
【0074】
本明細書において以上で記載した機能は少なくとも部分的に1つ又は複数のハードウェアロジックコンポーネントにより実行される。例えば、使用される例示的なハードウェアロジック部材には、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、特定用途向け標準部品(ASSP)、システムオンチップ(SOC)、コンプレックスプログラマブルロジックデバイス(CPLD)などが含まれるが、これらに限定されない。
【0075】
本開示の方法を実施するためのプログラムコードは、1つ又は複数のプログラミング言語のいずれかの組み合わせを用いて作成することができる。これらのプログラムコードは、汎用コンピュータ、専用コンピュータ又はその他のプログラマブルデータ処理装置のプロセッサ又はコントローラに提供され、それにより、プログラムコードがプロセッサ又はコントローラにより実行される時に、フローチャート及び/又はブロック図に規定された機能/動作を実施させる。プログラムコードは完全に或いは部分的に機器で実行され、独立したソフトウェアパッケージとして機器で部分的に実行され、部分的或いは完全に遠隔機器又はサーバで実行される。
【0076】
本開示の文脈により、機械可読媒体は、命令実行システム、装置又は設備に使用されるか、或いは命令実行システム、装置又は設備と合わせて使用されるプログラムを含むか、或いは格納することができる有形の媒体であってもよい。機械可読媒体は機械可読信号媒体又は機械可読記憶媒体であってもよい。機械可読媒体としては、電子、磁気、光学、電磁気、赤外線又は半導体システム、装置又は設備、又はこれらのあらゆる適切な組み合わせが挙げられるが、それらに限定されない。機械可読記憶媒体のさらに具体的な例として、1本又は複数のケーブルに基づく電気的接続、ポータブルコンピュータディスク、ハードディスク、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROM又はフラッシュメモリ)、光ファイバ、ポータブルCD読み取り専用メモリ(CD−ROM)、光記憶装置、磁気記憶設備、又はこれらのあらゆる適切な組み合わせが挙げられる。
【0077】
また、特定順序により各動作を説明したが、これらの動作を示された特定順序や順番で実行することが要求されるか、或いは、期待されている結果を取得できるように、すべての図示された動作が実行されることが要求されることを理解すべきである。一定の環境において、マルチタスクと並列処理が有利である場合がある。同様に、前文の説明に複数の具体的な実装の詳細が含まれているが、これらは本開示の範囲を制限するものとして解釈すべきではない。単独的な実施例の文脈に記載した一部の特徴はさらに組み合わせて単一の実装に実装することができる。逆に、単独的な実装の文脈に記載した様々な特徴を、単独的に、或いはあらゆる適切な組み合わせの方式で複数の実装に実装することができる。
【0078】
構造の特徴及び/又は方法のロジック動作の特定言語で本テーマを説明したが、添付した特許請求の範囲に規定されたテーマは前文に記載した特定の特徴又は動作に制限されないことを理解すべきである。むしろ、前文に記載した特定の特徴と動作は特許請求の範囲を実装するための例示的な形態にすぎない。

図1
図2
図3
図4
図5
図6
図7
図8