(57)【要約】【課題】カラムストア型のデータベースにおいてデータの更新処理などを行う場合に十分に性能を発揮できない場合がある、という問題を解決すること。【解決手段】表形式のデータを列形式に分割して並び替える処理を行う複数のデータ処理部と、取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて複数のデータ処理部の何れかに分配するデータ分配部と、複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶するデータ記憶部と、を備え、複数のデータ処理部は、表形式のデータの各レコードに含まれる要素の値に従って、並び替える処理を行う。【選択図】図２
2015185104.tif 000002
【特許請求の範囲】
【請求項１】
表形式のデータを列形式に分割して並び替える処理を行う複数のデータ処理部と、
取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて前記複数のデータ処理部の何れかに分配するデータ分配部と、
前記複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶するデータ記憶部と、を備え、
前記複数のデータ処理部は、前記表形式のデータの各レコードに含まれる前記要素の値に従って、前記並び替える処理を行う、
データベース装置。
【請求項２】
請求項１に記載のデータベース装置であって、
前記データ分配部は、前記表形式のデータの各レコードに含まれる要素の値の分布状況に応じて、前記表形式のデータの各レコードを前記複数のデータ処理部の何れかに分配する、
データベース装置。
【請求項３】
請求項２に記載のデータベース装置であって、
前記データ分配部は、前記データ記憶部が記憶するデータの分布状況に基づいて前記表形式のデータの各レコードに含まれる要素の値の分布状況を推測し、当該推測した前記表形式のデータの各レコードに含まれる要素の値の分布状況に応じて、前記表形式のデータの各レコードを前記複数のデータ処理部の何れかに分配する、
データベース装置。
【請求項４】
請求項２又は３に記載のデータベース装置であって、
前記データ分配部は、前記表形式のデータの各レコードに含まれる要素の値の分布状況を取得して当該取得した値の分布状況に基づいて前記複数のデータ処理部のそれぞれに分配されるデータのサイズが均等になる分配閾値を算出し、当該算出した分配閾値に基づいて、前記表形式のデータの各レコードを前記複数のデータ処理部の何れかに分配する、
データベース装置。
【請求項５】
請求項２乃至４の何れかに記載のデータベース装置であって、
前記データ分配部は、前記表形式のデータの各レコードに含まれる要素の値の分布状況に応じて、近似する要素の値を含むレコードが同一のデータ処理部に配分されるよう前記表形式のデータの各レコードを前記複数のデータ処理部の何れかに分配する、
データベース装置。
【請求項６】
請求項１乃至５の何れかに記載のデータベース装置であって、
前記複数のデータ処理部のそれぞれは、前記データ記憶部に予め記憶されている元データの各レコードと、取得した前記表形式のデータの各レコードとを併せて前記並び替える更新処理を行い、
前記データ記憶部は、前記複数のデータ処理部のそれぞれで処理された前記更新処理の結果を結合して記憶する、
データベース装置。
【請求項７】
請求項１乃至６の何れかに記載のデータベース装置であって、
前記複数のデータ処理部のそれぞれに対応した、表形式のデータを一時的に記憶する複数のデータ一時記憶部を備え、
前記データ分配部は、前記表形式のデータの各レコードを、当該表形式のデータの各レコードを取得するごとに前記複数のデータ一時記憶部の何れかに分配し、
前記複数のデータ処理部は、同一のタイミングで前記データ一時記憶部が記憶するデータに対して前記処理を開始する、
データベース装置。
【請求項８】
情報記憶装置に、
表形式のデータを列形式に分割して並び替える処理を行う複数のデータ処理部と、
取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて前記複数のデータ処理部の何れかに分配するデータ分配部と、
前記複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶するデータ記憶部と、を実現させ、
前記複数のデータ処理部は、前記表形式のデータの各レコードに含まれる前記要素の値に従って、前記並び替える処理を行う、
プログラム。
【請求項９】
取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて複数のデータ処理部の何れかに分配し、
前記複数のデータ処理部のそれぞれは、表形式のデータを列形式に分割して並び替える処理を行い、当該複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶する、
情報処理方法。
【請求項１０】
表形式のデータを列形式に分割して並び替える処理を行う複数のデータ処理部と、
取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて前記複数のデータ処理部の何れかに分配するデータ分配部と、
前記複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶するデータ記憶部と、を備え、
前記複数のデータ処理部は、前記表形式のデータの各レコードに含まれる前記要素の値に従って、前記並び替える処理を行うデータベース装置と、
前記データベース装置に対して前記表形式のデータを送信するクライアント装置と、
を備える、データベースシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース装置、プログラム、情報処理方法、データベースシステムに関する。
【背景技術】
【０００２】
データをカラム（列）毎に分割して保持するカラムストア型のデータベースが知られている。カラムストア型のデータベースでは、上記のように、データをカラム毎に分割して保持している。そのため、カラムストア型データベースでは、例えば特定の列の値を一度に処理するなど、列指向の処理を高速に行うことが可能となる。
【０００３】
このように、カラムストア型のデータベースは、列を抜き出して集計処理を行うなど、列方向のデータの集計、分析などを得意とするデータベースである。そのため、上記のようなカラムストア型のデータベースは、例えば大量のデータを一括で処理する場合のような、高速に集計や結合処理を行いたい場面などで活用されている。
【０００４】
カラムストア型のデータベースの中には、列単位にデータをソートして格納することで、参照・集計・結合の処理をさらに高速化させているシステムがある。このようなデータをソートして格納するシステムでは、更新処理が入るたびに各列のソートを行うことが必要になる。そのため、例えば大量の更新命令が来た場合には、命令の都度ソートを実行する必要が生じることになる。その結果、このようなシステムでは、命令の都度実行するソートにより処理性能が遅くなってしまうという課題があった。
【０００５】
このような課題に対応する技術の一つとして、例えば、特許文献１がある。特許文献１によると、データを追記する際に、追記対象のデータの順列値と追記対象のデータサブセットにおける各シンボル値の識別値とに従前に蓄積されたデータサブセットの識別値を加算する。また、追記対象のデータサブセットの識別値に当該データサブセットに含まれるシンボル値の識別値の最大値を設定する。このような処理によりデータを追加することで、特許文献１によると、高速な読み取り応答性能を大幅に損なうことなく、より高速な追記処理応答を行うことが可能となる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−２０９８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、カラムストア型のデータベースの用途によっては、データをきちんとソートして高速な参照・集計・結合処理を実現したい場合がある。このような場合、上記ソートを行うことにより、上述したように、処理性能が遅くなってしまうという問題が再燃することになる。
【０００８】
また、列単位のソートを行うカラムストア型のデータベースにおいては、大量のデータ更新処理が来た場合に、ＣＰＵのコア数分に並列処理が出来るよう更新データを分割し、それぞれのスレッドでソートを行うよう構成されているものがある。このようなシステムにおいては、各スレッドのデータ処理が完了した後に各スレッドでのソート結果をマージし、データを指すアドレスの情報を整理する処理などが必要となる。このため、各スレッドでの処理が終了するまでの待ちが発生し、並列化の効果が十分に発揮できない場合があるという問題があった。
【０００９】
このように、カラムストア型のデータベースにおいては、データの更新処理などを行う場合に十分に性能を発揮できない場合がある、という問題が生じていた。
【００１０】
そこで、本発明の目的は、データの更新処理などを行う場合に十分に性能を発揮できない場合がある、という問題を解決するデータベース装置を提供することにある。
【課題を解決するための手段】
【００１１】
かかる目的を達成するため本発明の一形態であるデータベース装置は、
表形式のデータを列形式に分割して並び替える処理を行う複数のデータ処理部と、
取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて前記複数のデータ処理部の何れかに分配するデータ分配部と、
前記複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶するデータ記憶部と、を備え、
前記複数のデータ処理部は、前記表形式のデータの各レコードに含まれる前記要素の値に従って、前記並び替える処理を行う、
という構成を採る。
【００１２】
また、本発明の他の形態であるプログラムは、
情報記憶装置に、
表形式のデータを列形式に分割して並び替える処理を行う複数のデータ処理部と、
取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて前記複数のデータ処理部の何れかに分配するデータ分配部と、
前記複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶するデータ記憶部と、を実現させ、
前記複数のデータ処理部は、前記表形式のデータの各レコードに含まれる前記要素の値に従って、前記並び替える処理を行う、
プログラムである。
【００１３】
また、本発明の他の形態である情報処理方法は、
取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて複数のデータ処理部の何れかに分配し、
前記複数のデータ処理部のそれぞれは、表形式のデータを列形式に分割して並び替える処理を行い、当該複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶する、
という構成を採る。
【００１４】
また、本発明の他の形態であるデータベースシステムは、
表形式のデータを列形式に分割して並び替える処理を行う複数のデータ処理部と、
取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて前記複数のデータ処理部の何れかに分配するデータ分配部と、
前記複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶するデータ記憶部と、を備え、
前記複数のデータ処理部は、前記表形式のデータの各レコードに含まれる前記要素の値に従って、前記並び替える処理を行うデータベース装置と、
前記データベース装置に対して前記表形式のデータを送信するクライアント装置と、
を備える、
という構成を採る。
【発明の効果】
【００１５】
本発明は、以上のように構成されることにより、大量のデータ更新を行う場合などにおいても十分に処理性能を発揮することの出来るデータベース装置を提供することが出来る。
【図面の簡単な説明】
【００１６】
【図１】本発明の第１の実施形態に係るデータベースシステムの全体の構成を示すブロック図である。
【図２】本発明の第１の実施形態に係るカラムストア型データベース管理システムの構成を示すブロック図である。
【図３】図２で示すクエリ実行部３３の構成の一例を示すブロック図である。
【図４】カラムストア型データベース管理システムによる処理を説明するための更新前のデータの一例を示す表である。
【図５】図４で示す表形式のデータをカラム型に変換した一例を示す表である。
【図６】カラムストア型データベース管理システムによる処理を説明するための更新データの一例を示す表である。
【図７】カラムストア型データベース管理システムによる処理を説明するための更新後のデータの一例を示す表である。
【図８】カラムストア型データベース管理システムによる処理の概要を説明する図である。
【図９】カラムストア型データベース管理システムによる処理を具体的に説明するための図である。
【図１０】カラムストア型データベース管理システムによる処理を具体的に説明するための図である。
【図１１】カラムストア型データベース管理システムによる処理を具体的に説明するための図である。
【図１２】カラムストア型データベース管理システムによる処理を具体的に説明するための図である。
【図１３】カラムストア型データベース管理システムによる処理を具体的に説明するための図である。
【図１４】カラムストア型データベース管理システムによる処理を具体的に説明するための図である。
【図１５】カラムストア型データベース管理システムの動作の一例を示すフローチャートである。
【図１６】スレッドの動作を説明するフローチャートである。
【図１７】本発明に関連するカラムストア型データベースの動作の一例を示すフローチャートである。
【図１８】本発明の第２の実施形態に係るカラムストア型データベース管理システムの構成を示すブロック図である。
【図１９】本発明の第３の実施形態に係るデータベース装置の構成の概要を示す概略ブロック図である。
【図２０】本発明の第４の実施形態に係るデータベースシステムの構成の概要を示す概略ブロック図である。
【発明を実施するための形態】
【００１７】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第１の実施形態]
本発明の第１の実施形態では、表形式のデータを列方向に分割して記憶するカラムストア型のデータベースシステム１について説明する。後述するように、本実施形態におけるデータベースシステム１は、夜間バッチなどによる大量の更新処理を行う場合に、ユーザの指定する期間内の更新処理を一度にまとめて反映させることが出来るよう構成されている。また、本実施形態におけるデータベースシステム１は、データの更新などを行う場合に、複数のＣＰＵによる並列処理を行うことが出来るよう構成されている。さらに、本実施形態におけるデータベースシステム１は、後述するように、上記複数のＣＰＵを用いて並列処理を行う際に、それぞれのＣＰＵで高い独立性を有する処理を行うことが出来るよう構成されている。
【００１８】
図１を参照すると、本実施形態におけるデータベースシステム１は、データベースクライアント２（クライアント装置）と、カラムストア型データベース管理システム３（データベース装置）と、を有している。また、図１で示すように、データベースクライアント２とカラムストア型データベース管理システム３とはネットワークを介して接続されており、互いに通信可能なよう構成されている。
【００１９】
なお、本実施形態においては、カラムストア型データベース管理システム３が１台の情報処理装置を備えて構成されている場合について説明する。しかしながら、本発明の実施は上記場合に限定されない。カラムストア型データベース管理システム３は、分散データベース管理システムのように、複数の情報処理装置を備えて構成されていても構わない。また、データベースクライアント２とカラムストア型データベース管理システム３とは、必ずしもネットワークを介して接続されていなくても構わない。データベースクライアント２とカラムストア型データベース管理システム３とは、例えば、一台の情報処理装置により構成されていても構わない。
【００２０】
データベースクライアント２は、情報処理装置である。データベースクライアント２は、図示しない中央演算装置（ＣＰＵ、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、記憶装置（メモリ及びハードディスク）と、を備えている。データベースクライアント２は、記憶装置が備えるプログラムをＣＰＵが実行することで、後述する機能を実現するように構成されている。
【００２１】
データベースクライアント２は、カラムストア型データベース管理システム３に対してデータの挿入や更新、削除などのクエリを発行する機能を有している。また、データベースクライアント２は、カラムストア型データベース管理システム３から、上記クエリの結果を受け付ける機能を有している。このように、データベースクライアント２は、カラムストア型データベース管理システム３に対してクエリを発行するための一般的な機能を備えている。
【００２２】
また、データベースクライアント２は、後述する更新モードの開始を指示する更新モード開始指示と更新モードの終了を指示する更新モード終了指示をカラムストア型データベース管理システム３に通知する機能を有している。後述するように、データベースクライアント２がカラムストア型データベース管理システム３に対して更新モード開始指示を通知することで、カラムストア型データベース管理システム３は更新モードを開始することになる。また、データベースクライアント２がカラムストア型データベース管理システム３に対して更新モード終了指示を通知することで、カラムストア型データベース管理システム３は更新モードを終了することになる。
【００２３】
カラムストア型データベース管理システム３は、情報処理装置である。カラムストア型データベース管理システム３は、図示しない中央演算装置（ＣＰＵ）と、記憶装置（メモリ及びハードディスク）と、を備えている。カラムストア型データベース管理システム３は、記憶装置が備えるプログラムをＣＰＵが実行することで、後述する機能を実現するように構成されている。
【００２４】
図２を参照すると、カラムストア型データベース管理システム３は、クエリ解析部３１と、実行計画部３２と、クエリ実行部３３と、スキーマ管理データ保存領域３４（データ記憶部の一部）と、ユーザデータ保存領域３５（データ記憶部の一部）と、を有している。また、スキーマ管理データ保存領域３４は、表定義領域３４１と、テーブルデータ統計情報領域３４２と、を有している。さらに、ユーザデータ保存領域３５は、複数の更新部分領域３５１１（３５１１、３５１２、…、３５１ｎ。以下、区別しない場合は更新部分領域３５１１とする）を有する一次領域３５１と、テーブルデータ保存領域３５２と、を有している。
【００２５】
クエリ解析部３１は、データベースクライアント２から発行されたＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）などの問合せ言語の内容を確認し、構文解析を実行するパーサとしての機能を有している。具体的には、クエリ解析部３１は、データベースクライアント２から送信されたクエリ（ＳＱＬ文）を受け取る。続いて、クエリ解析部３１は、受け取ったＳＱＬ文の構文解析を実行する。そして、クエリ解析部３１は、構文解析した結果を実行計画部３２へと送信する。
【００２６】
実行計画部３２は、クエリ解析部３１で解析したクエリをどのような順番や方法で行えば最も効率的であるかを判定し、その実行計画を作成するプランナとしての機能を有している。実行計画部３２は、クエリ解析部３１から構文解析した結果を受信すると、当該受信した結果を基に実行計画を作成する。そして、実行計画部３２は、作成した実行計画をクエリ実行部３３へと送信する。
【００２７】
なお、データベースクライアント２からＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）などで直接クエリ実行部３３の動作を指定する場合、上記クエリ解析部３１や実行計画部３２は通過しないことになる。
【００２８】
クエリ実行部３３は、実行計画部３２で作成した実行計画によるデータ操作命令を実行する機能を有している。また、クエリ実行部３３は、データベースクライアント２から直接受信したデータ操作命令（上記ＡＰＩで記載されているものなど）を受けて、スキーマ管理データ保存領域３４やユーザデータ保存領域３５に向けてクエリを実行する機能を有している。このように、クエリ実行部３３は、いわゆるデータベースのエグゼキュータと呼ばれる部分に相当する。
【００２９】
図３は、クエリ実行部３３が有する機能の一例である。図３を参照すると、クエリ実行部３３は、データ処理部３３１と、分布状況推測部３３２と、データ分配部３３３と、更新処理管理部３３４と、を有している。
【００３０】
データ処理部３３１は、クエリの実行などのデータ処理を行う機能を有している。本実施形態におけるカラムストア型データベース管理システム３は、複数のＣＰＵコアを有しており、当該複数のＣＰＵコアを用いて複数のスレッドを実行可能なよう構成されている。つまり、データ処理部３３１は、複数のＣＰＵコアがそれぞれ処理を行うことで、複数のＣＰＵコアを用いて並列処理を行うことが出来るよう構成されている。なお、以降においては、一例として、カラムストア型データベース管理システム３が４つのＣＰＵコアを備えている場合について説明する。但し、カラムストア型データベース管理システム３は、２つや３つのＣＰＵコアを備えていても構わないし、５つ以上のＣＰＵコアを備えていても構わない。
【００３１】
分布状況推測部３３２は、後述するテーブルデータ統計情報領域３４２に格納されている統計情報やテーブルデータ保存領域３５２に格納されているソート済みのデータから、更新などの所定の処理（クエリ）の対象となる表形式のデータ（更新データ）の各レコードに含まれる要素の値の分布状況を推測する機能を有している。ここで、本実施形態における要素の値とは、各レコードを識別するための情報を含まず、更新などの所定の処理の対象となる値のことをいう。分布状況推測部３３２は、例えば、テーブルデータ統計情報領域３４２から、クエリの対象となる値のヒストグラム（統計情報）を取得する。そして、分布状況推測部３３２は、当該取得したヒストグラムを用いて、更新データのデータ分布を推測する。その後、分布状況推測部３３２は、当該推測した結果をデータ分配部３３３へと送信する。なお、分布状況推測部３３２は、後述する更新モード中に動作することになる。
【００３２】
データ分配部３３３は、分布状況推測部３３２が推測した結果に基づいて、各ＣＰＵコアが処理する更新データの数が均一になるように更新データ（表形式のデータの各レコード）を分配する機能を有している。データ分配部３３３は、分布状況推測部３３２が推測した結果に基づいて、例えば、各ＣＰＵコアの更新データ件数が均等になると推測されるレンジで並列数分にデータを分割するパーティションのルールを設定する。つまり、データ分配部３３３は、分布状況推測部３３２が推測した結果に基づいて、更新データの送信先を変更する送信先閾値（分配閾値）を設定する。そして、データ分配部３３３は、当該設定した送信先閾値に基づいて、並列処理の数分（ＣＰＵコアの数分）分割した後述する更新部分領域３５１１に更新データを格納する。この結果、データ分配部３３３は、後述するように、例えば近似する要素の値を備えるレコードが同一のデータ処理部３３１で処理されるように、更新データを分配することになる。このように、データ分配部３３３は、更新データの要素の値の分布状況に基づいて、更新データを各更新部分領域３５１１に分配する機能を有している。また、データ分配部３３３の分配処理により、ＣＰＵコアの数分確保された更新部分領域３５１１のそれぞれに、均一に、更新データが分配されることになる。なお、データ分配部３３３は、後述する更新モード中に動作することになる。
【００３３】
更新処理管理部３３４は、更新モードの開始と終了のタイミングを管理する機能を有している。つまり、更新処理管理部３３４は、更新モードを利用した更新処理を行うか、通常の更新処理を行うかの管理を行っている。上述したように、更新処理管理部３３４は、データベースクライアント２から更新モードの開始を通知されると、更新モードを開始する。更新モードが開始すると、以降に取得した更新データは、データ分配部３３３により更新部分領域３５１１のそれぞれに分配されることになる。そして、分配された更新データは、更新部分領域３５１１のそれぞれで更新モードが終了するまでプールされる。また、更新処理管理部３３４は、データベースクライアント２から更新モードの終了を通知されると、更新モードを終了する。更新モードが終了すると、データ処理部３３１により更新部分領域３５１１に格納された更新データに対する処理が開始されることになる。なお、更新データに対する処理の詳細については後述する。
【００３４】
スキーマ管理データ保存領域３４は、メモリやハードディスクなどの記憶装置である。スキーマ管理データ保存領域３４は、データベースのスキーマの定義情報などを記憶・管理している。上述したように、スキーマ管理データ保存領域３４は、表定義領域３４１と、テーブルデータ統計情報領域３４２と、を有している。
【００３５】
表定義領域３４１は、一般的なリレーショナルデータモデルにおいて保持される、表やインデックスなどの定義情報、それらのデータがどのデバイスのどの位置に格納されているかといった情報、などの情報を記憶している。つまり、表定義領域３４１は、一般的にシステム表やシステムカタログなどと呼ばれている情報を記憶している。
【００３６】
テーブルデータ統計情報領域３４２は、ユーザのテーブルデータに関する統計情報を記憶している。つまり、テーブルデータ統計情報領域３４２は、一般的なリレーショナルデータベースでＳＱＬのクエリに対してコストベースの実行計画を作成するために利用する統計情報と同一の情報を記憶している。
【００３７】
ユーザデータ保存領域３５は、メモリやハードディスクなどの記憶装置である。ユーザデータ保存領域３５は、データベースのデータや、データ処理を行う際に発生する一時データなどのデータを記憶している。上述したように、ユーザデータ保存領域３５は、複数の更新部分領域３５１１を備える一時領域３５１と、テーブルデータ保存領域３５２と、を有している。
【００３８】
一時領域３５１は、データベースのクエリにより発行された中間データなどを記憶している。また、上記のように、一時領域３５１は更新部分領域３５１１を有している。更新部分領域３５１１は、カラムストア型データベース管理システム３に搭載されているＣＰＵコアの数分、一時領域３５１内に確保されている。
【００３９】
更新部分領域３５１１は、更新モードを利用したデータ更新中に１つのコアで処理するデータを格納する領域である。そのため、更新部分領域３５１１は、上記のように、ＣＰＵコアの数に応じた数が生成されることになる。つまり、更新部分領域３５１１は、後述するスレッドの数に応じて生成されている。更新モードが開始されると、更新部分領域３５１１には、データ分配部３３３から更新データが分配される。そして、更新モードが終了すると、更新部分領域３５１１が記憶する更新データを用いて、データ処理部３３１（ＣＰＵコア）による処理が行われる。
【００４０】
テーブルデータ保存領域３５２は、表定義領域３４１に格納された定義に基づいたデータベースの実データやインデックスデータなどを記憶している。
【００４１】
以上が、本実施形態におけるデータベースシステム１の構成である。ここで、具体的に図４で示す「商品テーブル」というテーブルを定義して、カラムストア型データベース管理システム３により行われる処理の詳細について説明する。なお、以下において示す商品テーブルは、データベースシステム１が処理可能なテーブルの一例である。
【００４２】
図４を参照すると、商品テーブルは、例えば、「商品ＩＤ」、「商品名」、「カテゴリＩＤ」、「定価」、「発売開始日」、「発売終了日」、という列を持っているとする。
【００４３】
このような商品テーブルをカラムストア型データベースシステム（例えば、カラムストア型データベース管理システム３）にロードすると、その内部構造は、例えば図５で示すようになる。図５を参照すると、カラムストア型データベース管理システム３においては、テーブル（表形式のデータ）の列ごとに、列番号と値番号と値リストとを備えた構造をしていることが分かる。
【００４４】
列番号は、その列のデータが何行目のデータに当たるのかを示している。また、値番号には、値リストへのインデックス番号が記載されている。また、値リストには、実データの重複が排除され、なおかつソートされた形でデータが配置されている。カラムストア型データベース管理システム３はこれらの構成により論理的な商品テーブルを格納していることになる。なお、図５では、同じ位置に位置する列番号と値番号が対応する列番号と値番号になる（例えば、商品名列のうち列番号の上から２番目に位置する２は、値番号の上から２番目に位置する４と対応する）。
【００４５】
例えば、図５で示すカラムストア型データベースの構造において、商品テーブルの２行目の定価を参照する場合、商品テーブルの定価列にある列番号２と同じ位置にある、値番号の２番目の値である「４」を取得する（図５参照）。そして、この４をもとに定価列の値リストの４番目にある値を確認する。すると、その値が「８８００」であることが分かる。
【００４６】
なお、このようなデータがソートされて格納されているカラムストアデータベースのモデルでは、データの検索などにおいて、データを変換することなく２分探索法を利用することが出来る。また、結合する場合も、結合を行う列に対してソートされた値リスト同士を付け合せ、それらの値リスト番号の関連を調査するだけですむ。そのため、このようなデータがソートされて格納されているカラムストアデータベースのモデルでは、集計や検索に対して高速な処理を行うことが可能となる。以降において、このようなカラムストアデータベースのモデルをＦＡＳＴ構造と記載する。
【００４７】
ここで、図４で示す商品テーブルに対して、更新モードを利用して図６で示すデータで更新を行う場合を考える。図６では、追加（ＩＮＳＥＲＴ）の場合は新しい列番号が振られており、更新（ＵＰＤＡＴＥ）や削除（ＤＥＬＥＴＥ）の場合は処理対象の列番号が記載されている。また、更新の場合は、例えば定価がいくらからいくらへと変更になるかが記載されている。なお、更新モードの最中に同じ列に対して複数の更新命令が来た場合、最終的な更新結果のみが図６で示す表に格納してあるとする。また、図４で示す商品テーブルに図６で示す更新データを反映させると、その結果は図７のようになることになる。
【００４８】
まず、図８を参照して、本実施形態におけるカラムストア型データベース管理システム３が各列のＦＡＳＴ構造の更新処理を並列に行う場合の概要について説明する。
【００４９】
なお、カラムストアであるため、更新処理は列単位で行われることになる。そのため、以下においては、列単位で行われる更新処理のうちの一例として、商品テーブルの価格列に対する更新処理について説明する（他の列についても同様の更新処理が行われる）。また、上述したように、本実施形態におけるカラムストア型データベース管理システム３は、ＣＰＵコアを４つ備えている。そのため、並列で４つの処理が行われることになる。
【００５０】
図８を参照すると、更新処理管理部３３４により更新モードに移行すると、以降に取得した更新データはデータ分配部３３３により各更新部分領域３５１１に分配されることになる。また、このときの分配は、分布状況推測部３３２が推測した分布状況に応じて行われる。
【００５１】
例えば、図８を参照すると、テーブルデータ統計情報領域３４２が記憶する価格列のヒストグラムから推測した更新データの分布状況に基づいて、データ分配部３３３は、「６０００まで」、「６００１〜８０００」、「８００１〜１２０００」、「１２００１〜」の４つに更新データを分配する。つまり、データ分配部３３３は、更新データの分布状況に基づいて、近似する値を備える更新データが同一のデータ処理部３３１で処理されるように、更新データを分配する。そして、上記分配された更新データは、更新モードが終了するまで、各更新部分領域３５１１（例えば、更新部分領域３５１１〜３５１４）でプールされる。
【００５２】
その後、更新モードが終了すると、各更新部分領域３５１１でプールされた更新データがカラムストアデータ（ＦＡＳＴ構造）へと変換される。そして、ＦＡＳＴ構造に変換された更新データと対応する価格列の値の範囲に位置する更新前定価列のデータ（図４参照）とをマージする。その後、各スレッドでの処理結果が結合されることになる。
【００５３】
以上が、カラムストア型データベース管理システム３が各列のＦＡＳＴ構造の更新処理を並列に行う場合の概要である。次に、上記カラムストア型データベース管理システム３が行う処理について具体的に説明する。図９を参照すると、まず更新モード中に、スレッドＡ（に対応する、例えば更新部分領域３５１１）に、「６０００まで」の価格列の値を有する定価の値が４０００と４５００とのレコードが分配される。また、スレッドＢ（に対応する、例えば更新部分領域３５１２）に、「６００１〜８０００」の価格列の値を有する定価の値が７８００のレコードが２つと定価が６８００のレコードが１つとが分配される。同様に、スレッドＣ（に対応する、例えば更新部分領域３５１３）に、「８００１〜１２０００」の価格列の値を有する定価の値が９８００のレコードと９０００のレコードとが分配される。そして、スレッドＤ（に対応する、例えば更新部分領域３５１４）に、「１２００１〜」の価格列の値を有する定価の値が３４８００のレコードと１２８００のレコードとが分配される。
【００５４】
そして、更新モードが終了するまで各更新データは上記各更新部分領域（３５１１〜３５１４）にプールされることになる。
【００５５】
その後、更新モードが終了すると、実際のテーブルデータ保存領域３５２との更新を実施するフェーズに入る。まず、クエリ実行部３３のデータ処理部３３１は、新しく作成される件数分の列番号、値リストの格納領域をテーブルデータ保存領域３５２に確保する。具体的には、データ処理部３３１は、論理的な操作列番号の最大数分（今回の例では１３）のデータ領域をそれぞれ確保する。同様に、データ処理部３３１は、各スレッドの値リストのデータを管理するための一時データ領域であるグループ値リスト個数テーブルや値番号調整値テーブルの領域を一時領域３５１に確保する。なお、グループ値リスト個数テーブルや値番号調整値テーブルの詳細については後述する。
【００５６】
次に、データ処理部３３１は、最終的な更新データを生成する並列処理に入る。まず、図９で示すように、データ処理部３３１（のＣＰＵコアの１つ。スレッドＡ）は、更新部分領域３５１１に格納された更新データを、ＦＡＳＴ構造に変換して当該更新部分領域３５１１に記憶する。同様に、スレッドＢ、スレッドＣ、スレッドＤもそれぞれ対応する更新部分領域（３５１２〜３５１４）に格納された更新データをＦＡＳＴ構造に変換して対応する更新部分領域（３５１２〜３５１４）に記憶する。なお、図９においては、削除を行う場合の操作列番号を負の数字で記載している。また、図９においては、値番号を処理するスレッドとその中での値番号を用いて記載している。例えば、図９で示す操作列９番目の値番号「Ａ−２」は、スレッドＡ内の値リストの２番目が値になるという意味である。
【００５７】
次に、図１０で示すように、各スレッドは、更新データ分のＦＡＳＴ構造と既存のテーブルデータのＦＡＳＴ構造（図５の定価列参照）とをマージする。なお、このとき、既存のテーブルデータについては、更新データと同じデータレンジをとるように分配してマージする。つまり、既存のテーブルデータは、「６０００まで」、「６００１〜８０００」、「８００１〜１２０００」、「１２００１〜」と、値リストの値に応じて分配されマージされることになる。
【００５８】
具体的には、各スレッドは、まず、更新データ分のＦＡＳＴ構造の値リストと既存のテーブルデータの値リストとをマージソートによってマージする。続いて、各スレッドは、更新データ分について、マージ後の操作列番号の該当箇所にマージ前の操作列番号を転記する。同様に、各スレッドは、マージ後の元値番号の該当箇所にマージ前の元値番号を転記する。このような処理により、図１０で示すようなデータが生成されることになる。このデータが対象のレンジの更新処理を行う基礎データになる。
【００５９】
そして、ＦＡＳＴ構造のマージ、つまり部分値リストのマージが完了すると、図１１で示すように、各スレッドは、その部分値の個数をグループ値リスト個数テーブル（上記のように、一時領域３５１に確保されている）に記入する。この処理は、スレッドごとに独自に行われる。つまり、部分値リストのマージが完了したスレッドは、他のスレッドの終了を待たずに、部分値の個数をグループ値リスト個数テーブルに記入する。このテーブルは、最終的な値番号の生成の際に用いられることになる。
【００６０】
例えば、スレッドＡのマージ結果の部分値の個数は３個である。そのため、スレッドＡは、グループ値リスト個数テーブルのＡの部分に３を記入する。スレッドＢ、Ｃ、Ｄも同様の操作を行う。
【００６１】
次に、上記グループ値リスト個数テーブルに個数を記入したスレッドは、出来上がったマージ結果の操作列番号と元値番号と、更新前の定価列を基に、該当する新値番号（上記のように新値番号の格納領域は予めテーブルデータ保存領域３５２に確保されている）を埋める処理を行う。この処理も、スレッドごとに独自に行われる。以下では、一例として、スレッドＡが最初に新値番号を埋める処理を行う場合について説明する。
【００６２】
図１２を参照すると、スレッドＡはまず、元値番号と新しく記入される新値番号との対応についての処理を行う。図１２では、元値番号１、つまり、更新前定価列の値番号１は、列番号の６に該当する。そこで、図１２（１）で示すように、新値番号の６番目の値を、元値番号１の部分値番号であるＡ−１として記載する。同様に、元値番号２、つまり、更新前定価列の値番号２は、列番号の３と５に該当する。そこで、新値番号の３番目と５番目との値を、元値番号２の部分値番号であるＡ−３として記載する。
【００６３】
次に、操作列番号にデータのある列について処理を行う。図１２を参照すると、操作列番号として−６が記載されている。上述したように、操作列番号が−になっている場合は、削除を意味している。そこで、図１２（２）で示すように、新値番号の６番目の値を削除する（値を（ＮＵＬＬ）に変更する）。また、操作列番号として９が記載されている。そこで、新値番号の９番目の値を、操作列番号９の部分値番号であるＡ−２として記載する。つまり、新値番号の９番目の値としてＡ−２を追加する。
【００６４】
スレッドＢ、スレッドＣ、スレッドＤも同様の処理を行う。つまり、各スレッドは、元値番号に基づく処理を行った後に、操作列番号に基づく処理を行う。なお、図１２は、スレッドＡが他のスレッドよりも早く新値番号を埋める処理に入った場合のイメージ図である。しかしながら、例えばスレッドＢがスレッドＡよりも早く上記処理に入る場合もある。この場合には、スレッドＡは、スレッドＢにより既に処理が行われたデータに、上記処理を行うことになる。
【００６５】
このような処理を各スレッドが行うことになる。その結果、図１３（Ａ）で示すように、全ての新値番号が埋まることになる。
【００６６】
なお、このようにスレッドごとに新値番号を埋めていくため、スレッドが新値番号を埋めようとした際に、既に他のスレッドにより新値番号が埋められている場合がある。例えば、更新前後の値の変動が大きいなど、元値番号に対する処理と操作列番号による処理とが他のスレッドで行われる場合などにおいて上記場合が発生する。この場合には、元値番号に対する処理と操作列番号による処理とのどちらが先に処理されるかは、それぞれの処理を行うスレッドの処理に依存することになる。そこで、このような場合には、スレッドは、操作列番号が記入された削除や更新処理であるもののみを上書きし、元値番号がある列から転記する場合は上書きしないよう処理する。このように更新対象のデータを優先し処理を行うことで、整合性を確保することが出来る。
【００６７】
以上のように、更新データを分割して並列に処理を開始したところから、新値番号が生成されるまでの間は、各スレッドは他のスレッドに依存することなく処理することが出来る。つまり、ここまでは、完全にスレッドセーフな状態である。
【００６８】
次に、各スレッドは、グループ番号で記載された新値番号（部分値番号時に記載されたデータ）を、数字のみの値番号（最終的な値番号）に変換する処理を行う。
【００６９】
具体的には、各スレッドは、まず、グループ値リスト個数テーブルから値番号調整値テーブルを生成する。図１３（Ｂ）を参照すると、本実施形態における例では、更新部分領域３５１１のスレッドＡには値リストが３件存在している。同様に、スレッドＢには２件、スレッドＣには３件、スレッドＤには３件、存在している。そこで、各スレッドは、上記件数に基づいて、調整値を算出する。例えば、スレッドＡは、当該スレッドＡによる更新部分が新値リストの最初に位置するため、調整値として０を算出する。また、スレッドＢは、当該スレッドＢによる更新部分がスレッドＡの更新部分のつぎから始まることになるため、スレッドＡの値リストの件数である３を調整値として算出する。同様に、スレッドＣは、スレッドＡとスレッドＢの値リストの件数を足した５を調整値として算出する。そして、スレッドＤは、スレッドＡとスレッドＢとスレッドＣの値リストの件数を足した８を調整値として算出する。
【００７０】
続いて、各スレッドは、当該各スレッドが算出した新値番号を上記算出した調整値を用いて更新する。つまり、各スレッドは、上記算出した調整値に各スレッド内の値リストの値を足すことで、新値番号を算出して変換する。例えば、スレッドＣは、新値番号Ｃ−１に対して、調整値５と値リストの値である１を足して、６を算出する。これにより、図６で示すように、新値番号Ｃ−１は新値番号６に変換されることになる。このような処理を各スレッドで行うことで、図１３（Ｃ）に示すように、グループ番号で記載された新値番号が数字のみの値番号に変換されることになる。
【００７１】
なお、この処理は、上記のように、グループ値リスト個数テーブルの値に基づいて行うことになる。そのため、この処理は、図１３（Ａ）で示すように全てのスレッドが新値番号を埋めていなくても実行可能である。例えば、スレッドＢが新値番号を埋めている最中でも、グループ値リスト個数テーブルの値が全て埋まっていれば、新値番号を全て埋めたスレッドＡは上記変換処理を行うことが出来る。このように、新値番号を埋める手前の処理であるグループ値リスト個数テーブルに個数を埋める処理が完了していれば、各スレッドは他のスレッドの新値番号を埋める処理の完了を待つことなく変換処理に入ることが出来る。つまり、この処理は、完全なスレッジセーフな状態ではないものの、厳密に各スレッドの同時の処理完了を待つ必要はない処理になる。
【００７２】
また、各スレッドの処理が完了したのち、各スレッドで生成された部分値リストを順番に縦に結合することで、図１３（Ｃ）で示す新値リストを生成することが出来る。
【００７３】
このような処理の結果、図１４で示す最終結果の更新がテーブルデータ保存領域３５２に記憶されることになる。
【００７４】
なお、本実施形態においては、トランザクションの管理を簡単にするため、最終的な更新結果のみが図６で示す表に格納してあるとした。しかしながら、本発明は、そのような場合に限らず実施可能である。つまり、更新データは、同じ列に対する複数の更新を含んでいても構わない。
【００７５】
ただし、この場合には、通常のデータベースで取られている方式と同様に、更新データについて処理順を示す識別子などを導入することとする。処理順を示す識別子などを導入することで、ＦＡＳＴ構造化が終了した更新部分列をテーブルデータ保存領域３５２に格納する際に、新しいデータ（最後に更新されたデータ）のみを残すよう処理することが出来るようになる。この手順は一般的なトランザクションの方式と同一であるため、詳細な説明については省略する。
【００７６】
以上が、本実施形態におけるデータベースシステム１の構成とカラムストア型データベース管理システム３により行われる処理の詳細である。次に、カラムストア型データベース管理システム３の動作について説明する。まず、カラムストア型データベース管理システム３の更新モードの動作について説明する。
【００７７】
図１５を参照すると、カラムストア型データベース管理システム３は、データベースクライアント２から送信された更新モード開始指示を受信する（Ｓ００１）。これにより、更新処理管理部３３４は、更新モードの開始を決定する。
【００７８】
更新モードが開始すると、以降に取得した更新データが上記データ分配部３３３により更新部分領域３５１１のそれぞれに分配されることになる。つまり、更新モードの最中に更新データを受信すると（Ｓ００２）、まずクエリ実行部３３は、受信した更新データの対象テーブルが更新モード開始後初めての更新であるか否かを確認する（Ｓ００３）。そして、初めての更新であった場合には（Ｓ００３、ｙｅｓ）、クエリ実行部３３の分布状況推測部３３２がテーブルデータ統計情報領域３４２を確認し、対象テーブルの列のヒストグラムを確認する（Ｓ００４）。また、データ処理部３３１がＣＰＵコア数分の更新部分領域３５１１を確保する（Ｓ００５）。そして、データ分配部６２により、各更新部分領域３５１１に更新データが分配される（Ｓ００６）。
【００７９】
一方、更新データの対象テーブルが更新モード開始後初めての更新でなかった場合（Ｓ００３、ｎｏ）、既にヒストグラムの確認と更新部分領域３５１１の確認は済んでいることになる。そのため、データ分配部６２による各更新部分領域３５１１に対する更新データの分配処理が行われる（Ｓ００６）。
【００８０】
なお、データ分配部６２により各更新部分領域３５１１に分配された各更新データは、更新モードの終了まで各更新部分領域３５１１でプールされることになる。
【００８１】
そして、このような分配処理は、更新モードの最中に更新データを受信するごとに行われる（Ｓ００７）。
【００８２】
その後、カラムストア型データベース管理システム３は、データベースクライアント２から送信された更新モード終了指示を受信する（Ｓ００８）。これにより、更新処理管理部３３４は、更新モードの終了を決定する。
【００８３】
そして、更新モードが終了すると、データ処理部３３１による更新部分領域３５１１に格納された更新データに対する更新処理が開始されることになる（Ｓ００９）。つまり、データ処理部３３１は、まず、新しく作成される件数分の列番号、値リストの格納領域をテーブルデータ保存領域３５２に確保する。同様に、データ処理部３３１は、各スレッドの値リストのデータを管理するための一時データ領域であるグループ値リスト個数テーブルや値番号調整値テーブルの領域を一時領域３５１に確保する。そして、データ処理部３３１は、最終的な更新データを生成する並列処理に入ることになる。そして、並列処理の結果、更新データの反映が行われることになる。
【００８４】
以上が、カラムストア型データベース管理システム３の更新モードの動作について説明である。次に、更新モード終了後行われる更新処理の動作について説明する。なお、更新処理は並列で行われることになる。そこで、以下においては、並列の処理のうちの１つのスレッド（データ処理部３３１のＣＰＵコア）の動作について説明する。
【００８５】
図１６を参照すると、スレッドは、更新モードの終了により、対応する更新部分領域３５１１に記憶されている更新データをＦＡＳＴ構造に変換する（Ｓ１０１）。そして、スレッドは、変換したＦＡＳＴ構造を当該更新部分領域３５１１に記憶する。
【００８６】
続いて、スレッドは、上記変換した更新データ分のＦＡＳＴ構造と既存のテーブルデータのＦＡＳＴ構造とをマージする（Ｓ１０２）。具体的には、スレッドは、まず、更新データ分のＦＡＳＴ構造の値リストと既存のテーブルデータの値リストとをマージソートによってマージする。続いて、スレッドは、更新データ分について、マージ後の操作列番号の該当箇所にマージ前の操作列番号を転記する。同様に、スレッドは、マージ後の元値番号の該当箇所にマージ前の元値番号を転記する。これにより、スレッドは、更新データ分のＦＡＳＴ構造と既存のテーブルデータのＦＡＳＴ構造とをマージする。
【００８７】
次に、スレッドは、上記更新データ分のＦＡＳＴ構造と既存のテーブルデータのＦＡＳＴ構造とをマージした結果生成される部分値の個数をグループ値リスト個数テーブルに記載する（Ｓ１０３）。なお、上記のように、グループ値リスト個数テーブルは、一時領域３５１に確保されている。
【００８８】
そして、スレッドは、マージ結果の操作列番号と元値番号と、更新前の定価列を基に、該当する新値番号を埋める処理を行う。つまり、スレッドは、更新データ分のＦＡＳＴ構造と既存のテーブルデータのＦＡＳＴ構造とのマージにより、マージ結果の操作列番号と元値番号とを得る。また、スレッドは、更新前の定価列をテーブルデータ保存領域３５２から取得する。そして、スレッドは、マージ結果の操作列番号と元値番号と、更新前の定価列を基に、テーブルデータ保存領域３５２に確保した該当する新値番号の領域を埋める処理を行う。なお、ここでの新値番号は、上記マージ結果の部分値に対応するものになる。
【００８９】
ここまでの動作は、スレッドは他のスレッドの処理に依存することなく処理可能である。つまり、ここまでの処理は、スレッドセーフな状態である。
【００９０】
次に、スレッドは、グループ値リスト個数テーブルに基づいて調整値を算出して、値番号調整値テーブルに当該算出した調整値を記載する（Ｓ１０５）。そして、スレッドは、当該算出した調整値を用いて、上記ステップＳ１０４で埋めた新値番号を変換する（Ｓ１０６）。つまり、スレッドは、部分値に対応する新値番号を最終的な新値リストに対応する新値番号に変換する。
【００９１】
以上が、スレッドの動作である。そして、並列処理を行う全てのスレッドが上記処理を行うことにより、テーブルデータ保存領域３５２には、全ての新値番号が記載されることになる。また、各スレッドの処理が完了したのち、各スレッドで生成された部分値リストを順番に縦に結合することで、新値リストを生成することが出来る。これにより、更新データの反映が終了することになる。
【００９２】
このように、本実施形態におけるカラムストア型データベース管理システム３は、更新処理管理部３３４と更新部分領域３５１１とを備えている。このような構成により、カラムストア型データベース管理システム３は、データベースクライアント２からの更新モード開始指示に応じて更新モードを開始することが出来る。そして、更新モード中の更新データを更新部分領域３５１１に記憶させることが出来る。また、カラムストア型データベース管理システム３は、データベースクライアント２からの更新モード終了指示に応じて更新モードを終了することが出来る。そして、カラムストア型データベース管理システム３は、更新部分領域３５１１に記憶させた更新データを一度に処理することが出来る。つまり、カラムストア型データベース管理システム３は、更新モード中の更新データを１回でマージ処理することが出来るようになる。その結果、夜間バッチなどにおいて大量の更新データが来る場合に、その都度マージ処理を行うことで起こる非効率的な処理を防止することが出来る。つまり、データの更新処理を行う場合に十分に性能を発揮できない場合がある、という課題を解決することが出来る。
【００９３】
また、本実施形態におけるカラムストア型データベース管理システム３は、複数のＣＰＵコアを備えるデータ処理部３３１と、分布状況推測部３３２と、データ分配部３３３と、更新部分領域３５１１と、を有している。このような構成により、更新データ分配部３３３は、分布状況推測部３３２の推測結果を基にして、更新モード中の更新データを更新部分領域３５１１に分配することが出来る。つまり、更新データ分配部３３３は、更新データの要素の値の分布状況に応じて、各ＣＰＵコアの更新データ件数が均等になるように更新データを分配する。その結果、データ処理部３３１のＣＰＵコアは、更新部分領域３５１１が記憶する更新データを基に、独立性の高い更新処理を行うことが出来る。これにより、ＣＰＵコアは他のＣＰＵコアの処理を待たずに処理を進めることが可能となり、スレッドセーフな状態を極力維持したまま更新演算処理を行うことが可能となる。
【００９４】
ここで、本発明と関連するカラムストア型データベースにおいて行われる更新処理の概要について説明する。図１７を参照すると、本発明と関連するカラムストア型データベースでは、まず、更新データを到着した順に並列処理をするように件数で分割する。そして、分割したそれぞれを１スレッドでＦＡＳＴ構造に変換し、更新データでソートされたＦＡＳＴ構造を生成する。その後、それぞれのスレッドで作成したＦＡＳＴ構造をマージして全ての更新データについてのＦＡＳＴ構造への変換を完了させる。このとき、各スレッドの完了を待つ必要が生じる。つまり、このときの処理はスレッドセーフな状態になっていないことになる。そして、更新データのＦＡＳＴ構造と更新前のデータのＦＡＳＴ構造とをマージすることで、該当の列の更新処理が完了する。このマージ処理によって、さらに待ちが発生することになる。
【００９５】
このように、本発明と関連するカラムストア型データベースにおいては、複数回の他のスレッドの処理完了待ちが発生しており、トータルでは複数のＣＰＵコアを十分に活用できていないことが分かる。一方で、本願発明は、上記のような構成により、複数のＣＰＵコアをより活用することが可能となっている。
【００９６】
なお、本発明は、大量のデータベースからデータマートを作成する場合や、データウェアハウスなどの分野に利用するカラムストア型データベースに対して、特に夜間バッチによる大量のデータの入れ替えなどの更新処理を一括に行う場合に、特に有効である。もちろん、本発明の実施は上記場合に限定されない。本発明は、一般的なカラムストア型データベース全般に適応することが出来る。
【００９７】
また、本実施形態においては、カラムストア型データベース管理システム３は、データベースクライアント２からの指示に応じて更新モードの開始と終了を行うとした。しかしながら、本発明の実施は上記場合に限定されない。カラムストア型データベース管理システム３は、例えば、図示しない時計部を参照することにより、予め定められた開始時間に更新モードを開始し、同様に予め定められた終了時間に更新モードを終了するように構成しても構わない。
【００９８】
また、本実施形態においては、データ分配部３３３が、分布状況推測部３３２が推測した分布状況に基づいて更新データの分配を行うとした。しかしながら、本発明の実施は、上記場合に限定されない。データ分配部３３３は、例えば、予め定められていた分配ルールに基づいて更新データの分配を行うように構成しても構わない。また、データ分配部３３３は、例えば、最初に取得した更新データのデータ分布に基づいて最初の更新データの分配を行い、更新データを取得する毎に分配ルールを修正するように構成しても構わない。このように、データ分配部３３３は、上記説明したルール以外のルールに基づいてデータの分配処理を行っても構わない。
【００９９】
[第２の実施形態]
次に本発明の第２の実施形態について図面を参照して説明する。第２の実施形態では、データ分配部が予め定められた分配ルールに基づいて更新データの分配処理を行う場合について説明する。
【０１００】
図１８を参照すると、本実施形態におけるデータベースシステム４は、データベースクライアント２と、カラムストア型データベース管理システム５と、を有している。また、カラムストア型データベース管理システム５は、クエリ解析部３１と、実行計画部３２と、クエリ実行部３３と、スキーマ管理データ保存領域５１と、ユーザデータ保存領域３５と、を有している。また、スキーマ管理データ保存領域５１は、表定義領域３４１と、テーブルデータ統計情報領域３４２と、更新データ分布範囲定義領域５１１と、を有している。さらに、ユーザデータ保存領域３５は、複数の更新部分領域３５１１を有する一次領域３５１と、テーブルデータ保存領域３５２と、を有している。なお、第１の実施形態と同様の構成については、同じ符号を付すものとする。
【０１０１】
このように、本実施形態におけるデータベースシステム４は、カラムストア型データベース管理システム５が更新データ分布範囲定義領域５１１を有している点が、第１の実施形態と異なっている。また、カラムストア型データベース管理システム５は、上記更新データ分布範囲定義領域５１１以外は、第１の実施形態と同様の構成をしている。つまり、クエリ実行部３３は、データ処理部３３１と、分布状況推測部３３２と、データ分配部３３３と、更新処理管理部３３４と、の機能も有している。そこで、以下においては、本実施形態の構成である更新データ分布範囲定義領域５１１について説明する。
【０１０２】
更新データ分布範囲定義領域５１１は、特定の列に対するスレッドを分割するレンジ範囲を記憶している。つまり、更新データ分布範囲定義領域５１１は、特定の列に対する分配ルールを記憶している。データ分配部３３３は、特定の列の更新データを分配する場合、更新データ分布範囲定義領域５１１が記憶する分配ルールに基づいて更新データを分配することになる。
【０１０３】
例えば、図４で示した表の場合、商品テーブルの発売終了日列の値は、ほとんどＮＵＬＬ値になっている。つまり、図４で示す商品テーブルの発売終了日列は、まだほとんどの商品が販売されていることを意味している。このような状態の場合、今後記入されることが想定される値は、現在よりも未来の日時になることが多いと考えられる。一方で、分布状況推測部３３２は、現在の「ＮＵＬＬ」、「２０１３−２−１５」、「２０１３−６−１５」、「２０１３−８−２０」から、更新データの分布状況を推測することになる。そのため、分布状況推測部３３２が推測する更新データの分布状況と実際の更新データの分布状況とが大きくずれる可能性が非常に高い。つまり、このような場合には、全ての更新データが１つのスレッドに集中し、かえって更新性能が劣化することが考えられる。
【０１０４】
そこで、このような特性の列については、例えば、「更新実施日から１か月後まで」、「１か月後から２か月後まで」、「２か月後から半年後まで」、「それ以降」という４つに分配するように更新データ分布範囲定義領域５１１に予め定義しておく。このように、既存のデータベースの格納状況とは大きく異なるデータの更新が行われると想定される列に対しては、更新データ分布範囲定義領域５１１を用いることで、処理の並列化による効果を大きく得ることが可能になる。
【０１０５】
このように、本実施形態におけるデータベースシステム４のカラムストア型データベース管理システム５は、更新データ分布範囲定義領域５１１を備えている。このような構成により、既存のデータベースの格納状況とは大きく異なるデータの更新が行われると想定される場合に、更新データ分布範囲定義領域５１１が記憶する分配ルールに基づいてデータ分配部３３３が更新データの分配を行うことが出来るようになる。その結果、各スレッドでの更新処理を均一化することが可能となり、処理の並列化による効果を大きく得ることが可能になる。
【０１０６】
[第３の実施形態]
次に本発明の第３の実施形態について図面を参照して説明する。なお、第３の実施形態では、複数のデータ処理部で並列して処理を行うデータベース装置６の構成の概要について説明する。
【０１０７】
図１９を参照すると、本実施形態におけるデータベース装置６は、データ処理部６１と、データ分配部６２と、データ記憶部６３と、を有している。
【０１０８】
データ処理部６１は、表形式のデータを列形式に分割して並び替える処理を行う機能を有している。後述するように、データ処理部６１は、データ分配部６２から表形式のデータを取得する。そして、データ処理部６１は、表形式のデータの各レコードに含まれる前記要素の値に従って並び替える処理を行う。なお、本実施形態におけるデータベース装置６は、上記データ処理部６１を複数有している。
【０１０９】
データ分配部６２は、取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて複数のデータ処理部６１の何れかに分配する機能を有している。データ分配部６２は、例えば外部装置や外部のネットワークから、表形式のデータを取得する。そして、データ分配部６２は、取得した表形式のデータを、当該表形式のデータの各レコードに含まれる要素の値に応じて複数のデータ処理部６１の何れかに分配する。
【０１１０】
データ記憶部６３は、メモリやハードディスクなどの記憶装置である。データ記憶部６３は、複数のデータ処理部６１のそれぞれから列形式に分割して上記処理をしたデータを取得する。そして、データ処理部６１は、複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶する。
【０１１１】
このように、本実施形態におけるデータベース装置６は、データ処理部６１と、データ分配部６２と、データ記憶部６３と、を有している。このような構成により、データ分配部６２が、表形式のデータの各レコードを当該表形式のデータの各レコードに含まれる要素の値に応じて複数のデータ処理部６１の何れかに分配する。そして、複数のデータ処理部６１で並列処理を行った上で、その結果がデータ記憶部６３で結合されることになる。このように、複数のデータ処理部６１のそれぞれは、表形式のデータの各レコードに含まれる要素の値に応じて分配されたデータを用いて処理を行うことが出来る。つまり、各データ処理部６１には、表形式のデータの各レコードに含まれる要素の値に応じたデータが分配されるため、各データ処理部６１は、それぞれで独立性の高い処理を行うことが可能となる。これにより、データ処理部６１は他のデータ処理部６１の処理を待たずに処理を進めることが可能となり、スレッドセーフな状態を極力維持したままデータの処理を行うことが可能となる。
【０１１２】
なお、上述したデータベース装置６は、情報記憶装置に所定のプログラムが組み込まれることで実現できる。具体的に、本発明の他の形態であるプログラムは、情報記憶装置に、表形式のデータを列形式に分割して並び替える処理を行う複数のデータ処理部と、取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて複数のデータ処理部の何れかに分配するデータ分配部と、複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶するデータ記憶部と、を実現させ、複数のデータ処理部は、表形式のデータの各レコードに含まれる要素の値に従って、並び替える処理を行う、プログラムである。
【０１１３】
また、上述したデータベース装置６が作動することにより実行される情報処理方法は、取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて複数のデータ処理部の何れかに分配し、複数のデータ処理部のそれぞれは、表形式のデータを列形式に分割して並び替える処理を行い、当該複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶する、というものである。
【０１１４】
上述した構成を有する、プログラム、又は、情報処理方法、の発明であっても、上記データベース装置６と同様の作用を有するために、上述した本発明の目的を達成することが出来る。
【０１１５】
[第４の実施形態]
次に本発明の第４の実施形態について図面を参照して説明する。なお、第４の実施形態では、複数のデータ処理部で並列して処理を行うデータベース装置９とクライアント装置８を備えるデータベースシステム７の構成の概要について説明する。
【０１１６】
図２０を参照すると、本実施形態におけるデータベースシステム７は、クライアント装置８と、データベース装置９と、を有している。また、図２０で示すように、クライアント装置８とデータベース装置９とは有線で接続されており、互いに通信可能なよう構成されている。
【０１１７】
クライアント装置８は、データベース装置９に対して表形式のデータを送信する機能を有している。
【０１１８】
データベース装置９は、データ処理部９１と、データ分配部９２と、データ記憶部９３と、を有している。
【０１１９】
データ処理部９１は、表形式のデータを列形式に分割して並び替える処理を行う機能を有している。後述するように、データ処理部９１は、データ分配部９２から表形式のデータを取得する。そして、データ処理部９１は、表形式のデータの各レコードに含まれる前記要素の値に従って並び替える処理を行う。なお、本実施形態におけるデータベース装置９は、上記データ処理部９１を複数有している。
【０１２０】
データ分配部９２は、クライアント装置８から取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて複数のデータ処理部６１の何れかに分配する機能を有している。データ分配部９２は、クライアント装置８から表形式のデータを取得する。そして、データ分配部９２は、取得した表形式のデータを、当該表形式のデータの各レコードに含まれる要素の値に応じて複数のデータ処理部９１の何れかに分配する。
【０１２１】
データ記憶部９３は、メモリやハードディスクなどの記憶装置である。データ記憶部９３は、複数のデータ処理部９１のそれぞれから列形式に分割して上記処理をしたデータを取得する。そして、データ処理部９１は、複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶する。
【０１２２】
このように、本実施形態におけるデータベースシステム７は、クライアント装置８とデータベース装置９とを有している。また、データベース装置９は、データ処理部９１と、データ分配部９２と、データ記憶部９３と、を有している。このような構成により、データ分配部９２が、クライアント装置８から取得した表形式のデータの各レコードを当該表形式のデータの各レコードに含まれる要素の値に応じて複数のデータ処理部９１の何れかに分配する。そして、複数のデータ処理部９１で並列処理を行った上で、その結果がデータ記憶部９３で結合されることになる。このように、複数のデータ処理部９１のそれぞれは、表形式のデータの各レコードに含まれる要素の値に応じて分配されたデータを用いて処理を行うことが出来る。つまり、各データ処理部９１には、表形式のデータの各レコードに含まれる要素の値に応じたデータが分配されるため、各データ処理部９１は、それぞれで独立性の高い処理を行うことが可能となる。これにより、データ処理部９１は他のデータ処理部９１の処理を待たずに処理を進めることが可能となり、スレッドセーフな状態を極力維持したままデータの処理を行うことが可能となる。
【０１２３】
＜付記＞
上記実施形態の一部又は全部は、以下の付記のようにも記載されうる。以下、本発明におけるデータベース装置などの概略を説明する。但し、本発明は、以下の構成に限定されない。
【０１２４】
（付記１）
表形式のデータを列形式に分割して並び替える処理を行う複数のデータ処理部と、
取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて前記複数のデータ処理部の何れかに分配するデータ分配部と、
前記複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶するデータ記憶部と、を備え、
前記複数のデータ処理部は、前記表形式のデータの各レコードに含まれる前記要素の値に従って、前記並び替える処理を行う、
データベース装置。
【０１２５】
（付記２）
付記１に記載のデータベース装置であって、
前記データ分配部は、前記表形式のデータの各レコードに含まれる要素の値の分布状況に応じて、前記表形式のデータの各レコードを前記複数のデータ処理部の何れかに分配する、
データベース装置。
【０１２６】
（付記３）
付記２に記載のデータベース装置であって、
前記データ分配部は、前記データ記憶部が記憶するデータの分布状況に基づいて前記表形式のデータの各レコードに含まれる要素の値の分布状況を推測し、当該推測した前記表形式のデータの各レコードに含まれる要素の値の分布状況に応じて、前記表形式のデータの各レコードを前記複数のデータ処理部の何れかに分配する、
データベース装置。
【０１２７】
（付記４）
付記２又は３に記載のデータベース装置であって、
前記データ分配部は、前記表形式のデータの各レコードに含まれる要素の値の分布状況を取得して当該取得した値の分布状況に基づいて前記複数のデータ処理部のそれぞれに分配されるデータのサイズが均等になる分配閾値を算出し、当該算出した分配閾値に基づいて、前記表形式のデータの各レコードを前記複数のデータ処理部の何れかに分配する、
データベース装置。
【０１２８】
（付記５）
付記２乃至４の何れかに記載のデータベース装置であって、
前記データ分配部は、前記表形式のデータの各レコードに含まれる要素の値の分布状況に応じて、近似する要素の値を含むレコードが同一のデータ処理部に配分されるよう前記表形式のデータの各レコードを前記複数のデータ処理部の何れかに分配する、
データベース装置。
【０１２９】
（付記６）
付記１乃至５の何れかに記載のデータベース装置であって、
前記複数のデータ処理部のそれぞれは、前記データ記憶部に予め記憶されている元データの各レコードと、取得した前記表形式のデータの各レコードとを併せて前記並び替える更新処理を行い、
前記データ記憶部は、前記複数のデータ処理部のそれぞれで処理された前記更新処理の結果を結合して記憶する、
データベース装置。
【０１３０】
（付記７）
付記１乃至６の何れかに記載のデータベース装置であって、
前記複数のデータ処理部のそれぞれに対応した、表形式のデータを一時的に記憶する複数のデータ一時記憶部を備え、
前記データ分配部は、前記表形式のデータの各レコードを、当該表形式のデータの各レコードを取得するごとに前記複数のデータ一時記憶部の何れかに分配し、
前記複数のデータ処理部は、同一のタイミングで前記データ一時記憶部が記憶するデータに対して前記処理を開始する、
データベース装置。
【０１３１】
（付記８）
情報記憶装置に、
表形式のデータを列形式に分割して並び替える処理を行う複数のデータ処理部と、
取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて前記複数のデータ処理部の何れかに分配するデータ分配部と、
前記複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶するデータ記憶部と、を実現させ、
前記複数のデータ処理部は、前記表形式のデータの各レコードに含まれる前記要素の値に従って、前記並び替える処理を行う、
プログラム。
【０１３２】
（付記９）
取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて複数のデータ処理部の何れかに分配し、
前記複数のデータ処理部のそれぞれは、表形式のデータを列形式に分割して並び替える処理を行い、当該複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶する、
情報処理方法。
【０１３３】
（付記１０）
表形式のデータを列形式に分割して並び替える処理を行う複数のデータ処理部と、
取得した表形式のデータの各レコードを、当該表形式のデータの各レコードに含まれる要素の値に応じて前記複数のデータ処理部の何れかに分配するデータ分配部と、
前記複数のデータ処理部のそれぞれで処理された処理結果を結合して記憶するデータ記憶部と、を備え、
前記複数のデータ処理部は、前記表形式のデータの各レコードに含まれる前記要素の値に従って、前記並び替える処理を行うデータベース装置と、
前記データベース装置に対して前記表形式のデータを送信するクライアント装置と、
を備える、データベースシステム。
【０１３４】
なお、上記各実施形態及び付記において記載したプログラムは、記憶装置に記憶されていたり、コンピュータが読み取り可能な記録媒体に記録されている。例えば、記録媒体は、フレキシブルディスク、光ディスク、光磁気ディスク、及び、半導体メモリ等の可搬性を有する媒体である。
【０１３５】
以上、上記各実施形態を参照して本願発明を説明したが、本願発明は、上述した実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明の範囲内で当業者が理解しうる様々な変更をすることが出来る。
【符号の説明】
【０１３６】
１、４  データベースシステム
２  データベースクライアント
３、５  カラムストア型データベース管理システム
３１  クエリ解析部
３２  実行計画部
３３  クエリ実行部
３３１  データ処理部
３３２  分布状況推測部
３３３  データ分配部
３３４  更新処理管理部
３４、５１  スキーマ管理データ保存領域
３４１  表定義領域
３４２  テーブルデータ統計情報領域
３５  ユーザデータ保存領域
３５１  一次領域
３５１１  更新部分領域
３５２  テーブルデータ保存領域
５１１  更新データ分布範囲定義領域
６、９  データベース装置
６１、９１  データ処理部
６２、９２  データ分配部
６３、９３  データ記憶部
７  データベースシステム
８  クライアント装置
【図１】
2015185104.tif 000003
【図２】
2015185104.tif 000004
【図３】
2015185104.tif 000005
【図４】
2015185104.tif 000006
【図５】
2015185104.tif 000007
【図６】
2015185104.tif 000008
【図７】
2015185104.tif 000009
【図８】
2015185104.tif 000010
【図９】
2015185104.tif 000011
【図１０】
2015185104.tif 000012
【図１１】
2015185104.tif 000013
【図１２】
2015185104.tif 000014
【図１３】
2015185104.tif 000015
【図１４】
2015185104.tif 000016
【図１５】
2015185104.tif 000017
【図１６】
2015185104.tif 000018
【図１７】
2015185104.tif 000019
【図１８】
2015185104.tif 000020
【図１９】
2015185104.tif 000021
【図２０】
2015185104.tif 000022