(57)【要約】【課題】ＷＯＳ−ＲＯＳ変換を複数のワーカで並列に行うこと。【解決手段】変換部１４は、ＷＯＳ１３をＲＯＳ１５に変換する。可変長の列についてＷＯＳ−ＲＯＳ変換用に、ＴＩＤに対応付けてＲＯＳ１５上のデータの格納範囲を示す情報をＷＯＳ１３に記憶する。そして、バックエンド部１２により生成された各ワーカ１４ｂは、ＲＯＳ１５上のデータの格納範囲を示す情報を用いてＲＯＳ１５への書き込み位置を特定し、データをＲＯＳ１５に書き込む。【選択図】図４
2019125264.tif 000002
【特許請求の範囲】
【請求項１】
ＷＯＳのデータ構造であって、
行識別子に対応づけてＲＯＳ上のデータの格納範囲を示す情報を備え、
前記ＷＯＳの行識別子に基づく、前記ＲＯＳへの複数の書き込み処理の競合の排除に、前記複数の書き込み処理に関連する前記ＷＯＳの行識別子に対応するＲＯＳ上のデータの格納範囲が利用される、
ことを特徴とするＷＯＳのデータ構造。
【請求項２】
前記ＲＯＳ上のデータの格納範囲を示す情報は、前記ＲＯＳの先頭から該データまでのデータのサイズの合計値であることを特徴とする請求項１に記載のＷＯＳのデータ構造。
【請求項３】
前記ＲＯＳ上のデータの格納範囲を示す情報は、前記ＲＯＳの先頭から該データの前のデータまでのデータのサイズの合計値であることを特徴とする請求項１に記載のＷＯＳのデータ構造。
【請求項４】
前記ＲＯＳ上のデータの格納範囲を示す情報は、前記ＲＯＳにおける書き込み開始位置であることを特徴とする請求項１に記載のＷＯＳのデータ構造。
【請求項５】
コンピュータに、
行識別子に対応づけてＲＯＳ上のデータの格納範囲を示す情報をＷＯＳに記憶し、
前記ＷＯＳを分割して複数の部分ＷＯＳを生成し、
前記複数の部分ＷＯＳを対象として前記格納範囲を示す情報に基づいて前記ＲＯＳへの書き込みを並列に行う
処理を実行させることを特徴とするデータ変換プログラム。
【請求項６】
前記ＲＯＳ上のデータの格納範囲を示す情報は、前記ＲＯＳの先頭から該データまでのデータのサイズの合計値であることを特徴とする請求項５に記載のデータ変換プログラム。
【請求項７】
前記ＷＯＳに含まれるデータが削除された場合に、該データに対応づけて該データが削除されたことを示す情報を削除ベクトルとして作成することを特徴とする請求項５又は６に記載のデータ変換プログラム。
【請求項８】
コンピュータが、
行識別子に対応づけてＲＯＳ上のデータの格納範囲を示す情報をＷＯＳに記憶し、
前記ＷＯＳを分割して複数の部分ＷＯＳを生成し、
前記複数の部分ＷＯＳを対象として前記格納範囲を示す情報に基づいて前記ＲＯＳへの書き込みを並列に行う
処理を実行することを特徴とするデータ変換方法。
【請求項９】
行識別子に対応づけてＲＯＳ上のデータの格納範囲を示す情報を記憶するＷＯＳと、
前記ＷＯＳを分割して複数の部分ＷＯＳを生成する生成部と、
前記生成部により生成された複数の部分ＷＯＳを対象として前記格納範囲を示す情報に基づいて前記ＲＯＳへの書き込みを並列に行う書き込み部と
を有することを特徴とするデータ変換装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＷＯＳ（Write  Optimized  Store）のデータ構造、データ変換プログラム、データ変換方法及びデータ変換装置に関する。
【背景技術】
【０００２】
リレーショナルデータベース管理システム（Relational  Database  Management  System：ＲＤＢＭＳ）では、ＯＬＴＰ（Online  Transaction  Processing）とＯＬＡＰ（Online  Analytical  Processing）の２つの処理が行われる。ＯＬＴＰは、レコードの挿入、更新及び削除を行う処理であり、ＯＬＡＰは、すでに蓄積されたレコードに統計処理等を行う処理である。
【０００３】
図９は、ＯＬＴＰとＯＬＡＰの特徴を示す図である。図９において、行型とは、１つの行（レコード）に含まれるデータをまとめて記憶する行型のデータベースを示し、列型（カラムナ）とは、１つの列に含まれるデータをまとめて記憶する列型のデータベースを示す。
【０００４】
図９に示すように、ＯＬＴＰでは、データベースに対する更新処理が発生するが、ＯＬＡＰと比較して少数のデータに対する検索が行われる。したがって、ＯＬＴＰでは、行型を用いる方が列型を用いるより処理が速い。一方、ＯＬＡＰでは、特定の列に関する集計等で大量データの集計が行われる。したがって、ＯＬＡＰでは、列型を用いる方が行型を用いるより処理が速い。このため、レコードの挿入、更新及び削除の操作は行型のデータベースに対して行われ、日毎、週毎等非同期に行型のデータベースのデータを列型のデータベースに移す処理が行われる。
【０００５】
近年、直近の集計データをビジネスに生かすことが求められている。例えば、午前の売り上げ状況に基づいて、午後の配送計画を策定することが行われる。このため、行型のデータベースと列型のデータベースの両方の利点を備えたデータベース管理システムに対するニーズが高まっている。
【０００６】
図１０及び図１１は、行型のデータベースと列型のデータベースの両方の利点を備えたデータベース管理システムのアーキテクチャの概要を説明するための図である。図１０は、更新ＳＱＬに対する処理を説明するための図であり、図１１は、検索ＳＱＬに対する処理を説明するための図である。ここで、更新ＳＱＬは、レコードの挿入、更新又は削除を行うことによりデータベースを更新するＳＱＬであり、検索ＳＱＬはデータベースを検索するＳＱＬである。
【０００７】
図１０及び図１１に示すように、行型のデータベースと列型のデータベースの両方の利点を備えたデータベース管理システムは、ＤＢバッファ１ａを有する。ＤＢバッファ１ａは、メインメモリ上の領域であり、行型の書き込みバッファであるＷＯＳ１３と、列型のデータ構造のグローバルＲＯＳ（Read  Optimized  Store）１５を有する。
【０００８】
図１０に示すように、更新ＳＱＬに対する処理では、行型のデータベースであるオリジナルテーブル１１とＷＯＳ１３が更新ＳＱＬと同期的に更新される。そして、更新ＳＱＬとは非同期にＷＯＳ１３のデータをグローバルＲＯＳ１５に反映するＷＯＳ−ＲＯＳ変換が行われる。
【０００９】
また、検索ＳＱＬに対する処理では、図１１に示すように、ＷＯＳ１３が記憶する直近のデータが列型のローカルＲＯＳ１６ａに変換され、ローカルＲＯＳ１６ａとグローバルＲＯＳ１５に対して検索が行われる。なお、以下では、グローバルＲＯＳ１５を単にＲＯＳ１５として表す。
【００１０】
図１２は、ＷＯＳ−ＲＯＳ変換の例を示す図である。図１２に示すように、オリジナルテーブル１１には、列としてＴＩＤ（Tuple-ID）、取引日（ａ1）、コード（ａ2）、・・・、商品説明（ａn）が含まれる。ＴＩＤは、行を識別する行識別子である。取引日は、商品の取引が行われた日付である。コードは、商品の識別に用いられるコードである。商品説明は、商品に関する簡単な説明である。
【００１１】
ＷＯＳ１３には、更新されたデータのＴＩＤだけが記憶される。したがって、ＷＯＳ−ＲＯＳ変換を行う変換部は、ＴＩＤを用いてオリジナルテーブル１１からデータを取得し（１）、列型に格納することでＲＯＳ１５を作成する。
【００１２】
図１３は、可変長データのＷＯＳ−ＲＯＳ変換を説明するための図である。図１３に示すように、オリジナルテーブル１１の商品説明は可変長である。このように、オリジナルテーブル１１が可変長の列を含む場合、変換部は、ＴＩＤを用いてオリジナルテーブル１１からデータを取得し（１）、可変長の列については、エクステントよりも小さい単位（例えば１２８行）のバッファ２１を確保して書き込む（２）。ここで、エクステントは、ＷＯＳ−ＲＯＳ変換の単位である。ＲＯＳ１５は、エクステント毎にデータを記憶する。バッファ２１のサイズは、列のサイズの最大値に行の数を掛けた値である。
【００１３】
変換部は、バッファ２１に書き込む際に可変長データのサイズを把握し、バッファ２１を介してＷＯＳ−ＲＯＳ変換を行う（３）。そして、変換部は、バッファ２１をＲＯＳにコピーする（４）。
【００１４】
なお、並列演算器を用いて、可変長データについても効率的なデータベース処理を実現する従来技術がある。この従来技術は、可変長データを含むタプルデータをフラグメントに格納するとともに、フラグメントヘッダとしてフラグメントのメタデータを格納する。そして、この従来技術は、カラムストアデータベースに格納されたデータの処理に際して、メタデータを参照して各スレッドに割り当てるフラグメントを決定し、決定内容に基づいて各スレッドにフラグメントを割り当てて並列演算を実行させる。
【００１５】
また、タプルデータを属性データ毎にまとめて記憶装置に格納する際に、タプルデータを構成する各属性データを、属性データ毎に各々設定された所定容量の記憶領域を有する複数のチャンクに、表形式においてタプルデータが位置する順番で格納する技術がある。そして、この技術は、属性毎に設定されたチャンク内から削除された属性データが含まれるタプルデータの表形式における順番を特定する情報を表す削除データ情報を属性毎に取得し、当該削除データ情報に基づいてチャンクを解放する。したがって、この技術は、チャンクを解放した時にタプルの情報に不整合が生じないようにすることができる。
【００１６】
また、データベース処理エンジンが、ストレージ装置に保存されたカラム型ページをロー型ページに変換してメモリ装置に保存するモジュールを有することで、データベースへの効率的なアクセスを実現する技術がある。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２０１２−２１２４２７号公報
【特許文献２】国際公開第２０１４／０５７６１６号
【特許文献３】国際公開第２０１４／０１００３８号
【発明の概要】
【発明が解決しようとする課題】
【００１８】
ＷＯＳ−ＲＯＳ変換中はＯＬＡＰの処理を行うことができないので、ＷＯＳ−ＲＯＳ変換にできるだけ時間がかからないようにする必要がある。このため、複数のワーカを用いてＷＯＳ−ＲＯＳ変換を並列に行うことが考えられる。ここで、ワーカは、ＷＯＳ−ＲＯＳ変換を行う処理部である。マルチコア環境では、ワーカを並列化することで、ＷＯＳ−ＲＯＳ変換を高速化することができる。
【００１９】
しかしながら、オリジナルテーブル１１が可変長の列を含む場合、各ワーカは、ＷＯＳ１３のどこからＴＩＤを取り出し、ＴＩＤに対応する可変長データをＲＯＳ１５のどこへ書き込めばよいかがわからない。したがって、ＷＯＳ−ＲＯＳ変換を並列に行うことができないという問題がある。
【００２０】
図１４は、ＷＯＳ−ＲＯＳ変換の並列化の問題を説明するための図である。図１４では、オリジナルテーブル１１に含まれる商品説明の列が可変長である。ＷＯＳ１３にある４つのＴＩＤのうちＴＩＤ＃１とＴＩＤ＃２がワーカ＃１に割り振られ、ＴＩＤ＃３とＴＩＤ＃４がワーカ＃２に割り振られる。
【００２１】
しかしながら、商品説明の列が可変長であるため、ワーカ＃１とワーカ＃２にそれぞれ２つのＴＩＤを割り振ることが妥当であるとは限らない。例えば、商品説明＃１のサイズが商品説明＃２〜商品説明＃４のサイズの和よりも大きい場合、ＴＩＤ＃１をワーカ＃１に割り振り、ＴＩＤ＃２〜ＴＩＤ＃４をワーカ＃２に割り振る方がワーカの処理が均等化される。
【００２２】
また、ワーカ＃２が商品説明＃１及び商品説明＃２をＲＯＳ１５に書き込み中である間は、商品説明＃１及び商品説明＃２のサイズが分からないため、ワーカ＃２はＲＯＳ１５のどこから書き込んでいいか分からない。したがって、ワーカ＃２は、ワーカ＃１の書き込み待ちとなり、ワーカ＃１と並列に動作することができない。
【００２３】
本発明は、１つの側面では、ＷＯＳ−ＲＯＳ変換を複数のワーカで並列に行うことを目的とする。
【課題を解決するための手段】
【００２４】
１つの態様では、ＷＯＳのデータ構造は、行識別子に対応づけてＲＯＳ上のデータの格納範囲を示す情報を備える。そして、前記ＷＯＳの行識別子に基づく、前記ＲＯＳへの複数の書き込み処理の競合の排除に、前記複数の書き込み処理に関連する前記ＷＯＳの行識別子に対応するＲＯＳ上のデータの格納範囲が利用される。
【発明の効果】
【００２５】
１つの側面では、本発明は、ＷＯＳ−ＲＯＳ変換を複数のワーカで並列に行うことができる。
【図面の簡単な説明】
【００２６】
【図１】図１は、ワーカの並列化のためにＷＯＳに追加する情報を説明するための図である。
【図２】図２は、ワーカによる並列書き込みを説明するための図である。
【図３】図３は、削除ベクトルを説明するための図である。
【図４】図４は、実施例に係るＲＤＢＭＳの機能構成を示す図である。
【図５】図５は、ＷＯＳを更新する処理のフローを示すフローチャートである。
【図６】図６は、割り振り処理のフローを示すフローチャートである。
【図７】図７は、ワーカによる処理のフローを示すフローチャートである。
【図８】図８は、ＲＤＢＭＳを実行するコンピュータのハードウェア構成を示す図である。
【図９】図９は、ＯＬＴＰとＯＬＡＰの特徴を示す図である。
【図１０】図１０は、更新ＳＱＬに対する処理を説明するための図である。
【図１１】図１１は、検索ＳＱＬに対する処理を説明するための図である。
【図１２】図１２は、ＷＯＳ−ＲＯＳ変換の例を示す図である。
【図１３】図１３は、可変長データのＷＯＳ−ＲＯＳ変換を説明するための図である。
【図１４】図１４は、ＷＯＳ−ＲＯＳ変換の並列化の問題を説明するための図である。
【発明を実施するための形態】
【００２７】
以下に、本願の開示するＷＯＳのデータ構造、データ変換プログラム、データ変換方法及びデータ変換装置の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００２８】
まず、ＷＯＳ−ＲＯＳ変換を行うワーカの並列化について説明する。図１は、ワーカの並列化のためにＷＯＳ１３に追加する情報を説明するための図である。図１において、（オフセット＋自身のデータ長）がＷＯＳ１３に追加される情報である。オフセットは、エクステントにおける可変長データの書き込み位置であり、自身のデータ長は、可変長データの長さである。すなわち、（オフセット＋自身のデータ長）は、エクステント内での可変長データの書き終わり位置である。（オフセット＋自身のデータ長）は、前のＴＩＤに対応する（オフセット＋自身のデータ長）にデータの長さを加えたものである。
【００２９】
商品説明＃１のサイズ（長さ）は２０であるので、ＴＩＤ＃１に対応する（オフセット＋自身のデータ長）は、０＋２０＝２０である。また、商品説明＃２のサイズは６０であるので、ＴＩＤ＃２に対応する（オフセット＋自身のデータ長）は、２０＋６０＝８０である。また、商品説明＃３のサイズは１０であるので、ＴＩＤ＃３に対応する（オフセット＋自身のデータ長）は、８０＋１０＝９０である。
【００３０】
ワーカは、（オフセット＋自身のデータ長）を用いてエクステントにおける書き込み位置を特定する。図２は、ワーカによる並列書き込みを説明するための図である。図２では、ＴＩＤ＃１〜ＴＩＤ＃２がワーカ＃１に割り振られ、ＴＩＤ＃３〜ＴＩＤ＃５がワーカ＃２に割り振られる。ＴＩＤ＃２に対応する（オフセット＋自身のデータ長）は８０であり、ＴＩＤ＃５に対応する（オフセット＋自身のデータ長）は１６０であるので、ワーカ＃１及びワーカ＃２は、それぞれ８０の長さのデータをエクステント１５ａに書き込む。
【００３１】
ワーカ＃１は、ＴＩＤ＃１〜ＴＩＤ＃２に対応する商品説明＃１〜商品説明＃２をオリジナルテーブル１１から取り出してエクステント１５ａに書き込む。また、ワーカ＃２は、ＴＩＤ＃３〜ＴＩＤ＃５に対応する商品説明＃３〜商品説明＃５をオリジナルテーブル１１から取り出してエクステント１５ａに書き込む。
【００３２】
ワーカ＃２は、ＷＯＳ１３においてＴＩＤ＃２に対応付けられた（オフセット＋自身のデータ長）が８０であることを特定し、その後ろから商品説明＃３をエクステント１５ａに書き込む。したがって、ワーカ＃１とワーカ＃２は、並列にエクステント１５ａへの書き込みを行うことができる。
【００３３】
このように、各ワーカはエクステント１５ａにおいて書き込み始める場所が分かるので、複数のワーカが同時に書き込みを行うことができる。また、タスク毎の書き込み位置の特定は、（オフセット＋自身のデータ長）に基づいて行われる。ここで、タスクとは、ワーカが書き込みを行う単位であり、ＷＯＳ１３が分割されたものである。図２では、ＴＩＤ＃１〜ＴＩＤ＃２が１つのタスクであり、ＴＩＤ＃３〜ＴＩＤ＃５が１つのタスクである。タスクの数は、例えばワーカの数の１０倍である。各ワーカは、タスクを順番に取り出して処理し、１つのタスクの処理が終了すると次のタスクを取り出す。
【００３４】
なお、図２では、商品説明だけが可変長であるが、レコードに可変長データが複数ある場合には、ＷＯＳ１３は、可変長データ毎に（オフセット＋自身のデータ長）を有する。
【００３５】
また、データが削除された場合にも（オフセット＋自身のデータ長）は更新されない。削除されたデータは削除ベクトルによって管理される。図３は、削除ベクトルを説明するための図である。図３に示すように、削除されたデータは、ＷＯＳ１３において、ホワイトアウト（whiteout）ＷＯＳ１３ｂにより管理される。ホワイトアウトＷＯＳ１３ｂには、削除されたデータのＴＩＤが登録される。図３では、ＴＩＤ＃３に対応するデータが削除されている。図３において、これまで説明してきたＷＯＳ１３は、データＷＯＳ１３ａに対応する。ＷＯＳ１３は、データＷＯＳ１３ａとホワイトアウトＷＯＳ１３ｂを含む。
【００３６】
各ワーカは、データＷＯＳ１３ａからエクステント１５ａへの書き込みを並列に行う。ワーカ＃２は、削除されたＴＩＤ＃３も含めてエクステント１５ａへの書き込みを行う。また、ホワイトアウトＷＯＳ１３ｂからは削除ベクトル１５ｂが生成される。削除ベクトル１５ｂは、削除されたデータのＴＩＤに対応付けられたビットが１に設定されるベクトルである。削除ベクトル１５ｂにおいて、削除されていないデータに対応するビットは０である。ＯＬＡＰは、削除ベクトル１５ｂにおいて値が１であるエントリに対応するデータを用いない。
【００３７】
次に、実施例に係るＲＤＢＭＳ（Relational  Database  Management  System：リレーショナルデータベース管理システム）の機能構成について説明する。図４は、実施例に係るＲＤＢＭＳの機能構成を示す図である。図４に示すように、実施例に係るＲＤＢＭＳ１は、オリジナルテーブル１１と、バックエンド部１２と、ＷＯＳ１３と、変換部１４と、ＲＯＳ１５と、ＳＱＬプロセッサ１６とを有する。
【００３８】
オリジナルテーブル１１は、行型のデータベースである。バックエンド部１２は、オリジナルテーブル１１へのレコードの挿入、オリジナルテーブル１１のレコードの更新及び削除、ＷＯＳ１３の更新、ワーカの生成、データＷＯＳ１３ａのタスクへの分割を行う。バックエンド部１２は、ＷＯＳ更新部１２ａと、ワーカ生成部１２ｂと、タスク生成部１２ｃとを有する。
【００３９】
ＷＯＳ更新部１２ａは、バックエンド部１２によるオリジナルテーブル１１の操作と同期してＷＯＳ１３を更新する。ＷＯＳ更新部１２ａは、データＷＯＳ１３ａに挿入レコードのＴＩＤを追加する際に、可変長のデータについて、（オフセット＋自身のデータ長）を付加する。また、ＷＯＳ更新部１２ａは、レコードが削除されると、ホワイトアウトＷＯＳ１３ｂに削除されたレコードのＴＩＤを追加する。
【００４０】
ワーカ生成部１２ｂは、変換部１４からの依頼に基づいて設定値に従った数のワーカ１４ｂを生成して起動する。タスク生成部１２ｃは、変換部１４からの依頼に基づいて、データＷＯＳ１３ａをワーカ１４ｂの数に応じた数に分割し、タスクを生成する。タスク生成部１２ｃは、例えば、ワーカ１４ｂの数を１０倍した数のタスクを生成する。タスク生成部１２ｃは、例えば、行数あるいはタスクのデータ長が均等になるようにデータＷＯＳ１３ａを分割する。
【００４１】
ＷＯＳ１３は、データＷＯＳ１３ａとホワイトアウトＷＯＳ１３ｂを有する。データＷＯＳ１３ａは、行型の書き込みバッファであり、オリジナルテーブル１１とＲＯＳ１５との差分をＴＩＤを用いて記憶する。また、データＷＯＳ１３ａは、可変長のデータについて、（オフセット＋自身のデータ長）をＴＩＤと対応付けて記憶する。ホワイトアウトＷＯＳ１３ｂは、削除されたデータのＴＩＤを記憶する。なお、以降の説明でＷＯＳ１３はデータＷＯＳ１３ａを表すものとする。
【００４２】
変換部１４は、ＷＯＳ−ＲＯＳ変換を行い、エクステント１５ａを作成する。また、変換部１４は、ホワイトアウトＷＯＳ１３ｂに基づいて削除ベクトル１５ｂを作成する。変換部１４は、割り振り部１４ａと、複数のワーカ１４ｂと、削除ベクトル作成部１４ｃとを有する。
【００４３】
割り振り部１４ａは、ワーカの生成とタスクの生成をバックエンド部１２に依頼し、ワーカ１４ｂにタスクを処理させる。
【００４４】
ワーカ１４ｂは、タスクに含まれるＴＩＤに対応するデータをオリジナルテーブル１１から読み出し、エクステント１５ａに書き込む。ワーカ１４ｂは、（オフセット＋自身のデータ長）を用いてエクステント１５ａ内の書き込み位置を特定する。
【００４５】
削除ベクトル作成部１４ｃは、ホワイトアウトＷＯＳ１３ｂが記憶するＴＩＤに基づいて削除ベクトル１５ｂを作成する。削除ベクトル作成部１４ｃは、削除ベクトル１５ｂにおいて、ホワイトアウトＷＯＳ１３ｂが記憶するＴＩＤに対応するビットを１に設定する。なお、削除ベクトル作成部１４ｃは、例えば、ワーカ１４ｂとは異なるワーカにより実現される。
【００４６】
ＲＯＳ１５は、オリジナルテーブル１１のレコードが列型に変換されたデータベースである。ＲＯＳ１５は、エクステント１５ａ及び削除ベクトル１５ｂの集合である。列の集計処理等は、ＲＯＳ１５を用いて行われる。
【００４７】
ＳＱＬプロセッサ１６は、検索ＳＱＬを処理してデータベースの検索を行う。ＳＱＬプロセッサ１６は、検索ＳＱＬを受け取ると、ＷＯＳ１３を変換してローカルＲＯＳ１６ａを作成する。そして、ＳＱＬプロセッサ１６は、ＲＯＳ１５とローカルＲＯＳ１６ａを用いて検索を行う。
【００４８】
次に、ＷＯＳ１３を更新する処理のフローについて説明する。図５は、ＷＯＳ１３を更新する処理のフローを示すフローチャートである。なお、図５に示す処理は、オリジナルテーブル１１が更新された後に行われる。
【００４９】
図５に示すように、ＷＯＳ更新部１２ａは、ＷＯＳ１３にＴＩＤを格納する（ステップＳ１）。そして、ＷＯＳ更新部１２ａは、以下のステップＳ２〜ステップＳ５の処理をＲＯＳに格納される全ての列に対して繰り返す。
【００５０】
すなわち、ＷＯＳ更新部１２ａは、列のデータ型を読み取り（ステップＳ２）、データ型は可変長か否かを判定する（ステップＳ３）。そして、データ型が可変長である場合には、ＷＯＳ更新部１２ａは、データサイズを特定し、ＷＯＳ１３内の当該列に対応する（オフセット＋自身のデータ長）の最後尾の値と足し、ＴＩＤに対応する（オフセット＋自身のデータ長）を算出する（ステップＳ４）。そして、ＷＯＳ更新部１２ａは、算出した（オフセット＋自身のデータ長）をＴＩＤに対応付けてＷＯＳ１３に格納する（ステップＳ５）。
【００５１】
このように、ＷＯＳ更新部１２ａが、（オフセット＋自身のデータ長）をＴＩＤに対応付けてＷＯＳ１３に格納するので、ワーカ１４ｂは、（オフセット＋自身のデータ長）を用いて並列にＲＯＳ１５への書き込みを行うことができる。
【００５２】
次に、割り振り処理のフローについて説明する。図６は、割り振り処理のフローを示すフローチャートである。図６に示すように、割り振り部１４ａは、バックエンド部１２に設定値に従った個数のワーカ１４ｂの生成を依頼する（ステップＳ１１）。
【００５３】
そして、割り振り部１４ａは、バックエンド部１２にワーカ１４ｂの数に応じたタスクの生成を依頼し（ステップＳ１２）、全てのワーカ１４ｂが終了するまで待機する（ステップＳ１３）。
【００５４】
このように、割り振り部１４ａがバックエンド部１２にワーカ１４ｂの生成とタスクの生成を依頼することで、変換部１４は、ＷＯＳ−ＲＯＳ変換を並列に行うことができる。
【００５５】
次に、ワーカ１４ｂによる処理のフローについて説明する。図７は、ワーカ１４ｂによる処理のフローを示すフローチャートである。なお、図７は、ＷＯＳ−ＲＯＳ変換の対象の列が可変長である場合を示す。図７に示すように、ワーカ１４ｂは、以下のステップＳ２１〜ステップＳ２３の処理を未処理のタスクがなくなるまで繰り返す。
【００５６】
すなわち、ワーカ１４ｂは、タスクを１つ取り出し（ステップＳ２１）、ＲＯＳ１５への書き込み位置をＷＯＳ１３から読み取る（ステップＳ２２）。具体的には、ワーカ１４ｂは、対象のＴＩＤの１つ前の（オフセット＋自身のデータ長）の次の位置を書き込み位置とする。そして、ワーカ１４ｂは、書き込み位置からＲＯＳ１５にデータを書き込む（ステップＳ２３）。
【００５７】
このように、ワーカ１４ｂは、対象のＴＩＤの１つ前の（オフセット＋自身のデータ長）の次の位置を書き込み位置とすることで、他のワーカ１４ｂと並列にＲＯＳ１５への書き込みを行うことができる。
【００５８】
次に、ＲＤＢＭＳ１を実行するコンピュータについて説明する。図８は、ＲＤＢＭＳ１を実行するコンピュータのハードウェア構成を示す図である。図８に示すように、コンピュータ５０は、メインメモリ５１と、ＣＰＵ５２と、ＬＡＮ（Local  Area  Network）インタフェース５３と、ＨＤＤ（Hard  Disk  Drive）５４とを有する。また、コンピュータ５０は、スーパーＩＯ（Input  Output）５５と、ＤＶＩ（Digital  Visual  Interface）５６と、ＯＤＤ（Optical  Disk  Drive）５７とを有する。
【００５９】
メインメモリ５１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ５２は、メインメモリ５１からプログラムを読み出して実行する中央処理装置である。ＣＰＵ５２は、メモリコントローラを有するチップセットを含む。
【００６０】
ＬＡＮインタフェース５３は、コンピュータ５０をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ５４は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ５５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ５６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ５７は、ＤＶＤの読み書きを行う装置である。
【００６１】
ＬＡＮインタフェース５３は、ＰＣＩエクスプレス（ＰＣＩｅ）によりＣＰＵ５２に接続され、ＨＤＤ５４及びＯＤＤ５７は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ５２に接続される。スーパーＩＯ５５は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ５２に接続される。
【００６２】
そして、コンピュータ５０において実行されるＲＤＢＭＳ１は、ＤＶＤに記憶され、ＯＤＤ５７によってＤＶＤから読み出されてコンピュータ５０にインストールされる。あるいは、ＲＤＢＭＳ１は、ＬＡＮインタフェース５３を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読出されてコンピュータ５０にインストールされる。そして、インストールされたＲＤＢＭＳ１は、ＨＤＤ５４に記憶され、メインメモリ５１に読み出されてＣＰＵ５２によって実行される。
【００６３】
上述してきたように、実施例では、ＴＩＤに対応付けて（オフセット＋自身のデータ長）をＷＯＳ１３に記憶する。そして、ワーカ１４ｂは、（オフセット＋自身のデータ長）を用いてＲＯＳ１５への書き込み位置を特定する。したがって、ワーカ１４ｂは、特定した書き込み位置を用いてＲＯＳ１５への書き込みを行うことができ、他のワーカ１４ｂと競合することなく、並列に動作することができる。
【００６４】
また、実施例では、割り振り部１４ａが、バックエンド部１２に依頼してＷＯＳ１３を均等なタスクに分割する。そして、各ワーカ１４ｂは、タスクを順番に取り出してＷＯＳ−ＲＯＳ変換を行う。したがって、割り振り部１４ａは、各ワーカ１４ｂの負荷を均等化することができ、ＷＯＳ−ＲＯＳ変換を高速化することができる。
【００６５】
また、実施例では、削除ベクトル作成部１４ｃが、ホワイトアウトＷＯＳ１３ｂが記憶するＴＩＤに基づいて削除ベクトル１５ｂを作成するので、削除されたデータがＯＬＡＰで使用されることを防ぐことができる。
【００６６】
なお、実施例では、ＴＩＤに（オフセット＋自身のデータ長）を対応付ける場合について説明したが、ＲＯＳ１５への書き込み範囲を特定できる値であれば他の値をＴＩＤに対応付けてもよい。例えば、１つ前のＴＩＤのデータを書き終える位置をＴＩＤに対応付けてもよい。あるいは、ＲＯＳ１５への書き込み開始位置をＴＩＤに対応付けてもよい。
【符号の説明】
【００６７】
１    ＲＤＢＭＳ
１ａ    ＤＢバッファ
１１    オリジナルテーブル
１２    バックエンド部
１２ａ    ＷＯＳ更新部
１２ｂ    ワーカ生成部
１２ｃ    タスク生成部
１３    ＷＯＳ（データＷＯＳ）
１３ａ    データＷＯＳ
１３ｂ    ホワイトアウトＷＯＳ
１４    変換部
１４ａ    割り振り部
１４ｂ    ワーカ
１４ｃ    削除ベクトル作成部
１５    ＲＯＳ（グローバルＲＯＳ）
１５ａ    エクステント
１５ｂ    削除ベクトル
１６    ＳＱＬプロセッサ
１６ａ    ローカルＲＯＳ
２１  バッファ
５０    コンピュータ
５１    メインメモリ
５２    ＣＰＵ
５３    ＬＡＮインタフェース
５４    ＨＤＤ
５５    スーパーＩＯ
５６    ＤＶＩ
５７    ＯＤＤ
【図１】
2019125264.tif 000003
【図２】
2019125264.tif 000004
【図３】
2019125264.tif 000005
【図４】
2019125264.tif 000006
【図５】
2019125264.tif 000007
【図６】
2019125264.tif 000008
【図７】
2019125264.tif 000009
【図８】
2019125264.tif 000010
【図９】
2019125264.tif 000011
【図１０】
2019125264.tif 000012
【図１１】
2019125264.tif 000013
【図１２】
2019125264.tif 000014
【図１３】
2019125264.tif 000015
【図１４】
2019125264.tif 000016