(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-07-14
(45)【発行日】2022-07-25
(54)【発明の名称】構造化レコード取得
(51)【国際特許分類】
G06F 16/22 20190101AFI20220715BHJP
G06F 16/28 20190101ALI20220715BHJP
【FI】
G06F16/22
G06F16/28
(21)【出願番号】P 2021500940
(86)(22)【出願日】2019-07-25
(86)【国際出願番号】 US2019043387
(87)【国際公開番号】W WO2020023719
(87)【国際公開日】2020-01-30
【審査請求日】2021-02-26
(32)【優先日】2018-07-25
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100107984
【氏名又は名称】廣田 雅紀
(74)【代理人】
【識別番号】100182305
【氏名又は名称】廣田 鉄平
(74)【代理人】
【識別番号】100096482
【氏名又は名称】東海 裕作
(74)【代理人】
【識別番号】100131093
【氏名又は名称】堀内 真
(74)【代理人】
【識別番号】100150902
【氏名又は名称】山内 正子
(74)【代理人】
【識別番号】100141391
【氏名又は名称】園元 修一
(74)【代理人】
【識別番号】100198074
【氏名又は名称】山村 昭裕
(74)【代理人】
【識別番号】100221958
【氏名又は名称】篠田 真希恵
(72)【発明者】
【氏名】イカイ タロウ
【審査官】吉田 誠
(56)【参考文献】
【文献】特開2018-045285(JP,A)
【文献】米国特許出願公開第2018/0046655(US,A1)
【文献】米国特許出願公開第2002/0010714(US,A1)
【文献】米国特許第06421662(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
複数の構造化レコードを保存するデータストアにおけるレコードを見つけるための
、ソフトウェア命令及びデータレコードを保存するために少なくとも1つのストレージデバイスに接続された少なくとも1つのプロセッサを備えるプログラム可能なコンピューティングシステムで実行される方法であって、
前記ソフトウェア命令を実行する前記プログラム可能なコンピューティングシステムによって、前記データストアに保存されている前記複数の構造化レコードにアクセスするステップであって、前記複数の構造化レコードの少なくともいくつかのレコードがそれぞれ、それぞれのレコードの複数のセグメントを含み、それぞれのレコードの前記複数のセグメントの各セグメントが、セグメントのネスト化階層における位置を有し、それぞれのレコードの前記複数のセグメントの少なくともいくつかのセグメントが、1又は2以上の対応する値に関連付けられている、前記複数の構造化レコードにアクセスするステップと、
前記ソフトウェア命令を実行する前記プログラム可能なコンピューティングシステムによって、前記複数の構造化レコードをインデックス化するステップであって、
前記ソフトウェア命令を実行する前記プログラム可能なコンピューティングシステムによって、インデックスデータ構造を形成するステップであって、前記インデックスデータ構造が、前記複数の構造化レコードのレコードを複数のキーに関連付け、各キーが、セグメント及びセグメントの前記ネスト化階層における前記セグメントの位置に対応する値を含み、各キーが、前記キーを関連するレコードに関連付ける対応する指標に関連付けられている、前記インデックスデータ構造を形成するステップと、
前記インデックスデータ構造において、
前記ソフトウェア命令を実行する前記プログラム可能なコンピューティングシステムによって、前記複数の構造化レコードの少なくともいくつかの各レコードを対応する1又は2以上のキーに関連付けるステップであって、第1のレコードを第1のキーに関連付けるステップが、前記第1のレコードを解析して、前記第1のレコードの第1のセグメントに対応するとともにセグメントの前記ネスト化階層における前記第1のセグメントの第1の位置に対応する第1の値を識別するステップと、前記第1の値及び前記第1の位置を含む前記第1のキーに関連付けられた前記インデックスデータ構造における特定の指標を更新して、前記第1のレコードを識別するステップと、を含む、前記複数の構造化レコードの少なくともいくつかの各レコードを対応する1又は2以上のキーに関連付けるステップと、
を含む、前記複数の構造化レコードをインデックス化するステップと、
前記ソフトウェア命令を実行する前記プログラム可能なコンピューティングシステムによって、クエリを処理して、前記インデックスデータ構造を用いて前記クエリに一致する前記複数の構造化レコードのレコードを取得するステップであって、
第1のクエリ位置及び第1のクエリ値を表す少なくとも第1のキーを含む1又は2以上のキーのセットを決定するステップを含む、
前記ソフトウェア命令を実行する前記プログラム可能なコンピューティングシステムによって、前記クエリを処理するステップと、
前記ソフトウェア命令を実行する前記プログラム可能なコンピューティングシステムによって、前記クエリに一致する前記複数の構造化レコードの指標を決定するステップであって、前記第1のキーに基づいて前記インデックスデータ構造から第1の指標を取得するステップと、前記第1の指標に基づいて前記複数の構造化レコードの前記指標を決定するステップと、を含む、前記複数の構造化レコードの指標を決定するステップと、
前記ソフトウェア命令を実行する前記プログラム可能なコンピューティングシステムによって、前記指標に従って前記データストアから前記複数の構造化レコードの
サブセットを取得するステップと
を含む、前記複数の構造化レコードのレコードを取得するステップと
を含む、前記方法。
【請求項2】
前記構造化レコードにアクセスするステップが、前記データストアから前記構造化レコードを受信するステップを含み、
前記構造化レコードをインデックス化するステップが、インデックス化後に前記データストアのコピーを維持することなく実行される、請求項1に記載の方法。
【請求項3】
前記構造化レコードにアクセスするステップが、
前記構造化レコードを受信するステップと、
前記構造化レコードを、受信されたレコードのフォーマットで、又は圧縮フォーマットで、前記データストアに保存するステップと
を含み、
前記構造化レコードの前記インデックス化は、前記データストアの表形式表現を形成することを必要としない、請求項1に記載の方法。
【請求項4】
セグメントの前記ネスト化階層が、セグメントの文法を用いて表され、
前記第1のレコードを解析するステップが、前記文法を用いて、前記第1のレコード内のセグメントのネスティングに従って前記第1の位置を識別するステップを含む、請求項1~3のいずれかに記載の方法。
【請求項5】
セグメントのネスト化階層におけるセグメントの各個別の位置が、異なる番号によって表される、請求項1~4のいずれかに記載の方法。
【請求項6】
各指標が、対応するキーに関連付けられ、前記キーに関連付けられた前記複数のレコードの1又は2以上のレコードのビットベクトル表現を含む、請求項1~5のいずれかに記載の方法。
【請求項7】
前記複数のキーの各キーについて、前記ネスト化階層における位置が、前記ネスト化階層におけるパスとして表される、請求項1~6のいずれかに記載の方法。
【請求項8】
前記複数のキーの各キーについて、前記ネスト化階層における位置が数値識別子として表される、請求項1~6のいずれかに記載の方法。
【請求項9】
1又は2以上のキーの前記セットが、第2のクエリ値及び第2のクエリ位置を含む第2のキーを含み、
前記複数の構造化レコードの前記指標を決定するステップが、前記第2のキーに基づいて前記インデックスデータ構造から第2の指標を取得するステップをさらに含み、
前記複数のレコードの前記サブセットの前記指標を決定するステップがさらに前記第2の指標に基づく、請求項1~8のいずれかに記載の方法。
【請求項10】
前記クエリが、前記第1のキーに関連付けられた第1の用語及び前記第2のキーに関連付けられた第2の用語を含む、用語のブーリアン結合を定義し、
前記複数のレコードの前記サブセットの前記指標を決定するステップが、前記第1の指標と前記第2の指標のブーリアン結合に基づく、請求項9に記載の方法。
【請求項11】
レコードの少なくともいくつかのセグメントが、1より多くの対応する値に関連付けられ、各値がセグメントにおいて異なるオフセットを有し、前記クエリが、セグメントに関連付けられた複数の値内のオフセットを表すオフセットをさらに含む、請求項1~10のいずれかに記載の方法。
【請求項12】
前記オフセットが前記セグメントの成分を識別する、請求項11に記載の方法。
【請求項13】
前記オフセットが前記セグメント内の値をさらに識別する、請求項12に記載の方法。
【請求項14】
前記オフセットが、前記セグメントの成分の列挙への数値参照として前記成分を識別し、前記オフセットが、前記成分における値の列挙への数値参照として前記セグメント内の前記値を識別する、請求項13に記載の方法。
【請求項15】
前記構造化レコードが、許容されるレコードのセット及びセグメントの前記ネスト化階層を定義する仕様に準拠し、
前記仕様が、事前定義されたセグメントのネスト化階層における、個別のネスト化コンテキストのそれぞれの識別子を含み;かつ
前記クエリを処理するステップが、
クエリセグメント、及びセグメントの前記ネスト化階層の他のセグメント内の前記クエリセグメントのネスティングを指定する第1のクエリコンテキストを識別する少なくとも前記第1のキーを含み、かつ第1のクエリ値を含む、前記1又は2以上のキーのセットを決定することを含む、前記クエリを処理することを含む、請求項1に記載の方法。
【請求項16】
コンピュータ可読媒体上に非一時的な形式で保存されたソフトウェアであって、請求項1~
15のいずれかのすべてのステップをコンピューティングシステムに実行させるための命令を含む、ソフトウェア。
【請求項17】
クエリに一致するデータストアにおける複数の構造化レコードのレコードを見つけるためのコンピューティングシステムであって、請求項1~
15のいずれかのすべてのステップを実行するように構成されている、コンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本願は、2018年7月25日に出願された米国仮出願第62/702,992号の利益を主張するものであり、この出願を、参照により本明細書に組み込む。
【背景技術】
【0002】
この説明は、構造化レコードの取得に関し、より具体的には、任意選択部分の階層構造を備えたレコードのインデックス化、及びインデックス化に基づくこのようなレコードの取得に関する。
【0003】
いくつかの用途では、レコードは、送信又は保存のための簡潔な形式を提供するということを契機にしてフォーマットされる。いくつかの例において、このようなメッセージのための規格は何年も前に確立されており、業界の慣行に定着している。このような簡潔な形式の一例が、行政、商業及び輸送のための電子データ交換(EDIFACT,Electronic Data Interchange for Administration, Commerce and Transport)によって定義されており、その構文は国際規格ISO9735(1988)において定義されている。この規格の使用が定着している業界の一例が航空業界であり、ここでは予約関連データの送信及び保存にEDIFACT構文を用いている。
【0004】
各EDIFACTレコードは「メッセージ」と呼ばれる。メッセージは、一般に、メッセージの定義された部分内の順番付けられたセグメントの集まりで作成される。いくつかのセグメントを、メッセージの1より多くの部分において用いることができる。各部分において用いることができる(条件)又は用いねばならない(必須)セグメント、及びセグメントの許可された繰り返しの数は、特定の用途用に定義されている。いくつかの用途において、セグメントの集まりがグループとして繰り返し、グループと呼ばれる。セグメント及び/又はグループはネストすることができる。各セグメントには名前が付けられる(EDIFACTセグメント名は3文字の英数字である)。各セグメントは1又は2以上の要素を有し、これは単一の値を備えた単純要素であってもよく、又はこれは複合要素であってもよい。複合要素は、2又は3以上の区切られた値からなる。セグメント内及び複合体内の要素は明示的に区切られ(例えば、別個の区切られた文字(例えば、「+」及び「:」で)、各セグメントは明示的に終了する(例えば、終端文字「´」で)。
【0005】
データベースシステムにはデータが表形式で保存されることが多く、各行が1つのレコードに対応し、各列が個別のフィールドに関連付けられ、これはこのフィールドがレコードにおいて任意選択であれば空となり得る。多くの可能であるが任意選択のフィールドがあれば、レコードの列の多くが空(例えば、Null)となり得る。効率的なインデックス化アプローチ、例えば、表の列における値に基づいて条件(例えば、クエリ)を満たすレコードの取得を可能にする1又は2以上の列についてインデックスを形成することが、このようなデータベースシステムに利用可能である。
【発明の概要】
【課題を解決するための手段】
【0006】
全般的な態様において、構造化レコード取得に対するアプローチにより、レコードを表形式で解釈及び保存することを必要とすることなく、本来の簡潔なフォーマットでレコードを送信及び保存することが可能になる。表形式(例えば、「フラット」又はリレーショナルデータベース)でのレコードのこのような保存により、2倍のスペースが必要とされるかもしれず、より一般的には、多くの任意選択要素がある用途において実質的により多くのスペースが必要とされる。いくつかの実施形態において、各メッセージは、メッセージ構造の仕様に従って(例えば、メッセージについての「文法」に従って)解析される構造化レコードを含み、解析中、その構造における事前定義された位置におけるフィールド値が抽出され、レコード識別子を(位置,値)ペアに関連付けるインデックス構造に追加される。いくつかの例において、各(位置,値)ペアは、指定された位置でその値を有するレコードに対応するビットが設定されているビットベクトルに関連付けられたキーとして用いられる。特定の位置において指定された値を備えたレコードの取得は、取得されたビットベクトルを用いて、本来のフォーマットで保存された元のレコードを識別してこれにアクセスする。指定されたフィールドにおける値についてのブーリアンクエリを満たすレコードの取得は、クエリを満たすレコードの識別及びこれへのアクセスの前に、ブーリアンクエリの異なる部分(例えば、用語)に関連付けられたビットベクトルのブーリアン結合を用いることができる。
【0007】
一態様において、概して、ある方法が、複数の構造化レコード(又はこのような構造化レコードを含むメッセージ)を保存するデータストアにおけるレコードを見つけることを対象としている。データストアに保存されている複数の構造化レコードにアクセスする。アクセスされる複数の構造化レコードの少なくともいくつかのレコードはそれぞれ、それぞれのレコードの複数のセグメントを含み、それぞれのレコードの複数のセグメントの各セグメントは、セグメントのネスト化階層における位置(例えば、コンテキストの場所)を有する。レコードの複数のセグメントの少なくともいくつかのセグメントは、1又は2以上の対応する値に関連付けられている。複数の構造化レコードはインデックス化される。このインデックス化は、複数の構造化レコードのレコードを複数のキーに関連付けるインデックスデータ構造を形成するステップを含む。各キーは、セグメント及びセグメントのネスト化階層におけるそのセグメントの位置に対応する値を含む。インデックスにおける各キーは、キーを関連するレコードに関連付ける対応する指標に関連付けられている。インデックスデータ構造において、複数の構造化レコードの少なくともいくつかの各レコードは、対応する1又は2以上のキーに関連付けられている。第1のレコードを第1のキーに関連付けるステップは、第1のレコードを解析して、第1のレコードの第1のセグメントに対応するとともにセグメントのネスト化階層における第1のセグメントの第1の位置に対応する第1の値を識別するステップと、第1の値及び第1の位置を含む第1のキーに関連付けられたインデックスデータ構造における特定の指標を更新するステップと、を含む。クエリを処理して、インデックスデータ構造を用いてクエリに一致する複数の構造化レコードのレコードを取得する。この処理は、クエリを処理して、少なくとも第1のキーを含む1又は2以上のキーのセットを決定するステップを含む。第1のキーは、第1のクエリ値及び第1のクエリ位置を含む。クエリに一致する複数の構造化レコードのサブセットの指標が決定される。この指標の決定は、第1のキーに基づいてインデックスデータ構造から第1の指標を取得するステップと、第1の指標に基づいて複数の構造化レコードの指標を決定するステップと、を含む。データストアからの複数の構造化レコードのサブセットは、この指標に従って取得される(又は取得されるようにもたらされる)。
【0008】
いくつかの態様が次の特徴の1又は2以上を含むことができる。
【0009】
構造化レコードにアクセスするステップは、データストアから構造化レコードを受信するステップを含み、構造化レコードのインデックス化は、インデックス化後にデータストアのコピーを維持することなく実行される。例えば、レコードは、インデックス化及び取得という目的のためにローカルフラット又はリレーショナルデータベースに取り込まなくてもよい。このアプローチの利点は、構造化レコードが受信されたデータストア以外に、インデックス化及び取得という目的のために構造化レコードの永続的又は長期的なコピーを維持する必要がないということである。必要とされるストレージが少なくなり、ローカルコピーとデータストアとの間に不整合を有する可能性が減少し得るため、これは利点となり得る。
【0010】
構造化レコードにアクセスするステップは、構造化レコードを受信するステップと、構造化レコードを、受信されたレコードのフォーマットで、又は圧縮フォーマットで保存するステップと、を含む。構造化レコードのインデックス化には、データストアの表形式表現を形成することが必要とされない。特徴の利点は、構造化レコードのストレージが、少なくともそれらが受信された形式と同じくらいコンパクトであるということである。
【0011】
セグメントのネスト化階層は、セグメントの文法を用いて、例えば、句構造化文法及び/又はBNF文法を用いて表される。
【0012】
第1のレコードを解析するステップは、この文法を用いて、第1のレコード内のセグメントのネスティングに従って第1の位置を識別するステップを含む。
【0013】
セグメントのネスト化階層におけるセグメントの各個別の位置は、異なる番号によって表される。
【0014】
対応するキーに関連付けられた各指標は、そのキーに関連付けられた複数のレコードの1又は2以上のレコードのビットベクトル表現を含む。
【0015】
複数のキーの各キーについて、ネスト化階層における位置は、ネスト化階層におけるパスとして表される。或いは、ネスト化階層における位置は数値識別子として表される。或いは、ネスト化階層における位置はタプルとして表される。
【0016】
クエリは、第2のクエリ値及び第2のクエリ位置を含む第2のキーをさらに含み、複数の構造化レコードの指標を決定するステップは、第2のキーに基づいてインデックスデータ構造から第2の指標を取得するステップをさらに含む。複数のレコードのサブセットの指標の決定は、さらに第2の指標に基づく。
【0017】
クエリは、第1のキーに関連付けられた第1の用語及び第2のキーに関連付けられた第2の用語を含む、用語のブーリアン結合を定義し、複数のレコードのサブセットの決定は、第1の指標と第2の指標のブーリアン結合に基づく(例えば、ビットベクトル指標のビット単位のブーリアン結合として)。
【0018】
レコードの少なくともいくつかのセグメントは、1より多くの対応する値に関連付けられ、各値がセグメントにおいて異なるオフセットを有し、クエリは、セグメントに関連付けられた複数の値内のオフセットを表すオフセットをさらに含む。
【0019】
オフセットは、セグメントの成分を識別する。
【0020】
オフセットは、セグメント内の値をさらに識別する。
【0021】
オフセットは、セグメントの成分の列挙への数値参照として成分を識別し、オフセットは、成分における値の列挙への数値参照としてセグメント内の値を識別する。
【0022】
他の一態様において、概して、コンピュータ可読媒体上に非一時的な形式で保存されたソフトウェアが、上記の方法のいずれか1つのすべてのステップをコンピューティングシステムに実行させるための命令を含む。
【0023】
他の一態様において、概して、クエリに一致するデータストアにおける複数の構造化レコードのレコードを見つけるためのコンピューティングシステムが、上記の方法のいずれか1つのすべてのステップを実行するように構成されている。
【0024】
さらに他の一態様において、概して、データ構造が、非一時的な機械可読媒体に保存される。このデータ構造は、複数の構造化レコードを保持するデータストアに関連付けられたセグメントのネスト化階層の表現を含み、複数の構造化レコードの少なくともいくつかのレコードはそれぞれ、レコードの複数のセグメントを含む。データ構造は、複数の構造化レコードのレコードを複数のキーに関連付けるインデックスデータ構造をさらに含み、各キーは、セグメント及びデータストアに関連付けられたネスト化階層における位置に対応する値を含み、各キーは、そのキーをキーに関連付けられたレコードに関連付ける対応する指標に関連付けられている。このデータ構造は、データストアからのデータ取得のためのシステムに機能性を付与するために用いることができる。
【0025】
さらに他の一態様において、概して、コンピュータメモリのためのデータ取得のためのシステムが、セグメントのネスト化階層の表現及びインデックスデータ構造に従って上記メモリを構成するための手段を含む。セグメントのネスト化階層の表現は、複数の構造化レコードを保持するデータストアに関連付けられ、複数の構造化レコードの少なくともいくつかのレコードはそれぞれ、レコードの複数のセグメントを含む。インデックスデータ構造は、複数の構造化レコードのレコードを複数のキーに関連付け、各キーは、セグメント及びデータストアに関連付けられたネスト化階層における位置に対応する値を含み、各キーは、そのキーをキーに関連付けられたレコードに関連付ける対応する指標に関連付けられている。
【0026】
いくつかの態様が次の利点の1又は2以上を含むことができる。
【0027】
値の位置的コンテキストに基づくインデックスの形成により、レコードのデータベースを従来の表形式で保存することを必要とすることなく、取得したいレコードの識別に対する時間及びスペースの効率的なアプローチが提供される。表形式への変換なしで、データのコンパクトなストレージが維持される一方、それにもかかわらず、所望のレコードを識別する時間効率の良いクエリの実行が提供される。クエリを処理するために次いで用いられる、インデックスの事前計算は、少なくともいくつかの実施形態において、インデックス構造を再構築する必要なく、レコードがデータストアに追加されると更新することができる。
【0028】
本発明の他の特徴及び利点が、次の説明から、及び請求項から明らかになるであろう。
【図面の簡単な説明】
【0029】
【
図2】
図1のパーサ/インデクサを示すブロック図である。
【
図3】メッセージ処理の第1の例示的な一例である。
【
図4】メッセージ処理の第2の例示的な一例である。
【
図5】
図3及び4のメッセージを処理した後のインデックスストアの図である。
【
図7】EDIFACTベースの文法の一部の図である。
【発明を実施するための形態】
【0030】
図1を参照すると、保存及び取得システム100がメッセージストア120を含み、これはメッセージ112(集合的に入力メッセージ110)を保存するために用いられる。例えば、メッセージストアは、メッセージ112が保持される集中型又は分散型の電子データストレージ機能を含むことができる。各メッセージは構造化レコードを含む。以下の議論において、メッセージストア120はデータストアと呼ばれることもあり、これはメッセージに対応する構造レコードを保存する。いくつかの例において、メッセージストアは、データ通信リンクを介して(例えば、コンピュータネットワークを介して)複数のソースからメッセージを受信し、データ処理システムによるアクセスのために各メッセージのコピーを保持する。通常、システム100の1つの機能は、ユーザ150(又は同等に自動化データ処理システム)に、コンテンツベースのクエリを満たすストア120におけるあらゆるメッセージを要求して、ユーザのためにストア120からのこれらのメッセージを識別してこれらにアクセスし、例えばユーザへの応答としてこれらのメッセージを提供する能力を提供することである。
【0031】
いかなる特定の用途に限定されることなく、一例において、メッセージ112は、EDIFACTメッセージの形式である。EDIFACT規格(ISO9735(1988))によれば、各メッセージは、これを表すために用いられるバイト又は文字数、並びに各メッセージにおいて表される基本データ要素(例えば、数字、文字、文字列)の数の両方において、可変のサイズを有することができる。データメッセージは、メッセージのセクション内で1より多くの基本データ要素を組み合わせることができる階層構文を有し、これらのセクション自体をネストすることができる。EDIFACTメッセージの特定の文脈において、これらのセクションはセグメントと呼ばれることがあり、基本データ要素は複数の要素の複合体を形成することができ、セグメントの集まりはグループを形成することができ、これはそれ自体がメッセージの階層構造に含まれ得る。
【0032】
より具体的な用途として、再度この用途に限定されるように意図されることなく、このアプローチは、例えば航空会社の予約処理を含むフライト旅行情報処理に適用される。この文脈において、特定の飛行機で特定の時間に旅行する特定の個人に関連する各旅行は、一般に複数のメッセージに関連しているであろう。例えば、同じ旅行に、予約に関連するメッセージ、食事の要求に関連する他のメッセージ、飛行機の乗客の搭乗に関連する他のメッセージなどがあり得る。旅行情報処理における様々な機能には、個人(例えば、旅行代理店)及び自動化システム(例えば、旅行者に情報アクセスを提供するWebベースのアプリケーション)、並びに定期的にメッセージにアクセスする必要があり得るデータ処理システム(例えば、支払い処理システム、旅行特典プログラムなど)の両方によって、様々なタイプのクエリが必要とされ得る。
【0033】
図1に戻ると、メッセージ112は、ストア120にレコード122として保存される。これらのレコードは、入力メッセージと同じフォーマットを有するか、或いは、例えば、メッセージの圧縮を通してサイズを減少させることができる、メッセージの直接変換であるフォーマットを有する。いずれの場合も、一般に、レコードの要素(例えば、基本値)は、行及び列の表配置にあるかもしれないため、メッセージ内の固定された場所にはない。
【0034】
上で紹介したように、入力メッセージは、様々な階層構造を備えた、様々なコンテンツを有することができる。結果として、メッセージの要素が多くの異なるコンテキストにおいて生じる可能性がある。例えば、数百、数千、又はより多くの異なるコンテキストがあり得る。各コンテキストが表の異なる列に関連付けられた表配置が用いられたら、いかなる特定のレコードも比較的小さな数のコンテキストのみからの要素を有するため、表におけるほとんどのエントリが用いられない(すなわち、ヌル又は空)という結果になるだろう。
【0035】
保存されたレコード122のフォーマットにかかわらず、システム100は、インデックス化ベースのデータアクセス能力を提供する。この能力をサポートするため、システム100はインデックスストア140を含み、これは通常、メッセージストア120に保存されたメッセージに関連するインデックス情報を保存する。
【0036】
このシステムは、データストアのメッセージを、パーサ/インデクサ130を用いてインデックス化し、これは、各メッセージ112がメッセージストア120に到着すると(又はここへの通信パス上で)これをスキャンするか、或いは、各入力メッセージに対応する各レコード122がストア120に到着した後、これをスキャンし、インデックスストア140におけるインデックスデータを更新する。インデックスストア140は、それぞれが一意の(位置,値)ペアを表すキー間のマッピング、及びそのキーに一致するメッセージのセットの表現を提供する。
【0037】
動作中、通常インデックスストア140を形成した後、ユーザ150がクエリ152を提供し、これはルックアップコンポーネント160に渡される。ルックアップコンポーネントは、インデックスストア140におけるインデックスデータにアクセスして、クエリに一致するレコードの表現(例えば、リスト又はビットベクトル)を決定する。これ又は同等の表現は、レトリーバ170に渡され、これは要求172をメッセージストア120に渡し、かわりにメッセージストアから対応するメッセージ174を受信する。レトリーバ170はこれらのメッセージをユーザ150に、例えば、クエリ152を満たすメッセージをメッセージ112と同じフォーマットで含む結果180として束ねて提供する。或いは、レトリーバは、メッセージが利用可能になると、これらをユーザに送り、又はさらなる他の代替案において、要求されたメッセージをユーザに直接送るようにメッセージストアに指示する。
【0038】
インデックスストア140におけるインデックスデータは、レコードのセット142に配置される。各レコードは、要素の「位置」、及びその要素の値(すなわち、値のペア)を含むキーに関連付けられ、メッセージにおける指定された位置において指定された値を有するレコード122の場所の表現を有する。要素の位置は、要素のタイプ、並びにシステムが用いられている用途についての可能なメッセージのセット内の特定の階層コンテキストの両方を一意に識別する。例えば、旅行情報処理用途において、いくつかのメッセージは予約に関連するセクションを有する。予約についてのこのようなセクション内で、いくつかの予約は乗客に関連するセクションを有し、いくつかの予約は旅行代理店に関連するセクションを有することがある。乗客についてのセクションは住所についてのセクションを含むことがあり、これは次には、番地と通りについてのセクション、例えば「1 Main Street」を含むことがある。旅行代理店についてのセクションは住所についてのセクションを含むことがあり、これも番地と通りについてのセクション、例えば、「1 Commercial Way」を含むことがある。この簡略化された例において、住所セクションの構造は、それが乗客セクションの一部であるか、又は旅行代理店セクションの一部であるかに関係なく同じであることがある。しかしながら、予約-乗客-住所のコンテキストにおける住所は、予約-代理店-住所のコンテキストにおける住所とは異なる「位置」を有する。以下で説明するように、クエリすることができる要素のすべての可能なコンテキストには、その用途についての有効なメッセージ構造の仕様から決定される一意の識別子(例えば、整数)が割り当てられる。例えば、予約-乗客-住所のコンテキストについての住所には位置値158を割り当てることができる一方、予約-代理店-住所のコンテキストについての住所には位置値247を割り当てることができる。これらの値は、様々な方法で、例えば、インデックスエントリが所望されるコンテキストのセットの列挙において順番に、或いは、異なる入力コンテキストについて一意の番号を通常提供する関数を通してコンテキストが整数に変換されるハッシュ関数アプローチに基づいて、割り当てることができる。
【0039】
レコード122の場所の様々なタイプの表現を用いることができる。コンパクトなストレージを提供する1つの実装形態において、表現は、対応する(位置,値)キーに関連するインデックスレコードが、各一致するレコードについて設定された1つのビットを備えたビットベクトルを有し、そのビットがメッセージストアにおけるレコード122の場所に関連する位置に設定されているビットベクトルである。例えば、レコード1003でのメッセージが位置及び値に一致すれば、そのインデックスレコード142についてのビットベクトルの1003番目のビットが設定される。いくつかの実施形態において、ビットベクトルは、例えば、ゼロのランがランの長さの数に圧縮されるランレングスコーディングアプローチで、又は他の一例として、設定されたビットに対応する位置の順序付きリストを用いて圧縮される。いずれの場合も、様々な実施形態において、インデックスストア140は、(位置,値)キー(例えば、位置=175,値=「1 Main St.」)から、識別子175が割り当てられた位置(すなわち、コンテキスト)でのレコードにおいてその値が生じるレコードの表現への効率的なマッピングを提供するデータ構造を含む。
【0040】
図2を参照すると、パーサ/インデクサ130(
図1で紹介した)の一実装形態が、メッセージのための文法212を利用する。概して、この文法は、許容されるメッセージのセットを定義する機能を果たし、特に、メッセージにおいて表されるセグメント、グループ、複合体、及び基本要素の許容されるネスティングのセットを定義する。いくつかの例において、この文法は、メッセージの一部(例えば、非終端部分、名前付きセグメントなど)の変換(例えば、「書き換え」)を非終端記号、セグメント、要素などの可能なシーケンスとして表現することができる句構造化文法として表すことができる。例えば、このような文法は、バッカスナウア形式(BNF,Backus-Naur Form)に類似した形式で表現することができる。特定の用途についてのメッセージは、文脈自由及び文脈依存言語を含む、文法の様々な部類内でシーケンスを形成することができる。しかしながら、本明細書に記載のアプローチは、いかなる特定の形式の文法又はメッセージ「言語」に限定されないということが理解されるべきである。
【0041】
文法の第2の機能は、メッセージの分析(すなわち、解析)における各要素の位置を、すべてのメッセージの可能な解析のスペースにおけるその要素の位置インデックスに関連付けることである。一般に、メッセージの完全な解析は1つしかないため、解析のプロセスは決定論的であり、メッセージにおける各要素は、文法の1つの可能なフレーズコンテキストにのみ関連付けられる。例えば、文法の一部に位置インデックスをタグ付けすることができ、又は位置インデックスを備えた要素のコンテキストに一致する別個の表(例えば、列挙又はハッシュテーブル)があり得る。上で紹介したように、これは、予約メッセージのコンテキストにおける乗客情報のコンテキストにおける番地と通りである要素は、メッセージに他の情報があるかどうかにかかわらず、同じ位置インデックスを有することになり、異なるコンテキストにおけるその同じ要素とは異なる位置インデックスを有することになるということを意味する。
【0042】
引き続き
図2を参照すると、文法212は、パーサ214が多くの異なる用途についての、例えば、EDIFACTフォーマットを用いる多くの異なる用途についてのメッセージに対して汎用的であり得るという意味で、パーサ214に機能性を与えるが、文法212は、文法212が指定されている用途についてのあらゆる特定のメッセージ122を処理するのに必要とされる具体的な機能性を与える。概して、例示的な例の文脈において以下でさらに議論するように、パーサ214は、解析ツリー416であると見なすことができるものを生成し、これはメッセージの構成要素及びそれらの相互のネスティングを識別し、メッセージの部分(又はその部分の値)は、構成要素のそれぞれ(又は少なくともそれらの中にさらなるネスティングを有さず、したがってメッセージの基本要素である終端構成要素)に対応する。上で紹介したように、構成要素は、これらのグローバルに一意の位置インデックスに関連付けられ、これは、文法212でエンコードされている可能性があり、又はメッセージの構成要素のネストされたコンテキストに基づいて解析ツリーが構築された後に決定することができる。後者の場合、インデックス化されるべき各構成要素について、その構成要素のコンテキストは、そのコンテキストを位置インデックスにマップする、文法の表において検索することができる。
【0043】
パーサ214の出力はインデクサ218によって処理され、これは、メッセージの一部(例えば、終端要素)の値を、少なくともインデックス化されるべきこれらの部分について、それらの位置インデックス及びメッセージインデックス(例えば、シーケンス番号)と組み合わせてタプル(p,v,n)を形成し、ここでpは位置インデックス、vは構成要素に関連するメッセージの部分の値、nはメッセージのインデックスである。インデクサは次いでこのタプルを用いて、例えば、ビットベクトル表現の場合、その(p,v)ペアに関連するビットベクトルにおいてn番目のビットを設定することによって、これらの構成要素のそれぞれについてインデックスレコード142を更新する。
【0044】
図3を参照すると、第1の例示的な例において、メッセージ122がインデックスn=1003を有し(例えば、これは受信された1003番目のメッセージである)、全体的な内容「予約12345,乗客Smith, John, 1 Main St., Boston MA」を有する。この例示はEDIFACTフォーマットを用いていないが、そのフォーマットを用いる類似の例も同じ又は同様の処理ステップに従うであろうということが理解されるべきである。この例において、パーサ214は、この用途についての文法212を用いて、解析ツリー216を生成し、これは、
図3に示すように例示することができる。すなわち、メッセージの解析は「予約」という最上位の構成要素を有し、これは、基本要素である予約番号、及び乗客情報部分の2つの部分を有する。乗客情報部分は次には名前部分及び住所部分を有し、名前部分は姓部分及び名部分を有し、住所部分は番地と通り部分及び市と州部分を有する。この例示において、各部分はその部分の位置インデックスで(括弧内に)注釈されている。例えば、予約番号は部分インデックス117で注釈されており、これは、コンテキストが生じ得る特定のメッセージにかかわらず、最上位の「予約」というコンテキストにおける「番号」に普遍的に割り当てられる。
【0045】
パーサ214の様々な実装形態を用いることができる。例えば、ボトムアップパーサ(例えば、決定論的パーサ、例えばLR(Left-Right)パーサ、又はCYK(Cocke-Younger-Kasami)パーサのチャート)を用いることができる。
【0046】
この例示において、インデクサ218は(p,v,n)タプルのセット220を生じさせる。例えば、予約番号では、タプルは(117,12345,1003)であり、値12345が位置117においてメッセージ番号1003において生じているということを意味している。追加のこのようなタプルを
図3に示している。
【0047】
図4を参照すると、メッセージインデックス1205を備えたメッセージ122の第2の例示的な例も予約に関連しており、
図3に示すメッセージと共通のいくつかの要素を有する。このメッセージにおいて、予約部分は番号要素(この例において、
図3と同じ予約番号)を有し、乗客部分ではなくメッセージは代理店部分を有する。パーサ214は文法212を用いて、メッセージの構成要素の位置インデックスを含む、解析ツリー216(又は同等のデータ構造)を形成する。インデクサ218は、
図3を参照して先に議論したように、解析ツリーを処理して(p,v,n)タプルを形成する。
【0048】
この例において、予約番号は再度位置117にある。すなわち、最上位の予約内の番号についてのコンテキストは、
図3のメッセージと同じコンテキストであり、したがって位置番号は同じである。この番号についてのタプルは(117,12345,1205)である。他方、値が「1 Commercial Way」の、住所の番地と通り部分は、予約内の、代理店部分内の、住所内の、通り部分に対応する位置インデックス285にある。これは、予約内の、乗客部分内の、住所内、番地と通り部分に対応する位置175にある、
図3における番地と通り部分「1 Main St.」とは対照的である。図示のように、インデクサ218は(p,v,n)タプルのセットを生じさせる。
【0049】
図5を参照すると、そして上で紹介したように、インデックスストア140は、それぞれが位置と値(p,v)のペアに関連付けられた複数のレコード142を含む。(p,v,n)タプルは、インデックスストアがインデクサからタプル(p,v,n)を受信したら、各メッセージ番号nについてのビットを1に設定することによってインデックスストア140に保存される。図示のように、(117,12345)レコード(すなわち、あらゆる予約番号12345について)は、
図3及び4に示す例に対応して、少なくともビット1003及び1205が設定されている。同様に、予約セグメントにおける乗客の姓に対応する(165,「Smith」)レコードは、ビット1003が設定されている(
図3に対応)が、ビット1205が設定されていない(
図4に対応、乗客部分がない)。同様に、(236,「Acme Travel」)にはビット1205が設定されているが、ビット1003は設定されていない。
【0050】
上で紹介したように、
図2~5に示す手順は、メッセージがメッセージストア120に到着したときに実行することができ、又は、例えば、1時間、又は1日などに追加されたすべてのメッセージについて数回に分けて実行することができる。いずれの場合も、いつでも、メッセージストア120におけるメッセージのいくつか又はすべてがインデックス化されており、インデックスストア140に表されている(それらがインデックス化可能なフィールドを有すれば)。上の議論において、すべての要素がインデックス化されるということに留意されたい。しかしながら、要素のサブセット又は位置のサブセットのみにインデックス化を制限することが好ましいことがある。例えば、おそらく予約番号はインデックス化されるが、番地と通りはされない。このような選択は、番地と通りを伴うクエリの効率を制限する可能性があるが、このような選択は、適切なスペースと時間のトレードオフを提供することができる。インデックスを用いて特定の番地と通り(例えば、「1 Main St.」)を検索することに対する代替案として、メッセージストアにおける各レコード122を解析して、番地と通りにおける所望の値を有するレコードを見つけることがある。
【0051】
図6を参照すると、単一の位置(特定のコンテキストにおける要素)の値に基づくクエリプロセスの一例において、ユーザ150が、例えば、予約番号12345についてのすべてのメッセージについてのクエリを発行する。ルックアップコンポーネント160は、インデックスストア140にアクセスして、このようなクエリに一致するメッセージレコード122を識別する。こうするため、番号要素の位置がまず決定され、この場合、予約のコンテキストにおける番号を位置117にマッピングする。このようなマッピングを行うため、ルックアップ160は、パーサ/インデクサ120の文法212と一致するデータへのアクセスを有する(例えば、パーサによって用いられる同じデータへの、又は異なるが整合しているデータ構造への直接アクセスによって)。対象の位置と値(p,v)のペアが(117,12345)であると決定すると、ルックアップは、ビット1003及び1205が設定されている、対応するビットベクトル162にアクセスする。このビットベクトル(又は同等の情報を備えたデータ構造)は、レトリーバ170に送られ、これは、メッセージストア120からレコード1003及び1205を要求し、それらの対応するレコードを受信して、それらをユーザのための応答180にまとめる。
【0052】
図6に示していないのは、より複雑なブーリアンクエリについての場合である。このようなブーリアンクエリでは、ルックアップは、クエリの各用語についてのビットベクトルにアクセスし、次いでビット単位のブーリアン演算を実行して、そのブーリアンクエリを満たすメッセージに対応する結合ビットベクトルを生成する。
【0053】
いくつかの実装形態において、クエリプロセスは並列化することができる。例えば、ブーリアンクエリの場合、クエリにおける異なる用語についてのレコード142に並行してアクセスすることができる。これは、レコード142を、例えば位置に基づいて別個のデータセクションに分割することによってより効率的にすることができ、これによって並列ルックアップのためのデータ競合を回避する。並列処理についての他の選択肢は、インデックスストアからのビットベクトルの通信、又はブーリアン式に従ったビットの組み合わせを、メッセージストアからのレコードの要求とパイプライン処理することにある。例えば、ボトルネックがメッセージストア120自体へのアクセスである限り、このようなパイプライン処理は、可能な最高の全体的な検索速度を提供することができる。
【0054】
上の議論では、EDIFACTメッセージ構造の詳細への言及が制限されている。上に提供したEDIFACTメッセージフォーマットの説明に基づいて、EDIFACTセグメント、グループ、及び複合体が解析ツリー内の構成要素(すなわち、文法の非終端記号)の役割を果たすことができる一方、基本要素は解析ツリーのリーフ(すなわち、文法の終端記号)を形成することができ、位置インデックスが割り当てられる。他の代替案において、複合体にも位置インデックスが割り当てられ、位置インデックスは、その複合体についての解析ツリーにおける位置、及びその複合体内の要素(例えば、位置137での複合体の第2の要素)のインデックスからなるペアとして表される。
【0055】
EDIFACT構造化レコードは、
図3~4の例示的な例よりいくらか複雑である。特に、メッセージにおける基本要素は、一般にEDIFACTセグメントの特定のネスティング内で発見され、そのセグメント内で、そのセグメント内の要素の特定の順序位置で、その位置が複合要素であれば、その複合要素内の基本要素の特定の順序位置で発見される。
図3~4の例のように、「位置」を単一の列挙された(例えば、整数の)量として表すのではなく、EDIFACT固有の実装形態において、位置自体はタプルp=(sp,ep,bp)として表され、ここでspはアプリケーションドメインの可能なメッセージにおけるセグメントの各可能なネスティングについて別個の列挙量であり、epは基本又は複合要素のインデックスである(例えば、0が第1の要素、1が第2の要素などとなるようなゼロ原点など)。要素がセグメントにおけるインデックスepで複合要素を備えていれば、bpはその複合要素内の要素のインデックスである。要素が複合要素内になければ、その要素はセグメントにおけるインデックスepで基本要素であり、bpは任意に0に設定される。
【0056】
重要なのは、基本要素の各可能なコンテキストが位置の個別の値を有するということであるが、位置がスカラー量である基本的必要性はないため、先の例における簡単な整数位置pをp=(sp,ep,bp)のタプル表現に置き換えても、上述のアプローチは変更されないということに留意されたい。このEDIFACT固有の実装形態の他の一態様は、セグメントのコンテキストのみが列挙される一方、セグメントのグループは要素に直接接触しないため、セグメントのグループのコンテキストには割り当てられないということである。
【0057】
ここで
図7を参照すると、特定のEDIFACT用途における文法の例示的な一例が、セグメントの可能なネスティング、及びそれらの基本及び複合要素のリストとして表されている。
図7の文法は、この用途における有効なメッセージに存在し得るすべての要素を描いているが、
図3~4の例は特定のメッセージであるということに留意されたい。
図7に示す文法は、ルートノードがセグメントの「予約」グループについてのものであるツリー表現である。セグメントの「予約」グループは、セグメントの「乗客」グループ又はセグメントの「代理店」グループ、又は両方、並びに、文法の小さな部分のみを示している
図7に示されていない他のセグメントのグループ又はセグメントを含む(すなわち、その中に直接ネストされる)ことができる。セグメントの「乗客」グループは、「名前」セグメント(「TIF」という名前)及び/又は「住所」セグメント(「ADR」という名前)を含むことができる。「予約」グループ内の「乗客」グループ内の「名前」セグメントにはセグメント位置sp=1が割り当てられる一方、「予約」グループ内の「乗客」グループ内の「住所」セグメントにはセグメント位置sp=2が割り当てられる。
【0058】
「名前」セグメントは、「名前」セグメントにおけるインデックスep=0で「旅行者の姓及び関連情報」成分(component)を有する。この成分は、インデックスbp=0で「姓」要素を有する。したがって、「予約」グループ内の「乗客」グループ内の「名前」セグメント内の「旅行者の姓及び関連情報」成分内の「姓」要素としての「Smith」のような名前は、p=(sp,ep,bp)=(1,0,0)の文法内に「位置」を有する。したがって、「Smith」という「名前」がメッセージ番号1003に生じれば、インデクサは((1,0,0),「Smith」,1003)の形式のレコードを生成し、((1,0,0),「Smith」)(又は同等に(1,0,0,「Smith」))によってアクセスされるインデックスレコードは、1003番目のビットが設定されている。
【0059】
同様の方法で、「住所成分記述」要素がインデックス1及び「住所詳細」成分にあり、これは「予約」グループにおける「乗客」グループにおける「住所」セグメントにおける第2の要素(インデックス1)であり、したがって位置p=(2,1,1)を有する。また同じ方法で、「住所成分記述」要素がインデックス1及び「住所詳細」成分にあり、これは「予約」グループにおける「代理店」グループにおける「住所」セグメントにおける第2の要素(インデックス1)であり、したがって、「予約」グループにおける「代理店」グループにおける「住所」セグメントはセグメントコンテキストsp=3を有するため、位置p=(3,1,1)を有する。
【0060】
図7に示す文法の部分には3つのみのセグメントコンテキストが例示されているが、EDIFACTレコード構造を備えたこの例の用途において、生じ得る異なるセグメントコンテキストは10,000を超えており、したがって
図7は全体的な文法の非常に小さな部分である。
【0061】
インデックスストア140について上述したインデックス構造は一実施例に過ぎないということが認識されるべきである。(p,v)アドレス指定ビットベクトルではなく、他の構造、例えば、平衡ツリーを用いることもできる。インデックス構造の特定の選択は、例えば、クエリ処理のための可能な並列処理及びパイプライン処理を含むクエリの処理のために配置されているインフラストラクチャに部分的に依存する。例えば、並列グラフベースの処理インフラストラクチャ(例えば、分散型データフローコンピューティングアーキテクチャを用いる)の文脈において、レコード及びビットベクトルストレージへの(p,v)アクセスは、位置のハッシュによる並列化、及びビットベクトル表現に示されるレコードの処理のパイプライン化に特に補正可能であり得る。他方、シングルプロセッサ(すなわち、シリアル処理)の場合では、各位置についての平衡ツリーのような代替構造が最も効果的であり得る。
【0062】
上述のアプローチは、例えば、適切なソフトウェア命令を実行するプログラム可能なコンピューティングシステムを用いて実装することができ、又はこれはフィールドプログラマブルゲートアレイ(FPGA,field-programmable gate array)のような適切なハードウェア又は何らかのハイブリッド形式で実装することができる。例えば、プログラムされたアプローチにおいて、ソフトウェアは、それぞれが少なくとも1つのプロセッサ、少なくとも1つのデータストレージシステム(揮発性及び/又は不揮発性メモリ及び/又はストレージ要素を含む)、少なくとも1つのユーザインターフェース(少なくとも1つの入力デバイス又はポートを用いて入力を受信し、少なくとも1つの出力デバイス又はポートを用いて出力を提供するための)を含む、1又は2以上のプログラムされた又はプログラム可能なコンピューティングシステム(これは、分散型、クライアント/サーバ、又はグリッドのような様々なアーキテクチャのものであり得る)上で実行される1又は2以上のコンピュータプログラムにおける手順を含むことができる。ソフトウェアは、例えば、データフローグラフの設計、構成、及び実行に関連するサービスを提供する、より大きなプログラムの1又は2以上のモジュールを含むことができる。プログラムのモジュール(例えば、データフローグラフの要素)は、データリポジトリに保存されているデータモデルに準拠するデータ構造又は他の組織的なデータとして実装することができる。
【0063】
ソフトウェアは、媒体の物理的特性(例えば、表面のピット及びランド、磁区、又は電荷)を用いて、揮発性又は不揮発性の記憶媒体、又は任意の他の非一時的な媒体に組み込まれているような、非一時的な形式で一定期間(例えば、ダイナミックRAMのようなダイナミックメモリデバイスのリフレッシュ期間間の時間)保存することができる。命令をロードするための準備において、ソフトウェアは、CD-ROM又は他のコンピュータ可読媒体(例えば、汎用又は専用のコンピューティングシステム又はデバイスによって可読な)のような有形の非一時的な媒体上に提供することができ、又はネットワークの通信媒体を介して、それが実行されるコンピューティングシステムの有形の非一時的な媒体に配信する(例えば、伝搬された信号にエンコードする)ことができる。処理の一部又はすべては、専用コンピュータで、又はコプロセッサ若しくはフィールドプログラマブルゲートアレイ(FPGA)又は専用の特定用途向け集積回路(ASIC,application-specific integrated circuits)のような専用ハードウェアを用いて実行することができる。処理は、ソフトウェアによって指定された計算の異なる部分が異なる計算要素によって実行される分散方式で実施することができる。それぞれのこのようなコンピュータプログラムは好ましくは、本明細書に記載の処理を実行するためにストレージデバイス媒体がコンピュータによって読み取られるときにコンピュータを構成して動作させるため、汎用又は専用のプログラム可能なコンピュータによってアクセス可能なストレージデバイスのコンピュータ可読記憶媒体(例えば、固体メモリ若しくは媒体、又は磁気若しくは光学媒体)に保存又はダウンロードされる。本発明のシステムはまた、コンピュータプログラムで構成された有形の非一時的媒体として実装されると見なすことができ、このように構成された媒体は、コンピュータを特定の事前定義された方法で動作させて、本明細書に記載の処理ステップの1又は2以上を実行させる。
【0064】
命令は、機械語命令、仮想機械命令、高水準プログラミング命令、及び/又はコンパイル若しくは解釈された命令を含む、異なるレベルにあってもよい。いくつかの実装形態において、機能の一部を完全に又は部分的に専用ハードウェアに実装することができる。例えば、
図2に示す様々なキューは専用のハードウェアを有することができ、これは実施されているキューイングアプローチの効率を増加させる、又は待ち時間を減少させることができる。いくつかの実装形態は、ソフトウェアと専用ハードウェアコンポーネントの組み合わせを用いる。
【0065】
本発明のいくつかの実施形態を説明してきた。それにもかかわらず、前述の説明は、次の特許請求の範囲によって定義される、本発明の範囲を説明するものであり、これを限定するように意図されていないということが理解されるべきである。したがって、他の実施形態も次の特許請求の範囲内にある。例えば、本発明の範囲から逸脱することなく様々な修正を行うことができる。加えて、上述のステップのいくつかは順序に依存しないことがあり、したがって記載のものとは異なる順序で実行することができる。