【実施例】
【0024】
図1は、(a)本願発明の実施の形態に係るデータベース処理装置1の構成の一例を示すブロック図と、(b)第2記憶部15が記憶するCFILE23のデータ構造の一例を示すブロック図である。
図2は、
図1のデータベース処理装置1の動作の一例を示すフロー図である。
【0025】
図1(a)を参照して、データベース処理装置1は、グループマップ作成部3(本願請求項の「グループマップ作成手段」の一例)と、アドレスマップ作成部5(本願請求項の「アドレスマップ作成手段」の一例)と、集計結果内訳抽出部7(本願請求項の「集計結果内訳抽出手段」の一例)と、制御部9と、テーブル管理部11と、第1記憶部13(本願請求項の「第1記憶部」の一例)と、第2記憶部15(本願請求項の「第2記憶部」の一例)と、入力部19と、表示部21を備える。
【0026】
第3記憶部24は、CSV源データファイル25を記憶する。第3記憶部24が記憶するCSV源データファイル25は、生データを管理するCSVファイルである。簡単のために、CSV源データファイル25が一つの場合について説明する。CSV源データファイル25が複数あっても、同様に実現することができる。
【0027】
従来、CSV源データファイルから必要な部分のみを抽出して、RDBMSテーブルレコードデータを作成していた。従来のRDBMSテーブルレコードデータは、CSV源データファイルに比較して大幅にデータ量が増加し、かつ、新たに必要な部分が発生した場合には再設計が必要となっていた。
【0028】
第1記憶部13は、第2記憶部15と比較して高速にアクセスすることができる。例えば、第1記憶部13はメモリであり、第2記憶部15はハードディスク等であり、一般的なノートパソコンであれば、第2記憶部15には数百GBの情報を、第1記憶部13に数GBの情報を記憶させることができる。第1記憶部13に記憶された情報には、第2記憶部15に記憶された情報と比較して、高速にアクセスすることができる。
【0029】
マルチバリューシステムにおける1テーブルは、OS上において2種のディレクトリ(フィールド定義を格納するDICT部とデータを格納するDATA部)によって構成され、一般にDICT部ひとつに対しDATA部ひとつが対応する構成であるが、必要であれば一つのDICT部に複数のDATA部ディレクトリを対応させることができる。
【0030】
第2記憶部15は、CFILE23を記憶する。
図1(b)を参照して、CFILE23は、フィールド定義情報を格納するフィールド定義格納部33(マルチバリューシステムにおけるDICT部を参照)と、データを格納するデータ格納部35(マルチバリューシステムにおけるDATA部を参照)を備える。データ格納部35は、テーブル格納部37と、データベース格納部39と、マップ格納部41を備える。フィールド定義格納部33、データ格納部35、テーブル格納部37、データベース格納部39及びマップ格納部41は、ディレクトリ(フォルダ)である。この構造は、管理テーブルVOCに記録される。ここで、管理テーブルVOCは、マルチバリューシステムにおいて全テーブルの構成情報を管理しているシステムテーブルであり(MDと称するものもある。)、CFILE同様にフィールド定義格納部とデータ格納部からなり、データ格納部において全テーブルの構成情報が保持される。なお、必要であれば、CFILEにおいてデータ格納部を追加し、一つのCFILE内に複数のデータ格納部があってもよい。
【0031】
データベース格納部39は、CSVファイル43と、部分CSVファイル45を格納する。
【0032】
利用者が入力部19を操作してCFILE23を生成するときに、CSV源データファイル25をコピー又は移動させてCSVファイル43とする。なお、必要であれば、行スキップ、FTF8へコード変換、半角全角変換などを行ったり、複合キー用CSVを生成したりしてもよい。CSVファイル43は、CSV源データファイル25と完全に(又は実質的に)等しい。そのため、従来は必要とされていなかったが事後的に必要とされたデータも、CFILE23内に存在しており、再設計をする必要はない。
【0033】
部分CSVファイル45は、例えばCSVファイル43の1行が多くのフィールドを有する場合などに、特定フィールドにおいて高速検索を可能にするため、CSVファイル43から、特定フィールド(特定フィールドの複数結合指定をすることもできる。つまり、部分CSVファイル43の行を任意指定の複数種のフィールドにて構成させることもできる。)のみを抜き取ったものである。これにより、RDBMSにおけるカラム型DBMSのような効果を発揮する。利用者が入力部19を操作してマップ生成命令を実行することにより、事後的に一つ又は複数を生成することができる。例えば、CSVファイル43のファイル名を「C」とすると、CSVファイル43の17番フィールドと5番フィールドで構成される部分CSVファイル45のファイル名は「C17_5」とする。
【0034】
マップ格納部41は、アドレスマップファイル47と、グループマップファイル49と、部分アドレスマップファイル51を格納する。
【0035】
アドレスマップファイル47は、第2記憶部15に記憶されたCSVファイル43にアクセスするためのアドレスを管理する。アドレスマップファイル47は、CSVファイル43に対応する固定長バイナリファイルであり。アドレスマップファイル47は、例えば、全件数、2行目始りアドレス、3行目始りアドレス、…、最終行始りアドレス、及び、最終行終りアドレス+1、を記憶する。なお、アドレスマップファイル47は、CFILE23の生成時に生成してもよく、また、CFILE23の生成時には生成せずに集計検索処理を行うときに生成してもよい。事後的に生成しても、アドレスマップファイル47を生成するために余計にかかる時間は、それをやらなかった場合の検索時間と比較して測定可能な程度の差が生じない。
【0036】
グループマップファイル49は、利用者が入力部19を操作してCSVファイル43に対する集計検索命令を実行するときに、必要に応じて登録される。構造は、全行において集計処理における名寄せで決定された「名」を1から始まる検索時発見順の整数値に置き換えたバイナリ固定長ファイルである。
【0037】
データ量を比較すると、グループマップファイル49のそれぞれのサイズは、アドレスマップファイル47のサイズよりも小さい。例えば、CSVファイル43が2000万件(約33GB)の場合、アドレスマップファイル47のサイズは96.5MB、グループマップファイル49のサイズが58MB弱であった。そのため、常時オンメモリにおける高速アクセスが可能となる(すなわち、第1記憶部13に格納した状態で高速にアクセスして処理をすることができる。)。そのため、非力なPCであっても、超高速な処理が可能になる。
【0038】
部分アドレスマップファイル51は、部分CSVファイル45のそれぞれに対応して、第2記憶部15に記憶された部分CSVファイル45にアクセスするためのアドレスを管理する。部分CSVファイル45と部分アドレスマップファイル51の関係は、CSVファイル43とアドレスマップファイル47の関係と同様である。部分CSVファイル45に対応した部分アドレスマップファイル51は、検索結果(表示用)として部分CSVファイル45内フィールドが相当した場合に、そのデータを高速に抽出できるようにするためのものである。(部分アドレスマップファイル51がなくとも、大元のアドレスマップファイル47を用いて大本のCSVファイル43から抽出は可能である。)なお、部分CSVファイル45に対応するグループマップファイルは、仮に作成しても、CSVファイル43のグループマップファイル49と同等同サイズのものとなるために、大元のCSVファイル43のグループマップファイル49で対応可能である。
【0039】
テーブル格納部37は、CSVファイル43の行に対応したレコード(RDBMSにおいてプライマリーキーに相当する@IDのみを持つ空レコード)を、CSVファイル43の行数分保持する。テーブル管理部11は、テーブル格納部37に対する処理を行う。例えば、CSVファイル43が7行で構成されていた場合、@ID=1から7までの7レコードが生成格納される。この空レコードへは、任意に実フィールドをいくらでも追加及び更新することができる。そのため、CSVファイル43を変化させることなく、見かけ上(しかし実用的に)CSVファイル43の更新が可能となる。具体的には、データベース格納部39とマップ格納部41は、共に、CSVファイル43のデータ及び行番号に関連して生成されている。テーブル格納部37は、CSVファイル43の行番号をIDとしてもったレコードを保持し、CSVファイル43の行番号にのみ関連する。レコードの追加及び更新は、CSVファイル43の行に対応したテーブル格納部37内レコードに、新規フィールドを追加したり更新したりする(「行」の追加は基本的にしない)。そのため、テーブル格納部37の中でのみ起こり、データベース格納部39及びマップ格納部41には影響しない。グループマップファイル49は、そのときの検索結果として保持されており更新されるべきものではない。新規検索には、新規のグループマップファイルが対応するため、新規グループマップファイルが「追加」されることはあっても、以前のグループマップファイルは変更されない。
【0040】
フィールド定義格納部33は、フィールド定義情報を格納する。フィールド定義情報により、データベースにおける仮想フィールド定義をすることができる。例えば、CSVファイル43及びテーブル格納部37のテーブルは実フィールドの値を定義するが、仮想フィールド定義に従って例えば集計値などの値を計算することにより、仮想フィールドの各値を得ることができる。
【0041】
図2を参照して、
図1のデータベース処理装置1において、CSVファイル43に対する集計検索処理により、アドレスマップファイル47及びグループマップファイル49を生成する処理の一例を説明する。なお、アドレスマップファイル47がCFILE生成時や以前の集計検索処理により生成されているのであれば、アドレスマップファイル47を生成せずに、グループマップファイル49を生成する処理を行えばよい。
【0042】
制御部9は、前処理として、変数kを0とし、メモリ上に空の参照リストを設定する(ステップST1)。
【0043】
制御部9は、CSVファイル43からフィールドを読み出し(ステップST2)、CSVファイル43に一意に対応するアドレスマップファイル47が未だ生成されていない場合に限り、空のアドレスマップファイル47を生成し、次に示すようなアドレス書込み処理を行う。アドレスマップ作成部5は、n行(nは2以上の整数)の始まりのフィールドであるならば、アドレスマップファイル47に対してn行始りアドレスを追加する。また、最終行の終わりであるならば、最終行終りアドレス+1を格納する(ステップST3)。なお、最初から完成されたアドレスマップファイル47が存在している場合は、フィールドの読み出し(ステップST2)を行うのみであり、ステップST3は実行されない。
【0044】
グループマップ
作成部3は、読み出されたフィールドが名寄せ対象フィールドか否かを判断する(ステップST4)。名寄せ対象フィールドであれば、ステップST5に進む。名寄せ対象フィールドでないならば、ステップST9に進む。
【0045】
ステップST5及びST6において、フィールドが新たな値であるか否かを判断する。新たな値であるならば、kを1増加したうえで新たな値に対応するIDをkとし(ステップST7)、グループマップファイル49(存在しない場合には生成する。)にIDを追加し(ステップST8)、ステップST9に進む。フィールドが新たな値でないならば、グループマップファイル49に対応するIDを追加する。
【0046】
ステップST9において、制御部9は、全てのフィールドに対して処理が行われたか否かを判断する。行われていないフィールドがあるのであれば、ハッシュ化された参照リストへIDを書込み(ステップST10)、ステップST2に戻って処理が行われていないフィールドに対して処理を行う。全てのフィールドに対して処理が行われたのであれば、制御部9は、テーブル格納部37が空である場合に限り、行番号をIDとした空のレコード(ダミーレコード)を行数分追加して終了する。
【0047】
図3は、CSVファイル43と、これにより生成されるグループマップファイル49の一例を示す図である。CSVファイル43の2列目が名寄せ対象フィールドである場合、CSVファイル43の2列目は、b、a、a、c、b、e、dである。これに対応するグループマップファイル49は、出現順に番号化してIDを生成したものであり、1、2、2、3、1、4、5である。また、4列目が名寄せ対象フィールドである場合には、CSVファイル43の4列目は、Z、B、Y、A、A、Z、Yであり、これに対応するグループマップファイル49は、1、2、3、4、4、1、3である。異なる集計処理では、異なるグループマップファイル49が生成される。
【0048】
グループマップファイル49は、単純に単フィールドの値だけでなく、複数フィールドの合成値や、それらをキーとしてマスターテーブルとのJOIN等によって得られる値とすることも可能である。
図4を参照して、マスターテーブルを使用したグループマップファイルの生成処理の一例を説明する。検索対象となるCSVファイルは、流通業におけるトランザクションデータであり、どの商品がどれだけ売れたかが記録されている。検索は、部門別に集計処理を行い、そのグループマップファイルを生成することである。ただし、CSVファイル43内にデータとして部門コードが入っておらず、商品コードしかない。マスターテーブルは、マルチバリューシステムにおけるテーブルであり、基本機能は、RDBMSにおける正規化されたレコード構造を持つテーブルと同等である。システム上に、商品マスターテーブルがあり、商品コードと部門コードが対応付けられている。
図4の例では、CSVファイルの第2列が商品コードであり、b、a、a、c、b、e、dである。商品マスターテーブルでは、商品コードa、b、c、d、eは、それぞれ、Z、Y、Y、X、Zと対応付けられている。検索処理では、商品コードをキーとして商品マスターテーブルとJOINし、部門コードを検索時に動的に生成して、あたかもCSVファイルに部門コードが存在しているかのごとくに名寄せ集計を行う。これにより、CSVファイルにはない、部門コードによりグループマップファイルを生成することができる。ここで実現されるJOINは、SQL等のJOIN(SQL上にてキーとフィールド間の関係手続きとしてその都度記述され実行される。)とは異なる仕組みであり、例えば「部門コード」という「仮想フィールド」をフィールド定義格納部33に定義しておけば、それを実体(エンティティー)として扱うことができるため、簡素かつ汎用的なものである。
【0049】
集計結果内訳抽出部7は、第2記憶部15からCFILE23のグループマップファイル49及びアドレスマップファイル47を読み出して第1記憶部13に記憶させ、第1記憶部13が記憶するグループマップファイル49及びアドレスマップファイル47を利用して、集計結果の内訳(CSVファイル43のデータ=RAWデータ)を高速に読み込み、表示部21に表示する。例えば、
図3の例で、利用者が入力部19を操作して2列目の「a」と「e」に相当する集計結果の内訳を表示するように指示した場合、グループマップファイル49における2及び4をシーケンシャルサーチすることによりCSVファイル43における相当行番号(
図3の場合2、3、6)を獲得し、これを、アドレスマップファイル47を使用してCSVファイル43からRAWデータをダイレクトレコードアクセスして、表示部21に表示する。
【0050】
例えば、CSVファイル43が約33GB、2000万件であった場合に、3種のフィールドへ検索条件及び3種のフィールドにソート指定をした場合、本願発明によれば、非力なノートパソコンを使用しても、CSV源ファイルを用意してから検索完了するまで平均3分であった。背景技術は、DBMSテーブルとしてのレコードデータ生成にかかるコスト等がかかり、さらに、本願発明と比較して検索性能が劣る。そのため、「日」レベル、さらには「週」レベルの時間が必要である。検索性能の違いは、RDBMSテーブルを検索する場合には実体としてのレコード又はインデックス(この場合、物理構造としてはB-TREE)を読むが、内部処理として、ポインターを辿りレコード単位で読み込む必要がある。これらは、例えインデックス化されていたとしても媒体(ハードディスク)上では特にデータ量が多い場合には物理的に大きく分散されて書込まれている。よって、大量データ時には読込み時のディスク側キャッシュが利き辛くなり、一般にキャッシュが利いているときと比較し全体として100倍以上遅くなる。本願発明では、集計結果を求める等の検索において物理的に大きく分散配置されていない単一ファイルであるCSVファイル43そのものを頭から順に連続読込みを行うことにより、キャッシュ効率を最大にまで上げている(これによりノートパソコンに標準搭載されている2.5インチハードディスク(=一般サーバー上の3.5インチハードディスクに比較しアクセス性能は落ちる)のような遅い媒体においても高速性能を発揮できる)。加えて、一般にデータ読込みの後に名寄せのためにソート・マージ処理を行う必要があるが、本実験では、集計処理において、ハッシュ関数を用いてソートを行わないで動的にマージしている(
図2のステップST5参照)。
【0051】
図5は、
図1のデータベース処理装置1におけるデータアクセスの一例を示す図である。
【0052】
図5(a)を参照して、利用者Aは、CFILEに対してdirect read/writeにより、検索で可能なことを行うことができる。例えば、一般の3GLであるJAVA(登録商標)やC++や.NETに対応したプログラム言語用に用意された関数群、4GLに相当する検索言語IQL、OLAPであるIQLLなどにより処理を行うことができる。また、CFILEを用いることにより、RAWデータに、テーブル格納部37のダミーレコードを利用して任意の行に実フィールドを関連付けて追加等したり、フィールド定義格納部33により仮想フィールド定義をしたりすることができる。
【0053】
CFILEに対して、JOIN、DRILL THROUGH等を行うことにより、DBMSテーブルレコードデータを得ることができる。また、CFILEに対して、名寄せ、統計・集計処理、フィールド選択、データ浄化、正規化/マルチバリュー化、データ型定義、キーの動的整合性チェックを行い、direct writeにより、DBMSテーブルレコードデータを得ることができる。このDBMSテーブルレコードデータは、集計データのように扱うことができる。利用者Bは、DBMSテーブルレコードデータを利用して処理を行うことができる。
【0054】
図5(b)を参照して、自由度の高いデータローディングが実現できることについて説明する。CSV源データに対して、名寄せ等を行うことにより、direct writeによりDBMSテーブルレコードデータを得ることができる。例えば、約2000万行のデータ(約33GB)から、最短7分〜20分で同時3種の集計処理(結果行だけで数千行〜数百万行)をノートPC上にて完了することができた。また、結果をCSVデータとして書き出すこともできる。