【文献】
吉田琢也,検索専用の高速DBソフト登場意思決定支援システムに威力,日経コンピュータ,日本,日経BP社,1996年 7月22日,第396号,pp.105〜108
【文献】
イーデルステイン ハーブ,テクニカルフォーラムfrom U.S.A.,日経コンピュータ,日本,日経BP社,1996年 2月 5日,no.384,139−144ページ
【文献】
鵜木 昌行,Sybase IQ「独自データ構造による、データウエアハウスへのアプローチ」,電子情報通信学会技術研究報告 Vol.97 No.415,日本,社団法人電子情報通信学会,1997年12月 2日,第97巻 第415号,51〜56
【文献】
谷川 耕一,Orfacle7.3の機能強化ポイント,ネットワークコンピューティング,日本,株式会社リックテレコム,1996年 7月 1日,第8巻,第7号,p.73−80
【文献】
高橋 秀和,Part4 大規模化 スケーラビリティでRDBに一日の長,NIKKEI BYTE,日経BP社 Nikkei Business Publications,Inc.,2004年 3月22日,第251号,p. 38-43
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0026】
本発明の実施例の目的、技術的解決策、および利点をより明確にするために、下記は、本発明の実施例における添付図面を参照して本発明の実施例における技術的解決策を明確かつ完全に記載する。明らかに、記載された実施例は本発明の実施例の全てではなく一部である。創作的な努力なしで本発明の実施例に基づいてこの技術分野の当業者によって得られる他の全ての実施例は、本発明の保護範囲内にあるものである。
【0027】
まず、実施例の記載は、本発明の実施例において提案される列指向記憶アーキテクチャの紹介で始まる。列指向データベースにおいて、データおよびテーブルヘッダが別個に記憶される。テーブルヘッダは各列の属性および現在のエントリ・カウントを含む。属性は、列の名前、列内の数値のフィールドタイプ、列の開始アドレス、等を含むことが可能であり、例えば、表1はテーブルヘッダであり、テーブルヘッダは、列の名前、フィールド属性、または列の開始アドレスであることが可能であり、ここで列の名前は、例えば、行番号、マーク、F2、またはF3であることが可能であり、各列内の数値のフィールド属性は、整数型、文字型、長整数型、等であり、列の開始アドレスは、問い合わせ、更新、削除、または他の操作の間にデータ走査が開始するエントリを位置指定するために使用され、走査されたエントリの数が現在のエントリ・カウントに到達するまでデータの走査および読み取りが続く。加えて、マーカー列内に現在のマーカー列のバージョン番号が記録される。マーカー列が更新されるごとに、マーカー列のバージョン番号が更新される。一般に、マーカー列のバージョン番号は、累進的に増加する番号であることが可能であり、または文字に累進的に増加する番号を付加したものであることが可能であり、例えば、現在のマーカー列の現在のバージョン番号はv1であり、マーカー列が更新された後に、マーカー列のバージョン番号はv2に更新される。現在のエントリ・カウントは、値のいくつの行が現在のテーブル内にあるかを示し、例えば、表1に表されているように、データの4個の行があり、この場合、現在のエントリ・カウントは4である。
【0029】
表2に表わされているように、それは本発明の実施例において提供される列記憶テーブルの概要図である。列指向データベースは3つのタイプの列、すなわち、行番号列、マーカー列、およびデータ列を含み得る。行番号列内の各行の値はデータの行をユニークに識別する。データの行がトランザクションにおいて変更されるとき、その行の行番号にロックが付加される。列指向データベース内にロック付加領域があることが可能であり、ロックが付加される行がロック付加領域内に記録される。トランザクションが列指向データベース内のデータの行を変更する必要があるとき、トランザクションは、ロック付加領域において、行にロックが付加されているかどうかを問い合わせする必要があり、データの行にロックが付加されているならば、トランザクションはデータの行を変更することができず、それにより、異なるトランザクションによって行が同時に変更されることを防止する。このアプローチはデータの衝突を防止することにおいて有用であることを証明する。変更トランザクションがサブミットされることに成功したとき、ロックはロック付加領域において解放され得る。マーカー列内の各行の値は、データの各行が有効であるかどうかを示し、例えば、マーカー列内の各行の値は0または1であることが可能であり、ここで、例えば、行内のデータは変更されている、または削除されているので、0は行内のデータが現在無効であることを示すことが可能であり、1は行内のデータが現在有効であることを示すことが可能であり、すなわち、行内のデータは現在変更されていない。表1内の2番目の列は表2内の2番目の列の属性を示し、ここで属性はマークであり、これはマーカー列が表2内の2番目の列であることを意味する。一般に、マーカー列はビットマップ(bitmap)である。データ列は特定のデータを記憶し、データの各列は別個に記憶される。明らかに、表2は2つのみのデータ列F2およびF3を提示する。実際のデータベースにおいて、複数のデータ列が存在し得る。表1内の3番目の列は表2内の3番目の列の属性を示し、ここで属性はF2であり、表1内の4番目の列は表2内の4番目の列の属性を示し、ここで属性フィールドはF3である。加えて、表1内の1番目の列は表2内の1番目の列の属性を示し、ここで属性は行番号である。
【0031】
列指向記憶内の記憶領域は、次の部分、データ記憶領域、トランザクション記憶領域、および一時記憶領域を含み得る。データ記憶領域は、特定のデータ、例えば、上記の表1および表2の内容を記憶するために使用される。一時記憶領域は、トランザクション処理が進行中であるとき、データを一時的に記憶するために使用される。この記憶領域は、データ記憶領域の内部にあることが可能であり、または別個の記憶領域であることが可能であり、例えば、本発明の実施例において、データを追加、削除、変更、および問い合わせするプロセスの間に生成された中間データは一時記憶領域内に記憶されることが可能であり、例えば、マーカー列のコピー、および問い合わせの間に生成される条件付きビットマップおよび問い合わせビットマップである。トランザクションがサブミットされることに成功した後に、トランザクションに関係する一時的なデータは一時的に記憶されたデータから削除される。トランザクションログがトランザクション記憶領域内に記憶され、ここで、トランザクションログは現在のトランザクションによって行われた操作およびトランザクションがサブミットされるときマーカー列に行われるべき変更を記録する。そして、トランザクションがサブミットされた後に、マーカー列はトランザクションログに従って変更されることが可能である。1つのトランザクションがサブミットされることに成功した後に、トランザクションのログは削除される。
【0032】
以下トランザクションと呼ばれるデータベーストランザクション(Database Transaction)は、単一の論理的な作業単位で実行される一連の操作を指し、ここで一連の操作は、完全に実行されるか、または全く実行されないかのいずれかである。トランザクション処理は、トランザクションの単位内の全ての操作が実現されることに成功したときのみデータ指向リソースが恒久的に更新されることを保証することができる。一群の関係する操作は、全ての操作が成功または不成功のいずれかで実現される単位に結合され、それによってエラー回復が簡単にされることが可能であり、アプリケーションプログラムはより信頼できるようになる。論理的な作業単位がトランザクションになる必要があるならば、いわゆるACID(原子性、一貫性、独立性、および耐久性)属性が満たされなければならない。1つのトランザクションは複数の操作を含むことが可能であるが、操作は時間順に配置され、トランザクションに含まれる各操作の結果は、トランザクションがサブミットされることに成功した後にのみ効力を生じる。
【0033】
図1は、本発明の実施例によるネットワーク環境の概要図である。アプリケーションプログラム102は、限定しないが課金アプリケーション、インターネットブラウザ、マルチメディアプレーヤー、等を含む、様々な指定された機能を提供し得るコンピュータプログラムを指す。アプリケーションプログラムは通信ネットワーク103を通して列指向データベース105にアクセスし得る。列指向データベース(column-oriented database)105はインタフェースモジュール104および問い合わせモジュール106を含む。インタフェースモジュール104は、アプリケーションプログラムによって送信される問い合わせ要求を受信し、問い合わせモジュール106に接続し、アクセスするように構成される。問い合わせモジュール106は、データを管理し、インタフェースモジュール104によって転送される問い合わせ要求を実行するように構成される。さらに、列指向データベース105は記憶エンジン108に接続する。記憶エンジン108は、列指向データベース内にデータを記憶し、構造的なデータセットである。インタフェースモジュール104または問い合わせモジュール106は記憶エンジン108を駆動し、記憶エンジンによって返信されるデータを受信し得る。例えば、記憶エンジン108は問い合わせモジュール106に含まれることが可能であり、または問い合わせモジュール106の外部のメモリ内に存在することが可能である。
【0034】
図2は、本発明による他のネットワーク環境の概要図である。アプリケーションプログラム202は、限定しないが課金アプリケーション、インターネットブラウザ、マルチメディアプレーヤー、等を含む、様々な指定された機能を提供し得るコンピュータプログラムを指す。アプリケーションプログラムは通信ネットワーク203を通して列指向データベース205にアクセスし得る。列指向データベース205は、インタフェースモジュール204、変更モジュール206、記録モジュール207、およびサブミットモジュール208を含む。インタフェースモジュール204は、アプリケーションプログラムによって送信される変更要求を受信し、変更モジュール206に接続し、アクセスするように構成される。変更モジュール206は、データを管理し、インタフェースモジュール204によって転送される変更要求を実行するように構成され、変更プロセスにおいて、記録モジュール207は、トランザクションがサブミットされるときマーカー列に行われるべき変更を記録し、サブミットモジュール208は、トランザクションをサブミットするときマーカー列に行われるべき記録された変更に従って、トランザクションがサブミットされるとき、マーカー列に、対応する変更を行うように構成され、それによって、変更されたマーカー列内の各行のマーカービットの値は、変更処理の後にマーカービットと同じ行内に位置するデータの有効性を示す。さらに、列指向データベース205は記憶エンジン210に接続する。記憶エンジン210は、列指向データベース内にデータを記憶し、構造的なデータセットである。インタフェースモジュール204または変更モジュール206は、記憶エンジン210を駆動し、記憶エンジンによって返信されるデータを受信し得る。
【0035】
図3は、本発明の実施例による処理デバイスの概要のブロック図である。この実施例において、処理デバイスは、コンピュータホストであることが可能であり、具体的には、汎用パーソナルコンピュータ(PC)のようなプロセッサを基にしたコンピュータ、およびタブレットコンピュータまたはスマートホンのようなポータブルデバイスを含む。
図3に表わされているように、処理デバイス300は、バス310、プロセッサ302、メモリ304、入力および出力インタフェース306、および通信インタフェース308を含み得る。バス310は、チャネルを含み、コンピュータの構成要素の間で情報を送信し得る。プロセッサ302は、情報を処理し、命令または操作を実行するように構成され、具体的には、汎用の中央処理ユニット(CPU)、マイクロプロセッサ、特定用途向け集積回路(application-specific integrated circuit、ASIC)、または本発明の解決策におけるプログラムの実行を制御するように構成される1つまたは複数の集積回路であり得る。処理デバイスは、情報および命令を記憶するように構成される1つまたは複数のメモリ304をさらに含む。メモリは、リード・オンリ・メモリ(read-only memory、ROM)または静的な情報および静的な命令を記憶することができる他のタイプの静的な記憶デバイスであることが可能であり、ランダム・アクセス・メモリ(random access memory、RAM)または情報および命令を記憶することができる他のタイプの動的な記憶デバイスであることも可能であり、ディスクメモリであることも可能である。これらのメモリはバス310を使用することによってプロセッサ302に接続する。
【0036】
入力および出力インタフェース306は入力装置または出力装置を含み得る。入力装置は、ユーザによって入力されるデータおよび情報を受信するように構成され、例えば、入力装置は、キーボード、マウス、カメラ、スキャナ、ライトペン、音声入力装置、またはタッチスクリーンであり得る。出力装置は、情報がユーザに出力または表示されることを可能にするように構成され、ディスプレイスクリーン、プリンタ、スピーカ、等を含む。処理デバイスはネットワークインタフェース308をさらに含み、ここでネットワークインタフェースはトランシーバのようないずれかの装置を使用して他のデバイスまたは通信ネットワーク、例えば、イーサネット(登録商標)、無線アクセスネットワーク(RAN)、および無線ローカル・エリア・ネットワーク(WLAN)と通信する。プロセッサ302はバス310を使用することによって入力および出力インタフェース306およびネットワークインタフェース308に接続することも可能である。
【0037】
メモリ304は本発明の解決策を実行するためのプログラムを記憶し、ここで、解決策は、アプリケーションプログラムによって送信される問い合わせ要求を受信することを含み、ここで、問い合わせ要求は列指向データベースについての問い合わせ条件を含み、列指向データベースはマーカー列および1つより多くのデータ列を含み、データ列は列記憶の形態で特定のデータを記憶するために使用され、マーカー列内の各行のマーカービットの値は、マーカービットと同じ行内に位置するデータの有効性を示すために使用され、解決策は、マーカー列および問い合わせ条件に従って1つより多くのデータ列を問い合わせして、問い合わせ条件およびマーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得すること、および問い合わせ結果をアプリケーションプログラムに送信することを含む。メモリ304はオペレーティングシステムおよび他のアプリケーションプログラムをさらに記憶し得る。
【0038】
本発明の他の実施例において、メモリ304は本発明の解決策を実行するためのプログラムをさらに含み、ここで、解決策は、トランザクションにおいてアプリケーションプログラムによって送信される変更要求を受信することを含み、ここで、変更要求は、列指向データベースについての変更条件を含み、列指向データベースはマーカー列および1つより多くのデータ列を含み、データ列は列記憶の形態で特定のデータを記憶するために使用され、マーカー列内の各行のマーカービットの値はマーカービットと同じ行内に位置するデータの有効性を示すために使用され、解決策は、変更条件に従ってマーカー列および1つより多くのデータ列に変更処理を適用し、トランザクションがサブミットされるときマーカー列に行われるべき変更を記録すること、トランザクションをサブミットするときマーカー列に行われるべき記録された変更に従って、トランザクションがサブミットされるとき、マーカー列に、対応する変更を行うことを含み、それによって、変更されたマーカー列内の各行のマーカービットの値は、変更処理の後にマーカービットと同じ行内に位置するデータの有効性を示し、解決策は、アプリケーションプログラムに変更応答を送信することを含む。メモリ304はオペレーティングシステムおよび他のアプリケーションプログラムをさらに記憶し得る。
【0039】
図4に表わされているように、本発明の実施例において提供される処理デバイスは、
アプリケーションプログラムによって送信される問い合わせ要求を受信し、問い合わせ要求を問い合わせモジュールに送信するように構成されるインタフェースモジュール41であって、問い合わせ要求は列指向データベースについての問い合わせ条件を含み、列指向データベースはマーカー列および1つより多くのデータ列を含み、データ列は列記憶の形態で特定のデータを記憶するために使用され、マーカー列内の各行のマーカービットの値はマーカービットと同じ行内に位置するデータの有効性を示すために使用される、インタフェースモジュール41と、
マーカー列および問い合わせ条件に従って1つより多くのデータ列を問い合わせして、問い合わせ条件およびマーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得し、問い合わせ結果をインタフェースモジュールに送信するように構成される問い合わせモジュール42と、を含み、
インタフェースモジュール41は、問い合わせモジュールによって送信される問い合わせ結果を受信し、問い合わせ結果をアプリケーションプログラムに送信するようにさらに構成される。
【0040】
さらに、
図5に表わされているように、問い合わせモジュール42は、第1の生成ユニット421、第2の生成ユニット422、および獲得ユニット423を含む。
【0041】
第1の生成ユニット421は、問い合わせ条件に従って、問い合わせ条件において関与するデータ列を走査し、条件付きビットマップを生成するように構成され、ここで、関与するデータ列内のある行が問い合わせ条件を満たし、条件付きビットマップ内の対応する行は有効な値が割り当てられ、関与するデータ列内のある行が問い合わせ条件を満たさず、条件付きビットマップ内の対応する行は無効な値が割り当てられる。
【0042】
第2の生成ユニット422は、問い合わせ条件に従って、問い合わせ条件において関与するデータ列を走査し、条件付きビットマップを生成するように構成され、ここで、関与するデータ列内のある行が問い合わせ条件を満たし、条件付きビットマップ内の対応する行は有効な値が割り当てられ、関与するデータ列内のある行が問い合わせ条件を満たさず、条件付きビットマップ内の対応する行は無効な値が割り当てられる。
【0043】
獲得ユニット423は、問い合わせビットマップに従って、問い合わせ条件およびマーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得するように構成される。
【0044】
さらに、第2の生成ユニット422は、具体的には、マーカー列がビットマップであるとき、マーカー列および条件付きビットマップにAND演算を行って問い合わせビットマップを生成するように構成され、ここで、マーカー列内のマーカービットの値、条件付きビットマップ内の各行の値、および問い合わせビットマップ内の各行の値は、0または1である。
【0045】
さらに、
図5に表わされているように、問い合わせモジュール42は判定ユニット424をさらに含み、ここで、
判定ユニット424は、トランザクションがサブミットされるときマーカー列に行われるべき変更が存在すると判定するように構成され、ここで、トランザクションは問い合わせ要求が位置するトランザクションであり、判定ユニット424は、一時記憶領域内にマーカー列を記憶し、記憶されたマーカー列を問い合わせ要求のプライベート・マーカー列として使用し、トランザクションがサブミットされるときマーカー列に行われるべき変更に従ってプライベート・マーカー列を更新するように構成され、それによって、更新されたプライベート・マーカー列内の変更されたマーカービットの値は、トランザクションにおける現在のマーカービットに対応するデータの有効性を示し、
第2の生成ユニット422は、具体的には、更新されたプライベート・マーカー列および条件付きビットマップに従って問い合わせビットマップを生成するように構成され、ここで、更新されたプライベート・マーカー列および条件付きビットマップの両方における同じ行の値が有効な値であるとき、問い合わせビットマップ内の同じ行の値は有効であり、または更新されたプライベート・マーカー列内の同じ行の値および条件付きビットマップ内の同じ行の値が両方とも有効な値であるわけではないとき、問い合わせビットマップ内の同じ行の値は無効であり、
獲得ユニット423は、具体的には、問い合わせビットマップに従って、問い合わせ条件および更新されたプライベート・マーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得するように構成される。
【0046】
加えて、判定ユニット424は、トランザクションがサブミットされるときマーカー列に行われるべき変更が存在しないと判定するようにさらに構成され、ここで、トランザクションは問い合わせ要求が位置するトランザクションであり、判定ユニット424は、一時記憶領域内に共有されたマーカー列が記憶されていないとき、または一時記憶領域内に記憶されている共有されたマーカー列のバージョン番号がテーブルヘッダ内のマーカー列のバージョン番号と異なるとき、データ記憶領域内にあるマーカー列のバージョン番号およびマーカー列を一時記憶領域内に記憶し、記憶されたマーカー列を他の共有されたマーカー列として使用し、他の共有されたマーカー列のバージョン番号と問い合わせ要求の間の対応を確立し、または記憶された共有されたマーカー列のバージョン番号がテーブルヘッダ内のマーカー列のバージョン番号と同じであるとき、記憶された共有されたマーカー列のバージョン番号と問い合わせ要求の間の対応を確立するようにさらに構成され、
第2の生成ユニット422は、具体的には、更新されたプライベート・マーカー列および条件付きビットマップに従って問い合わせビットマップを生成するように構成され、ここで、更新されたプライベート・マーカー列および条件付きビットマップの両方における同じ行の値が有効な値であるとき、問い合わせビットマップ内の同じ行の値は有効であり、または更新されたプライベート・マーカー列内の同じ行の値および条件付きビットマップ内の同じ行の値が両方とも有効な値であるわけではないとき、問い合わせビットマップ内の同じ行の値は無効であり、
獲得ユニット423は、具体的には、問い合わせビットマップに従って、問い合わせ条件および更新されたプライベート・マーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得するように構成される。
【0047】
さらに、
図5に表わされているように、問い合わせモジュール42は、マーカー列をコピーする前にマーカー列に排他的ロックを付加し、マーカー列をコピーした後にマーカー列について排他的ロックを解放するように構成されるロック処理ユニット425をさらに含む。
【0048】
さらに、
図5に表わされているように、処理デバイスは、変更モジュール43、記録モジュール44、およびサブミットモジュール45をさらに含み、ここで、
インタフェースモジュール41は、トランザクションにおいて、アプリケーションプログラムによって送信される変更要求を受信し、変更要求を変更モジュールに送信するようにさらに構成され、ここで、変更要求は変更条件を含み、
変更モジュール43は、インタフェースモジュールによって送信される変更要求を受信し、変更条件に従ってマーカー列および1つより多くのデータ列に変更処理を適用するように構成され、
記録モジュール44は、トランザクションがサブミットされるときマーカー列に行われるべき変更を記録するように構成され、
サブミットモジュール45は、トランザクションがサブミットされるときマーカー列に行われるべき記録された変更に従って、トランザクションがサブミットされるとき、マーカー列に、対応する変更を行うように構成され、それによって、変更されたマーカー列内の各行のマーカービットの値は、変更処理の後にマーカービットと同じ行内に位置するデータの有効性を示す。
【0049】
インタフェースモジュール41は、変更応答をアプリケーションプログラムに送信するようにさらに構成される。
【0050】
さらに、
図5に表わされているように、処理デバイスの変更モジュール43は、変更要求が具体的には更新要求であり、変更条件が具体的には更新条件であるとき、1つより多くのデータ列において更新条件を満たすデータについて問い合わせするように構成される更新ユニット431を含み、ここで、更新条件を満たすデータが位置する行のマーカービットの値は有効であり、更新ユニット431は、1つより多くのデータ列およびマーカー列に新しい行を追加するように構成され、ここで、新しい行の数量は更新条件において要求される更新されるべき行の数量と同じであり、更新ユニット431は、1つより多くのデータ列内にあり、更新条件を満たすデータを保持する行内のデータを新しい行にコピーし、新しい行のマーカービットの値を無効に設定し、更新条件に従って新しい行内の更新されるべきデータを変更するように構成され、
記録モジュール44は、具体的には、トランザクションがサブミットされるときに更新条件を満たすデータが位置する行のマーカービットの値が無効に変更される必要があるとともに新しい行のマーカービットの値が有効に変更される必要があること、を示す記録を追加するように構成される。
【0051】
さらに、
図5に表わされているように、処理デバイスの変更モジュール43は、列指向データベースが行番号列をさらに含み、各行の行番号が行番号列内に記憶されるとき、新しい行の行番号を、更新条件を満たすデータが位置する行の行番号として設定するように構成される行番号処理ユニット432を含む。
【0052】
さらに、
図5に表わされているように、処理デバイスの変更モジュール43は、変更要求が具体的には挿入要求であり、変更条件が具体的には挿入条件であるとき、挿入条件に従って1つより多くのデータ列およびマーカー列に新しい行を追加するように構成される挿入ユニット433を含み、ここで、新しい行の数量は挿入条件において要求される挿入されるべき行の数量と同じであり、挿入ユニット433は、データを新しい行に追加し、新しい行のマーカービットを無効に設定するように構成され、
記録モジュール44は、具体的には、トランザクションがサブミットされるときに新しい行のマーカービットの値が有効に変更される必要があること、を示す記録を追加するように構成される。
【0053】
さらに、
図5に表わされているように、処理デバイスの変更モジュール43は、変更要求が具体的には削除要求であり、変更条件が具体的には削除条件であるとき、1つより多くのデータ列において削除条件を満たすデータについて問い合わせするように構成される削除ユニット434を含み、
記録モジュール44は、トランザクションがサブミットされるときに削除条件を満たすデータが位置する行のマーカービットの値が無効に変更される必要があること、を示す記録を追加するように構成される。
【0054】
図6に表わされているように、本発明のこの実施例において提供される処理デバイスは、インタフェースモジュール61、変更モジュール62、記録モジュール63、およびサブミットモジュール64を含み、ここで、
インタフェースモジュール61は、トランザクションにおいて、アプリケーションプログラムによって送信される変更要求を受信するように構成され、ここで、変更要求は列指向データベースについての変更条件を含み、インタフェースモジュール61は、変更要求を変更モジュールに送信するように構成され、ここで、列指向データベースはマーカー列および1つより多くのデータ列を含み、データ列は列記憶の形態で特定のデータを記憶するために使用され、マーカー列内の各行のマーカービットの値はマーカービットと同じ行内に位置するデータの有効性を示すために使用され、
変更モジュール62は、変更条件に従ってマーカー列および1つより多くのデータ列に変更処理を適用するように構成され、
記録モジュール63は、トランザクションがサブミットされるときマーカー列に行われるべき変更を記録するように構成され、
サブミットモジュール64は、トランザクションがサブミットされるときマーカー列に行われるべき記録された変更に従って、トランザクションがサブミットされるとき、マーカー列に、対応する変更を行うように構成され、それによって、変更されたマーカー列内の各行のマーカービットの値は、変更処理の後にマーカービットと同じ行内に位置するデータの有効性を示し、
インタフェースモジュール61は、変更応答をアプリケーションプログラムに送信するようにさらに構成される。
【0055】
さらに、
図7に表わされているように、変更モジュール62は、変更要求が具体的には更新要求であり、変更条件が具体的には更新条件であるとき、1つより多くのデータ列において更新条件を満たすデータについて問い合わせするように構成される更新ユニット621を含み、ここで、更新条件を満たすデータが位置する行のマーカービットの値は有効であり、更新ユニット621は、1つより多くのデータ列およびマーカー列に新しい行を追加するように構成され、ここで、新しい行の数量は更新条件において要求される更新されるべき行の数量と同じであり、更新ユニット621は、1つより多くのデータ列内にあり、更新条件を満たすデータを保持する行内のデータを新しい行にコピーし、新しい行のマーカービットの値を無効に設定し、更新条件に従って新しい行内の更新されるべきデータを変更するように構成され、
記録モジュール63は、具体的には、トランザクションがサブミットされるときに更新条件を満たすデータが位置する行のマーカービットの値が無効に変更される必要があるとともに新しい行のマーカービットの値が有効に変更される必要があること、を示す記録を追加するように構成される。
【0056】
さらに、
図7に表わされているように、変更モジュール62は、列指向データベースが行番号列をさらに含み、各行の行番号が行番号列内に記憶されるとき、新しい行の行番号を、更新条件を満たすデータが位置する行の行番号として設定するように構成される行番号処理ユニット622を含む。
【0057】
さらに、
図7に表わされているように、変更モジュール62は、変更要求が具体的には挿入要求であり、変更条件が具体的には挿入条件であるとき、挿入条件に従って1つより多くのデータ列およびマーカー列に新しい行を追加するように構成される挿入ユニット623を含み、ここで、新しい行の数量は挿入条件において要求される挿入されるべき行の数量と同じであり、挿入ユニット623は、データを新しい行に追加し、新しい行のマーカービットを無効に設定するように構成され、
記録モジュール63は、具体的には、トランザクションがサブミットされるときに新しい行のマーカービットの値が有効に変更される必要があること、を示す記録を追加するように構成される。
【0058】
さらに、
図7に表わされているように、変更モジュール62は、変更要求が具体的には削除要求であり、変更条件が具体的には削除条件であるとき、1つより多くのデータ列において削除条件を満たすデータについて問い合わせするように構成される削除ユニット624を含み、
記録モジュール63は、トランザクションがサブミットされるときに削除条件を満たすデータが位置する行のマーカービットの値が無効に変更される必要があること、を示す記録を追加するように構成される。
【0059】
さらに、
図7に表わされているように、処理デバイスは問い合わせモジュール65をさらに含み、ここで、インタフェースモジュール61は、アプリケーションプログラムによって送信される問い合わせ要求を受信するようにさらに構成され、ここで、問い合わせ要求は列指向データベースについての問い合わせ条件を含み、インタフェースモジュール61は、問い合わせ要求を問い合わせモジュールに送信し、問い合わせモジュールによって送信される問い合わせ結果を受信し、問い合わせ結果をアプリケーションプログラムに送信するようにさらに構成される。
【0060】
問い合わせモジュール65は、マーカー列および問い合わせ条件に従って1つより多くのデータ列を問い合わせして、問い合わせ条件およびマーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得し、問い合わせ結果をインタフェースモジュールに送信するように構成される。
【0061】
さらに、
図7に表わされているように、問い合わせモジュール65は、第1の生成ユニット651、第2の生成ユニット652、および獲得ユニット653を含み、ここで、
第1の生成ユニット651は、問い合わせ条件に従って、問い合わせ条件において関与するデータ列を走査し、条件付きビットマップを生成するように構成され、ここで、関与するデータ列内のある行が問い合わせ条件を満たし、条件付きビットマップ内の対応する行は有効な値が割り当てられ、関与するデータ列内のある行が問い合わせ条件を満たさず、条件付きビットマップ内の対応する行は無効な値が割り当てられ、
第2の生成ユニット652は、マーカー列および条件付きビットマップに従って問い合わせビットマップを生成するように構成され、ここで、マーカー列および条件付きビットマップの両方における同じ行の値が有効な値であるとき、問い合わせビットマップ内の同じ行の値は有効であり、またはマーカー列内の同じ行の値および条件付きビットマップ内の同じ行の値が両方とも有効な値であるわけではないとき、問い合わせビットマップ内の同じ行の値は無効であり、
獲得ユニット653は、問い合わせビットマップに従って、問い合わせ条件およびマーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得するように構成される。
【0062】
さらに、
図7に表わされているように、第2の生成ユニット652は、具体的には、マーカー列がビットマップであるとき、マーカー列および条件付きビットマップにAND演算を行って問い合わせビットマップを生成するように構成され、ここで、マーカー列内のマーカービットの値、条件付きビットマップ内の各行の値、および問い合わせビットマップ内の各行の値は、0または1である。
【0063】
さらに、
図7に表わされているように、問い合わせモジュール65は、トランザクションがサブミットされるときマーカー列に行われるべき変更が存在すると判定するように構成される判定ユニット654をさらに含み、ここで、トランザクションは問い合わせ要求が位置するトランザクションであり、判定ユニット654は、一時記憶領域内にマーカー列を記憶し、記憶されたマーカー列を問い合わせ要求のプライベート・マーカー列として使用し、トランザクションがサブミットされるときマーカー列に行われるべき変更に従ってプライベート・マーカー列を更新するように構成され、それによって、更新されたプライベート・マーカー列内の変更されたマーカービットの値は、トランザクションにおける現在のマーカービットに対応するデータの有効性を示し、
第2の生成ユニット652は、具体的には、更新されたプライベート・マーカー列および条件付きビットマップに従って問い合わせビットマップを生成するように構成され、ここで、更新されたプライベート・マーカー列および条件付きビットマップの両方における同じ行の値が有効な値であるとき、問い合わせビットマップ内の同じ行の値は有効であり、または更新されたプライベート・マーカー列内の同じ行の値および条件付きビットマップ内の同じ行の値が両方とも有効な値であるわけではないとき、問い合わせビットマップ内の同じ行の値は無効であり、
獲得ユニット653は、具体的には、問い合わせビットマップに従って、問い合わせ条件および更新されたプライベート・マーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得するように構成される。
【0064】
さらに、判定ユニットは、トランザクションがサブミットされるときマーカー列に行われるべき変更が存在しないと判定するようにさらに構成され、ここで、トランザクションは問い合わせ要求が位置するトランザクションであり、判定ユニットは、一時記憶領域内に共有されたマーカー列が記憶されていないとき、または一時記憶領域内に記憶されている共有されたマーカー列のバージョン番号がテーブルヘッダ内のマーカー列のバージョン番号と異なるとき、データ記憶領域内にあるマーカー列のバージョン番号およびマーカー列を一時記憶領域内に記憶し、記憶されたマーカー列を他の共有されたマーカー列として使用し、他の共有されたマーカー列のバージョン番号と問い合わせ要求の間の対応を確立し、または記憶された共有されたマーカー列のバージョン番号がテーブルヘッダ内のマーカー列のバージョン番号と同じであるとき、記憶された共有されたマーカー列のバージョン番号と問い合わせ要求の間の対応を確立するようにさらに構成され、
第2の生成ユニットは、具体的には、一時記憶領域において、他のまたは記憶された共有されたマーカー列のバージョン番号と問い合わせ要求の間の対応に従って、問い合わせ要求に対応する共有されたマーカー列を判定し、条件付きビットマップおよび問い合わせ要求に対応する共有されたマーカー列に従って問い合わせビットマップを生成するように構成され、ここで、問い合わせ要求に対応する共有されたマーカー列および条件付きビットマップの両方における同じ行の値が有効な値であるとき、問い合わせビットマップ内の同じ行の値は有効であり、または問い合わせ要求に対応する共有されたマーカー列内の同じ行の値および条件付きビットマップ内の同じ行の値が両方とも有効な値であるわけではないとき、問い合わせビットマップ内の同じ行の値は無効であり、
獲得ユニットは、具体的には、問い合わせビットマップに従って、問い合わせ条件および問い合わせ要求に対応する共有されたマーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得するように構成される。
【0065】
さらに、
図7に表わされているように、問い合わせモジュール65は、マーカー列をコピーする前にマーカー列に排他的ロックを付加し、マーカー列をコピーした後にマーカー列について排他的ロックを解放するように構成されるロック処理ユニット655をさらに含む。
【0066】
本発明のこの実施例において、データ列内の各行の数値の有効性を示すために特別に使用されるマーカー列が列指向データベースに追加され、このようにして、列指向データベース内のマーカー列を使用することによって、列指向記憶の形態で、追加、削除、および変更を含む様々なタイプの処理が完全に実現されることが可能である。さらに、特別な行領域において追加、削除、および変更処理を適用する必要はなく、その結果、データ問い合わせが行われるとき、データ問い合わせは列領域において完全に行われることが可能であり、これは行領域における問い合わせについての必要性を除去し、その結果、データ問い合わせの効率を向上させる。この向上はビッグデータのシナリオにおいて目立って著しいであろう。加えて、マーカー列がデータ列内の各行の有効性を示すために使用されるので、データ問い合わせが行われるときデータ列の各行にロックが付加される必要がないことが実現されることも可能である。このようにして、問い合わせが行われるとき、追加、削除、および変更のような操作がデータに行われることも可能である。
【0067】
本発明の実施例は列指向データベース処理方法を提供し、ここで、本発明のこの実施例における列指向データベースは、マーカー列および1つより多くのデータ列を含み、データ列は列記憶の形態で特定のデータを記憶するために使用され、マーカー列内の各行のマーカービットの値は、マーカービットと同じ行内に位置するデータの有効性を示すために使用される。この方法は
図8に表わされている。
【0068】
ステップ801:アプリケーションプログラムによって送信される問い合わせ要求を受信し、ここで、問い合わせ要求は問い合わせ条件を含む。
【0069】
ステップ802:マーカー列および問い合わせ条件に従って1つより多くのデータ列を問い合わせして、問い合わせ条件およびマーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得する。
【0070】
具体的には、問い合わせ条件に従って、問い合わせ条件に関与するデータ列を走査し、条件付きビットマップが生成され、ここで、関与するデータ列内のある行が問い合わせ条件を満たし、条件付きビットマップ内の対応する行は有効な値が割り当てられ、関与するデータ列内のある行が問い合わせ条件を満たさず、条件付きビットマップ内の対応する行は無効な値が割り当てられ、マーカー列および条件付きビットマップに従って問い合わせビットマップを生成し、ここで、マーカー列および条件付きビットマップの両方における同じ行の値が有効な値であるとき、問い合わせビットマップ内の同じ行の値は有効であり、またはマーカー列内の同じ行の値および条件付きビットマップ内の同じ行の値が両方とも有効な値であるわけではないとき、問い合わせビットマップ内の同じ行の値は無効であり、問い合わせビットマップに従って、問い合わせ条件およびマーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得する。
【0071】
ここで、マーカー列はビットマップであり、そして、この場合、マーカー列および条件付きビットマップに従って問い合わせビットマップを生成することは、具体的には、マーカー列および条件付きビットマップにAND演算を行って問い合わせビットマップを生成することを含み、ここで、マーカー列内のマーカービットの値、条件付きビットマップ内の各行の値、および問い合わせビットマップ内の各行の値は、0または1である。
【0072】
さらに、問い合わせ条件に関与するデータ列が問い合わせ条件に従って走査される前に、トランザクションがサブミットされるときマーカー列に行われるべき変更が存在するかどうかを判定することがさらに要求され、ここでトランザクションは問い合わせ要求が位置するトランザクションであり、トランザクションがサブミットされるときマーカー列に行われるべき変更が存在すると判定され、ここでトランザクションは問い合わせ要求が位置するトランザクションであるならば、マーカー列が一時記憶領域内に記憶され、記憶されたマーカー列は問い合わせ要求のプライベート・マーカー列として使用され、プライベート・マーカー列は、トランザクションがサブミットされるときマーカー列に行われるべき変更に従って更新され、それによって、更新されたプライベート・マーカー列内の変更されたマーカービットの値は、トランザクションにおける現在のマーカービットに対応するデータの有効性を示す。
【0073】
この場合、マーカー列および条件付きビットマップに従って問い合わせビットマップを生成するステップであって、マーカー列および条件付きビットマップの両方における同じ行の値が有効な値であるとき、問い合わせビットマップ内の同じ行の値は有効であり、またはマーカー列内の同じ行の値および条件付きビットマップ内の同じ行の値が両方とも有効な値であるわけではないとき、問い合わせビットマップ内の同じ行の値は無効である、ステップと、問い合わせビットマップに従って、問い合わせ条件およびマーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得するステップとは、具体的には、更新されたプライベート・マーカー列および条件付きビットマップに従って問い合わせビットマップを生成するステップであって、更新されたプライベート・マーカー列および条件付きビットマップの両方における同じ行の値が有効な値であるとき、問い合わせビットマップ内の同じ行の値は有効であり、または更新されたプライベート・マーカー列内の同じ行の値および条件付きビットマップ内の同じ行の値が両方とも有効な値であるわけではないとき、問い合わせビットマップ内の同じ行の値は無効である、ステップと、問い合わせビットマップに従って、問い合わせ条件および更新されたプライベート・マーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得するステップとである。
【0074】
さらに、問い合わせ条件に従って、トランザクションがサブミットされるときマーカー列に行われるべき変更が存在しないと判定され、ここでトランザクションは問い合わせ要求が位置するトランザクションであるとき、この方法は、一時記憶領域内に共有されたマーカー列が記憶されていないとき、または一時記憶領域内に記憶されている共有されたマーカー列のバージョン番号がテーブルヘッダ内のマーカー列のバージョン番号と異なるとき、データ記憶領域内にあるマーカー列のバージョン番号およびマーカー列を一時記憶領域内に記憶し、記憶されたマーカー列を他の共有されたマーカー列として使用し、他の共有されたマーカー列のバージョン番号と問い合わせ要求の間の対応を確立し、または記憶された共有されたマーカー列のバージョン番号がテーブルヘッダ内のマーカー列のバージョン番号と同じであるとき、記憶された共有されたマーカー列のバージョン番号と問い合わせ要求の間の対応を確立することをさらに含む。
【0075】
この場合、マーカー列および条件付きビットマップに従って問い合わせビットマップを生成するステップであって、マーカー列および条件付きビットマップの両方における同じ行の値が有効な値であるとき、問い合わせビットマップ内の同じ行の値は有効であり、またはマーカー列内の同じ行の値および条件付きビットマップ内の同じ行の値が両方とも有効な値であるわけではないとき、問い合わせビットマップ内の同じ行の値は無効である、ステップと、問い合わせビットマップに従って、問い合わせ条件およびマーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得するステップとは、具体的には、一時記憶領域において、他のまたは記憶された共有されたマーカー列のバージョン番号と問い合わせ要求の間の対応に従って、問い合わせ要求に対応する共有されたマーカー列を判定し、条件付きビットマップおよび問い合わせ要求に対応する共有されたマーカー列に従って問い合わせビットマップを生成するステップであって、問い合わせ要求に対応する共有されたマーカー列および条件付きビットマップの両方における同じ行の値が有効な値であるとき、問い合わせビットマップ内の同じ行の値は有効であり、または問い合わせ要求に対応する共有されたマーカー列内の同じ行の値および条件付きビットマップ内の同じ行の値が両方とも有効な値であるわけではないとき、問い合わせビットマップ内の同じ行の値は無効である、ステップと、問い合わせビットマップに従って、問い合わせ条件および問い合わせ要求に対応する共有されたマーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得するステップとである。
【0076】
さらに、マーカー列をコピーする前に、この方法は、マーカー列に排他的ロックを付加するステップをさらに含み、マーカー列をコピーした後に、この方法は、マーカー列について排他的ロックを解放するステップをさらに含む。
【0077】
ステップ803:問い合わせ結果をアプリケーションプログラムに送信する。
【0078】
この方法は、トランザクションにおいて、アプリケーションプログラムによって送信される変更要求を受信するステップであって、変更要求は変更条件を含む、ステップをさらに含み、トランザクションおよび上記の問い合わせプロセスは、同じトランザクション内にあることが可能であり、この場合、変更要求は、問い合わせ要求より前であることが可能であり、または問い合わせ要求の後であることが可能であり、またはトランザクションおよび上記の問い合わせプロセスは、異なるトランザクション内にあることが可能であり、この方法は、変更条件に従ってマーカー列および1つより多くのデータ列に変更処理を適用し、トランザクションがサブミットされるときマーカー列に行われるべき変更を記録するステップと、トランザクションがサブミットされるときマーカー列に行われるべき記録された変更に従って、トランザクションがサブミットされるとき、マーカー列に、対応する変更を行い、それによって、変更されたマーカー列内の各行のマーカービットの値は、変更処理の後にマーカービットと同じ行内に位置するデータの有効性を示す、ステップと、アプリケーションプログラムに変更応答を送信するステップと、をさらに含む。
【0079】
具体的には、変更要求が具体的には更新要求であり、変更条件が具体的には更新条件であるならば、変更条件に従ってマーカー列および1つより多くのデータ列についてマーカー列に変更処理を適用し、トランザクションがサブミットされるときマーカー列に行われるべき変更を記録するステップは、具体的には、1つより多くのデータ列において更新条件を満たすデータについて問い合わせするステップであって、更新条件を満たすデータが位置する行のマーカービットの値は有効である、ステップと、1つより多くのデータ列およびマーカー列に新しい行を追加するステップであって、新しい行の数量は更新条件において要求される更新されるべき行の数量と同じである、ステップと、1つより多くのデータ列内の、更新条件を満たすデータが位置する行内のデータを新しい行にコピーし、新しい行のマーカービットの値を無効に設定するステップと、更新条件に従って新しい行内の更新されるべきデータを変更するステップと、トランザクションがサブミットされるときに更新条件を満たすデータが位置する行のマーカービットの値が無効に変更される必要があるとともに新しい行のマーカービットの値が有効に変更される必要があること、を記録するステップと、を含む。
【0080】
列指向データベースが行番号列をさらに含むならば、各行の行番号が行番号列内に記憶され、この方法は、新しい行の行番号を、更新条件を満たすデータが位置する行の行番号として設定するステップをさらに含む。
【0081】
変更要求が具体的には挿入要求であり、変更条件が具体的には挿入条件であるとき、変更条件に従ってマーカー列および1つより多くのデータ列に変更処理を適用し、トランザクションがサブミットされるときマーカー列に行われるべき変更を記録するステップは、具体的には、挿入条件に従って1つより多くのデータ列およびマーカー列に新しい行を追加するステップであって、新しい行の数量は挿入条件において要求される挿入されるべき行の数量と同じである、ステップと、データを新しい行に追加し、新しい行のマーカービットを無効に設定するステップと、トランザクションがサブミットされるときに新しい行のマーカービットの値が有効に変更される必要があること、を記録するステップと、を含む。
【0082】
変更要求が具体的には削除要求であり、変更条件が具体的には削除条件であるとき、変更条件に従ってマーカー列および1つより多くのデータ列に変更処理を適用し、トランザクションがサブミットされるときマーカー列に行われるべき変更を記録するステップは、具体的には、1つより多くのデータ列において削除条件を満たすデータについて問い合わせするステップと、トランザクションがサブミットされるときに削除条件を満たすデータが位置する行のマーカービットの値が無効に変更される必要があること、を記録するステップと、を含む。
【0083】
本発明の実施例は列指向データベース処理方法を提供し、ここで、本発明のこの実施例における列指向データベースは、マーカー列および1つより多くのデータ列を含み、データ列は列記憶の形態で特定のデータを記憶するために使用され、マーカー列内の各行の値は、マーカービットと同じ行内に位置するデータの各行の有効性を示すために使用される。この方法は
図9に表わされている。
【0084】
ステップ901:トランザクションにおいて、アプリケーションプログラムによって送信される変更要求を受信し、ここで、変更要求は変更条件を含む。
【0085】
変更要求は挿入要求または更新要求であることが可能であり、これに対応して、変更条件は、別個に、挿入条件または更新条件であることが可能である。
【0086】
ステップ902:変更条件に従ってマーカー列および1つより多くのデータ列に変更処理を適用し、トランザクションがサブミットされるときマーカー列に行われるべき変更を記録する。
【0087】
変更条件が具体的に更新条件であるとき、このステップは、1つより多くのデータ列において更新条件を満たすデータについて問い合わせするステップであって、更新条件を満たすデータが位置する行のマーカービットの値は有効である、ステップと、1つより多くのデータ列およびマーカー列に新しい行を追加するステップであって、新しい行の数量は更新条件において要求される更新されるべき行の数量と同じである、ステップと、1つより多くのデータ列内にあり、更新条件を満たすデータを保持する行内のデータを新しい行にコピーし、新しい行のマーカービットの値を無効に設定するステップと、更新条件に従って新しい行内の更新されるべきデータを変更するステップと、トランザクションがサブミットされるときに更新条件を満たすデータが位置する行のマーカービットの値が無効に変更される必要があるとともに新しい行のマーカービットの値が有効に変更される必要があること、を示す記録を追加するステップと、を含み得る。
【0088】
上記の更新プロセスは、新しい行の行番号を、更新条件を満たすデータが位置する行の行番号として設定すること、をさらに含む。
【0089】
変更要求が具体的には挿入要求であるとき、このステップは、挿入条件に従って1つより多くのデータ列およびマーカー列に新しい行を追加するステップであって、新しい行の数量は挿入条件において要求される挿入されるべき行の数量と同じである、ステップと、データを新しい行に追加し、新しい行のマーカービットを無効に設定するステップと、
トランザクションがサブミットされるときに新しい行のマーカービットの値が有効に変更される必要があること、を示す記録を追加するステップと、を含み得る。
【0090】
ステップ903:トランザクションがサブミットされるときマーカー列に行われるべき記録された変更に従って、トランザクションがサブミットされるとき、マーカー列に、対応する変更を行い、それによって、変更されたマーカー列内の各行のマーカービットの値は、変更処理の後にマーカービットと同じ行内に位置するデータの有効性を示す。
【0091】
ステップ904:変更応答をアプリケーションプログラムに送信する。
【0092】
上記の解決策は問い合わせプロセスをさらに含む。問い合わせプロセスは
図8に表わされた実施例におけるものと同じであり、詳細は再度ここに記載されない。
【0093】
本発明のこの実施例において、データ列内の各行の数値の有効性を示すために特別に使用されるマーカー列が列指向データベースに追加され、このようにして、列指向データベース内のマーカー列を使用することによって、列指向記憶の形態で、追加、削除、および変更を含む様々なタイプの処理が完全に実現されることが可能である。さらに、特別な行領域において追加、削除、および変更処理を適用する必要はなく、その結果、データ問い合わせが行われるとき、データ問い合わせは列領域において完全に行われることが可能であり、これは行領域における問い合わせについての必要性を除去し、その結果、データ問い合わせの効率を向上させる。この向上はビッグデータのシナリオにおいて目立って著しい。加えて、マーカー列がデータ列内の各行の有効性を示すために使用されるので、データ問い合わせが行われるときデータ列の各行にロックが付加される必要がないことが実現されることも可能である。このようにして、問い合わせが行われるとき、追加、削除、および変更のような操作がデータに行われることも可能である。
【0094】
例えば、実際のテストにおいて、4000万行のデータを走査するために2757 usかかり、ここで、各行は3つのフィールドを含み、各フィールドは8バイトを有し、10000行ごとのデータを走査することは0.68925 usかかる。しかし、行記憶の形態で記憶されたデータが行走査の形態で走査され、同じテーブル構造が利用されるとき、1000万行のデータを走査することは3081376 usを必要とし、10000行ごとのデータを走査するために要求される時間の量は308.1376 usに達する。列走査の効率は行走査の効率より447倍高い。列指向データベースの問い合わせ効率は行指向データベースの問い合わせ効率よりずっと高いことがこのテストから十分に証明されることが可能である。さらに、本発明において、マーカー列はデータベースの複数のバージョンを制御するために使用され、これは制御の容易さ、高い利便性、データベースの追加、削除、変更、および問い合わせの効率における向上を明示する。
【0095】
図10に表わされているように、本発明の実施例は、下記を含む、列指向データベースを問い合わせするための方法を提供する。
【0096】
ステップ1001:列指向データベースは、トランザクションにおいて、アプリケーションプログラムによって送信される問い合わせ要求を受信し、ここで、問い合わせ要求は問い合わせ条件を含む。
【0097】
例えば、問い合わせ要求はSQL1、例えば、select F2 from Table1 where F3>15であり、本発明のこの実施例における表1は、ここでのTable1を示すために使用される。
【0098】
ステップ1002:列指向データベースは、トランザクションログに従って、トランザクションがサブミットされるときマーカー列に行われるべき変更がトランザクションログ内に記録されているかどうかを判定し、トランザクションがサブミットされるときマーカー列に行われるべき変更がトランザクションログ内に記録されていないならば、共有されたマーカー列が一時記憶領域内に記憶されているかどうかを判定し、共有されたマーカー列が一時記憶領域内に記憶されていない、または一時記憶領域内に記憶された共有されたマーカー列のバージョン番号が、テーブルヘッダ内の共有されたマーカー列のバージョン番号と異なるならば、データ記憶領域内にあるマーカー列のバージョン番号およびマーカー列を一時記憶領域内に記憶し、記憶されたマーカー列を他の共有されたマーカー列として使用し、他の共有されたマーカー列のバージョン番号と問い合わせ要求の間の対応を確立し、例えばスライダを使用することによって、共有されたマーカー列のバージョン番号を問い合わせ要求と関連付け、または記憶された共有されたマーカー列のバージョン番号が、テーブルヘッダ内のマーカー列のバージョン番号と同じであるならば、記憶された共有されたマーカー列のバージョン番号と問い合わせ要求の間の対応を確立する。ここでの共有されたマーカー列は、問い合わせを要求するために同じトランザクションにおける他の問い合わせ要求または他のトランザクションにおける問い合わせ要求によって直接に使用されることが可能であるマーカー列を指す。マーカー列はパブリックに設定されることが可能であり、それによって、マーカー列は共有されたマーカー列である。マーカー列をパブリックに設定するために複数のやり方がある。1つのやり方は、マーカー列の属性をパブリック属性に設定することであり、他の代わりのやり方は、一時記憶領域内に2つの領域をセットアップし、ここで、1つの領域はパブリック領域であり、他はプライベート領域であり、そして、パブリック領域内に共有されたマーカー列を記憶することである。トランザクションがサブミットされるときマーカー列に行われるべき変更がトランザクションログ内に記録されているならば、マーカー列はまず一時記憶領域にコピーされ、プライベート・マーカー列として使用されるようにプライベートに設定される。プライベート・マーカー列はこの問い合わせ要求についてのみ効力があり、マーカー列は、同じトランザクションにおける他の問い合わせ要求または他のトランザクションにおける問い合わせ要求による問い合わせのために直接に使用されることが可能でない。プライベート・マーカー列を設定するために複数のやり方がある。1つのやり方は、マーカー列の属性をプライベート属性に設定することであり、代わりのやり方は、一時記憶領域内に2つの領域をセットアップし、ここで、1つの領域はパブリック領域であり、他はプライベート領域であり、そして、プライベート領域内にプライベート・マーカー列を記憶することである。プライベート・マーカー列は、トランザクションがサブミットされるときマーカー列に行われるべき変更に従って更新され、それによって、更新されたプライベート・マーカー列内の変更されたマーカービットの値は、トランザクションにおける現在のマーカービットに対応するデータの有効性を示す。
【0099】
具体的な例は次の通りであり、現在のトランザクションはサブミットされていない、従って、現在のトランザクションにおいてデータ列内のデータへの変更処理が既に存在するかどうかを判定することが要求される。列指向データベースはトランザクションログを問い合わせする。1つの行のマーカービットの値またはいくつかの行のマーカービットの値が、現在のトランザクションがサブミットされるべきときに変更される必要があることを示す記録を、現在のトランザクションログが含まないならば、現在のトランザクションのコンテキスト内でデータ列内のデータに変更処理が行われないことが推論され、これは、このSQL1について現在のマーカー列が正確であることを意味する。従って、現在のエントリ・カウントが読み取られ、データ記憶領域内のマーカー列が現在のエントリ・カウントに従って走査され、現在のマーカー列は一時記憶領域内にコピーされ、現在のマーカー列はプライベート・マーカー列として使用される。本発明のこの実施例における上記の具体的なSQL1の例に戻り参照すると、列指向データベースはマーカー列の1つのコピーを作成し、プライベート・マーカー列は表3に表わされている。
【0101】
マーカー列内の1つの行のマーカービットの値またはいくつかの行のマーカービットの値が、現在のトランザクションがサブミットされるべきとき変更される必要があることを示す記録を、トランザクションログが含むならば、現在のトランザクションにおいてデータ列内のデータへの変更処理が既に存在することが推論され、これは、現在のトランザクションがサブミットされていないことを意味する。この場合、プライベート・マーカー列によって示されるデータの有効性はSQL1について不正確である。従って、列指向データベースはまず現在のエントリ・カウントを読み取り、現在のエントリ・カウントに従って現在のマーカー列を走査し、現在のマーカー列を一時記憶領域にコピーし、現在のマーカー列をプライベート・マーカー列として使用し、現在のマーカー列の1つのコピーを作成し、一時記憶領域内のマーカー列内の1つの行のマーカービットの値またはいくつかの行のマーカービットの値を変更し、すなわち、トランザクションログ内の記録に従ってプライベート・マーカー列を更新する。
【0102】
マーカー列がコピーされる前に、マーカー列にロックが付加されることがさらに必要であり、それによって、コピープロセスにおいて他のトランザクションがマーカー列を更新することを防止し、その結果、正しくない問い合わせ結果を避ける。マーカー列がコピーされた後に、遅れずにロックが解放されることがさらに必要であり、それによって、他のトランザクションによるマーカー列への更新処理は影響されず、トランザクションは同時に処理されることが可能である。
【0103】
現在のトランザクションは処理されたが次の操作delete from Table1 where F2=bがサブミットされていないと仮定する。この場合、トランザクションログは次の記録、トランザクションがサブミットされるとき、行番号2を有するマーカービットは0に変更されるべきである、を含む。明らかに、記録は様々なフォーマットを採用することが可能であり、例えば、記録は、テキスト記述、XML記述、または表記述であり得る。本発明のこの実施例における上記の具体的なSQL1の例に戻り参照すると、表3に表わされているように列指向データベースがマーカー列の1つのコピーを作成した後に、行番号2を有するマーカー列はトランザクションログ内の記録に従って0に変更されることがさらに必要であり、更新されたプライベート・マーカー列は、表4に表わされているように、コピーされたマーカー列として記憶される。
【0105】
マーカー列が共有可能であるならば、一時記憶領域内に一時的に記憶されたバージョン番号が現在のテーブル・ヘッダ内のバージョン番号と異なり、バージョン番号が問い合わせ要求によって使用されていないと判定されたとき、一時記憶領域内のマーカー列は削除されることが可能であるが、記憶されたマーカー列がプライベートであるとき、かつマーカー列を使用して問い合わせ要求が処理された後に、一時記憶領域内のマーカー列は直接に削除される。
【0106】
ステップ1003:1つより多くのデータ列において、コピーされたマーカー列および問い合わせ条件に従って、問い合わせ条件およびコピーされたマーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得する。
【0107】
具体的には、列指向データベースは、受信された問い合わせ条件に従って、問い合わせ条件において関与する列を走査して条件付きビットマップ(bitmap)を取得し、ここで、ビットマップにおいて、条件を満たす行の値は1であり、条件を満たさない行の値は0である。本発明のこの実施例における上記の具体的なSQL1の例に戻り参照すると、2つの行は条件F3=30を満たし、表5に表わされた条件付きビットマップが取得される。
【0109】
表4に表わされたコピーされたマーカー列はビットマップでもある。この場合、列指向データベースは一時的に記憶されたマーカー列のビットマップおよび条件付きビットマップにAND演算を行い、それによって、問い合わせビットマップを取得し、ここで、問い合わせビットマップはどの行が問い合わせ条件を満たすかを示し得る。AND演算プロセスは
図11に表わされている。この例において、表4に表わされた一時的に記憶されたマーカー列のビットマップおよび表5に表わされた条件付きビットマップにAND演算が行われた後に、表6に表わされた問い合わせビットマップが取得される。
【0111】
問い合わせビットマップおよび問い合わせ条件に従って最終的な問い合わせ結果が取得され得る。この例において、問い合わせ結果は3番目の行内のデータであり、すなわち、取得された問い合わせ結果はcである。
【0112】
問い合わせ要求が履行された後に、一時記憶領域内にコピーされ記憶されたマーカー列が削除され得る。
【0113】
ステップ1004:トランザクションをサブミットし、問い合わせ結果をアプリケーションプログラムに送信する。このようにして、問い合わせ要求プロセスが完了する。
【0114】
マーカー列内の全ての値が0である、すなわち、各行内のデータが現在無効であるならば、問い合わせを行う必要性なしで、合致が見出されないことを示す問い合わせ結果が直接に出力されることが可能である。マーカー列内の全ての値が1である、すなわち、各行内のデータが現在有効であるならば、条件付きビットマップおよびマーカー列にAND演算が行われる必要がなく、条件付きビットマップは問い合わせビットマップである。
【0115】
上記の問い合わせプロセスの後に、かつトランザクションのサブミットの前に、トランザクションにおいて他の問い合わせ要求プロセスが存在することも可能であり、このプロセスは下記を含む。
【0116】
ステップ1005:列指向データベースは、アプリケーションプログラムによって送信される他の問い合わせ要求をさらに受信し、ここで、問い合わせ要求は問い合わせ条件を含む。
【0117】
例えば、問い合わせ要求はSQL2、例えば、select F3 from Table1 where (F2=b or F2=d)である。
【0118】
ステップ1006:ステップ1002において、トランザクションがサブミットされるときにマーカー列に行われるべき変更がトランザクションログ内に記録されていると判定され、従って、列指向データベースは現在のマーカー列および現在のマーカー列のバージョン番号を一時記憶領域にコピーし、トランザクションログに従って一時記憶領域内のコピーされたマーカー列を更新する。
【0119】
このとき他のトランザクションにおいてマーカー列が変更され、変更されたマーカー列のバージョン番号はv4であると仮定し、変更されたマーカー列は表7に表わされている。
【0121】
ステップ1002における仮定に従って、このときのトランザクションログは、トランザクションがサブミットされるとき、行番号2を有するマーカービットは0に変更されるべきである、と記録する。従って、トランザクションログに従って、表7に表わされているように、行番号2を有するマーカー列の値が0に変更され、更新されたマーカー列は、表8に表わされているように、コピーされたマーカー列として記録される。
【0123】
ステップ1007:1つより多くのデータ列において、コピーされたマーカー列および問い合わせ条件に従って、問い合わせ条件およびコピーされたマーカー列内の問い合わせ結果のマーカービットが有効であるという要求条件の両方を満たす問い合わせ結果を取得する。
【0124】
具体的には、列指向データベースは、受信された問い合わせ条件に従って、問い合わせ条件において関与する列を走査して条件付きビットマップ(bitmap)を取得し、ここで、ビットマップにおいて、条件を満たす行の値は1であり、条件を満たさない行の値は0である。本発明のこの実施例における上記の具体的なSQL2の例に戻り参照すると、2つの行は条件F2=bまたはdを満たし、表9に表わされた条件付きビットマップが取得される。
【0126】
表8に表わされたコピーされたマーカー列はビットマップでもある。この場合、列指向データベースはコピーされたマーカー列のビットマップおよび条件付きビットマップにAND演算を行い、それによって、問い合わせビットマップを取得し、ここで、問い合わせビットマップはどの行が問い合わせ条件を満たすかを示し得る。表8に表わされた一時的に記憶されたマーカー列のビットマップおよび表9に表わされた条件付きビットマップにAND演算が行われた後に、表10に表わされた問い合わせビットマップが取得される。
【0128】
問い合わせビットマップおよび問い合わせ条件に従って最終的な問い合わせ結果が取得され得る。この例において、問い合わせ結果は4番目の行内のデータであり、すなわち、取得された問い合わせ結果は10である。
【0129】
本発明のこの実施例における技術的解決策において、データ問い合わせが行われるとき、マーカー列は、データ列内の各行のデータが有効であるかどうかを示すために使用され、このようにして、列指向の問い合わせが迅速で正確に行われることが可能である。
【0130】
図12に表わされているように、本発明は、下記を含む列指向データベース挿入処理解決策をさらに提供する。
【0131】
ステップ1201:列指向データベースは、トランザクションにおいて、アプリケーションプログラムによって送信される挿入要求を受信し、ここで、挿入要求は挿入条件を含む。
【0132】
ステップ1202:列指向データベースは現在のエントリ・カウントを読み出し、現在のエントリ・カウントおよび挿入条件に従って、各列内の最後の行の下にデータの新しい行を追加し、ここで、最後の行の行番号は現在のエントリ・カウントに等しく、マーカー列内の新しく追加された対応する行のマーカービットを無効に設定し、例えば、マーカービットの数値は0であり、トランザクションログ内に、トランザクションがサブミットされるときに新しく追加された対応する行のマーカービットが有効に変更されるべきであること、を示す記録を追加する。実装プロセスにおいて、マーカービットが変更される必要がある行は、新しく追加された対応する行のアドレスを記録することによってトランザクションログ内に記録されることが可能であり、新しく追加された対応する行のアドレスは位置番号であることが可能であり、ここで、位置番号は列指向データベース内の行の位置の順序を指す。例えば、10行のデータが列指向の形態で記憶され、1番目の行から10番目の行の位置の順序は順に0から9であることが可能である。どの行の位置も計算されることが可能であり、1番目の行の開始位置および各行によって占められる位置のサイズは知られていると仮定する。このようにして、特定の位置を位置指定するために位置番号が使用され得る。
【0133】
トランザクションがサブミットされることに成功したとき、マーカービットの値はトランザクションログ内の記録に従って1に変更される。この場合、それは挿入要求が処理されることに成功したことを示す。ここでの挿入要求がいくつかの挿入されるべきデータ、例えば、N個の挿入されるべきデータを含むならば、列指向データベースは各データ列内の最後の行の下にN行のデータを順に挿入することが可能であり、ここで、最後の行の行番号は現在のエントリ・カウントに等しい。各々の新しく追加された行のマーカービットの数値は0であり、行が追加されるごとに、現在のエントリ・カウントは1だけ増加する。挿入結果、すなわち、挿入が成功したことの応答メッセージはアプリケーションプログラムに返信される。
【0134】
例えば、挿入要求は具体的にはSQL2、例えば、insert into Table1 (F2, F3) values (e, 15)であり、現在のエントリ・カウントは4であることがまず分かり、表1における各列の4番目の行の下に新しい行が追加され、マーカー列内の新しい行のマーカービットの値は無効であり、データ列F2およびF3の値はそれぞれeおよび15であり、新しい行の行番号は5に設定される。一般に、新しい行の行番号は加算の前の最大の行番号に1を加えたものであり、それによって、新しい行の行番号がユニークであることを保証する。加えて、現在のエントリ・カウントは1だけ増加して5になり、これは表11に表わされている。
【0136】
トランザクションがサブミットされるとき変更がマーカー列に行われる必要があることが、トランザクションログ内に記録される。
【0137】
トランザクションがサブミットされることに成功した後に、トランザクションログ内の記録に従って新しい行のマーカービットの値は1に変更される。このようにして、表12に表わされているように、挿入操作の処理は完了する。
【0139】
図13に表わされているように、本発明は、下記を含む列指向データベース更新処理解決策をさらに提供する。
【0140】
ステップ1301:列指向データベースは、トランザクションにおいて、アプリケーションプログラムによって送信される更新要求を受信し、ここで、更新要求は更新条件を含む。
【0141】
ステップ1302:列指向データベースは、現在のエントリ・カウントを読み出し、現在のエントリ・カウントおよび更新条件に従って、各列内の行において更新条件を満たすデータについて問い合わせし、ここで、問い合わせされる行の数量は現在のエントリ・カウントに等しく、更新条件を満たすデータが位置する行のマーカービットの値は有効であり、1つより多くのデータ列およびマーカー列に新しい行を追加し、ここで、新しい行の数量は更新条件において要求される更新されるべき行の数量と同じであり、更新条件を満たすデータが位置する行の各データ列内にあるデータを新しい行に順にコピーし、新しい行のマーカービットの値を無効に設定し、新しい行の行番号を、更新条件を満たすデータが位置する行の行番号として設定する。
【0142】
具体的には、例えば、更新要求は具体的にはSQL3、update table1 set F3=20 where F2=cである。列指向データベースはテーブルtable1を走査し、列F2内の値がcであるエントリについて問い合わせする。エントリが位置する行内の各データ列の値はテーブルtable1の終わりにおいて各データ列にコピーされて新しい行を形成し、新しい行が位置するマーカー列内のマーカービットの値は0に設定され、新しい行の行番号は3に設定され、ここで、この行内の各データ列の値は、表13に表わされているように、列F2内の値がcである問い合わせされた行内の値である。
【0144】
ここで、更新条件に従って、更新条件を満たすデータを読み取るプロセスは実際には問い合わせプロセスであり、問い合わせプロセスの原理は
図10における実施例におけるものと同じである。
【0145】
ステップ1303:更新条件に従って新しい行内の更新されるべきデータを変更し、トランザクションがサブミットされるときに更新条件を満たすデータが位置する行のマーカービットの値が無効に変更される必要があるとともに新しい行のマーカービットの値が有効に変更される必要があること、を示すためにトランザクションログに記録を追加する。
【0146】
具体的には、例えば、列指向データベースは、更新条件set F3=20 where F2=cに従って、新しい行内のデータ列F3の値を30から20に更新し、最大の現在のエントリ・カウントを1だけ増加させて5にする。更新の後の各列は表14に表わされている。
【0148】
ステップ1304:トランザクションログ内の記録に従ってトランザクションをサブミットし、この場合、更新条件を満たすデータが位置する行のマーカービットの値を無効に変更し、新しい行のマーカービットの値を有効に変更し、更新結果、すなわち、更新が成功したことを示す応答メッセージをアプリケーションプログラムに返信する。
【0149】
例えば、列指向データベースは現在のトランザクションをサブミットし、トランザクションがサブミットされるとき、排他的ロックをマーカー列に付加し、トランザクションログ内に記録された行のマーカービットを変更し、すなわち、F2 = cかつF3 = 30である行のマーカービットを0に変更し、F2 = cかつF3 = 20である行のマーカービットを1に変更する。サブミットが成功した後に、新しいデータは効力を生じ、古いデータは無効になる。サブミットの後に、マーカー列について排他的ロックは解放される。サブミットの後のデータは表15に表わされている。
【0151】
図14に表わされているように、本発明は、下記を含む列指向データベース削除処理解決策をさらに提供する。
【0152】
ステップ1401:列指向データベースは、トランザクションにおいて、アプリケーションプログラムによって送信される削除要求を受信し、ここで、削除要求は削除条件を含む。
【0153】
ステップ1402:現在のエントリ・カウントを読み出し、数量が現在のエントリ・カウントに等しい行の各データ列において、削除条件を満たす行の行番号を読み出し、トランザクションがサブミットされるときマーカー列に行われるべき変更をトランザクションログ内に記録する。
【0154】
ここで、削除条件に従って削除されるべき行を読み出すプロセスは実際には問い合わせプロセスであり、問い合わせプロセスの原理は
図10における実施例におけるものと同じである。
【0155】
ステップ1403:トランザクションログ内の記録に従ってトランザクションをサブミットし、この場合、削除条件に対応するデータが位置する行のマーカービットの値を無効に変更し、削除結果、すなわち、削除が成功したことを示す応答メッセージをアプリケーションプログラムに返信する。
【0156】
例えば、削除要求は具体的にはSQL4、delete from table1 where F2=cである。そして、上記の削除プロセスは次の通りである。削除条件に従って、トランザクションがサブミットされることに成功したときに表1におけるデータ列F2の値がcである行のマーカービットを無効に変更すべきであること、を示すためにトランザクションログに記録が追加される。そして、トランザクションがサブミットされるとき、トランザクションログ内の記録に従って削除処理が行われる。削除の後の結果は表16に表わされている。データの新しい行は追加されていないので、現在のエントリ・カウントは不変のままである。
【0158】
列指向データベースが、問い合わせ、削除、または更新処理を行うとき、削除条件または更新条件を満たすデータ列を問い合わせするプロセスを実行することが要求され、データベース内のマーカー列は絶えず変化し得るので、マーカー列およびマーカー列のバージョン番号は各問い合わせの間に一時的なキャッシュ領域にコピーされる必要がある。具体的な問い合わせプロセスは
図10に対応する実施例に表わされている。
【0159】
この技術分野の当業者は、方法の実施例のステップの全部または一部が関連するハードウェアに命令するプログラムによって実現され得ることを理解し得る。プログラムはコンピュータ読み取り可能な記憶媒体内に記憶され得る。プログラムが動作するとき、方法の実施例のステップが行われる。上記の記憶媒体は、ROM、RAM、磁気ディスク、または光ディスクのようなプログラムコードを記憶することが可能であるいずれの媒体も含む。
【0160】
最後に、上記の実施例は本発明の技術的解決策を記載するために単に意図されるが、本発明を限定するために意図されないことに留意すべきである。本発明が上記の実施例を参照して詳細に記載されたが、この技術分野の当業者は、彼らが、本発明の実施例の技術的解決策の範囲から逸脱することなく、上記の実施例において記載された技術的解決策に依然として変更を行い、またはそれらのいくつかまたは全ての技術的特徴に等価な代替を行い得ることを理解すべきである。