JP2018045285A - 情報処理システム、制御装置、処理プログラム、及び処理方法 - Google Patents

情報処理システム、制御装置、処理プログラム、及び処理方法 Download PDF

Info

Publication number
JP2018045285A
JP2018045285A JP2016177518A JP2016177518A JP2018045285A JP 2018045285 A JP2018045285 A JP 2018045285A JP 2016177518 A JP2016177518 A JP 2016177518A JP 2016177518 A JP2016177518 A JP 2016177518A JP 2018045285 A JP2018045285 A JP 2018045285A
Authority
JP
Japan
Prior art keywords
group
column
record
oriented database
row
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2016177518A
Other languages
English (en)
Inventor
中村 実
Minoru Nakamura
実 中村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016177518A priority Critical patent/JP2018045285A/ja
Priority to US15/686,607 priority patent/US20180075116A1/en
Publication of JP2018045285A publication Critical patent/JP2018045285A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/258Data format conversion from or to a database
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/221Column-oriented storage; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2237Vectors, bitmaps or matrices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • G06F16/285Clustering or classification

Abstract

【課題】データベースの処理性能と利用効率との向上を両立させる。
【解決手段】行指向データベース11と、前記行指向データベース11から変換される列指向データベース15とを記憶する記憶装置と、前記記憶装置を制御する制御装置とをそなえ、前記制御装置は、前記行指向データベース11に含まれる複数のレコードを複数のグループに分け、前記グループごとに、当該グループを前記列指向データベース15のフォーマットに従った列グループ16に変換する。
【選択図】図2

Description

本発明は、情報処理システム、制御装置、処理プログラム、及び処理方法に関する。
リレーショナルデータベース(RDBMS)では、1件のデータはレコード(record)又はタプル(tuple)と呼ばれる。1件のレコードは「人名」、「生年月日」、「住所」等の複数の属性(attribute)によって構成される。複数のレコードを集めたものがテーブル(table)又はリレーション(relation)である。RDBMSではテーブルに対してレコードの挿入・削除や検索等の操作が実行される。
テーブルは設計上の概念としては「レコードの集合」だが、これは縦と横方向を持った2次元情報として解釈することもできる。レコードの属性はカラム(column)であり各レコードは行(row)となる。RDBMSの実際の実装では、テーブルは計算機上のストレージに格納される。ここで、カラム及び行の並べ方には以下の3種類が存在する。
・NSM(N-ary Storage Model):レコード内の属性を固めて1つのストレージに格納する(行指向)。
・DSM(Decomposition Storage Model):属性ごとに分割してストレージに格納する(列指向)。
・PAX(Partition Attributes Across):一定数のレコードを属性別に並べてストレージに格納する。
比較的古いデータベースでは、NSM(行指向)が採用されている。このようなデータベースではレコードの挿入・削除・更新の性能が重要で、ストレージ上にレコード単位でデータが並んでいる方が出し入れがし易いためである。このようなデータベースとしては、例えば、1977年にリリースされたORACLE(登録商標)Databaseの前身や1983年にIBM(登録商標)からリリースされたDB2(登録商標)等が挙げられる。
一方、Sybase IQ(登録商標)やTeradata(登録商標)をはじめとするビジネスインテリジェンスやデータウェアハウスでは、DSMが採用されることが多い。これはデータの分析ではテーブル内の全てのレコードを読み出す場合が多いが、このときレコード内の全属性のうちの特定の数の属性だけを読み出せればよいためである。DSMが採用されたデータベースは列指向データベース(column-oriented database)又はカラムナー(columnar)と呼ばれる。またカラム別のデータは圧縮が効き易く(圧縮効率がよく)、高効率の圧縮をかければディスク上のスペースも小さくなり、読み出し時のI/O(Input / Output)が削減され、性能が向上する。このため、カラムナーは一般に圧縮を行なう。
近年、列指向データベースの需要が高まっており、様々な列指向データベースが開発されている。研究レベルではC−Store、MonetDB、X100、HyPer、商業用ではHP Vertica、Vectorwise(Action Vector)等が開発されている。また行指向データベースでも、IBM DB2 BLU AccelerationやOracle 12c等で列指向データベース機能をオプションで追加するようになっている。
一方、従来の行指向データベースに分析用のカラムナーをアドインする場合、行指向データベースのテーブルに対してカラムナーの「インデックス」を用意するという方法が知られている。例えば、Microsoft(登録商標)のSQL Server 2012のカラムストア・インデックス(Columnstore Indexes)機能や、富士通研究所のCSI(Column Store Index)機能である。
但し、上記の「インデックス」は、データベースから見てテーブルスキャンを助ける機構があるという意味であり、通常のインデックスのように指定したキーに対するソートがされているわけではない。以下、カラムナーのインデックスを、「カラムストア・インデックス」又は単に「カラムストア」と表記する。
特表2010−539616号公報 特開2014−13562号公報 特開2001−14329号公報
株式会社富士通研究所、"PostgreSQLをベースとしたカラムストア機構の実現検討"、中村 実、田原 司睦、宇治橋 善史、橋田 拓志、河場 基行、原田 リリアン、DEIM Forum 2015、[online]、平成27年3月3日、[平成28年7月5日検索]、インターネット<URL: //db-event.jpn.org/deim2015/paper/195.pdf> Microsoft Corporation、"SQL Server 2014 列ストア インデックスの説明"、[online]、[平成28年7月5日検索]、インターネット<URL: //msdn.microsoft.com/ja-jp/library/gg492088%28v=sql.120%29.aspx>
カラムナーはINSERT/DELETE/UPDATE等の更新系の処理の性能が低いことが知られている。カラムナーが1つの行をカラムごとに分割して複数のカラム別データに書き込むことや、各カラム別データが圧縮されていることが原因となっている。カラムナーの更新速度を改善するために、カラムストアとは別に行形式のまま格納する少量のキャッシュを設けるのが一般的である。このキャッシュはデルタストア(delta store)或いはWOS(Write Optimized Store)と呼ばれる。
カラムストア・インデックスを採用した場合、図15に例示するように、オリジナルテーブル1100に対するINSERT/DELETE/UPDATEはまずデルタストア1200に格納される。デルタストア1200に一定量の挿入・更新・削除行の情報が溜まると、複数行を一括でカラムストア1300内データへと変換する。変換されたデータは、SQL Serverでは列セグメント(column segment)、富士通研究所のCSIではエクステント(extent)と呼ばれる。図15にはカラムストア1300内に列セグメント1400−1及び1400−2が存在する例を示している。デルタストア1200内に蓄積された行のうち、デルタストアに挿入した行と削除した行のペアがあれば列セグメントへの変換時に対消滅させてカラムストアには書き出さないといった最適化も可能である。
一方、オリジナルのテーブルは行単位で管理されている。例えば、オリジナルテーブルで削除された行はテーブルに空き領域として残り、次に行を挿入するときにテーブルの空き領域として再利用される。図16に、オリジナルテーブル2100の行“2”を削除し行“3”を追加する例を示す。
しかし、オリジナルテーブル2100上から削除された行は、カラムストア2300内ではDelete vectorに削除行であることがマークされた後にそのまま残る。例えば、図16では、カラムストア2300の列セグメント2400−1の行“2”にDelete vector“1”が設定される。
このため、挿入を行なった順序とディスク上の配置とにズレが生じる。INSERTだけを実施していた場合は、オリジナルテーブル2100とカラムストア2300との行の並び方は同じになり得るが、UPDATE・DELETEも含めるとテーブル2100の並びとカラムストア2300の並びとはズレることになる。従って、オリジナルテーブル2100の順序とカラムストア2300の順序とは一致しない。
これは行指向データベースのオリジナルテーブルに対する、カラムストア・インデックスではない検索用のインデックス(以下、「通常インデックス」と表記する)がカラムストアに適用できないことを意味する。
行指向データベースは通常インデックスを用いることでテーブルの特定の行へのアクセスを高速化している。通常インデックスは一般に指定したカラムをキーにし、オリジナルテーブル上の位置を値に保持している。図17にオリジナルテーブル3100と通常インデックス3200との関係を例示する。
オリジナルテーブル3100には、“ColA”、“ColB”、“ColC”の3つの列を持つテーブルがあり、その中で“ColA”に対して通常インデックス3200が張られている。通常インデックス3200は“ColA”をソートした形でデータを保持している。なお、図17の例では、通常インデックス3200は表の形式で示しているが、実際には木構造である場合が多い。オリジナルテーブル3100において、“0:1”、“0:2”等は、テーブル内の行の位置を示す識別子である。以下、この識別子を「レコードID(Identifier)」と表記する。
しかし、上述のように、オリジナルテーブルとカラムストアとで行の並び順の一致が保証されていないため、図18に例示するように、オリジナルテーブル4100のために設けた通常インデックス4200からカラムストア4300へは直接マッピングできない。換言すれば、カラムストア4300をスキャンする場合には通常インデックス4200は使えないことになる。
カラムナーにおいても、検索のために用いるインデックスが存在しない場合には、十分な性能が発揮できない。このため、カラムストア・インデックスの性能を上げるためには、オリジナルテーブルの通常インデックスとは別にカラムストア・インデックスに対するインデックスを設けることが考えられる。しかし、これはデータを二重に持つことを意味し、ディスク容量等を浪費することに繋がる。
以上のように、行指向データベースの処理性能を向上させるために列指向のカラムストアを適用する場合、通常インデックスの他に、カラムストアに対してもインデックスを設けることになり、データ圧縮や更新頻度等の観点で利用効率が低下する場合がある。
1つの側面では、本発明は、データベースの処理性能と利用効率との向上を両立させることを目的とする。
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の1つとして位置付けることができる。
1つの側面では、情報処理システムは、行指向データベースと、前記行指向データベースから変換される列指向データベースとを記憶する記憶装置と、前記記憶装置を制御する制御装置とをそなえてよい。前記制御装置は、前記行指向データベースに含まれる複数のレコードを複数のグループに分け、前記グループごとに、当該グループを前記列指向データベースのフォーマットに従った列グループに変換する変換部、をそなえてよい。
1つの側面では、データベースの処理性能と利用効率との向上を両立できる。
VBM(Visibility block map)を有するオリジナルテーブルのデータ構成例を示す図である。 一実施形態に係るデータベースのデータ構成例を示す図である。 一実施形態に係る情報処理システムの構成例を示すブロック図である。 オリジナルテーブルからカラムストアへの変換処理の一例を示す図である。 通常インデックスを利用せずにオリジナルテーブルをスキャンする場合の参照処理の一例を示す図である。 通常インデックスを利用してオリジナルテーブルをスキャンする場合の参照処理の一例を示す図である。 通常インデックスを利用してオリジナルテーブルをスキャンする場合の参照処理の変形例を示す図である。 図3に示す更新部の処理の一例を説明するフローチャートである。 図3に示す変換部の処理の一例を説明するフローチャートである。 図9に示す変換処理の一例を説明するフローチャートである。 図3に示す参照部による通常インデックスを利用しない場合の処理の一例を説明するフローチャートである。 図3に示す参照部による通常インデックスを利用する場合の処理の一例を説明するフローチャートである。 図3に示す参照部による通常インデックスを利用する場合の処理の変形例を説明するフローチャートである。 図3に示すコントローラのハードウェア構成例を示すブロック図である。 オリジナルテーブル、デルタストア、列セグメントの関係の一例を示す図である。 行の挿入及び削除を行なった場合のオリジナルテーブル、カラムストアのデータ変化の一例を示す図である。 オリジナルテーブルと通常インデックスとの関係の一例を示す図である。 オリジナルテーブル、通常インデックス、カラムストアの関係の一例を示す図である。
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。例えば、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
〔1〕一実施形態
〔1−1〕データベース構造について
一実施形態に係るシステムでは、カラムストア・インデックスの並びとオリジナルテーブルの並びとの一貫性を維持し、オリジナルテーブルに対する通常インデックスをカラムストア・インデックスへも適用可能とする。
図1に、比較例としてのオリジナルテーブル100のデータ構成例を示す。オリジナルテーブル100は、DBブロック又はDBページと呼ばれるデータ単位に分割されているとする(図1でDBブロック#0〜#2と表記)。1つのDBブロックは4KB(バイト)〜64KB程度のサイズであり、ストレージからメモリへのデータロードの単位となる。なお、以下の説明において、DBブロックを、単に「ブロック」と表記する場合がある。
1つのDBブロックの中には複数のレコード(行)が格納される。テーブル100に格納されているレコードはブロック番号とブロック内の相対位置(例えば“0:0”、“0:1”、“1:1”等)で示すことができる。以下、識別子として用いられる当該相対位置をレコードIDと表記する。レコードIDにおいて、コロン(:)の左側の値はDBブロック番号を示し、コロンの右側の値は当該DBブロック内でのレコードの相対位置を示す。
オリジナルテーブル100はVBM(Visibility block map)110を持つものとする。オリジナルテーブル100内のレコードが変更を受けた場合、その変更の可視性はトランザクションモデルにより制御され、トランザクションによって見え方が異なる。しかし、当該レコードを変更したトランザクションと同時に存在した他のトランザクションが全てコミット又はアボートした後に可視性は確定する。
VBM110は、DBブロックの可視性を管理する情報であり、例えば、DBブロックごとに1ビットが割り当てられたビットマップとして管理されてよい。例えば、VBM110の或るビットの値として、当該ビットに対応するDBブロック内の全てのレコードの可視性が確定した状態を“1”、1つでも可視性が確定しないレコードが存在する場合を“0”とする。
ブロック内のレコードが変更を受けた場合、VBM110の当該ブロックの位置のビットは“0”に落ちる。一方、システムは、非同期にオリジナルテーブル100のスキャンを行ない、ブロック内の全レコードの可視性が確定していることを確認するとVBM110を“1”に設定する処理を行なう。
通常インデックス120は指定されたカラムをソートして記憶する。図1の例では、通常インデックス120はオリジナルテーブル100の一番左のカラム“ColA”をソートした情報を保持する。また、通常インデックス120は指定されたカラムのデータと対でレコードIDを記録し、オリジナルテーブル100へのポインタとしている。図1の例では、通常インデックス120を表の形式で示しているが、木構造或いはハッシュ構造であってもよい。
図2は、一実施形態の一例としてのデータベース構成例を示す図である。なお、図2の例では、通常インデックスの図示を省略しているが、一実施形態に係るデータベースは通常インデックスも有してよい。一実施形態に係るデータベースは、図2に例示するフレームワークによって実現されてよい。
オリジナルテーブル11は、行指向データベースの一例である。オリジナルテーブル11は、図1と同様に、複数のDBブロック12を有してよい。また、オリジナルテーブル11には、図1と同様のVBM13、及び、VGM(Visibility group map)14が設定されてよい。以下、VBM13を「ブロックマップ13」と表記し、VGM14を「グループマップ14」と表記する場合がある。
VGM14は、一度に変換されるDBブロック12の可視性を管理する情報である。以下、一度に変換されるDBブロック12をブロックグループと表記する場合がある。システムは、オリジナルテーブル11のうちの固定数個のDBブロック12をまとめた1つのブロックグループを、1つの列セグメント16に変換する。
VGM14は、例えば、ブロックグループごとに1ビットが割り当てられたビットマップとして管理されてよい。例えば、VGM14の或るビットの値には、オリジナルテーブル11のうちの当該ビットに対応するブロックグループ内の全ブロックマップ13が“1”の場合は“1”、それ以外の場合(1つでもブロックマップ13が“0”の場合)は“0”が設定される。
ブロックグループ内のDBブロック12内のレコードが変更を受けた場合、VGM14の当該ブロックグループの位置のビットは“0”に落ちる。一方、システムは、オリジナルテーブル11に対して非同期にVGM14に“1”を立てる非同期処理を行なう。また、非同期処理によって同じブロックグループ内のDBブロック12のVBM13が全て“1”になる場合(可視性が確定した場合)、システムは、ブロックグループを列セグメント16へ変換し、VGM14の対応するビットに“1”を設定する。
また、VGM14において、ビットが“0”に設定された列セグメント16は無効化され、次にビットが“1”に設定されるときまでは変換が行なわれない。これにより、ブロックグループ内で1つでも可視性が確定しないDBブロック12が存在する場合、当該ブロックグループに対応する列セグメント16は無効になる。この場合、当該ブロックグループに対するアクセスは、カラムストア・インデックス(図2では「カラムストア15」と表記)ではなくオリジナルテーブル11に対して向けられる。
換言すれば、VGM14は、ブロックグループごとに対応する列セグメント16が有効か否かを表すグループ情報の一例である。VGM14により、システムは、列セグメント16が有効か否かを容易に判定でき、また、ブロックグループを列セグメント16に変換するか否かの判定を容易に行なうことができる。
このように、一実施形態では、ブロックグループ内の全てのDBブロック12の可視性が確定している場合、例えば、同時に存在するトランザクションが全てコミット又はアボートした場合に、列セグメント16への変換が行なわれる。換言すれば、VGM14に“1”が設定されたブロックグループでは、オリジナルテーブル11とカラムストア15との間で、削除・挿入・更新等によるレコードのズレが存在せず、これらの並び順の一致が保証されているといえる。
以上のように、一実施形態では、オリジナルテーブル11が複数のDBブロック12を含むブロックグループ単位で列セグメント16に変換される。これにより、列セグメント16内に、オリジナルテーブル11との並び順の一致が保証されたブロックグループ単位のデータが存在するため、オリジナルテーブル11及びカラムストア15の双方に通常インデックスを用いることができる。
また、ブロックグループは、ある程度大きいほうが1度に変換する行が多くなり圧縮効果が高くなる。また1回の列セグメント16への変換で定常的にかかるコストがある。従って、1度に多数の行を変換した方が相対的にコストが小さくなる。一例として、ブロックグループは1MiB(mebibyte)程度であってよい。例えば、1つのDBブロックが4KiB(kibibyte)〜64KiBの場合、1つのブロックグループには16384個〜262144個のDBブロックが含まれてよい。なお、以下の説明では、図の簡略化のため4つのDBブロックをまとめて1ブロックグループとする。
カラムストア15は、オリジナルテーブル11から変換される列指向データベースの一例である。カラムストア15は、ブロックグループごとに列セグメント16を記憶してよい。列セグメント16は、オリジナルテーブル11のブロックグループに対応する列グループの一例である。
図2に例示するように、列セグメント16には、列セグメントのデータ16bに加えて、列セグメント内オフセット番号16a、変換表16c、及び、変換ツリー16dが対応付けられてよい。
列セグメント内オフセット番号16aは、データ16bのオフセット番号を示す情報である。
変換表16cは、列セグメント内オフセット番号16aからオリジナルテーブル11のレコードIDへの変換を行なうための情報である。変換表16cは、カラムストア15内のデータ16bがオリジナルテーブル11のどのレコードに対応するかを特定するレコードIDを記録してよい。
換言すれば、変換表16cは、変換により生成された列グループ内のデータごとに、変換を行なったグループ内の対応するレコードの識別情報との関係を表す情報の一例である。
変換ツリー16dは、レコードIDから列セグメント内オフセット番号16aへの変換を行なうための情報であり、レコードID→カラムストア15内の位置を記録するデータを有してよい。
変換ツリー16dは、レコードIDのうちのDBブロック番号の検索のための1段目のテーブル16d−1と、特定のブロック番号下の相対位置でレコードIDを引く2段目のテーブル16d−2とを組み合わせた階層構造であってよい。なお、変換ツリー16dのデータ構造としては木構造以外にハッシュテーブル等が用いられてもよい。
換言すれば、変換ツリー16dは、変換を行なったグループ内の各レコードの識別情報と、変換で生成された列グループ内の当該レコードに対応するデータの相対位置との関係を表す関係情報の一例である。
図2の例において、テーブル16d−1には、レコードIDのうちのDBブロック番号(図2では“0”〜“3”で示す)と、テーブル16d−2へのポインタ(図2では、テーブル16d−2への矢印が出ている四角枠で示す)とが設定されてよい。
また、図2の例において、テーブル16d−2には、レコードIDのうちの相対位置(コロンの右側の値、図2ではレコードID全体を示す)と、列セグメント内オフセット番号16a(図2では四角枠内の数字で示す)とが設定されてよい。
〔1−2〕情報処理システムの構成例
次に、一実施形態に係る情報処理システム1の構成例について説明する。図3は一実施形態に係る情報処理システム1の機能構成例を示す図である。
図3に示すように、情報処理システム1は、例示的に、データベース10及びコントローラ20をそなえてよい。
データベース10は、行指向データベース及び列指向データベースを記憶する記憶装置の一例である。データベース10は、図2に例示するデータ構造であってよい。例えば、データベース10は、オリジナルテーブル11、ブロックマップ(VBM)13、グループマップ(VGM)14、カラムストア15、及び、通常インデックス17を記憶する。
なお、カラムストア15には、図2を用いて説明したように、列セグメント内オフセット番号16a及びデータ16bを含む列セグメント16、変換表16c、並びに、変換ツリー16dを含んでよい。
データベース10は、1以上の記憶部によって実現されてよく、複数の記憶部によってRAID(Redundant Arrays of Inexpensive Disks)等のディスクアレイが構成されてもよい。記憶部としては、例えばHDD(Hard Disk Drive)等の磁気ディスク装置、SSD(Solid State Drive)等の半導体ドライブ装置、不揮発性メモリ等が挙げられる。不揮発性メモリとしては、例えば、フラッシュメモリ、SCM(Storage Class Memory)、ROM(Read Only Memory)等が挙げられる。
コントローラ20は、データベース10に対する種々の制御を行なう制御装置又はコンピュータの一例である。例えば、ホスト30からネットワーク40を介してデータベースへの参照や更新等の操作要求があった場合、コントローラ20は、データベース10に対して参照や更新等の操作を行ない、ホスト30に応答を返す。
このように、情報処理システム1は、ホスト30に対して、データベース管理システムとしての機能・サービスを提供してよい。
なお、ホスト30としては、例えば業務サーバや基幹サーバ、或いはクライアントマシン等のコンピュータが挙げられる。図3には2台のホスト30が示されているが、ホスト30は1台又は3台以上でもよい。
ネットワーク40としては、例えばインターネット、又は、LAN(Local Area Network)若しくはWAN(Wide Area Network)等が挙げられる。
コントローラ20は、例示的に、通信部21、変換部22、更新部23、及び、参照部24をそなえてよい。
通信部21は、ホスト30との間の通信を行なう。例えば、通信部21は、ホスト30からの操作要求を受け付け、当該操作要求を更新部23又は参照部24に渡すとともに、更新部23又は参照部24からの操作結果をホスト30に送信する。
変換部22は、オリジナルテーブル11に含まれる複数のレコードを複数のブロックグループに分け、ブロックグループごとに、当該ブロックグループをカラムストア15のフォーマットに従った列セグメント16に変換する。
また、変換部22は、列セグメント16が無効であるグループ内の複数のレコードに対する全ての更新が確定している、換言すれば、全てのレコードの可視性が確定している場合に、当該更新が確定しているグループを列セグメント16に変換する。そして、変換部22は、変換した列セグメント16が有効であることをグループマップ14に設定する処理を行なう。変換部22による処理は、更新部23及び参照部24によるデータベース10への処理とは非同期に行なわれてよい。
変換部22による処理は、例えば以下の手順で行なわれてよい。
(A)グループマップ14に“0”が設定されたブロックグループにおいて、“0”が設定されたDBブロック12(図2参照)内の全てのレコードの可視化が確定しているかを判定する。
(B)上記(A)で全てのレコードの可視化が確定している場合、当該DBブロック12の位置のブロックマップ13に“1”をセットする。
(C)上記(A)及び(B)の結果、ブロックグループ内の全てのブロックマップ13に“1”がセットされた場合、当該ブロックグループを列セグメント16に変換する。
(D)当該ブロックグループ番号の位置のグループマップ14に“1”をセットする。
(E)グループマップ14に“0”が設定された他のブロックグループについて、上記(A)〜(D)を実施する。
上記(C)における変換処理は、図4に例示するように、以下の手順で行なわれてよい。なお、図4には、以下の(a)〜(d)に対応する処理を符号付きの矢印で示す。
(a)変換を行なうブロックグループから1つのDBブロック12を読み込み、当該DBブロック12からレコードをスキャンする。
(b)1つのレコードの各カラムのデータを、列セグメント16における所定の列セグメント内オフセット番号16a位置のデータ16bに追加する。
(c)当該1つのレコードのレコードIDを変換表16cに追加する。
(d)当該1つのレコードのレコードIDと、列セグメント内オフセット番号16aとの対応関係を変換ツリー16dに追加する。この処理では、レコードIDのうちのDBブロック番号にテーブル16d−2へのポインタを対応付けてテーブル16d−1に設定する処理、及び、レコードIDに列セグメント内オフセット番号16aを対応付けてテーブル16d−2に設定する処理が行なわれる。
(e)列セグメント内オフセット番号16aをインクリメントし、他のレコードについて上記(b)〜(d)を実施する。
(f)変換を行なうブロックグループ内の他のDBブロック12について、上記(a)〜(e)を実施する。
以上の手順により、変換部22によってオリジナルテーブル11が複数のDBブロック12を含むブロックグループ単位で列セグメント16に変換され、カラムストア15に設定される。これにより、列セグメント16内に、オリジナルテーブル11との並び順の一致が保証されたブロックグループ単位のデータが存在するため、オリジナルテーブル11及びカラムストア15の双方に同じ通常インデックスを用いることができる。また、ブロックグループ単位での変換により、圧縮効率を高めつつ変換コストを下げることができる。従って、データベースの処理性能と利用効率との向上を両立できる。
更新部23は、通信部21から受け取った更新系の操作要求に応じて、オリジナルテーブル11に対するINSERT/DELETE/UPDATE等の種々の更新系の処理を行なう。このため、更新部23は、更新系の操作を行なう実行エンジンを含んでよい。或いは、更新部23は実行エンジンを含まず、代わりに実行エンジンに対して操作要求を行なう機能を有してもよい。
また、更新部23は、オリジナルテーブル11に対して更新操作が行なわれるタイミングで、ブロックマップ13及びグループマップ14における更新操作に係るビット位置の値を“0”にクリアする処理を行なう。これにより、オリジナルテーブル11で更新された箇所に対応する列セグメント16は無効化される。当該DBブロック12は更新されたため、DBブロック12と列セグメント16との間で並び順の一致が保証できないためである。
このように、更新部23が列セグメント16を無効にすることで、変換部22は、更新に係るレコードの更新確定後に、最新のレコードを列セグメント16に変換でき、カラムストア15を最新の状態に更新することができる。
換言すれば、更新部23は、行指向データベースにおいて更新されるレコードを含むグループの列グループが無効であることを前記グループ情報に設定する無効化部の一例である。
参照部24は、読出部の一例である。参照部24は、通信部21から受け取ったオリジナルテーブル11に対する参照系の操作要求(クエリ;参照要求)に応じて、オリジナルテーブル11又はカラムストア15に対するSELECT等の種々の参照系の処理を行なう。このため、参照部24は、参照系の操作を行なうクエリ実行エンジンを含んでよい。或いは、参照部24はクエリ実行エンジンを含まず、代わりにクエリ実行エンジンに対して操作要求を行なう機能を有してもよい。
このとき、参照部24は、参照対象のレコードの読出ターゲットを、当該レコードが存在するブロックグループ単位で、オリジナルテーブル11及びカラムストア15のいずれかからグループマップ14に基づき判定する。そして、参照部24は、判定した読出ターゲットから操作要求で指定されたレコードを読み出す。
例えば、参照部24は、クエリを行なうブロックグループに対応するグループマップ14の値が“0”の場合はオリジナルテーブル11を走査(スキャン)すると判定する。一方、参照部24は、当該グループマップ14の値が“1”の場合はオリジナルテーブル11ではなくカラムストア15からデータ供給を受けると判定する。
なお、参照部24は、クエリ実行の際に通常インデックス17を利用する場合と利用しない場合とがある。
クエリ実行の際にオリジナルテーブル11を通常インデックス17無しで直接走査する場合、参照部24は、図5に例示するように、以下の(I)又は(II)の処理を行なう。なお、図5ではブロックマップ13の図示を省略している。
(I)参照対象のブロックグループのグループマップ14が“0”の場合:オリジナルテーブル11から参照対象のDBブロック12を走査して、レコードのデータを読み出す(図5のDBブロック#4〜#7のブロックグループ参照)。読み出したデータはクエリ実行エンジンへ供給される。
(II)参照対象のブロックグループのグループマップ14が“1”の場合:カラムストア15から参照対象のDBブロック12を走査して、レコードのデータを読み出す(図5のDBブロック#0〜#3、DBブロック#8〜#11の各ブロックグループ参照)。読み出したデータはクエリ実行エンジンへ供給される。なお、カラムストア15の走査において、変換表16c及び変換ツリー16dの参照は不要としてもよい。
次に、クエリ実行の際にオリジナルテーブル11に対する通常インデックス17を利用して検索する場合を考える。例えば、オリジナルテーブル11が“ColA”、“ColB”、“ColC”の3つのカラムを持っており、“ColA”の通常インデックス17が作成されているとする。そこに、「SELECT ColB FROM オリジナルテーブル WHERE ColA BETWEEN 4 AND 6」というクエリが実行されたとすると、参照部24は、図6に例示するように、以下の(i)〜(iv)の処理を行なう。
(i)通常インデックス17を「WHERE」句で指定される「ColA BETWEEN 4 AND 6」という条件でスキャンして、条件に合致する行のレコードIDを取り出す。
(ii)レコードIDはDBブロック番号を含んでいるので、DBブロック番号からブロックグループを特定し、グループマップ14を参照して、当該レコードのデータがカラムストア15内に存在するか否かを判定する。
(iii)上記(ii)で当該レコードのデータがカラムストア15内に存在する場合(図6のグループマップ14の値“1”のブロックグループ参照)、列セグメント16を参照する。そして、列セグメント16内の「レコードIDから列セグメント内オフセット番号16aへの」変換ツリー16dを参照し、通常インデックス17のキーに対応するレコードのデータを特定して、クエリ実行エンジンへデータを供給する。
(iv)上記(ii)で当該レコードのデータがカラムストア15内に存在しない場合(図6のDBブロック#4〜#7のブロックグループ参照)、オリジナルテーブル11を参照する。そして、オリジナルテーブル11から通常インデックス17のキーに対応するレコードのデータを特定して、クエリ実行エンジンへデータを供給する。
このように、参照部24は、オリジナルテーブル11に対して設定された通常インデックス17を用いて参照要求で指定されたレコードを特定してよい。そして、参照部24は、読出ターゲットがカラムストア15である場合、変換ツリー16dに基づいて、通常インデックス17を用いて特定したレコードに対応する列セグメント16内のデータの相対位置を特定してよい。
なお、参照部24は、例えば、クエリで要求された情報にレコードIDが含まれる場合、変換表16cを参照して、列セグメント内オフセット番号16aに対応するレコードIDを取得してよい。これにより、列セグメント16を用いたレコードIDの応答が可能となる。
〔1−2−1〕参照部の変形例
なお、参照部24は、クエリ実行の際に、より効率的に通常インデックス17を用いるために、ビットマップ走査を使用したクエリへのビットマップフィルタを適用してもよい。このようなビットマップフィルタとしては、例えば、Microsoft(登録商標)のSQL Serverに搭載されたビットマップフィルタや、PostgreSQLのビットマップヒープスキャン(Bitmap Heap Scan)等が挙げられる。
例えば、参照部24は、図7に示すように、上記(ii)の処理に代えて、以下の(ii′−1)及び(ii′−2)の処理を行なってもよい。参照部24は、(ii′−2)の判定の後、上記(iii)又は(iv)の処理を行なえばよい。
(ii′−1)通常インデックス17の検索に合致した行をレコードID順に並んだビットマップ(図7では「ビットマップフィルタ18」と表記)に記録する。例えば、検索に合致した行のビットに“1”をセットし、それ以外のビットに“0”をセットする。
(ii′−2)ビットマップフィルタ18をレコードID順に検索し、“1”がセットされた位置に対応するレコードIDについて、当該レコードのデータがカラムストア15内に存在するか否かを判定する。
このように、参照部24は、通常インデックス17を用いて特定したレコードを、レコードの識別情報の順に並んだビットマップフィルタ18に設定してよい。そして、参照部24は、ビットマップフィルタ18に設定されたレコードについて、レコードの識別情報の順に読出ターゲットの判定を行なってよい。
ビットマップフィルタ18を用いることで、ビットマップがレコードID順に並ぶため、参照部24は同じブロックグループに属する行が選択されたか否かを一括で取得することができる。上記(ii′−2)及び(iii)の処理により、参照部24は、列セグメント16をシーケンシャルにアクセスできるため、効率よくクエリを実行でき、スループットを向上できる。以下、ビットマップフィルタ18を単に「ビットマップ18」と表記する場合がある。
〔1−3〕動作例
次に、図8〜図13を参照して、上述の如く構成された情報処理システム1の動作例を説明する。
〔1−3−1〕更新部の動作例
更新部23は、通信部21がホスト30から受信した更新系の操作要求を通信部21から受け取る。
更新部23は、操作要求を受け取ると、更新系の操作を行なう実行エンジンによってオリジナルテーブル11に対して当該要求に係る操作を行なってよい。また、更新の操作が完了すると、更新部23は、図8に例示するブロックマップ13及びグループマップ14の更新処理を行なってよい。なお、当該更新処理は、更新の操作と並行して、又は、更新の操作前に行なわれてもよい。
図8に示すように、更新部23は、操作要求から操作対象のテーブル11のレコードIDを特定し、当該レコードIDからブロック番号M(Mは整数)を取り出す(ステップA1)。
次いで、更新部23は、ブロック番号Mをブロックグループ内のブロック数(ブロックグループの構成ブロック数)X(Xは2以上の整数)で割り、ブロックグループ番号N(Nは整数)を求める(ステップA2)。なお、ブロックグループ内のローカルなブロック番号を求める場合には、ブロック番号Mをブロックグループの構成ブロック数Xで剰余をとればよい。
更新部23は、ブロックグループNにおけるMの位置のブロックマップ13が“1”か否かを判定する(ステップA3)。判定の結果、ブロックマップ13が“1”の場合(ステップA3でYes)、更新部23は、当該Mの位置のブロックマップ13を“0”にクリアし(ステップA4)、処理がステップA5に移行する。一方、判定の結果、ブロックマップ13が“1”ではない場合(ステップA3でNo)、処理がステップA5に移行する。
ステップA5では、更新部23は、ブロックグループNの位置のグループマップ14が“1”か否かを判定する。判定の結果、グループマップ14が“1”の場合(ステップA5でYes)、更新部23は、当該Nの位置のグループマップ14を“0”にクリアし(ステップA6)、処理が終了する。一方、判定の結果、グループマップ14が“1”ではない場合(ステップA5でNo)、処理が終了する。
〔1−3−2〕変換部の動作例
変換部22は、更新部23及び参照部24の処理とは非同期に、図9及び図10に例示するブロックマップ13及びグループマップ14の更新、並びに、オリジナルテーブル11からカラムストア15への変換の処理を行なってよい。
図9に例示するように、変換部22は、ブロックグループ番号Nに“0”をセットする(ステップB1)。また、変換部22は、変換実施のフラグFを“1”にセットする(ステップB2)。
変換部22は、ブロックグループNに対応するグループマップ14が“1”か否かを判定する(ステップB3)。判定の結果、グループマップ14が“1”ではない場合(ステップB3でNo)、変換部22は、ブロックグループN内のブロック番号Mに“0”をセットする(ステップB4)。
そして、変換部22は、ブロック番号Mに対応するブロックマップ13が“1”か否かを判定する(ステップB5)。判定の結果、ブロックマップ13が“1”ではない場合(ステップB5でNo)、変換部22は、当該ブロックM内の全てのレコードの可視性が確定しているか否かを判定する(ステップB6)。
全てのレコードの可視性が確定している場合(ステップB6でYes)、変換部22は、ブロック番号Mの位置のブロックマップ13を“1”にセットし(ステップB7)、処理がステップB9に移行する。
一方、少なくとも1つのレコードの可視性が確定していない場合(ステップB6でNo)、変換部22は、フラグFを“0”にクリアし(ステップB8)、処理がステップB9に移行する。なお、ステップB5において、判定の結果、ブロック番号Mに対応するブロックマップ13が“1”の場合も(ステップB5でYes)、処理がステップB9に移行する。
ステップB9では、変換部22は、Mに1を加算する。そして、変換部22は、Mが最大のブロック番号を超えたか否かを判定する(ステップB10)。Mが最大のブロック番号を超えていない場合(ステップB10でNo)、処理がステップB5に移行し、変換部22は、次のブロック番号Mについて判定を行なう。一方、Mが最大のブロック番号を超えた場合(ステップB10でYes)、変換部22は、フラグFが“1”か否かを判定する(ステップB11)。
判定の結果、フラグFが“1”ではない場合(ステップB11でNo)、処理がステップB14に移行する。一方、判定の結果、フラグFが“1”の場合(ステップB11でYes)、変換部22は、ブロックグループNを列セグメント16に変換する(ステップB12)。当該ブロックグループN内の全てのブロック12における全てのレコードの可視性が確定しているためである。
そして、変換部22は、ブロックグループ番号Nの位置のグループマップ14に“1”をセットし(ステップB13)、Nに1を加算する(ステップB14)。また、変換部22は、Nが最大のブロックグループ番号を超えたか否かを判定する(ステップB15)。
判定の結果、Nが最大のブロックグループ番号を超えていない場合(ステップB15でNo)、処理がステップB2に移行し、変換部22は、次のブロックグループ番号Nについて判定を行なう。
一方、Nが最大のブロックグループ番号を超えた場合(ステップB15でYes)、処理が終了する。
なお、ステップB3において、判定の結果、ブロックグループ番号Nに対応するグループマップ14が“1”の場合(ステップB3でYes)、処理がステップB14に移行する。つまり、既に列セグメント16が作成されているため、変換部22は、当該ブロックグループNについてこれ以上の処理を行なわず、次のブロックグループ番号について判定を行なう。
次に、図10を参照して、変換部22によるステップB12の変換処理の動作例を説明する。
変換部22は、列セグメント内オフセット番号O(Oは整数)に“0”をセットし(ステップB21)、ブロックグループN内のブロック番号Mに“0”をセットする(ステップB22)。なお、Nは、図9でステップB12に移行する際にセットされている値である。
変換部22は、ブロックMを読み込む(ステップB23)。そして、ブロックM内のレコードをスキャンし(ステップB24)、当該レコードのレコードID Rを取り出す(ステップB25)。
そして、変換部22は、オリジナルテーブル11内の当該レコードにおけるカラムCを1つ選択し(ステップB26)、列セグメント16のカラムCのデータの末尾にレコードID Rのレコード内のカラムCの値を追加する(ステップB27)。
変換部22は、当該レコード内の全てのカラムを選択したか否かを判定し(ステップB28)、全てのカラムを選択していない場合(ステップB28でNo)、処理がステップB26に移行し、変換部22は未選択のカラムCを選択する。
一方、判定の結果、全てのカラムを選択した場合(ステップB28でYes)、変換部22は、列セグメント内オフセット番号16aからレコードIDへの変換表16cの末尾にレコードID Rを追加する(ステップB29)。また、変換部22は、レコードIDから列セグメント内オフセット番号16aへの変換ツリー16dに、レコードID Rから列セグメント内オフセット番号Oへの対応関係を追加する(ステップB30)。
そして、変換部22は、Oに1を加算し(ステップB31)、ブロックM内の全てのレコードをスキャンしたか否かを判定する(ステップB32)。全てのレコードをスキャンしていない場合(ステップB32でNo)、処理がステップB24に移行し、変換部22は未スキャンのレコードをスキャンする。
一方、全てのレコードをスキャンした場合(ステップB32でYes)、変換部22は、Mに1を加算し(ステップB33)、MがブロックグループN内の最大のブロック番号を超えたか否かを判定する(ステップB34)。
判定の結果、Mが最大のブロック番号を超えていない場合(ステップB34でNo)、処理がステップB23に移行し、変換部22は、次のブロック12について判定を行なう。一方、Mが最大のブロック番号を超えた場合(ステップB34でYes)、処理が終了する。
〔1−3−3〕参照部の動作例
参照部24は、通信部21がホスト30から受信した参照系の操作要求(例えばクエリ)を通信部21から受け取る。
参照部24は、クエリを受け取ると、図11〜図13のいずれかの手法によって、クエリ実行エンジンによりオリジナルテーブル11又はカラムストア15からクエリに係るデータを読み出してよい。
(通常インデックス無しの問い合わせ(クエリ)の場合)
通常インデックス無しの問い合わせ(クエリ)の場合、図11に示すように、参照部24は、ブロックグループ番号Nに“0”をセットし(ステップC1)、ブロックグループNに対応するグループマップ14が“1”か否かを判定する(ステップC2)。
判定の結果、グループマップ14が“1”ではない場合(ステップC2でNo)、参照部24は、ブロックグループN内のブロック番号Mに“0”をセットし(ステップC3)、オリジナルテーブル11からブロックMを読み込む(ステップC4)。
そして、参照部24は、ブロックMから1つレコードを読み出し(ステップC5)、ブロックMから全てのレコードを読み出したか否かを判定する(ステップC6)。全てのレコードを読み出していない場合(ステップC6でNo)、処理がステップC5に移行し、未読出のレコードを読み出す。一方、全てのレコードを読み出した場合(ステップC6でYes)、参照部24は、Mに1を加算し(ステップC7)、Mが最大のブロック番号を超えたか否かを判定する(ステップC8)。
MがブロックグループN内の最大のブロック番号を超えていない場合(ステップC8でNo)、処理がステップC4に移行し、オリジナルテーブル11から次のブロックMを読み出す。一方、Mが最大のブロック番号を超えた場合(ステップC8でYes)、処理がステップC11に移行する。
ステップC2において、ブロックグループNに対応するグループマップ14が“1”の場合(ステップC2でYes)、参照部24は、ブロックグループNに対応するカラムストア15の列セグメント16から1つレコードを読み出す(ステップC9)。そして、参照部24は、当該列セグメント16から全てのレコードを読み出したか否かを判定する(ステップC10)。全てのレコードを読み出していない場合(ステップC10でNo)、処理がステップC9に移行し、未読出のレコードを読み出す。一方、全てのレコードを読み出した場合(ステップC10でYes)、処理がステップC11に移行する。
ステップC11では、参照部24は、Nに1を加算する。そして、参照部24は、Nが最大のブロックグループ番号を超えたか否かを判定する(ステップC12)。
Nが最大のブロックグループ番号を超えていない場合(ステップC12でNo)、処理がステップC2に移行し、参照部24は、次のブロックグループNについて判定を行なう。一方、Nが最大のブロックグループ番号を超えた場合(ステップC12でYes)、処理が終了する。
このように、ステップC2におけるグループマップ14が“1”か否かの判定結果、換言すれば列セグメント16が有効か否かの判定結果に応じて、レコードを読み出すターゲットが列セグメント16及びオリジナルテーブル11から選択される(図5参照)。
なお、ステップC5及びC9において読み出されたレコードは、例えばメモリに格納・蓄積され、クエリの全てのレコードが読み出されたときにメモリから読み出され、通信部21を介してホスト30に送信されてよい。
(通常インデックス有りの問い合わせ(クエリ)の場合)
通常インデックス17を用いて検索する場合、図12に示すように、参照部24は、条件(例えば、“ColA BETWEEN 4 AND 6”)に従う通常インデックス17内のレコードID Rを1つ取り出す(ステップC21)。
そして、参照部24は、当該レコードID Rに対応するグループマップ14が“1”か否かを判定する(ステップC22)。
グループマップ14が“1”ではない場合(ステップC22でNo)、参照部24は、オリジナルテーブル11からレコードID Rのレコードを読み出し(ステップC23)、処理がステップC25に移行する。一方、グループマップ14が“1”の場合(ステップC22でYes)、参照部24は、カラムストア15の列セグメント16からレコードID Rのレコードを読み出し(ステップC24)、処理がステップC25に移行する。
ステップC25では、参照部24は、条件に従う全てのレコードを通常インデックス17から読み出したか否かを判定する。全てのレコードを通常インデックス17から読み出していない場合(ステップC25でNo)、処理がステップC21に移行し、未取出のレコードID Rを1つ取り出す。一方、全てのレコードを通常インデックス17から読み出した場合(ステップC25でYes)、処理が終了する。
このように、通常インデックス17から読み出したレコードごとに列セグメント16が有効か否かを判定することで、レコードを読み出すターゲットが列セグメント16及びオリジナルテーブル11から選択される(図6参照)。
(通常インデックス有りの問い合わせ(クエリ)の場合の変形例)
次に、図13を参照して、通常インデックス17を用いて検索する場合の変形例として、図7に例示するビットマップフィルタ18を用いる場合を説明する。図13は、図12のステップC21をステップC31〜C34に置き換えるとともに、図12のステップC25をステップC35に置き換えたものである。
図13に示すように、参照部24は、条件(例えば、“ColA BETWEEN 4 AND 6”)に従う通常インデックス17内の行を1つ読み出す(ステップC31)。そして、参照部24は、通常インデックス17から読み出した行のレコードIDに対応する位置のビットマップ18に“1”をセットする(ステップC32)。
参照部24は、条件に従う全てのレコードを通常インデックス17から読み出したか否かを判定する(ステップC33)。全てのレコードを通常インデックス17から読み出していない場合(ステップC33でNo)、処理がステップC31に移行し、参照部24は、条件に従う通常インデックス17内の未読出の行を1つ読み出す。
一方、全てのレコードを通常インデックス17から読み出した場合(ステップC33でYes)、参照部24は、ビットマップ18内の“1”がセットされたレコードID Rを1つ取り出す(ステップC34)。
そして、参照部24は、当該レコードID Rに対応するグループマップ14が“1”か否かを判定し、当該グループマップ14の値に応じて、オリジナルテーブル11又は列セグメント16からレコードID Rのレコードを読み出す。これらの処理は、図12のステップC22〜C24と同様である。
オリジナルテーブル11又は列セグメント16からレコードを読み出すと、参照部24は、ビットマップ18内の“1”がセットされた全てのレコードを読み出したか否かを判定する(ステップC35)。
全てのレコードを読み出していない場合(ステップC35でNo)、処理がステップC34に移行し、参照部24は、ビットマップ18内の“1”がセットされた未取出のレコードID Rを1つ取り出す。一方、全てのレコードを読み出した場合(ステップC35でYes)、処理が終了する。
〔1−4〕ハードウェア構成例
次に、情報処理システム1のハードウェア構成例について説明する。図14に示すように、コントローラ20は、例示的に、CPU20a、メモリ20b、記憶部20c、IF(Interface)部20d、I/O部20e、及び読取部20fをそなえてよい。
CPU20aは、種々の制御や演算を行なうプロセッサ又は演算処理装置の一例である。CPU20aは、コントローラ20内の各ブロックとバスで相互に通信可能に接続されてよい。プロセッサとしては、CPU20aに代えて、例えば、MPU、DSP、ASIC、FPGA等の集積回路が用いられてもよい。なお、MPUはMicro Processing Unitの略称であり、DSPはDigital Signal Processorの略称であり、ASICはApplication Specific Integrated Circuitの略称であり、FPGAはField-Programmable Gate Arrayの略称である。
メモリ20bは、種々のデータやプログラム等の情報を格納するハードウェアの一例である。メモリ20bとしては、例えばRAM(Random Access Memory)等の揮発性メモリが挙げられる。
記憶部20cは、種々のデータやプログラム等の情報を格納するハードウェアの一例である。記憶部20cとしては、例えばHDD等の磁気ディスク装置、SSD等の半導体ドライブ装置、不揮発性メモリ等の各種記憶装置が挙げられる。不揮発性メモリとしては、例えば、フラッシュメモリ、SCM、ROM等が挙げられる。
例えば記憶部20cは、コントローラ20の各種機能の全部若しくは一部を実現するプログラム20hを格納してよい。CPU20aは、例えば記憶部20cに格納されたプログラム20hをメモリ20bに展開して実行することにより、図3に示すコントローラ20の通信部21、変換部22、更新部23、及び参照部24としての機能を実現できる。
なお、図3に示す例では、コントローラ20とは別にデータベース10が存在するが、これに限定されるものではなく、コントローラ20の例えばメモリ20b又は記憶部20cによりデータベース10が実現されてもよい。この場合、メモリ20b又は記憶部20cは、図3に示すオリジナルテーブル11、ブロックマップ13、グループマップ14、カラムストア15、通常インデックス17、及びビットマップフィルタ18等の情報を記憶してよい。また、コントローラ20とは別にデータベース10が存在する場合であっても、メモリ20b又は記憶部20cは、データベース10を実現する記憶部との間で、これらの情報を分散して記憶してもよい。
IF部20dは、ネットワーク40又はデータベース10との間の接続及び通信の制御等を行なう通信インタフェースの一例である。例えばIF部20dは、LAN、インフィニバンド(Infiniband)、FC(Fibre Channel;ファイバチャネル)等の光通信、USB(Universal Serial Bus)、又はBluetooth(登録商標)等に準拠したアダプタが挙げられる。
なお、プログラム20hは、ネットワーク40等からIF部20dを介してコントローラ20にダウンロードされてもよい。
I/O部20eは、マウス、キーボード、又は操作ボタン等の入力部、並びに、ディスプレイ又はプリンタ等の出力部、の一方又は双方を含んでよい。
読取部20fは、記録媒体20gに記録されたデータやプログラムの情報を読み出すリーダの一例である。読取部20fは、記録媒体20gを接続可能又は挿入可能な接続端子又は装置を含んでよい。読取部20fとしては、例えばUSB等に準拠したアダプタ、記録ディスクへのアクセスを行なうドライブ装置、SDカード等のフラッシュメモリへのアクセスを行なうカードリーダ等が挙げられる。なお、記録媒体20gにはプログラム20hが格納されてもよい。
記録媒体20gとしては、例示的に、磁気/光ディスクやフラッシュメモリ等の非一時的な記録媒体が挙げられる。磁気/光ディスクとしては、例示的に、フレキシブルディスク、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク、HVD(Holographic Versatile Disc)等が挙げられる。フラッシュメモリとしては、例示的に、USBメモリやSDカード等が挙げられる。なお、CDとしては、例示的に、CD−ROM、CD−R、CD−RW等が挙げられる。また、DVDとしては、例示的に、DVD−ROM、DVD−RAM、DVD−R、DVD−RW、DVD+R、DVD+RW等が挙げられる。
上述したコントローラ20のハードウェア構成は例示である。従って、コントローラ20内でのハードウェアの増減(例えば任意のブロックの追加や削除)、分割、任意の組み合わせでの統合、又は、バスの追加若しくは削除等は適宜行なわれてもよい。
〔2〕その他
上述した一実施形態に係る技術は、以下のように変形、変更して実施することができる。
例えば、図3に示すコントローラ20の各機能ブロックは、それぞれ任意の組み合わせで併合してもよく、分割してもよい。
また、コントローラ20の機能は、マルチプロセッサやマルチコアのCPU20aによって実現されてもよい。さらに、コントローラ20及びデータベース10の機能は、例えばクラウド環境のように、複数のコンピュータに分散又は冗長化して配置されてもよい。
また、情報処理システム1において、コントローラ20及びデータベース10が1つのコンピュータとして併合されてもよい。
一実施形態では、列セグメント16がブロックグループごとに生成されるものとしたが、これに限定されるものではない。例えば、DBブロック12ごとに列セグメント16が生成されてもよい。この場合、DBブロック12が、複数のレコードのグループの一例となり、ブロックマップ13が、グループごとに対応する列セグメント16が有効か否かを表すグループ情報の一例となる。
〔3〕付記
以上の実施形態に関し、さらに以下の付記を開示する。
(付記1)
行指向データベースと、前記行指向データベースから変換される列指向データベースとを記憶する記憶装置と、
前記記憶装置を制御する制御装置とをそなえ、
前記制御装置は、
前記行指向データベースに含まれる複数のレコードを複数のグループに分け、前記グループごとに、当該グループを前記列指向データベースのフォーマットに従った列グループに変換する変換部、をそなえる
ことを特徴とする、情報処理システム。
(付記2)
前記変換部は、前記グループごとに対応する列グループが有効か否かを表すグループ情報に基づいて、前記変換を行なう、
ことを特徴とする、付記1記載の情報処理システム。
(付記3)
前記変換部は、列グループが無効であるグループ内の複数のレコードに対する全ての更新が確定している場合に、当該更新が確定しているグループを列グループに変換し、変換した前記列グループが有効であることを前記グループ情報に設定する、
ことを特徴とする、付記2記載の情報処理システム。
(付記4)
前記制御装置は、
前記行指向データベースにおいて更新されるレコードを含むグループの列グループが無効であることを前記グループ情報に設定する無効化部、をさらにそなえる
ことを特徴とする、付記2又は付記3記載の情報処理システム。
(付記5)
前記制御装置は、
前記行指向データベースに対する参照要求で指定されたレコードの読出ターゲットを、前記行指向データベース及び前記列指向データベースのうちのいずれかから前記グループ情報に基づき判定し、判定した読出ターゲットから前記参照要求で指定されたレコードを読み出す読出部、をさらにそなえる
ことを特徴とする、付記2〜4のいずれか1項記載の情報処理システム。
(付記6)
前記変換部は、前記変換を行なったグループ内の各レコードの識別情報と、前記変換で生成された列グループ内の当該レコードに対応するデータの相対位置との関係を表す関係情報を生成し、
前記読出部は、
前記行指向データベースに対して設定されたインデックスを用いて前記参照要求で指定されたレコードを特定し、
前記読出ターゲットが前記列指向データベースである場合、前記関係情報に基づいて、前記インデックスを用いて特定したレコードに対応する前記列グループ内のデータの相対位置を特定する、
ことを特徴とする、付記5記載の情報処理システム。
(付記7)
前記読出部は、前記インデックスを用いて特定したレコードを、レコードの識別情報の順に並んだビットマップに設定し、前記ビットマップに設定されたレコードについて、前記レコードの識別情報の順に前記読出ターゲットの判定を行なう、
ことを特徴とする、付記6記載の情報処理システム。
(付記8)
前記読出部は、前記参照要求で指定されたレコードを含むグループの列グループが無効である場合に前記行指向データベースを選択し、前記参照要求で指定されたレコードを含むグループの列グループが有効である場合に前記列指向データベースを選択する、
ことを特徴とする、付記5〜7のいずれか1項記載の情報処理システム。
(付記9)
前記変換部は、前記変換により生成された列グループ内のデータごとに、前記変換を行なったグループ内の対応するレコードの識別情報との関係を表す情報を生成する、
ことを特徴とする、付記1〜8のいずれか1項記載の情報処理システム。
(付記10)
行指向データベースに含まれる複数のレコードを複数のグループに分け、前記グループごとに、当該グループを列指向データベースのフォーマットに従った列グループに変換する変換部、をそなえる
ことを特徴とする、制御装置。
(付記11)
前記変換部は、前記グループごとに対応する列グループが有効か否かを表すグループ情報に基づいて、前記変換を行なう、
ことを特徴とする、付記10記載の制御装置。
(付記12)
前記変換部は、列グループが無効であるグループ内の複数のレコードに対する全ての更新が確定している場合に、当該更新が確定しているグループを列グループに変換し、変換した前記列グループが有効であることを前記グループ情報に設定する、
ことを特徴とする、付記11記載の制御装置。
(付記13)
前記行指向データベースにおいて更新されるレコードを含むグループの列グループが無効であることを前記グループ情報に設定する無効化部、をさらにそなえる
ことを特徴とする、付記11又は付記12記載の制御装置。
(付記14)
前記行指向データベースに対する参照要求で指定されたレコードの読出ターゲットを、前記行指向データベース及び前記列指向データベースのうちのいずれかから前記グループ情報に基づき判定し、判定した読出ターゲットから前記参照要求で指定されたレコードを読み出す読出部、をさらにそなえる
ことを特徴とする、付記11〜13のいずれか1項記載の制御装置。
(付記15)
コンピュータに、
行指向データベースに含まれる複数のレコードを複数のグループに分け、前記グループごとに、当該グループを列指向データベースのフォーマットに従った列グループに変換する
処理を実行させることを特徴とする、処理プログラム。
(付記16)
前記コンピュータに、
前記グループごとに対応する列グループが有効か否かを表すグループ情報に基づいて、前記変換を行なう、
処理を実行させることを特徴とする、付記15記載の処理プログラム。
(付記17)
前記コンピュータに、
列グループが無効であるグループ内の複数のレコードに対する全ての更新が確定している場合に、当該更新が確定しているグループを列グループに変換し、変換した前記列グループが有効であることを前記グループ情報に設定する、
処理を実行させることを特徴とする、付記16記載の処理プログラム。
(付記18)
制御装置が、行指向データベースに含まれる複数のレコードを複数のグループに分け、前記グループごとに、当該グループを列指向データベースのフォーマットに従った列グループに変換する
ことを特徴とする、処理方法。
(付記19)
前記制御装置が、前記グループごとに対応する列グループが有効か否かを表すグループ情報に基づいて、前記変換を行なう、
ことを特徴とする、付記18記載の処理方法。
(付記20)
前記制御装置が、列グループが無効であるグループ内の複数のレコードに対する全ての更新が確定している場合に、当該更新が確定しているグループを列グループに変換し、変換した前記列グループが有効であることを前記グループ情報に設定する、
ことを特徴とする、付記19記載の処理方法。
1 情報処理システム
10 データベース
11 オリジナルテーブル
12 DBブロック
13 ブロックマップ
14 グループマップ
15 カラムストア・インデックス
16 列セグメント
16a 列セグメント内オフセット番号
16b データ
16c 変換表
16d 変換ツリー
17 通常インデックス
18 ビットマップフィルタ
20 コントローラ
21 通信部
22 変換部
23 更新部
24 参照部
30 ホスト
40 ネットワーク

Claims (11)

  1. 行指向データベースと、前記行指向データベースから変換される列指向データベースとを記憶する記憶装置と、
    前記記憶装置を制御する制御装置とをそなえ、
    前記制御装置は、
    前記行指向データベースに含まれる複数のレコードを複数のグループに分け、前記グループごとに、当該グループを前記列指向データベースのフォーマットに従った列グループに変換する変換部、をそなえる
    ことを特徴とする、情報処理システム。
  2. 前記変換部は、前記グループごとに対応する列グループが有効か否かを表すグループ情報に基づいて、前記変換を行なう、
    ことを特徴とする、請求項1記載の情報処理システム。
  3. 前記変換部は、列グループが無効であるグループ内の複数のレコードに対する全ての更新が確定している場合に、当該更新が確定しているグループを列グループに変換し、変換した前記列グループが有効であることを前記グループ情報に設定する、
    ことを特徴とする、請求項2記載の情報処理システム。
  4. 前記制御装置は、
    前記行指向データベースにおいて更新されるレコードを含むグループの列グループが無効であることを前記グループ情報に設定する無効化部、をさらにそなえる
    ことを特徴とする、請求項2又は請求項3記載の情報処理システム。
  5. 前記制御装置は、
    前記行指向データベースに対する参照要求で指定されたレコードの読出ターゲットを、前記行指向データベース及び前記列指向データベースのうちのいずれかから前記グループ情報に基づき判定し、判定した読出ターゲットから前記参照要求で指定されたレコードを読み出す読出部、をさらにそなえる
    ことを特徴とする、請求項2〜4のいずれか1項記載の情報処理システム。
  6. 前記変換部は、前記変換を行なったグループ内の各レコードの識別情報と、前記変換で生成された列グループ内の当該レコードに対応するデータの相対位置との関係を表す関係情報を生成し、
    前記読出部は、
    前記行指向データベースに対して設定されたインデックスを用いて前記参照要求で指定されたレコードを特定し、
    前記読出ターゲットが前記列指向データベースである場合、前記関係情報に基づいて、前記インデックスを用いて特定したレコードに対応する前記列グループ内のデータの相対位置を特定する、
    ことを特徴とする、請求項5記載の情報処理システム。
  7. 前記読出部は、前記インデックスを用いて特定したレコードを、レコードの識別情報の順に並んだビットマップに設定し、前記ビットマップに設定されたレコードについて、前記レコードの識別情報の順に前記読出ターゲットの判定を行なう、
    ことを特徴とする、請求項6記載の情報処理システム。
  8. 前記変換部は、前記変換により生成された列グループ内のデータごとに、前記変換を行なったグループ内の対応するレコードの識別情報との関係を表す情報を生成する、
    ことを特徴とする、請求項1〜7のいずれか1項記載の情報処理システム。
  9. 行指向データベースに含まれる複数のレコードを複数のグループに分け、前記グループごとに、当該グループを列指向データベースのフォーマットに従った列グループに変換する変換部、をそなえる
    ことを特徴とする、制御装置。
  10. コンピュータに、
    行指向データベースに含まれる複数のレコードを複数のグループに分け、前記グループごとに、当該グループを列指向データベースのフォーマットに従った列グループに変換する
    処理を実行させることを特徴とする、処理プログラム。
  11. 制御装置が、行指向データベースに含まれる複数のレコードを複数のグループに分け、前記グループごとに、当該グループを列指向データベースのフォーマットに従った列グループに変換する
    ことを特徴とする、処理方法。
JP2016177518A 2016-09-12 2016-09-12 情報処理システム、制御装置、処理プログラム、及び処理方法 Pending JP2018045285A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016177518A JP2018045285A (ja) 2016-09-12 2016-09-12 情報処理システム、制御装置、処理プログラム、及び処理方法
US15/686,607 US20180075116A1 (en) 2016-09-12 2017-08-25 Information processing system, control device, and computer-readable recording medium having processing program recorded therein

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016177518A JP2018045285A (ja) 2016-09-12 2016-09-12 情報処理システム、制御装置、処理プログラム、及び処理方法

Publications (1)

Publication Number Publication Date
JP2018045285A true JP2018045285A (ja) 2018-03-22

Family

ID=61560395

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016177518A Pending JP2018045285A (ja) 2016-09-12 2016-09-12 情報処理システム、制御装置、処理プログラム、及び処理方法

Country Status (2)

Country Link
US (1) US20180075116A1 (ja)
JP (1) JP2018045285A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022503456A (ja) * 2018-07-25 2022-01-12 アビニシオ テクノロジー エルエルシー 構造化レコード取得

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6897248B2 (ja) * 2017-04-06 2021-06-30 富士通株式会社 更新反映プログラム、更新反映方法及び更新反映装置
US10896225B2 (en) * 2018-05-23 2021-01-19 Singlestore, Inc. Bitmap filter, a method of generating the same, and a method of using a bitmap filter to perform a join
US11068454B2 (en) 2019-09-23 2021-07-20 Singlestore, Inc. Method of performing transactional and analytical data processing using a data structure

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9031930B2 (en) * 2011-12-22 2015-05-12 Sap Se Data browser for group-by data access
US10133800B2 (en) * 2013-09-11 2018-11-20 Microsoft Technology Licensing, Llc Processing datasets with a DBMS engine
US9760599B2 (en) * 2014-04-09 2017-09-12 International Business Machines Corporation Group-by processing for data containing singleton groups
US9881109B2 (en) * 2015-05-04 2018-01-30 Ariba, Inc. Simulating live production load
US9619210B2 (en) * 2015-05-14 2017-04-11 Walleye Software, LLC Parsing and compiling data system queries
US11593342B2 (en) * 2016-02-01 2023-02-28 Smartshift Technologies, Inc. Systems and methods for database orientation transformation
US20170286449A1 (en) * 2016-04-01 2017-10-05 US-ANALYTICS Solutions Group, LLC System for Connecting Computer Dashboards with Geographic Information Systems

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022503456A (ja) * 2018-07-25 2022-01-12 アビニシオ テクノロジー エルエルシー 構造化レコード取得
JP7105982B2 (ja) 2018-07-25 2022-07-25 アビニシオ テクノロジー エルエルシー 構造化レコード取得

Also Published As

Publication number Publication date
US20180075116A1 (en) 2018-03-15

Similar Documents

Publication Publication Date Title
CN109254733B (zh) 用于存储数据的方法、装置和系统
US9858282B2 (en) Information searching apparatus, information managing apparatus, information searching method, information managing method, and computer product
CN110825748B (zh) 利用差异化索引机制的高性能和易扩展的键值存储方法
JP5878548B2 (ja) 重複排除ストレージ・システム、その内部の合成バックアップを容易にする方法、及び、プログラム
JP6033241B2 (ja) データー重複排除のためのバックアップおよび復元方策
WO2020073854A1 (zh) 管理内存数据及在内存中维护数据的方法和系统
US9575974B2 (en) Distributed file system gateway
US20160350302A1 (en) Dynamically splitting a range of a node in a distributed hash table
JP2018045285A (ja) 情報処理システム、制御装置、処理プログラム、及び処理方法
CN103902623A (zh) 用于在存储系统上存取文件的方法和系统
US10789228B2 (en) Data presence/absence determination apparatus and computer-readable storage medium storing program for determination of data presence/absence
US10824610B2 (en) Balancing write amplification and space amplification in buffer trees
CN111241108A (zh) 基于键值对kv系统的索引方法、装置、电子设备和介质
US20180075074A1 (en) Apparatus and method to correct index tree data added to existing index tree data
US20220342888A1 (en) Object tagging
US10437806B2 (en) Database management method and information processing apparatus
Li et al. Sinekv: Decoupled secondary indexing for lsm-based key-value stores
JP5448428B2 (ja) データ管理システム及びデータ管理方法及びデータ管理プログラム
AU2018345147B2 (en) Database processing device, group map file production method, and recording medium
CN114281989A (zh) 基于文本相似度的数据去重方法、装置及存储介质和服务器
US9767191B2 (en) Group based document retrieval
JP5718974B2 (ja) 情報処理装置、情報処理方法、および、情報処理プログラム
US10685046B2 (en) Data processing system and data processing method
US11119681B2 (en) Opportunistic compression
JP6680871B2 (ja) 計算機及びデータベース管理方法