(57)【要約】  ＸＭＬ文書をメモリにロードする方法及び装置を提供する。クライアントは、１つ以上の配列要素を、メモリ内に保持される配列の第１のパーティション内にロードする。各配列要素は、ＸＭＬ文書のＸＭＬ要素を表す。第１のパーティション内に保持されるデータ量が第１の閾値を超過すると判断すると、クライアントは、次に、配列要素を、配列の新しいパーティション内にロードする。クライアントのメモリ内に保持されるデータ量が第２の閾値を超過すると判断すると、最後に使用されてから最も時間の経っているパーティションの配列要素が、ＸＭＬ文書全体を永続的に格納することなく、データベース内に永続的に格納される。ＸＭＬ文書の最後のＸＭＬ要素が配列のパーティションにロードされると、そのパーティションは、データベース内に永続的に格納され、それにより、ＸＭＬ文書全体がデータベース内に格納されることになる。【選択図】図２
2009521774.tif 000002
【特許請求の範囲】
【請求項１】
命令が関与する機械実行演算を実行することを含む方法であって、
前記機械実行演算は、
Ａ）前記命令を、伝送媒体を介して送信すること、
Ｂ）前記命令を、伝送媒体を介して受信すること、
Ｃ）前記命令を、機械可読記憶媒体上に格納すること、及び
Ｄ）前記命令を実行すること、
のうちの少なくとも１つであり、
前記命令は、１つ以上のプロセッサによって実行されると、クライアントにおいて、ＸＭＬ文書の一部だけに対応する、少なくとも１つのＸＭＬ要素を表すデータを、メモリ内に保持されるパーティション内に格納し、また、前記クライアントの前記メモリ内に保持されるデータ量が閾値を超過すると判断すると、データベースサーバに、前記パーティション内のデータをデータベース内に格納する要求を送信する、命令である、方法。
【請求項２】
前記パーティションは、第１のパーティションであり、
前記閾値は、第１の閾値であり、
前記命令は実行されると更に、
前記第１のパーティション内に保持されるデータ量が第２の閾値を超過すると判断すると、（ａ）前記第１のパーティションとは異なる、配列の新しいパーティションを作成し、（ｂ）続いて、前記配列の前記新しいパーティション内に配列要素をロードする、請求項１に記載の方法。
【請求項３】
前記命令は実行されると更に、
（ａ）前記クライアントの利用可能なメモリ、又は、（ｂ）前記パーティションの前記配列要素が格納されるべき前記データベース内のロケーションに、少なくとも部分的に基づいて、前記パーティションのサイズを決定する、請求項１に記載の方法。
【請求項４】
前記命令は実行されると更に、
前記ＸＭＬ文書における複数の繰り返されるＸＭＬ要素に、少なくとも部分的に基づいて前記パーティションのサイズを決定する、請求項１に記載の方法。
【請求項５】
前記要求は、前記データベースサーバにより管理されるデータベースのデータブロック形式に適合するデータストリームを格納するよう指定する、請求項１に記載の方法。
【請求項６】
前記パーティションの前記配列要素を永続的に格納することは、単一のバッチＩＮＳＥＲＴ  ＳＱＬ演算を使用して行われる、請求項１に記載の方法。
【請求項７】
前記パーティションの前記配列要素を永続的に格納することは更に、
前記パーティションが、前記クライアントの前記メモリ内に保持される一組のパーティションのうち最後に使用されてから最も時間の経過したパーティションであることを決定することを含む、請求項１に記載の方法。
【請求項８】
前記命令は実行されると更に、
前記パーティションの前記配列要素を永続的に格納した後、前記クライアントの前記メモリ内の前記パーティションを保持することをやめる、請求項１に記載の方法。
【請求項９】
命令が関与する機械実行演算を実行することを含む方法であって、
前記機械実行演算は、
Ａ）前記命令を、伝送媒体を介して送信すること、
Ｂ）前記命令を、伝送媒体を介して受信すること、
Ｃ）前記命令を、機械可読記憶媒体上に格納すること、及び
Ｄ）前記命令を実行すること、
のうちの少なくとも１つであり、
前記命令は、１つ以上のプロセッサによって実行されると、クライアントにおいて、その各配列要素がＸＭＬ文書のＸＭＬ要素を表す１つ以上の配列要素を、メモリ内に保持される配列のパーティション内にロードし、また、前記クライアントの前記メモリ内に保持されるデータ量が閾値を超過すると判断すると、前記パーティションの前記配列要素を、前記ＸＭＬ文書全体を永続的に格納することなく、データベース内に永続的に格納する、命令である、方法。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、データベースシステム、特に、ＸＭＬ文書をメモリにロードする技術に係る。
【背景技術】
【０００２】  「背景技術」に記載する方法は実行可能ではあるが、必ずしも以前に想到又は実行された方法ではない。従って、従来技術であると示されない限り、「背景技術」に記載する方法はいずれも、ただ「背景技術」に記載されるという理由で従来技術とみなすべきではない。【０００３】  構造化データは、型定義に従う。例えば、「個人」型の型定義は、「名前」、「誕生日」、「身長」、「体重」、及び「性別」といった明確な属性を定義しうる。特定の型の各「インスタンス」は、その特定の型により定義される各属性に対し別個の値を含みうる。例えば、「個人」型のインスタンスは、「Ｆｒｅｄ  Ｂｒｏｗｎ」、「１９８０年１月１日生」、「７２インチ（約１８３センチメートル）」、「２４０ポンド（約１０９キログラム）」、及び「男性」といった値を含みうる。各属性も１つの型である。例えば、「名前」属性は、「ストリング」型でありうるし、「誕生日」属性は、「日付」型でありうるし、また、「性別」属性は、「列挙」型でありうる。構造化データは、同じ型の複数の異なるインスタンスを含みうる。【０００４】  構造化データをデータベース内に格納するために様々な方法を使用しうる。１つのそのような方法は、「命令文に基づいたパスローディング」と呼ばれる。命令文に基づいたパスローディングでは、クライアントアプリケーションが、ある型の１つ以上のインスタンスを含む構造化データをパースする。構造化データ内の値は、その型の属性に対応する。クライアントアプリケーションは、ＩＮＳＥＲＴコマンドといった構造化問い合わせ言語（ＳＱＬ）文を生成する。これは、データベースサーバによって実行されると、データベースサーバによって値がテータベースの表の対応する列内に挿入される。不都合なことに、これはＳＱＬエンジンを頻繁に使用することから、命令文に基づいたパスローディングでは、性能及びメモリ消費の点において難点がある。【０００５】  構造化データをデータベース内に格納する別の方法は、「ダイレクトパスローディング」と呼ばれる。ダイレクトパスローディングでは、構造化データ内の値は、ＳＱＬエンジンが各データ行をロードすることなくデータベース内に直接格納される。構造化データに関連付けられる制御ファイルを参照することにより、クライアントアプリケーションは、構造化データのインスタンスのデータ型を決定できる。型の構造がクライアントアプリケーションに対して定義されると、これらの構造に基づいて、クライアントアプリケーションは、型の属性に対応する配列を作成できる。クライアントアプリケーションは、その属性に対応する値で配列をポピュレートできる。配列がポピュレートされると、クライアントアプリケーションは、その配列を、データベースのデータブロックの形式に適合するデータストリームに変換できる。次に、クライアントアプリケーションは、そのデータを、データベースにストリーミングできる。データベースサーバは、データを、データベース内の１つ以上のデータブロックに直接書き込める。ダイレクトパスローディングは、命令文に基づいたパスローディングの性能より優れた性能を示す。【０００６】  制御ファイルにより示される一部の型は、クライアントアプリケーションに対して定義されている標準型でありうる。例えば、スカラ型は、標準型の一例である。しかし、制御ファイルにより示される一部の型は、クライアントアプリケーションに対して定義されている型のものではない場合がある。クライアントアプリケーションに対して定義されていない型は、クライアントアプリケーションに対する関係で「不透明型」と呼ばれる。これは、そのような型の内部構造が、クライアントアプリケーションに不明瞭である又はクライアントアプリケーションに未知であることによる。不透明型の内部構造（不透明型の属性の数及び型を含む）は、しばしば、不透明型を実装するプログラムに対してのみ定義される。不透明型インプリメンタは、クライアントアプリケーション及びデータベースサーバの両方に対して外部であってもよい。【０００７】  不透明型は、ＸＭＬ型でありうる。ＸＭＬ型の一例は、同時係属中の米国特許出願第１０／２５９，２７８号に記載される。ＸＭＬスキーマは、階層構造を記述するメタデータである。ＸＭＬスキーマのインスタンスは、ＸＭＬスキーマによって記述される構造に適合するデータを含む。ＸＭＬスキーマは、構造内に表現されるＸＭＬ要素を介して、１つ以上の型を定義する。【０００８】  ＸＭＬ文書は、ＸＭＬスキーマに適合する１つ以上のＸＭＬ要素を含む文書である。不都合なことに、ＸＭＬ文書のＸＭＬ要素を表す配列を保持するために必要なメモリ量は大きい。更に、ＸＭＬ文書の制御ファイルをメモリ内で保持することも、相当なメモリ量を必要とする。例えば、一部の場合では、ＸＭＬ文書の制御ファイルを保持するために必要なメモリ量は、対応するＸＭＬ文書をメモリ内で保持するためのメモリ量の１０倍でありうる。従って、クライアントアプリケーションは、ＸＭＬ文書を永続ストレージに転送する際にＸＭＬ文書をメモリにロードするには、大量のメモリを必要とする。更に、このようにＸＭＬ文書を永続ストレージに転送することは、クライアントアプリケーションにとって非常にＣＰＵ集約的であり、性能が低下する場合がある。【０００９】  従って、上述したような問題を回避する、ＸＭＬ文書を永続ストレージに転送する際に使用するＸＭＬ文書をメモリにロードする方法が有利である。
【図面の簡単な説明】
【００１０】  本発明の実施形態を、添付図面の図において限定的ではなく例示的に示す。添付図面中、同様の参照番号は、同様の要素を指す。【００１１】
【図１】  本発明の一実施形態による、ＸＭＬ文書がメモリにロードされ且つ永続ストレージに転送されるシステムを示すブロック図である。
【００１２】
【図２】  本発明の一実施形態による、パーティションを作成及び使用する機能工程を説明するフローチャートである。
【００１３】
【図３】  本発明の一実施形態を実装しうるコンピュータシステムを示すブロック図である。
【詳細説明】
【００１４】  以下の記載において、説明目的で多数の特定詳細を記載することで本願に記載する発明の実施形態の完全な理解を提供する。しかし、本願に記載する発明の実施形態は、これらの特定詳細なしでも実施しうることは明らかであろう。一部の場合では、周知の構造及び装置は、本願に記載する発明の実施形態を不必要に不明瞭にすることを回避する目的でブロック図として示す。
［機能に関する概要］
【００１５】  ＸＭＬ文書をメモリにロードする方法を提供する。本願に記載する実施形態では、大きいＸＭＬ文書の複数のＸＭＬ要素が、クライアントアプリケーションのメモリ内の１つ以上の別個の論理ユニット（本願では、パーティションとして個々に示す）に別個にロードされ、次に、メモリ内のパーティションが、ＸＭＬ文書全体を処理することなく処理されうる（例えば、パーティションは、データベース内に永続的に格納されうる）。このように、常にメモリ内ではＸＭＬ文書の一部しか保持されないので、ＸＭＬ文書を処理するためにクライアントアプリケーションが必要とするメモリ量を最小限にしうる。
【００１６】  一実施形態では、ＸＭＬ型を実施する実体が、クライアントアプリケーションに、ＸＭＬ型に関連付けられる１つ以上のルーチンを登録する。これらのルーチンを使用して、クライアントアプリケーションは、それぞれＸＭＬ文書のＸＭＬ要素を表す１つ以上の配列要素を、メモリ内で保持される配列の第１のパーティション内にロードする。パーティションは、データを、メモリから、データベースといった永続ストレージに転送するための論理ユニットである。一実施形態では、パーティションは、配列といったデータ構造の一部を有することができ、また、そのパーティションによって表されるデータ構造の部分を特定する情報を保持しうる。例えば、特定のパーティションは、その特定のパーティションが開始する配列における第１のロケーションを特定する起点識別子と、その特定のパーティションが終了する配列における第２のロケーションを特定する終点識別子を含みうる。
【００１７】  パーティション内で保持されるデータ量が第１の閾値を超えたと判断すると、クライアントアプリケーションは、ＸＭＬ型に関連付けられるルーチンを呼出しして、配列内に新しいパーティションを作成する。その後、クライアントアプリケーションは、ＸＭＬ文書のＸＭＬ要素を、配列の新しいパーティションの配列要素にロードする。
【００１８】  クライアントアプリケーションのメモリ内に保持されるデータ量が第２の閾値を超えたと判断すると、クライアントアプリケーションは、メモリ内に保持されるパーティション（例えば、最後に使用されてから最も長く時間の経ったパーティション）の配列要素をデータベースに永続的に格納する。ＸＭＬ文書全体がその単一のパーティション内にロードされていない限り、ＸＭＬ文書の一部は、ＸＭＬ文書全体を永続的に格納することなく格納される。クライアントアプリケーションは、最後のＸＭＬ要素が処理されるまで、このようにＸＭＬ文書のＸＭＬ要素を処理し続ける。ＸＭＬ文書の最後のＸＭＬ要素が、配列のパーティションにロードされると、クライアントアプリケーションは、メモリ内に保持される任意のパーティションをデータベースに永続的に格納し、それにより、ＸＭＬ文書全体が、データベース内に永続的に格納されることになる。
【００１９】  ここでは、実施形態の上位概要を説明した。以下に実施形態のアーキテクチャの概要を説明する。
［アーキテクチャに関する概要］
【００２０】  図１は、本発明の一実施形態による、ＸＭＬ文書がメモリにロードされ且つ永続ストレージに転送されるシステム１００を示すブロック図である。システム１００は、クライアントアプリケーション１０２、データベースサーバ１０４、データベース１０６、及び型インプレメンタ１０８Ａ−Ｎを含む。クライアントアプリケーション１０２、データベースサーバ１０４、及び型インプリメンタ１０８Ａ−Ｎは、互いに通信可能に結合される。データベースサーバ１０４は、データベース１０６に通信可能に結合される。
【００２１】  クライアントアプリケーション１０２は、入力として半構造化データ１１８を読取る又は受信する。半構造化データ１１８とは、単一の定義済み構造ではなく複数の代替の定義済み構造に適合するデータである。半構造化データ１１８は、１つの型のインスタンスを含む。例えば、半構造化データ１１８は、例えばＸＭＬ文書といったＸＭＬスキーマに適合する１つ以上のＸＭＬインスタンスを含みうる。半構造化データ１１８は更に、型の識別情報も含む。例えば、型は、ＸＭＬ型と特定されうる。半構造化データ１１８は、型の構造は示さない。型の構造は、クライアントアプリケーション１０２に対して定義されていない。
【００２２】  クライアントアプリケーション１０２は、クライアントアプリケーションアドレス空間１１４内に配列１１６Ａを作成する。クライアントアプリケーションアドレス空間１１４は、クライアントアプリケーション１０２による使用に割り当てられるメモリのセグメントを含む。クライアントアプリケーション１０２は、配列に配列要素を加えることで配列１１６Ａをポピュレートする。各配列要素は、ＸＭＬ文書のＸＭＬ要素を表しうる。配列１１６Ａは、１回につき１つのパーティションがポピュレートされうる。このことは以下に詳細に説明する。配列１１６Ａをポピュレートするために使用する一部の値は、半構造化データ１１８内に指定され、また、他の値は、半構造化データ内に指定される値から導き出されうる。
【００２３】  不透明型をロードする特許に説明されるように、型インプリメンタ１０８Ａ−Ｎは、クライアントアプリケーション１０２にルーチンを登録しうる。これらのルーチンは呼出しされると、配列１１６Ａが関与する演算を実行する。例えば、１つ以上のルーチンは、配列１１６Ａの特定のパーティション内に値を格納しうる、又は、新しいパーティションを作成しうる。呼出しされたルーチンは、配列１１６Ａのパーティションの１つ以上のポピュレートされた要素が見つけられるクライアントアプリケーションアドレス空間１１４内の１つ以上のアドレスを指す１つ以上のポインタを、クライアントアプリケーション１０２に戻しうる。これらの１つ以上のポインタを使用して、クライアントアプリケーション１０２は、配列１１６Ａのパーティションのポピュレートされた行を見つけ且つ読出しすることができる。このようにして、クライアントアプリケーション１０２は、特定のパーティション内にロードされるデータ量を決定できる。
【００２４】  型の１つ以上の属性は、１つ以上の他の属性を示す入れ子型でありうる。例えば、親の型は、スカラ型である第１の属性と、「購入注文」の子の型である第２の属性を示しうる。この「購入注文」型は更に、幾つかの属性を示しうる。この場合、親の型に関連付けられるルーチンが、子の型に関連付けられるルーチンを呼出ししうる。クライアントアプリケーション１０２は、子の型に関連付けられるルーチンを認識又は呼出しする必要はない。親の型の構造を記述するルーチンが呼出しされると、そのルーチンは、子の型の構造を記述する別のルーチンを呼出しする。親の型の配列を作成するルーチンが呼出しされると、そのルーチンは、子の型の配列を作成する別のルーチンを呼出しする。親の型の配列をポピュレートするルーチンが呼出しされると、そのルーチンは、子の型の配列をポピュレートする別のルーチンを呼出しする。作成された各配列は、以下に説明するように１つ以上のパーティションに関連付けられうる。親の型の配列と子の型の配列とのリレーションシップを維持する目的で、親配列の一行を子配列の対応行にリンク付けるセット識別子が生成され、親配列内に格納される。パーティションの配列要素のセット識別子は、そのパーティション内に格納されうる。
【００２５】  配列は、互いに独立してポピュレートされうるが、以下に説明するように、常に任意の１つの配列の単一のパーティションしかポピュレートされない。配列は、非同期的に且つ独立してローディング及びストリーミングされうる。
【００２６】  パーティションのポピュレートされた行に基づいて、クライアントアプリケーション１０２は、データストリームを生成する。１つの配列の１つのパーティションのデータストリームは、別の配列の別のパーティションのデータストリームとは独立して生成されうる。データストリームは、データベース１０６内のデータブロックの形式に適合する。従って、クライアントアプリケーション１０２により生成されるデータストリームは、ＳＱＬエンジンに各データ行をロードさせることなくデータベース１０６に直接書込みされうる。クライアントアプリケーション１０２は、データをデータベースサーバ１０４にストリーミングする。１つの配列に基づいて生成されるストリームは、別の配列に基づいて生成されるストリームとは独立してデータベースサーバに送信されうる。データベースサーバ１０４は、クライアントアプリケーション１０２から受信したデータを、データベース１０６内の１つ以上のデータブロック内に直接書込みする。
【００２７】  データブロックは、データベースのレコードを格納する原子単位である。データベースが、データベースからのレコードを読出し又は書込みする際、永続ストレージから読出しされる又は永続ストレージに書込みされる最小のデータ単位は、データベースブロックである。一般的に、データブロックは、バッファリングシステムのバッファにおけるメモリ内に格納される。データブロックは、レコードだけでなく、データブロック内のデータの処理に使用する制御情報も含みうる。
【００２８】  ＸＭＬ要素をメモリ内に保持される配列内にロードする方法に関する追加の詳細は、不透明型をロードする特許に記載される。ここでは、一実施形態を実装しうる例示的なアーキテクチャを説明した。パーティションを作成及び使用する方法を以下に詳細に説明する。
［パーティションの作成及び使用方法］
【００２９】  図２は、本発明の一実施形態による、パーティションを作成及び使用する機能工程を説明するフローチャートである。図２の機能工程を実行することにより、ＸＭＬ文書をメモリ内にロードするのに必要なメモリを低減しうる。これは、特定の閾値を設定し、これを超過すると、メモリ内に保持されるパーティションの処理がトリガされることで低減しうる。パーティションは、ダイレクトパスロード技術を使用してメモリから永続的に格納されうる。従って、本願に記載する技術は、大きいＸＭＬ文書をメモリ内のロードするためのよりスケーラブルな方法を提供する。更に、メモリ制限によって以前はメモリ内にロードすることができなかった特定のＸＭＬ文書を、図２の技術を使用することでメモリ内にロードしうる。これは、図２の技術では、１回につきＸＭＬ文書の一部だけがメモリ内にロードされるからである。図２の機能工程を、図１を参照しながら説明する。
【００３０】  工程２１０において、型インプリメンタは、上述したようにクライアントアプリケーション１０２に１つ以上のルーチンを登録する。例えば、型インプリメンタ１０８Ａは、ルーチン１１０ＡＡ−ＡＮをクライアントアプリケーション１０２Ａに登録しうる。１つ以上のルーチン１１０ＡＡ−ＡＮは、以下の機能を実行しうる。即ち、（ａ）クライアントアプリケーション１０２によりメモリ内に保持される配列内に新しいパーティションを作成することと、（ｂ）ＸＭＬ文書のＸＭＬ要素を表す行を、配列の特定のパーティション内にポピュレートすること。１つ以上のルーチンがクライアントアプリケーション１０２に登録された後、処理は、工程２２０に進む。
【００３１】  工程２２０において、クライアントアプリケーション１０２は、ＸＭＬ文書を処理する。工程２２０では、クライアントアプリケーション１０２は、ＸＭＬ文書のＸＭＬ要素をメモリ内に保持される１つ以上のパーティション内にロードし、また、メモリからのパーティションをデータベース１０６に永続的に格納することでＸＭＬ文書を処理しうる。パーティションは、ＸＭＬ文書全体がメモリ内のロードされる前に、メモリから永続的に格納され、それにより、追加のメモリを、ＸＭＬ文書の更なるＸＭＬ要素をメモリ内のパーティション内にロードするために利用できるようにする。工程２２０における実行は、以下に詳細に説明する。
【００３２】  工程２２２において、クライアントアプリケーション１０２は、上述したようにＸＭＬ文書のＸＭＬ型に関連付けられるルーチンを呼出しすることでメモリ内に１つ以上の配列を作成してＸＭＬ文書を処理しうる。複数の配列が単一のＸＭＬ文書に対して作成されうる。例えば、子の型を有する親の型の配列を作成するルーチンが呼び出しされると、そのルーチンは、子の型の配列を作成する別のルーチンを呼出しする。ＸＭＬ文書に対して配列がメモリ内に作成されると、クライアントアプリケーション１０２は、上述したようにＸＭＬ文書のＸＭＬ型に関連付けられるルーチンを呼出しすることで配列のパーティションを作成しうる。クライアントアプリケーション１０２は、配列要素を、１回につき特定の配列の１つのパーティションにしかロードしない。
【００３３】  メモリ内にパーティション及び配列を作成後、クライアントアプリケーション１０２は、ＸＭＬ文書からＸＭＬ要素を読出しする。クライアントアプリケーション１０２は、次に、ＸＭＬ要素を、メモリ内に保持される適切なパーティション内にロードする。クライアントアプリケーション１０２は、次に、工程２２４及び２２６を実行しうる。工程２２４及び２２６の実行後、クライアントアプリケーション１０２は、（ａ）ＸＭＬ文書からのＸＭＬ要素をメモリ内のパーティション内にロードすることと、（ｂ）ＸＭＬ文書の全ＸＭＬ要素がメモリ内のパーティション内にロードされるまで工程２２４及び２２６を行うこととを繰り返しうる。或いは、クライアントアプリケーション１０２は、ＸＭＬ文書からの２つ以上のＸＭＬ要素をパーティション内に読み込んだ後、１つ以上の工程２２４及び２２６を実行しうる。
【００３４】  工程２２４において、クライアントアプリケーション１０２は、配列の特定のパーティション（「フルパーティション」）内に保持されるデータ量が、閾値（「パーティションサイズ閾値」）を超過するか否か判断する。クライアントアプリケーション１０２は、配列のフルパーティション内に保持されるデータ量が、パーティションサイズ閾値を超過しないと判断すると、上述したようにＸＭＬ文書のＸＭＬ型に関連付けられる１つ以上のルーチンを呼出しすることで配列に新しいパーティションを作成する。その後、クライアントアプリケーションが、ＸＭＬ文書のＸＭＬ要素を配列内にロードする際に、クライアントアプリケーション１０２は、ＸＭＬ要素を、配列のフルパーティションではなく配列の新しいパーティション内にロードする。
【００３５】  一実施形態では、クライアントアプリケーション１０２は、パーティションを作成するようクライアントアプリケーション１０２によって呼出しされるルーチンによって戻されるパーティションに対するポインタを使用して、特定のパーティションについてフルパーティション閾値を超過したか否かを判断しうる。クライアントアプリケーション１０２は、パーティションに対するポインタを使用して、パーティションの行を見つけ且つ読出しし、それにより、特定のパーティション内に保持されるデータ量がパーティションサイズ閾値を超過するか否かを判断しうる。
【００３６】  パーティションサイズ閾値は、ユーザによって設定されても、クライアントアプリケーション１０２の総メモリ量に基づいて動的に決定されてもよい。
【００３７】  （工程２２２又は２２４のいずれかにおいて）作成された各パーティションのサイズは、パーティション、又は、パーティション内にロードされるデータが最終的に格納されるデータベース１０６内のロケーションに格納されるべきデータの型に少なくとも部分的に基づいて動的に決定されうる。例えば、パーティションのサイズは、ＸＭＬ文書内の繰り返される要素の存在に基づきうる。繰り返される要素とは、ＸＭＬ文書内での同じＸＭＬ要素の複数のインスタンスのことである。説明するに、ＸＭＬ文書が請求書に対応する場合、請求書の項目明細（ｌｉｎｅ  ｉｔｅｍｓ）が繰り返される要素でありうる。というのは、これらの項目明細は同じデータ型（ここでは、請求項目）の複数のインスタンスだからである。データベース１０６内の表の量を最小限にする目的で、これらの項目明細に対応するＸＭＬ要素を単一のパーティションに格納することが有利であり、それは、パーティション内にロードされたデータを格納するために必要である。従って、パーティションのサイズは、パーティション内にロードされたＸＭＬデータが、データベース１０６内の最小量の表内に格納されることを保証するよう決定されうる。更に、パーティションのサイズは、ＸＭＬ文書内の複数の繰り返されるＸＭＬ要素に少なくとも部分的に基づいて決定され、それにより、パーティション内にロードされた全ＸＭＬ要素が、データベース１０６内の同じ表に又は同様に格納される尤度を増加する。
【００３８】  更に、クライアントアプリケーション１０２が、ＸＭＬ文書のＸＭＬ要素を配列のパーティションに加えるルーチンを呼出しする場合、ルーチンの論理は、ＸＭＬ要素を配列に加える方法を決定する際にＸＭＬ文書のＸＭＬスキーマを考慮しうる。例えば、配列の第１のパーティションの配列要素が第１の表にマッピングされ、配列に追加するよう要求されるＸＭＬ要素が第２の表にマッピングされる場合、ルーチンの論理は、新しいパーティションを作成し、また、ＸＭＬ要素を新しいパーティションに追加するようにしうる。このようにして、データベース１０６内の表に対するＸＭＬスキーマのＸＭＬ要素間のマッピングがルーチンによって考慮され、それにより、クライアントアプリケーション１０２がＸＭＬ要素を配列のパーティションに追加するルーチンを呼出しする際に、ＸＭＬ要素を配列の既存のパーティションに追加するべきか、又は、ＸＭＬ要素が追加されるべき新しいパーティションを作成するべきか決定される。
【００３９】  工程２２６において、クライアントアプリケーション１０２は、クライアントアプリケーション１０２のメモリ内に保持されるデータ量が閾値（「メモリサイズ閾値」）を超過するか否かを判断する。クライアントアプリケーション１０２は、クライアントアプリケーション１０２のメモリはメモリサイズ閾値を超過しないと判断すると、メモリ内に保持されるパーティションを永続的に格納する。例えば、クライアントアプリケーション１０２は、メモリ内に保持される最後に使用されてから最も時間のたったパーティションをデータベース１０６に永続的に格納しうる。しかし、他のアルゴリズムを使用して、データベース１０６に永続的に格納されるべき、クライアントアプリケーション１０２によってメモリ内に保持されるパーティションを決定してもよい。データベース１０６内に単一のパーティションの配列要素を永続的に格納する際、クライアントアプリケーションは、（ＸＭＬ文書全体が、単一のパーティション内に格納可能でない限り）ＸＭＬ文書全体を永続的に格納することなくＸＭＬ文書の一部を永続的に格納する。
【００４０】  工程２２６において、クライアントアプリケーション１０２は、ＸＭＬ文書の最後のＸＭＬ要素がメモリ内のパーティションの配列要素内にロードされたと判断すると、メモリ内に保持される全パーティションをデータベース１０６内に永続的に格納する。このようにして、ＸＭＬ文書全体が処理された後、メモリ内の全パーティションは、データベース１０６内に永続的に格納され、それにより、現在、永続的に格納されていないＸＭＬ文書の任意の部分が永続的に格納される。
【００４１】  パーティションがデータベース１０６に永続的に格納される準備が整うと、クライアントアプリケーション１０２は、ポピュレートされたパーティションからデータストリームを生成しうる。このデータストリームは、データベース１０６内のデータブロックの形式に適合する。従って、クライアントアプリケーション１０２によって生成されるデータストリームは、ＳＱＬエンジンに各データ行をロードさせることなくデータベース１０６内に、例えば、単一のバッチＩＮＳＥＲＴ  ＳＱＬ演算を使用して、直接的に書込みされうる。クライアントアプリケーション１０２は、データをデータベースサーバ１０４にストリーミングする。１つの配列に基づいて生成されるストリームは、別の配列に基づいて生成されるストリームとは独立してデータベースサーバに送信されうる。データベースサーバ１０４は、クライアントアプリケーション１０２から受信したデータを、データベース１０６内の１つ以上のデータブロック内に直接書込む。データベースの表内の隠し列に対応する配列の列内の様々な値は、書込みの結果、対応する隠し列内に格納される。
【００４２】  配列要素と共に、（ａ）パーティションの起点識別子、（ｂ）パーティションの終点識別子、及び（ｃ）パーティションが親配列に関連付けられる場合には１つ以上のセット識別子といったパーティションによって保持される追加情報も、データベース１０６に転送されうる。このようにすると、ＸＭＬ要素がデータベース１０６内に永続的に格納される際に、ＸＭＬ文書のＸＭＬ要素間のリレーションシップが維持されうる。
【００４３】  一実施形態では、各パーティションは、その独自のメモリユニットを有する。パーティションの全配列要素は、パーティションのメモリユニットからのメモリを使用する。新しいパーティションが構築されると、新しいメモリユニットが作成される。パーティションが、データベース１０６といった永続ストレージに転送されると、そのパーティションにより占有されるメモリは解放されることが可能である。このメモリは、次のパーティションによって使用され、それにより、メモリ内でＸＭＬ文書に演算を実行するのに必要なメモリ量を最小化しうる。
【００４４】  一実施形態では、制御ファイル全体をメモリ内にロードするのではなく、クライアントアプリケーション１０２によって現在処理されているＸＭＬ要素に対応する制御ファイルの一部だけがメモリ内にロードされうる。クライアントアプリケーション１０２は、メモリ内にロードされるべき制御ファイルの一部を決定するルーチンを呼出ししうる。
［実施メカニズム］
【００４５】  一実施形態では、クライアントアプリケーション１０２、データベースサーバ１０４、データベース１０６、及び型インプリメンタ１０８Ａ−１０８Ｎは、それぞれ、コンピュータシステム上に実装されうる。図３は、本発明の一実施形態を実装しうるコンピュータシステム３００を示すブロック図である。コンピュータシステム３００は、情報を通信するバス３０２又は他の通信メカニズム、及び、バス３０２に結合され情報を処理するプロセッサ３０４を含む。コンピュータシステム３００は更に、バス３０２に結合され、プロセッサ３０４によって実行されるべき情報及び命令を格納するランダムアクセスメモリ（ＲＡＭ）又は他の動的記憶装置といったメインメモリ３０６を含む。メインメモリ３０６は更に、プロセッサ３０４によって実行されるべき命令の実行時の一時的変数又は他の中間情報を格納するよう使用してもよい。コンピュータシステム３００は更に、バス３０２に結合され、プロセッサ３０４用の静的情報及び命令を格納する読出し専用メモリ（ＲＯＭ）３０８又は他の静的記憶装置を含む。磁気ディスク又は光学ディスクといった記憶装置３１０も設けられ、バス３０２に結合して情報及び命令を格納する。
【００４６】  コンピュータシステム３００は、バス３０２を介して、陰極線管（ＣＲＴ）といったディスプレイ３１２に結合されて情報をコンピュータユーザに表示しうる。英数字及び他のキーを含む入力装置３１４はバス３０２に結合され、情報及びコマンド選択をプロセッサ３０４に伝える。別のタイプのユーザ入力装置は、方向情報及びコマンド選択をプロセッサ３０４に伝え、ディスプレイ３１２上のカーソル動作を制御する、マウス、トラックボール、又はカーソル方向キーといったカーソルコントロール３１６である。この入力装置は、一般的に、第１の軸（例えばｘ軸）及び第２の軸（例えばｙ軸）といった２つの軸方向における２自由度を有し、それにより、入力装置は、平面における位置を特定することができる。
【００４７】  本発明は、本願に記載する技術を実施するためのコンピュータシステム３００の使用に関連する。本発明の一実施形態では、この技術は、コンピュータシステム３００によって、プロセッサ３０４がメインメモリ３０６内に含まれる１つ以上の命令の１つ以上のシーケンスを実行することに呼応して実施される。この命令は、記憶装置３１０といった別の機械可読媒体からメインメモリ３０６内に読み込まれうる。メインメモリ３０６内に含まれる命令のシーケンスを実行すると、プロセッサ３０４は、本願に説明した処理工程を実行する。別の実施形態では、配線回路を、ソフトウェア命令の代わりに又はソフトウェア命令と組み合わせて使用して、本発明を実施しうる。従って、本発明の実施形態は、ハードウェア回路及びソフトウェアの任意の特定の組み合わせに限定されない。
【００４８】  本願にて使用する用語「機械可読媒体」とは、機械に特定の方法で演算を行わせるデータの供給に参加する任意の媒体を指す。コンピュータシステム３００を使用して実施される実施形態では、様々な機械可読媒体が、例えば、実行のためのプロセッサ３０４への命令の供給に関与する。このような媒体は様々な形式を取ってよく、以下に限定されないが、不揮発性媒体、揮発性媒体、及び伝送媒体を含む。不揮発性媒体は、例えば、記憶装置３１０といった光学又は磁気ディスクを含む。揮発性媒体は、メインメモリ３０６といったダイナミックメモリを含む。伝送媒体は、バス３０２を構成するワイヤを含む同軸ケーブル、銅線、及び光ファイバを含む。伝送媒体は更に、電波又は赤外線データ通信時に生成されるような音波又は光波の形を取ることもできる。このような媒体は全て有形で、媒体により担持される命令が、その命令を機械内に読み込む物理メカニズムによって検出できなければならない。
【００４９】  機械可読媒体の一般的な形式は、例えば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ又は任意の他の磁気媒体、ＣＤ−ＲＯＭ、任意の他の光学媒体、パンチカード、紙テープ、穿孔パターンのついた任意の他の物理媒体、ＲＡＭ、ＰＲＯＭ、及びＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、任意の他のメモリチップ又はカートリッジ、上述したような搬送波、又は、コンピュータが可読である任意の他の媒体を含む。
【００５０】  様々な形式の機械可読媒体が、実行のためにプロセッサ３０４に１つ以上の命令の１つ以上のシーケンスを運ぶ際に関与しうる。例えば、命令は、最初はリモートコンピュータの磁気ディスク上に担持されうる。リモートコンピュータは、命令をそのダイナミックメモリにロードし、その命令を、モデムを使用して電話回線を介して送信できる。コンピュータシステム３００のローカルにあるモデムは、電話回線上のデータを受信し、赤外線送信器を使用してそのデータを赤外線信号に変換する。赤外線検出器は、赤外線信号内のデータを受信し、適切な回路がデータをバス３０２上に置く。バス３０２は、データをメインメモリ３０６に運び、プロセッサ３０４はメインメモリから命令を取出しして実行する。メインメモリ３０６により受信される命令は、任意選択的に、プロセッサ３０４による実行前又は後に記憶装置３１０上に格納されてもよい。
【００５１】  コンピュータシステム３００は更に、バス３０２に結合される通信インターフェイス３１８を含む。通信インターフェイス３１８は、ローカルネットワーク３２２に接続するネットワークリンク３２０に結合する双方向性データ通信を与える。例えば、通信インターフェイス３１８は、総合サービスデジタルネットワーク（ＩＳＤＮ）カード又はモデムであり、対応するタイプの電話回線へのデータ通信接続を与えうる。別の例として、通信インターフェイス３１８は、ローカルエリアネットワーク（ＬＡＮ）カードであり、互換性のあるＬＡＮへのデータ通信接続を与えうる。ワイヤレスリンクも実装してもよい。どの実施においても、通信インターフェイス３１８は、様々なタイプの情報を表すデジタルデータストリームを運ぶ電気、電磁気、又は光学信号を送受信する。
【００５２】  ネットワークリンク３２０は、一般的に、１つ以上のネットワークを介して別のデータ装置へのデータ通信を与える。例えば、ネットワークリンク３２０は、ローカルネットワーク３２２を介してホストコンピュータ３２４又はインターネットサービスプロバイダ（ＩＳＰ）３２６によって動作されるデータ機器への接続を与えうる。ＩＳＰ３２６は、現在では一般的に「インターネット」３２８と呼ばれるワールドワイドのパケットデータ通信ネットワークを介するデータ通信サービスを提供する。ローカルネットワーク３２２及びインターネット３２８は共に、デジタルデータストリームを運ぶ電気、電磁気、又は光学信号を使用する。様々なネットワークを介する信号及びネットワークリンク３２０上及び通信インターフェイス３１８を通る信号は、コンピュータシステム３００へ及びコンピュータシステム３００からデジタルデータを運び、情報を伝送する搬送波の例示的な形式である。
【００５３】  コンピュータシステム３００は、ネットワーク、ネットワークリンク３２０、及び通信インターフェイス３１８を介して、メッセージを送信し、また、プログラムコードを含むデータを受信することができる。インターネットの例では、サーバ３３０が、インターネット３２８、ＩＳＰ３２６、ローカルネットワーク３２２、及び通信インターフェイス３１８を介してアプリケーションプログラムの要求されたコードを送信しうる。
【００５４】  コードはプロセッサ３０４によって受信されると、プロセッサ３０４によって実行されうる、及び／又は、記憶装置３１０又は他の不揮発性記憶装置内に後の実行のために格納されうる。このようにして、コンピュータシステム３００は、搬送波の形でアプリケーションコードを取得しうる。
【００５５】  本発明の実施形態を、実施に応じて異なりうる多数の特定の詳細を参照して上述した。従って、本発明及び発明であると出願人が意図するものを唯一且つ排他的に示しているのは、任意の今後の補正を含む、本願から派生する特定の請求項記載形式の請求項一式である。請求項に含まれる用語について本明細書に明示的に記載した任意の定義は、請求項において使用されたそのような用語の意味を左右する。従って、請求項に明示的に記載しない制限、要素、特性、特徴、利点、又は属性が請求項の範囲を限定すべきではない。従って、明細書及び図面は、限定的ではなく例示的に解釈すべきである。
【図１】
2009521774.tif 000003
【図２】
2009521774.tif 000004
【図３】
2009521774.tif 000005
【手続補正書】
【提出日】平成19年9月11日(2007.9.11)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
命令が関与する機械実行演算を実行することを含む方法であって、
前記機械実行演算は、
Ａ）前記命令を、伝送媒体を介して送信すること、
Ｂ）前記命令を、伝送媒体を介して受信すること、
Ｃ）前記命令を、機械可読記憶媒体上に格納すること、及び
Ｄ）前記命令を実行すること、
のうちの少なくとも１つであり、
前記命令は、１つ以上のプロセッサによって実行されると、クライアントにおいて、ＸＭＬ文書の一部だけに対応する、少なくとも１つのＸＭＬ要素を表すデータを、メモリ内に保持されるパーティション内に格納し、また、前記クライアントの前記メモリ内に保持されるメモリ内データ量が閾値を超過すると判断すると、データベースサーバに、前記パーティション内の前記メモリ内データをデータベース内に格納する要求を送信する、命令であり、
前記メモリ内データは、前記クライアントによって前記データベースサーバに、当該データベースサーバが前記データベースに直接書込みできる１つ以上のデータブロックで供給される、方法。
【請求項２】
前記パーティションは、第１のパーティションであり、
前記閾値は、第１の閾値であり、
前記命令は実行されると更に、
前記第１のパーティション内に保持されるメモリ内データ量が第２の閾値を超過すると判断すると、（ａ）前記第１のパーティションとは異なる新しいパーティションを作成し、（ｂ）続いて、前記新しいパーティション内に配列要素をロードする、請求項１に記載の方法。
【請求項３】
前記命令は実行されると更に、
（ａ）前記クライアントの利用可能なメモリ、又は、（ｂ）少なくとも１つのＸＭＬ要素を表す前記データが格納されるべき前記データベース内のロケーションに、少なくとも部分的に基づいて前記パーティションのサイズを決定する、請求項１に記載の方法。
【請求項４】
前記命令は実行されると更に、
前記ＸＭＬ文書における複数の繰り返されるＸＭＬ要素に、少なくとも部分的に基づいて前記パーティションのサイズを決定する、請求項１に記載の方法。
【請求項５】
前記データベースは、前記データベースサーバにより管理される、請求項１に記載の方法。
【請求項６】
前記パーティションの前記メモリ内データは、単一のバッチＩＮＳＥＲＴ  ＳＱＬ演算を使用して、前記データベースサーバによって前記データベース内に格納される、請求項１に記載の方法。
【請求項７】
前記パーティションは、前記クライアントの前記メモリ内に保持される一組のパーティションのうち最後に使用されてから最も時間の経過したパーティションである、請求項１に記載の方法。
【請求項８】
前記命令は実行されると更に、
前記クライアントの前記メモリ内の前記パーティションを保持することをやめる、請求項１に記載の方法。
【請求項９】
命令が関与する機械実行演算を実行することを含む方法であって、
前記機械実行演算は、
Ａ）前記命令を、伝送媒体を介して送信すること、
Ｂ）前記命令を、伝送媒体を介して受信すること、
Ｃ）前記命令を、機械可読記憶媒体上に格納すること、及び
Ｄ）前記命令を実行すること、
のうちの少なくとも１つであり、
前記命令は、１つ以上のプロセッサによって実行されると、クライアントにおいて、その各配列要素がＸＭＬ文書のＸＭＬ要素を表す１つ以上の配列要素を、メモリ内に保持される配列のパーティション内にロードし、また、前記クライアントの前記メモリ内に保持されるデータ量が閾値を超過すると判断すると、前記パーティションの前記配列要素を、前記ＸＭＬ文書全体を永続的に格納することなく、データベース内に永続的に格納する、命令であり、
前記配列要素は、前記クライアントによってデータベースサーバに、当該データベースサーバが前記データベースに直接書込みできる１つ以上のデータブロックで供給される、方法。
【国際調査報告】
2009521774.tif 000006
2009521774.tif 000007
2009521774.tif 000008