JP2015172823A - 情報処理装置、情報処理方法及びプログラム - Google Patents

情報処理装置、情報処理方法及びプログラム Download PDF

Info

Publication number
JP2015172823A
JP2015172823A JP2014047958A JP2014047958A JP2015172823A JP 2015172823 A JP2015172823 A JP 2015172823A JP 2014047958 A JP2014047958 A JP 2014047958A JP 2014047958 A JP2014047958 A JP 2014047958A JP 2015172823 A JP2015172823 A JP 2015172823A
Authority
JP
Japan
Prior art keywords
value
values
compression
compressed
aggregation
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.)
Granted
Application number
JP2014047958A
Other languages
English (en)
Other versions
JP6336302B2 (ja
Inventor
樋口 清志
Kiyoshi Higuchi
清志 樋口
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.)
Information Services International Dentsu Ltd
Original Assignee
Information Services International Dentsu 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 Information Services International Dentsu Ltd filed Critical Information Services International Dentsu Ltd
Priority to JP2014047958A priority Critical patent/JP6336302B2/ja
Publication of JP2015172823A publication Critical patent/JP2015172823A/ja
Application granted granted Critical
Publication of JP6336302B2 publication Critical patent/JP6336302B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】CPUリソースの消費を抑制し、データベースの操作において効率を向上させる。【解決手段】情報処理装置は、テーブルが記憶するレコードの値を集計する情報処理装置であって、メモリ上に確保する領域を所定数の桁ごとに分割した複数の分割領域にそれぞれ集計対象の値を保持させることにより、それぞれの前記集計対象の値を組み合わせた合成値の圧縮値を生成する圧縮部と、複数の圧縮値を集計した集計圧縮値を算出する圧縮値集計部と、集計圧縮値に含まれる分割領域の各々の値を集計して集計値を生成する集計部とを有する。【選択図】図1

Description

本件は、情報処理装置、情報処理方法及びプログラムに関する。
従来、データの圧縮効率を向上させることができるカラムナデータベース(列指向データベース)が提案されている。このような技術によれば、入出力(I/O:Input/Output)データを削減することができる。例えば、列ベースデータに対し、辞書符号化および/または値符号化を適用して整数のシーケンスを作成し、次にランレングス符号化・ビットパッキング圧縮のアルゴリズムによってデータをさらにコンパクトにするという技術が提案されている(例えば、特許文献1)。
特表2011−530234号公報
従来の技術は、入出力処理のボトルネックを解消するという観点でメリットがある一方、圧縮及び展開にCPU(Central Processing Unit)リソースを消費する。また、近年
はレジスタやバスが64bitのCPUが一般化しつつあり、メモリ容量も増加しているが、CPUのクロック数はそれほど大幅には向上していない。
そこで、本発明は、CPUリソースの消費を抑制し、データベースの操作において効率を向上させることを目的とする。
本発明に係る情報処理装置は、テーブルが記憶するレコードの値を集計する情報処理装置であって、メモリ上に確保する領域を所定数の桁ごとに分割した複数の分割領域にそれぞれ集計対象の値を保持させることにより、それぞれの前記集計対象の値を組み合わせた合成値の圧縮値を生成する圧縮部と、複数の圧縮値を集計した集計圧縮値を算出する圧縮値集計部と、集計圧縮値に含まれる分割領域の各々の値を集計して集計値を生成する集計部とを有する。
このようにすれば、圧縮値を集計することにより、各分割領域に保持された集計対象の値をまとめて処理できるため、計算回数が低減される。すなわち、CPUリソースの消費が抑制されるとともに、集計処理というデータベースの操作において効率を向上させることができる。
また、圧縮部は、圧縮値集計部が圧縮値を集計する際に分割領域をまたいで桁上がりが発生しない圧縮値の集計単位であるブロックと関連付けて圧縮値を生成し、圧縮値集計部は、ブロックごとに集計圧縮値を算出するようにしてもよい。圧縮値を集計する際に分割領域の所定数の桁を超えて桁上がりが発生しないよう、例えば集計対象ごとに各ブロックに保持する集計対象の値の個数(ひいては圧縮値の個数)を制限することにより、集計の誤りを抑制できるようになる。
また、集計対象の値は、メモリ上においてテーブルの列ごとに保持されるようにしてもよい。いわゆるカラムナ型のインメモリデータベースを処理対象とする場合、例えば特定
の列に保持された値を集計対象とするようなときに効率よく圧縮処理を行うことができるようになる。
また、圧縮部は、集計対象の値が所定の閾値以上である場合、又は集計対象の値が所定の数の倍数でない場合、当該集計対象の値をメモリ上の分割領域とは異なる特異値用領域に保持させ、集計部は、集計圧縮値と特異値用領域の値とをさらに集計するようにしてもよい。このようにすれば、分割領域の所定数の桁には収まらないような値を分けて処理することができる。すなわち、処理の正確性を損なわないように、処理効率を向上させることができる。
また、圧縮部は、集計対象の値を相対値に変換して分割領域に保持させるための差分を示す基準値又は倍率を含む管理情報を用いて集計対象の値を相対値に変換し、当該相対値を分割領域に保持させた圧縮値を生成し、集計部は、生成した集計値を、管理情報を用いてさらに変換するようにしてもよい。このようにすれば、分割領域の限られた桁数を有効に利用できるようになる。
また、圧縮部は、分割領域が保持する値がNull値か否かを示す情報をさらに記憶させるようにしてもよい。このような情報を用いれば、例えば集計部は分割領域に保持された値がNull値かそれ以外かを判断することができるようになる。なお、Null又は0(ゼロ)であるか否かを示す情報(例えばフラグ)をさらに記憶させるようにしてもよい。
また、圧縮部は、圧縮値を生成するとともに集計対象の値の最大値又は最小値を記憶部に記憶させ、集計部は、最大値又は最小値の問合せを受けた場合、記憶部に記憶されている最大値又は最小値を用いて最大値又は最小値を求めるようにしてもよい。このようにすれば、最大値又は最小値を要求された場合のレスポンスを向上させることができる。なお、最大値又は最小値は、上記のブロックごとに記憶させておくようにしてもよい。
また、圧縮部は、レコードごとに部分的な集計値を算出し、当該部分的な集計値を集計対象の値として圧縮値を生成するようにしてもよい。後述するファンクションキャッシュとして説明する通り、レコードごとに部分的な集計値を算出して圧縮しておけば、集計の要求に対するレスポンスを向上させることができるのはもちろんのこと、一部のレコードについて集計の要求があった場合にも対応可能な構成となる。
また、テーブルにおいて、実質的なレコードの識別情報と対応付けて、カラムの識別情報と当該カラムに登録される値とを異なるレコードに記憶している場合、集計対象の値は、メモリ上においてカラムごとに保持されるようにしてもよい。テーブルをメモリ上に展開する際にデータ構造を変更することにより、集計処理の効率を向上させることができる。
上記課題を解決するための手段の内容は、本発明の課題や技術的思想を逸脱しない範囲で可能な限り組み合わせることができる。また、上記手段をコンピュータが実行する方法を実施したり、上記手段をコンピュータに実行させるプログラムを提供等したりするようにしてもよい。プログラムは、コンピュータが読み取り可能な記録媒体に記録して提供するようにしてもよい。コンピュータが読み取り可能な記録媒体とは、情報を電気的、磁気的、光学的、機械的、又は化学的作用によって蓄積し、コンピュータによって読み取ることができる記録媒体をいう。このような記録媒体のうち、コンピュータから取り外し可能なものとしては、例えば光ディスク、光磁気ディスク、フレキシブルディスク、磁気テープ、メモリカード等がある。また、コンピュータに固定された記録媒体としてHDD(Hard Disk Drive)、SSD(Solid State Drive)、ROM(Read Only Memory)等がある
本発明によれば、CPUリソースの消費を抑制し、データベースの操作において効率を向上させることができる。
情報処理装置の一例を示す機能ブロック図である。 集計対象の値と圧縮値との関係を説明するための図である。 集計対象の値と圧縮値との関係を2進数で説明するための図である。 圧縮値の集計処理を説明するための図である。 圧縮値の集計処理を説明するための図である。 集計特化型形式でカラムデータを保持する際に記憶されるデータの一例を説明するための図である。 昇順にソートされたカラムの値の一例を示す図である。 圧縮されたカラムの値の一例を示す図である。 圧縮されたカラムの値の一例を示す図である。 コンピュータの一例を示す装置構成図である。 圧縮処理の一例を示す処理フロー図である。 圧縮処理の一例を示す疑似的なソースコードの一例である。 集計処理の一例を示す処理フロー図である。 集計処理の一例を示す疑似的なソースコードの一例である。 メモリ上にキャッシュとして仮想的なカラムを設ける例を説明するための図である。 分散処理を行うシステムの一例を示すシステム構成図である。 仮想的な1つのテーブルと登録されたレコードの一例を示す図である。 複数のノードのメモリに展開されたカラムデータの例を示す図である。 汎用的なデータ構造を実現する目的で設計されたテーブルの一例である。 変換後のテーブルの一例である。
以下、図面を参照して本発明を実施するための形態について説明する。以下の実施の形態の構成は例示であり、本発明は実施の形態の構成に限定されない。
<機能構成>
図1は、情報処理装置の一例を示す機能ブロック図である。図1の情報処理装置1は、DBMS(DataBase Management System:データベース管理システム)11と、内部記憶12と、圧縮部13と、集計部14と、入出力部15を有する。
DBMS11は、データベース(例えば、RDB(Relational Database))の運用管
理に必要な機能を提供するシステムであり、物理テーブル111と、データ操作部112とを有する。物理テーブル111は、所定のデータ構造(スキーマ)で物理的なファイルとしてデータレコード(「永続データ」とも呼ぶ)を格納する不揮発性の記憶装置である。また、データ操作部112は、レコードの挿入(登録)、レコードの選択(検索)、レコードの更新、レコードの削除等の操作を物理テーブル111に対して行う。なお、DBMS11は、様々なベンダーが提供する既存の製品を利用することができる。また、物理テーブル111は、例えばCSVファイルのような、デリミタ(分離記号)によって列(カラム)が区切られ、改行によってレコードが区切られる形式(Character-Separated Values、Delimiter-Separated Values等とも呼ぶ)のファイル、又はその他の形式のファイルに置き換えてもよい。
内部記憶12は、主記憶装置(「メモリ」とも呼ぶ)である。情報処理装置1は、物理テーブル111から読み出した情報を内部記憶12に保持(ロード)して処理を行う。すなわち、いわゆるインメモリデータベースのような形式となっている。また、本実施形態では、テーブルのカラム(列)ごとに値をまとめてメモリ上に保持する。すなわち、いわゆるカラムナ型データベースのような形式となっている。なお、内部記憶12のデータ(一時データ)の更新については既存の技術を利用することができる。例えば、定期的に物理テーブル111からレコードを読み出して内部記憶12に保持するようにしてもよい。また、定期的に差分のみ内部記憶12に反映させるようにしてもよい。また、物理テーブル111のレコードが更新された場合に同期して内部記憶12を更新するようにしてもよい。
圧縮部13は、物理テーブル111に登録されているレコードに含まれる値を圧縮して内部記憶12に読み出す。本実施形態では、レコードに含まれる値を集計対象として、集計(合算)処理を行う場合を主な例として説明する。本実施形態に係る集計処理に特化した圧縮方式では、内部記憶に展開する値を所定数の桁ごとに区切った複数の分割領域に分割し、当該分割領域の各々に集計対象の値を保持させた圧縮値を生成する。
図2に、集計対象の値と圧縮値との関係を示す。図2には、集計対象の値「1」、「2」、「3」及び「4」と、圧縮値「0001000200030004」との対応付けが示されている。圧縮値は、プログラム上の変数に対応してメモリ上に確保される領域であり、例えば情報処理装置1が備えるCPUのビット幅に基づきまとめて処理可能な最大の桁数を確保する。例えば、64ビット、32ビット等の領域が確保される。なお、圧縮値としてCPUが処理可能な最大の桁数より小さい領域を確保するようにしてもよい。
また、圧縮値は、利用上、所定の桁数ごとの分割領域に分割され、各分割領域が集計対象の値を保持する。図2の例では、16桁の圧縮値が4桁の分割領域4つに分割されている。ここで、集計対象の値も、テーブルのカラムにおいて記憶できる桁数(データ長)は、圧縮値を保持するためにメモリ上に確保される桁数と同程度であってもよい。ただし、本実施形態では、分割領域の桁数は集計対象の値の桁数以下となるように決定される。すなわち、圧縮値とは、集計対象の値を組み合わせた合成値を圧縮した値であるといえる。
本実施形態では、複数の値を圧縮して加算することにより、加算処理の回数を低減させる。ここで、テーブルの各カラムは、その用途上、格納される値の範囲がある程度限定されることも多い。本実施形態では、各分割領域の桁数(換言すれば、圧縮値の分割数)及び圧縮値を加算する回数を、各分割領域において桁あふれ(分割領域をまたぐ桁上がり。「オーバーフロー」とも呼ぶ)を起こさない範囲で予め設定するものとする。各分割領域の桁数及び圧縮値を加算する回数は、予め設定された固定値としてもよいし、適切な値を情報処理装置1が最適化するようにしてもよい。なお、桁あふれを防ぐため、所定の条件を満たしていない値(例えば基準の値から統計的に大きく外れた値や所定の数の倍数でない値等(「特異値」とも呼ぶ))については圧縮せずに加算するようにしてもよい。
また、集計対象の値は、図示していないインデックスと関連付けられているものとする。インデックスは、レコードとの対応付けを表す情報であり、例えばテーブルから読み出した順序に基づいて、同一のレコードに属する値を各カラムにおいて特定できるようにする。インデックスを用いることにより、メモリ上でカラムごとにデータを保持する場合であっても、カラム間においてレコードの順序を維持しつつ様々な処理を行うことができる。
なお、図2の例では、説明の便宜上、10進数で表した圧縮値の桁を分割領域に区切っ
ているが、実装上は2進数における桁を分割領域に区切るものとする。圧縮値を2進数で扱えば、各分割領域に集計対象の値を格納する処理をビットシフトによって行うことができるため処理効率がよい。図3は、集計対象の値と圧縮値との関係を2進数で説明するための図である。図3の例では、集計対象の値「1」、「10」、「11」及び「100」が示されている。また、圧縮値は64bit、各分割領域は16bitであるものとする。このとき、集計対象の値「1」を48bit左シフトした値と、集計対象の値「10」を32bit左シフトした値と、集計対象の値「11」を16bit左シフトした値と、集計対象の値「100」とを加算した値が、圧縮値に格納される。
集計部14は、物理テーブル111に含まれる値を集計する。詳細には、複数の圧縮値を集計するための集計部(圧縮値集計部とも呼ぶ)と、集計した圧縮値を上記の分割領域に分割して各分割領域の値を集計するための集計部とを含む。なお、集計部は、合計値のほか、最大値、最小値、平均値等を求める処理を行うようにしてもよい。
図4A及び図4Bは、圧縮値の集計処理を説明するための図である。集計対象の値は、「1」〜「20」の20個であり、圧縮値の分割領域に保持されている。図4Aの例では、圧縮値「1000200030004」、「5000600070008」、「9001000110012」、「13001400150016」及び「17001800190020」を加算し、下段の二重枠で囲まれた合計値(「集計圧縮値」とも呼ぶ)「45005000550060」を算出する。さらに、図4Bに示すように、集計圧縮値を各分割領域の値「45」、「50」、「55」及び「60」に分解して集計し、右列の二重枠で囲まれた集計値「210」を算出する。図4Aの加算において分割領域をまたぐ桁上がりは生じていないため、このような計算を行っても正しい結果が得られる。
図4Aでは、圧縮値の加算を4回行っている。また、図4Bでは、各分割領域の値の加算を3回行っている。すなわち、集計対象の20個の値について19回の加算処理を繰り返す場合と比較し、CPUリソースの消費を抑制することができる。
なお、本実施形態では、オーバーフローが生じないように圧縮値を生成する圧縮処理を予め行っておくことで、集計処理の要求に対するレスポンスを向上させる。これを実現するため、各分割領域に登録される値が集計処理(特に図4Aに示した処理)においてオーバーフローが生じない程度の個数となるように、図4Aに示した集計処理を行う単位である「ブロック」を定義してもよい。
図5は、本実施形態に係る集計特化型形式でカラムデータを保持する際に記憶されるデータの一例を説明するための図である。図5の形式は本実施形態に係る集計処理の対象となるカラムに適用される。なお、物理テーブル上の他のカラムは、他の圧縮形式で保持するようにしてもよい。図5の例では、カラムデータは、複数のブロック(ブロック1、ブロック2・・・)を含んでいる。また、各ブロックには、値を分割領域に分けて保持する圧縮データ領域と、圧縮データ領域に登録していない値を保持する特異値領域と、当該ブロックに関する情報を保持するメタ情報とを含む。そして、物理テーブルのカラムに登録されている値は、例えばオーバーフローが生じると判断される場合にはブロックを切り替えつつ、順にいずれかのブロックに保持される。
なお、ブロック内の圧縮データ領域において、例えばまず1行目の左から右へ、次に2行目の左から右へ・・・といった順に図示していない通し番号であるインデックスが対応付けられているものとする。インデックスにより、例えば物理テーブルから読み出した順序を複数のカラムの間で維持できるようにする。また、特異値領域には、圧縮データ領域のインデックスと対応付けて値が保持され、対応するインデックスの圧縮データ領域には値として例えば0が保持される。なお、図5の例では当該ブロックにおける通し番号をイ
ンデックスとして用いているが、例えば圧縮データ領域における行及び列を用いた座標で表してもよい。例えば、図5におけるインデックス「6」を、「(2,2)」という座標で表し、図5におけるインデックス「10」を、「(3,2)」という座標で表すようにしてもよい。
図5に示すようなカラムデータを用いて、例えば、物理テーブルからレコードを抽出した順に若い番号の圧縮データ領域に登録する。同時に、ブロック内の分割領域毎に値を集計し、分割領域の桁数におけるオーバーフローの発生を事前に検出する。そして、分割領域に割り当てられた桁数ではオーバーフローが生じると判断される場合には、例えばブロックを変更して値を登録するようにする。
また、ブロックごとに「倍率」及び「基準値」を定めておき、圧縮値の分割領域には、定められた倍率で除した値と基準値との差分を保持するようにしてもよい。例えば、図5のメタ情報の欄に示すように倍率が100、基準値が25の場合、物理データベース上の値「2600」は、1/100倍され、さらに基準値25を減じた値「1」として圧縮データ領域に登録される。すなわち、基準値とは元の値との差であり、倍率とは元の値に戻す際に乗じる数である。このような倍率又は基準値を用いることで、圧縮データ領域の桁数よりも大きな数を扱うことができるようになる。
さらに、圧縮データ領域に格納できない「特異値」を、圧縮データ領域とは別の領域に登録するようにしてもよい。特異値とは、例えば、上述の倍率で割り切れない数や、上述の基準値よりも小さい数、倍率や基準値を用いても分割領域に収まらない桁数の数等をいうものとする。ただし、特異値が多いと集計処理の効率が向上しないため、特異値には出現頻度が低い値を登録することが好ましい。例えば、統計的に他の値から大きく外れた外れ値によって上述のオーバーフローの発生が事前に検出された場合、当該外れ値を特異値として特異値領域に保持する。なお、外れ値は、既存の統計的手法により算出できる優位点よりも検定統計量が大きいか否かで判断することができる。
以上のような分割領域の桁数、圧縮データ領域に保持する値の数、倍率、基準値等は、予め定めておくようにしてもよいし、後述する圧縮処理の中で最適化するようにしてもよい。また、ブロックごとに分割領域の桁数、圧縮データ領域に保持する値の数、倍率、基準値等は異なるようにしてもよい。特異値の数が所定の閾値を越える場合、倍率や基準値、分割領域の桁数を変更したり、ブロックを分けたりして圧縮処理を最適化してもよい。最適化は、例えば集計処理における計算回数を表す目的関数を最小にするように、様々な手法により行うことができる。最適化のため、例えば図5に示す集計特化型形式で保持するカラムで予め物理テーブルのレコードをソートしておき、ブロックごとに基準値との差が小さくなるようにしてもよい。また、所定の数の倍数ごとにブロック分けできるよう、レコードの順序を変更するようにしてもよい。
例えば物理テーブルのあるカラムに登録された値を昇順にソートすると、図6Aに示す通りであったとする。図6Aの表には、1、2、3、4、5、6、7、8、9、10、11、12、7000、7003、10100及び20031の16個の値が昇順に登録されている。図6Aのような値について所定の手法によりデータの特性を判断し、例えば、値のばらつき(標準偏差)が大きい場合であって、一部の値を特異値領域に保持するよりもブロックを分けて分割領域に登録する方が好ましいと判断されたとき、図6Bに示すブロック1、及び図6Cに示すブロック2のように圧縮される。図6Bのブロック1は、圧縮データ領域の分割数が4、分割領域の桁数が4となっており、図4Aに示した加算処理の回数は2となる。図6Cのブロック2は、圧縮データ領域の分割数が2、分割領域の桁数が8となっており、図4Aに示した加算処理の回数は1となる。
入出力部15は、DBに対する操作の要求を受け付けたり、結果を応答したりする。例えば、物理テーブル111の所定のカラムについて集計値を求める要求を受け、集計部14が集計した結果の値を出力する。入出力部15は、情報処理装置1において実行される図示していないアプリケーションとの間で入出力処理を行ってもよいし、図示していないネットワークを介して他のコンピュータとの間で入出力処理を行ってもよい。
<装置構成>
図7は、コンピュータの一例を示す装置構成図である。情報処理装置1は、例えば図7に示すようなコンピュータである。図7に示すコンピュータ1000は、CPU(Central Processing Unit)1001、主記憶装置1002、補助記憶装置1003、通信IF
(Interface)1004、入出力IF(Interface)1005、ドライブ装置1006、通信バス1007を備えている。
CPU1001は、プログラム(「ソフトウェア」又は「アプリケーション」とも呼ぶ)を実行することにより本実施の形態に係る処理を行う。CPU1001例えば、後述する圧縮処理、集計処理等を行う。なお、圧縮処理や集計処理は、CPUに限らず、いわゆるプロセッサを用いて行うことができる。例えば、図示していないGPU(Graphics Processing Unit)により行うようにしてもよい。
主記憶装置1002は、CPU1001が読み出したプログラムやデータをキャッシュしたり、CPUの作業領域を展開したりする。主記憶装置1002は、具体的には、RAM(Random Access Memory,「メモリ」又は「内部記憶」とも呼ぶ)やROM(Read Only
Memory)等である。また、主記憶装置1002は、図1に示した内部記憶12として働
く。本実施形態では、所定の低圧縮データ形式で値を保持する低圧縮データ領域10021と、所定の高圧縮データ形式で値を保持する高圧縮データ領域10022とを、例えばメモリに設ける。
補助記憶装置1003は、CPU1001が実行するプログラムや、本実施形態に係るデータベースの物理テーブル111、その他の一時データを記憶する。補助記憶装置1003は、具体的には、HDD(Hard-disk Drive)やSSD(Solid State Drive)、フラッシュメモリ等である。図7に示すように、本実施形態では、補助記憶装置1003に物理テーブル10031とスワップ領域10032とを設ける。
本実施形態では、補助記憶装置1003に設けられた物理テーブル10031から、メモリ上の高圧縮データ領域10022にデータをロードしておく。メモリ上では、データをカラムごとに圧縮して保持する。ここで、テーブルの各カラムには文字列型や数値型等のデータ型が定義されており、カラムごとに取り得る値が決まる。したがって、カラムごとにデータを圧縮することにより、効率よくデータ量を削減できる。このようにすることで、集計処理等における入出力処理のレスポンスを向上させることができる。
また、データを集計等する前に、高圧縮データ形式から低圧縮データ形式に変換(展開)する(本実施形態に係る「圧縮処理」に相当する)。低圧縮データ形式に展開されたデータは所定期間キャッシュしておき、集計処理が要求された場合にはキャッシュされたデータを利用する。また、例えば容量的な制限によりメモリ上の高圧縮データ領域10022に保持できないデータは、SSD上又はHDD上の補助的なデータ格納領域であるスワップ領域10032に保持しておき、適宜メモリ上に読み出すようにしてもよい。また、CPU1001が実行する図示していないバックグラウンドプロセスが、例えばデータの利用頻度に応じて低圧縮データ領域10021からキャッシュされたデータを削除するようにしてもよい。例えば、Java(登録商標)実行環境においてはガベージコレクタがキャッシュ削除処理を行うようにしてもよい。
低圧縮データ方式は、カラムごとに定義されたデータ型の特性に応じて、所定のアルゴリズムを利用することができる。例えば、ディクショナリエンコーディング、ランレングスエンコーディング、ビットベクトルエンコーディング(ビットマップ)、ビットパッキング、これらの方法の組合せ、Vectorwise(登録商標)で実装されているPFOR、PFOR−DELTA、PDICT等の方式、又は上述した本実施形態に係る集計処理に特化した圧縮方式によって、カラムデータを圧縮する。なお、これらの方式の選択は、例えば物理テーブルからメモリにロードする際に、圧縮率の高い方式を情報処理装置1が判断するようにしてもよいし、予めカラムのデータ型に関連付けてユーザが定義しておくようにしてもよい。また、高圧縮データ領域10022には、低圧縮データ形式の値を例えばデフレート(deflate)等のアルゴリズムでさらに圧縮して保持する。
通信IF1004は、他のコンピュータとの間でデータを送受信する。通信IF1004は、具体的には、有線又は無線のネットワークカード等である。情報処理装置1は、通信IF1004を介してインターネット等のネットワークに接続されていてもよい。入出力IF1005は、入出力装置と接続され、ユーザから操作を受け付けたり、ユーザへ情報を提示したりする。入出力装置は、具体的には、キーボード、マウス、ディスプレイ、タッチパネル等である。ドライブ装置1006は、磁気ディスク、光磁気ディスク、光ディスク等の記憶媒体に記録されたデータを読み出したり、記憶媒体にデータを書き込んだりする。以上のような構成要素が、通信バス1007で接続されている。
なお、これらの構成要素はそれぞれ複数設けられていてもよいし、一部の構成要素(例えば、ドライブ装置1006等)を設けないようにしてもよい。また、入出力装置がコンピュータと一体に構成されていてもよい。また、ドライブ装置1006で読み取り可能な可搬性の記憶媒体や、フラッシュメモリのような可搬性の補助記憶装置1003、通信IF1004などを介して、本実施の形態で実行されるプログラムが提供されるようにしてもよい。そして、CPU1001が所定のプログラムを実行することにより、図7に示したコンピュータ1000を本実施形態に係る情報処理装置1として働かせる。
<圧縮処理>
図8Aは、圧縮処理の一例を示す処理フロー図である。本実施形態では、後述する集計処理の前に圧縮処理が行われる。具体的には、定期的に圧縮処理を行うようにしてもよいし、物理テーブルが更新等されるたびに圧縮処理を行うようにしてもよい。また、図8Aの処理フロー図では、低圧縮領域にデータを展開する処理について説明する。圧縮処理では、カラムに登録された値(集計対象の値)を所定のブロックに分割しつつ圧縮する。まず、情報処理装置1の圧縮部13は、分割領域の桁数(換言すれば、メモリ上に確保する圧縮データ領域の分割数)や、後述する基準値、特異値と判断する基準等を最適化する(図8A:S11)。本ステップでは、図4Aに示したような分割領域ごとの集計においてオーバーフローが発生しないように、各カラムに登録されている値をブロックに分類する。ここで、集計処理において桁あふれが生じないように、各ブロックに保持される値の個数(ひいては、圧縮値の個数)を動的に決定する。なお、最適化については上で述べたように様々な手法を用いることができる。
なお、分割領域の桁数を予め決定した上で、S11において登録する分割領域毎に値を集計し、オーバーフローが生じると判断される場合は、後述するS12において値を登録するブロックを変更するようにしてもよい。また、事前にS11を実行せず、S12において分割領域毎に値を集計し、オーバーフローが発生すると判断される場合はブロックを変更するようにしてもよい。また、S11を実行せず、各ブロックに保持する値の個数を予め定めておくようにしてもよい。
そして、処理対象のカラムに登録されている値を1つ処理対象として取得し、例えばS11で最適化された手法に基づいてブロックに分類する(S12)。次に、圧縮部13は、取得した値が所定の条件を満たしていない「特異値」であるか判断する(S13)。所定の条件は、例えばS11の最適化により決定されるようにしてもよいし、カラムごとに予め設定しておくようにしてもよい。例えば、所定の条件として、基準値から所定範囲内の値であることや、所定値の倍数であること等の条件が定められ、条件を満たさない場合は本ステップにおいて特異値であると判断される。例えば図5の例では、値が100000以下且つ100の倍数であることという条件を満たさない場合に特異値と判断するものとする。
取得した値が特異値でないと判断された場合(S13:NO)、圧縮部13は、圧縮データ領域を分割した分割領域に、S12で取得した値を記憶させる(S14)。本ステップでは、取得した値は圧縮値の一部として保持される。また、上述の通り、ブロックごとに倍率及び基準値を予め定めておき、圧縮値の分割領域には、定められた倍率で除した値と基準値との差分を保持するようにしてもよい。例えば図5のメタ情報の欄に示すように倍率が100、基準値が25の場合であって、取得した値が2600のとき、圧縮値の分割領域には1(0001)が保持される。また、取得した値が3700のとき、圧縮値の分割領域には12(0012)が保持される。
一方、取得した値が特異値であると判断された場合(S13:YES)、圧縮部13は、ブロックに関連付けて設けられた特異値領域に取得した値を記憶させる(S15)。なお、値は、ブロックにおける格納順序を示すインデックス(index)と対応付けて特異値
領域に保持される。また、圧縮データ領域の対応する順序の箇所には0(0000)が保持されるものとする。例えば、ブロック1において6番目に取得した値が1025200であった場合、特異値と判断され、特異値領域にはindex「6」に対応付けて値「102
5200」が保持される。また、圧縮データ領域の6番目(2行2列目)の箇所には「0」が保持される。このような特異値を圧縮値とは別に記憶する場合、集計処理においては別途特異値を加算する処理を行うことで集計値を算出するものとする。
S14又はS15の後、圧縮部13は、メタ情報を設定する(S16)。メタ情報は、ブロックごとに保持され、当該ブロックの圧縮データ領域の分割数を定義するデータや、先述の基準値及び倍率のほか、集計処理の効率を向上させるためのデータを含む。例えば、メタ情報として、各値がnull値か否かを保持されている値の順にビット列で表すnullフラグ、各値がnull値又は0(ゼロ)か否かを保持されている値の順にビット列で表すnull/0フラグ、ブロック内の最大値、最小値等を保持するものとする。例えば、S12において取得した値がnullでない場合、nullフラグ及びnull/0フラグに1を立てる。また、S12において取得した値がnullでも0でない場合、null/0フラグに1を立てる。また、S12において取得した値がメタ情報の最大値よりも大きい場合、最大値に当該値を上書きする。例えば、S12において取得した値が「1025200」の場合であって、S16の時点でのメタ情報に登録されている最大値が「12」のとき、最大値は「1025200」に上書きされる。また、S12において取得した値がメタ情報の最小値よりも小さい場合、最小値に当該値を上書きする。このようなメタ情報を用いることで、計数(COUNT)、最大値取得(MAX)、最小値取得(MIN)のレスポンスを向上させることができる。また、本実施形態の圧縮値においてはnull値も0と同様に保持されるところ、nullフラグを設定しておくことにより計数処理においてnullを除外して計数できるようになる。
その後、圧縮部13は、カラムに未処理の値が存在するか判断する(S17)。未処理の値が存在する場合(S17:YES)、S11に遷移して処理を繰り返す。未処理の値が存在しない場合(S17:NO)、圧縮処理を終了する。
ここで、図8Bに圧縮処理の疑似的なソースコードの一例を示す。なお、図8Bのコードは圧縮処理を簡略化したものであり、値を分割領域に保持させる処理を表している。図8Aの処理フローに示したように、オーバーフローの検出処理や、基準値、倍率等を決定する処理等を図8Bのコードに追加するようにしてもよい。また、図8Bのコードには、便宜的に行番号(10〜80)を付している。
行10では、long型(64bit)の配列「data」に集計対象の値を格納する。そして、行20では、long型の配列「packedData」として集計対象の値の個数の4分の1の個数の配列を定義する。また、行30〜行80では、集計対象の値を順に4つずつとり、4つの値を16bitずつビットシフトさせた値の論理和を求めることにより、4つの分割領域に集計対象の値を保持する圧縮値「packedData」を生成することができる。圧縮処理では、以上のような処理を行う。
<集計処理>
図9Aは、集計処理の一例を示す処理フロー図である。まず、情報処理装置1の入出力部15は、テーブルへのデータ操作要求を受け付ける(図9A:S21)。本ステップでは、例えば、他のアプリケーション又は他のコンピュータから、所定のカラムに格納されている値の集計の要求を受けるものとする。
また、図9Bに集計処理の疑似的なソースコードの一例を示す。図9Bのコードは、集計処理を簡略化したものである。また、図9Bのコードには、便宜的に行番号(90〜210)を付している。以降は、図9Bを適宜参照して説明する。
その後、情報処理装置1の集計部14は、生成された圧縮値を集計し、内部記憶12に格納する(S22)。本ステップでは、図4Aに示したように、圧縮値を集計して集計圧縮値を算出する。本ステップは、図9Bの行150〜行170までの処理に相当する。行150〜行170では、生成した圧縮値「packedData」をすべて集計し、集計圧縮値「tmpResult」を求める。
そして、集計部14は、算出された集計圧縮値を各分割領域に分解し、各分割領域の値を集計して内部記憶12に格納する(S23)。本ステップでは、図図4Bに示したように、所定の桁数ごとに分解して合計する。本ステップは、図9Bの行90〜行140及び行180〜行210の処理に相当する。まず、行90〜行140では、4つの分割領域の各々を抽出するための4つのマスクを定義する。そして、行180〜行210では、マスク及びシフト演算を用いて分解した各分割領域の値を集計し、集計値「result」を求める。また、実際は各ブロックについてさらに集計するコードを含んでいてもよい。
その後、入出力部15は、内部記憶12に格納された集計値を読み出し、要求元に応答する(S24)。本ステップでは、要求元である他のアプリケーション又は他のコンピュータへ、結果の集計値を伝送する。以上で、情報処理装置1は集計処理を終了する。
本実施形態では、集計対象の値をメモリ(低圧縮データ領域)上にロードする際に、圧縮値を生成する。この処理は、シフト演算によって実行できる。この圧縮値を用いて集計処理を行う際の計算回数は、{(集計対象の値の個数÷分割数)−1}回の圧縮値の加算と、マスク及び集計圧縮値の分割数分の論理積(AND)の算出と、分割数分のシフト演算と、(分割数−1)回分の各分割領域の値の加算との合計になる。図4A及び図4Bに示した例では、15回({(20/4)−1}+4+4+(4−1)回)である。仮に集計対象の値が200個の場合は60回({(200/4)−1}+4+4+(4−1)回)となる。
このように、集計対象の値が増加するほど、計算回数の削減率も高くなる。一方で、集計対象の値が増加するほど、オーバーフロー(分割領域を超える桁上がり)が生じる可能性も高くなる。よって、オーバーフローが生じない範囲(「ブロック」とも呼ぶ)にカラムデータを分割し、ブロック単位で上述の集計処理を行うようにしている。
<メタ情報を用いた集計処理>
図9Aの例では、集計対象の値を単に圧縮値にして加算する処理を説明した。ここで、メタ情報を用いた集計処理について補足する。図5に示したように倍率「100」及び基準値「25」が設定されている場合は、まず上述の工程に基づいて圧縮値をすべて加算する。そして、基準値「25」とnull若しくは0又は特異値でない値の個数「8」とを乗じた数をさらに加算し、倍率「100」を乗じて、集計値を求める。図5に示した「圧縮データ領域」の場合、まず圧縮値を加算して、1000200000004+1200000050000+4000000150000=17000200200004と集計圧縮値が求められる。そして、各分割領域の値を集計し、17+2+20+4=43と集計値が求められる。さらに、基準値とnull若しくは0又は特異値でない値の個数とを乗じた数25×8=200を加算し、さらに倍率100を乗じることにより、(43+200)×100=24300と集計値が求められる。
図5に示すような特異値「1025200」及び「12」が保持されている場合は、これらをさらに加算し、6800+1025200+12=1049512と最終的な集計値が求められる。また、複数のブロックが存在する場合は、各ブロックの集計値をさらに合計することにより、結果の集計値が得られる。
また、値の件数を計数(COUNT)する場合は、nullフラグのビット列において1が立っている個数を計数する。ブロック内における値の順序と対応付けてビット列を保持しておけば、何らかの条件によってレコード(行)を絞り込んで計数する際に、条件を満たすレコードを示すビット列とnullフラグのビット列との論理積をとることによって計数対象をフィルタリングすることができる。例えば、1、3、7、8行目が所定の条件を満たす場合、101000110000というビット列で条件を満たすレコードを表すことができる。さらにnull以外の値を計数するときは、図5のnullフラグ111111101111との論理積をとり、101000100000が得られ、3というカウント値を得ることができる。
また、ある条件を満たすレコードについて、所定のカラムの最大値(MAX)又は最小値(MIN)を求める場合は、まず条件を満たすレコードを示すビット列を生成する。上述の例と同様に、1、3、7、8行目が所定の条件を満たす場合、101000110000というビット列で条件を満たすレコードが表される。そして、ビット列において1が立っている箇所の値を、圧縮データ領域又は特異値領域を参照して比較し、最も大きい値又は最も小さい値を求める。
最大値を求める場合においてメタ情報に保持されている最大値が発見された場合は、当該ブロックについて値を比較する処理を打ち切ることができる。同様に、最小値を求める処理においてメタ情報に保持されている最小値が発見された場合は、当該ブロックについて値を比較する処理を打ち切ることができる。さらに、複数のブロックが存在する場合は、順にすべてのブロックを走査する。最大値を求める場合において、すでに発見された最大値よりも新たに走査するブロックのメタ情報に保持されている最大値が小さいときは、当該ブロックの走査を打ち切ることができる。同様に、最小値を求める場合において、すでに発見された最小値よりも新たに走査するブロックのメタ情報に保持されている最小値が大きいときは、当該ブロックの走査を打ち切ることができる。なお、所定の条件でレコ
ードをフィルタリングせずに全件から最大値又は最小値を求める場合には、単純に各ブロックのメタ情報に保持されている最大値のうち最も大きい値、又は最小値のうち最も小さい値を求める。
また、集計対象のカラムとは異なるカラムについてある条件を満たすレコードを抽出し、集計処理を行う場合も、まず条件を満たすレコードを示すビット列を生成する。上述の例と同様に、1、3、7、8行目が所定の条件を満たす場合、101000110000というビット列で条件を満たすレコードが表される。そして、null/0フラグとビット列との論理積をとる。なお、論理積が0であれば、当該ブロックには集計対象の値がないと判断できる。また、論理積が1となったビットに対応する分割領域の値を抽出するためのマスクを生成し、圧縮値に含まれる分割領域の値をフィルタリングする。例えば上記のビット列と図5のnull/0フラグの論理積は、101000100000となる。圧縮データ領域の1行目に示された圧縮値をフィルタリングするため、論理積のビット列のうち左から4つのビットに基づいてマスク「1111000011110000」が生成される。さらに圧縮値とマスクとの論理積をとり、フィルタリング後の圧縮値「0001000000000000」が求められる。なお、図5では便宜的に10進数で説明しているが、実際には2進数で処理され、例えば圧縮値が64bitである場合、上記のマスクは「1111111111111111000000000000000011111111111111110000000000000000」となる。
同様に、2番目の圧縮値はフィルター処理されると「0000000000050000」になる。また、3番目の圧縮値は、フィルター処理されると「0000000000000000」になる。以上のようなフィルタリング処理された圧縮値を用いて、図4A及び図4Bを用いて説明したような集計処理を行う。
また、集計対象のカラムと条件判断を行うカラムとが同一である場合は、まず圧縮データ領域から各分割領域に保持されている値を抽出して条件を満たすか否か判断する。このような処理のコストを低減させるため、メタ情報を活用してもよい。例えば、最大値や最小値を用いて、条件判断をスキップできる可能性がある。具体的には、当該カラムに保持されている値が500未満のレコードを抽出して当該カラムに保持されている値を集計するような場合において、処理対象のブロックの最小値が500である場合当該ブロックについては条件を満たす値が存在しないと判断できるため、処理をスキップすることができる。
また、完全一致検索を高速化するため、メタ情報としていわゆるブルームフィルタのハッシュ値を保持しておくようにしてもよい。ブルームフィルタによって、ある要素が集合のメンバーであるかテストすることができる。そして、当該ブロックには検索対象値が含まれないことが保証された場合には、当該ブロックの走査をスキップすることができる。
<ファンクションキャッシュ>
集計処理を行う場合、キャッシュを利用してコストをさらに低減することもできる。例えば、上述の低圧縮データ領域に格納されるデータは、物理テーブルの値と対応していたが、さらに計算結果を仮想的なカラムとして低圧縮データ領域に保持する。図10は、メモリ上にキャッシュとして仮想的なカラムを設ける例を説明するための図である。例えば、物理テーブルに何らかの注文データを構成する単価のカラムと個数のカラムとが存在するものとする。この場合において、注文データの売上を集計するときは、次のような計算を行う。
SUM(単価×個数)
過去の履歴である各注文データの売上(単価×個数)は、計算し直しても結果が変わる
ような性質のデータではない。よって、図10の破線で示すカラムのように、算出した値を例えば低圧縮データ領域に保持しておき、同様の要求に対して既に算出された値を返すようにする。このような仮想的なカラムとしてレコードごとに部分的な集計値を算出しておき、保持されるキャッシュを、便宜上「ファンクションキャッシュ」とも呼ぶものする。同様に、平均値(AVG(単価×個数))や税込み価格(SUM(単価×個数×1.05))といった値をファンクションキャッシュとして保持しておくようにしてもよい。すなわち、物理テーブルのレコード(行)ごとに部分的な集計値(すなわち、単価と個数との小計や、価格に税率を乗じた税込み価格等)を算出し、部分的な集計値を集計対象の値とする圧縮値を生成して内部記憶12等の記憶部に保持させておく。
ファンクションキャッシュは全ての行に対して算出しておくことができ、物理テーブルのカラムデータと同様にキャッシュされる。また、物理テーブルのカラムデータと同様に、様々なアルゴリズムで圧縮して保持することが可能である。このような点で、いわゆるマテリアライズドビューやストアドプロシージャとは異なっている。比較的処理に時間のかかる要求について自動的にファンクションキャッシュを保持しておくようにしてもよいし、ファンクションキャッシュを保持すべき数式を予め設定しておくようにしてもよい。
<分散処理>
処理の対象となるテーブルは、論理的には1つのテーブルであっても、複数の情報処理装置1の内部記憶12に分散(「パーティショニング」とも呼ぶ)させることができる。なお、物理テーブルも複数の情報処理装置1に分散して保持する構成としてもよいし、1つの物理テーブルに基づいて複数の情報処理装置1の内部記憶12に分散して圧縮値を展開する構成としてもよい。
図11に、分散処理を行うシステムの一例を示すシステム構成図を示す。図11のシステムは、情報処理装置1(図11では1a、1b・・・)と、制御装置2とを含み、これらはネットワークを介して接続されているものとする。情報処理装置1(「ノード」とも呼ぶ)は、図1に示した装置とほぼ同様である。また、制御装置2は、分散処理部21と、記憶部22と、集計部23と、入出力部24とを有する。入出力部24は、処理の要求を受け付けたり、処理の結果を応答したりする。また、分散処理部21は、処理を各ノードに振り分けたり、各ノードから結果を受信したりする。記憶部22には、中間的に生成されるデータや、処理結果のデータが保持される。また、集計部23は、各ノードから受信した結果のデータを集計し、入出力部24が受けた要求への応答となる結果のデータを生成する。なお、図11の例では1つの制御装置2を示しているが、各ノードに分散処理部21を設け、分散制御を行う装置群を構成してもよい。この場合、何れのノードが処理の要求を受け付けた場合も、他のノードの集計部から各ノード内での小計値を受け取り、全体を集計する。
なお、複数のノードでの内部記憶12の分割方法は、カラムごとに分割し、異なるカラムを別のノードが保持するようにしてもよいし、レコードごとに分割し、異なるレコードを別のノードが保持するようにしてもよい。図12は、仮想的な1つのテーブルと登録されたレコードの一例を示す図である。例えば図12に示すように、2つのノードが、異なるレコードを物理的に保持するようにする。なお、分散処理部21によるレコードの振分けは、例えば、図示していない日付やユーザID等に基づいて、過不足なくいずれかのノードに分散させるようにする。図13は、複数のノードのメモリに展開されたカラムデータの例を示す図である。図12のテーブルは、例えば図13に示すように各ノードのメモリに保持される。なお、耐障害性を高めるため、同一パーティションを複数のノードが保持するようにしてもよい。
例えば、図12に示すような論理テーブルに対し次のような計算を行う例について説明
する。
SUM(単価×数量)
このような要求を入出力部24が受けると、分散処理部21は各ノードに処理を要求する。一方、各ノードは、並列に、各自が保持するカラムデータを用いて計算を行う。処理の内容は、情報処理装置1が単独で行う処理と同様である。図13の例では、ノード1の集計処理において中間的な集計値2350が算出される。同様に、ノード2の集計処理において中間的な集計値1900が算出される。中間的な集計値は、制御装置2の分散処理部21に伝送され、集計部23は、テーブル全体の集計値4250を算出する。そして、入出力部24は、結果の集計値を要求元に伝送する。
このような構成にすれば、各ノードが並行して集計処理を実行することができる。すなわち、負荷を分散させるとともに結果を得るまでの時間を短縮することができる。
<メモリ展開時のデータ構造変更処理>
物理テーブルからメモリ上へデータをロードする際、データ構造を変更するようにしてもよい。例えば、図14に示すようなテーブルを例に説明する。図14は、カラム数が不定の汎用的なデータ構造を実現する目的で設計されたテーブルの一例である。テーブルは、「データID」(すなわち、実質的なレコードの識別情報)、「カラム名」(すなわち、実質的なカラムの識別情報)、及び「値」(すなわち、実質的なカラムに登録された値)のカラムを有している。また、登録されているレコードはアンケートの回答結果であり、3つのレコードが1人の回答者の情報を表している。このようなデータ構造であれば、後に新たなカラム名を追加することが容易となるが、クロス集計のような多次元での集計を行うことが困難である。
このような場合において、予め「キー列」及び「カラム列」を設定しておく。「キー列」は、指定されたカラムの値が同一のレコードを1件のレコードとして扱うためのカラムである。また、カラム列は、指定されたカラムの値を新たな展開後のテーブルのカラム名として用いるためのカラムである。例えば、キー列として図14の「データID」が指定され、カラム列として図14の「カラム名」が指定されているものとする。
図14のような物理テーブルのデータをメモリ上にロードする際には、圧縮部13は「キー列」及び「カラム列」の設定を参照し、データ構造を変換する。具体的には、「キー列」として指定されたカラムである「データID」に保持している値が同一のレコードを、変換後の1レコードに結合する。このとき、「カラム列」に指定されたカラムである「カラム名」に保持している値を、変換後のテーブルのカラムの名称に設定し、他のカラムである「値」に保持している値を、変換後のレコードの各値に登録する。図15に、変換後のテーブルの一例を示す。図15のテーブルは、「データID」、「性別」、「年齢」及び「職業」の各列を有する。また、各レコードには、図14に示した物理テーブルのカラム「値」に保持していた値が、カラム「データID」の値ごとに結合されている。
SQLのようなデータ操作言語でこのような変換処理を行うためにはクエリが複雑になってしまうところ、メモリへロードする際に変換する機能を設けておけば、簡易な設定により変換処理を実行させることができる。図15に示すようなテーブルを、メモリ上においてカラムごとに値を保持させておけば、クロス集計のような処理も容易になる。
<その他>
本発明は、上述の例に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更を加え得るものである。
1 情報処理装置
11 DBMS
111 物理テーブル
112 データ操作部
12 内部記憶
13 圧縮部
14 集計部
15 入出力部
2 制御装置
21 分散処理部
22 記憶部
23 集計部
24 入出力部

Claims (11)

  1. テーブルが記憶するレコードの値を集計する情報処理装置であって、
    メモリ上に確保する領域を所定数の桁ごとに分割した複数の分割領域にそれぞれ集計対象の値を保持させることにより、それぞれの前記集計対象の値を組み合わせた合成値の圧縮値を生成する圧縮部と、
    複数の前記圧縮値を集計した集計圧縮値を算出する圧縮値集計部と、
    前記集計圧縮値に含まれる前記分割領域の各々の値を集計して集計値を算出する集計部と、
    を有する情報処理装置。
  2. 前記圧縮部は、前記圧縮値集計部が前記圧縮値を集計する際に前記分割領域をまたいで桁上がりが発生しない前記圧縮値の集計単位であるブロックと関連付けて前記圧縮値を生成し、
    前記圧縮値集計部は、前記ブロックごとに前記集計圧縮値を算出する
    請求項1に記載の情報処理装置。
  3. 前記集計対象の値は、前記メモリ上において前記テーブルの列ごとに保持される
    請求項1又は2に記載の情報処理装置。
  4. 前記圧縮部は、前記集計対象の値が所定の閾値以上である場合、又は前記集計対象の値が所定の数の倍数でない場合、当該集計対象の値を前記メモリ上の前記分割領域とは異なる特異値用領域に保持させ、
    前記集計部は、前記集計圧縮値と前記特異値用領域の値とをさらに集計する
    請求項1から3のいずれか一項に記載の情報処理装置。
  5. 前記圧縮部は、前記集計対象の値を相対値に変換して前記分割領域に保持させるための差分を示す基準値又は倍率を含む管理情報を用いて前記集計対象の値を前記相対値に変換し、当該相対値を前記分割領域に保持させた圧縮値を生成し、
    前記集計部は、生成した前記集計値を、前記管理情報を用いてさらに変換する
    請求項1から4のいずれか一項に記載の情報処理装置。
  6. 前記圧縮部は、前記分割領域が保持する値がNULL値か否かを示す情報をさらに記憶させる
    請求項1から5のいずれか一項に記載の情報処理装置。
  7. 前記圧縮部は、前記圧縮値を生成するとともに集計対象の値の最大値又は最小値を記憶部に記憶させ、
    前記集計部は、最大値又は最小値の問合せを受けた場合、前記記憶部に記憶されている最大値又は最小値を用いて最大値又は最小値を求める
    請求項1から6のいずれか一項に記載の情報処理装置。
  8. 前記圧縮部は、前記レコードごとに部分的な集計値を算出し、当該部分的な集計値を集計対象の値として圧縮値を生成する
    請求項1から7のいずれか一項に記載の情報処理装置。
  9. 前記テーブルにおいて、実質的なレコードの識別情報と対応付けて、カラムの識別情報と当該カラムに登録される値とを異なるレコードに記憶している場合、前記集計対象の値は、前記メモリ上において前記カラムごとに保持される
    請求項1から8のいずれか一項に記載の情報処理装置。
  10. テーブルが記憶するレコードの値を集計する情報処理方法であって、
    メモリ上に確保する領域を所定数の桁ごとに分割した複数の分割領域にそれぞれ集計対象の値を保持させることにより、それぞれの前記集計対象の値を組み合わせた合成値の圧縮値を生成するステップと、
    複数の前記圧縮値を集計した集計圧縮値を算出するステップと、
    前記集計圧縮値に含まれる前記分割領域の各々の値を集計して集計値を算出するステップと、
    をコンピュータが実行する情報処理方法。
  11. テーブルが記憶するレコードの値を集計するプログラムであって、
    メモリ上に確保する領域を所定数の桁ごとに分割した複数の分割領域にそれぞれ集計対象の値を保持させることにより、それぞれの前記集計対象の値を組み合わせた合成値の圧縮値を生成するステップと、
    複数の前記圧縮値を集計した集計圧縮値を算出するステップと、
    前記集計圧縮値に含まれる前記分割領域の各々の値を集計して集計値を算出するステップと、
    をコンピュータに実行させるためのプログラム。
JP2014047958A 2014-03-11 2014-03-11 情報処理装置、情報処理方法及びプログラム Active JP6336302B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014047958A JP6336302B2 (ja) 2014-03-11 2014-03-11 情報処理装置、情報処理方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014047958A JP6336302B2 (ja) 2014-03-11 2014-03-11 情報処理装置、情報処理方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2015172823A true JP2015172823A (ja) 2015-10-01
JP6336302B2 JP6336302B2 (ja) 2018-06-06

Family

ID=54260116

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014047958A Active JP6336302B2 (ja) 2014-03-11 2014-03-11 情報処理装置、情報処理方法及びプログラム

Country Status (1)

Country Link
JP (1) JP6336302B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023088021A1 (zh) * 2021-11-18 2023-05-25 深圳智慧林网络科技有限公司 一种基于预设规则的数据压缩方法、装置、设备和介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1097544A (ja) * 1996-09-20 1998-04-14 Hitachi Ltd データベース処理システム
WO2005106713A1 (ja) * 2004-04-28 2005-11-10 Shinji Furusho 情報処理方法及び情報処理システム
JP2008287723A (ja) * 2007-05-21 2008-11-27 Sap Ag 繰り返し値を有するテーブルのブロック圧縮
JP2010539616A (ja) * 2007-09-21 2010-12-16 ハッソ−プラトナー−インスティテュート フュア ソフトバレシステムテヒニク ゲゼルシャフト ミット ベシュレンクテル ハフツング Oltpデータをレポートするための、重複がないetlレスシステム及びその方法
WO2013136520A1 (ja) * 2012-03-16 2013-09-19 株式会社 日立製作所 情報処理システム及び情報処理システムの制御方法
WO2013141308A1 (ja) * 2012-03-22 2013-09-26 日本電気株式会社 分散ストレージシステム、ストレージ制御方法およびプログラム

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1097544A (ja) * 1996-09-20 1998-04-14 Hitachi Ltd データベース処理システム
WO2005106713A1 (ja) * 2004-04-28 2005-11-10 Shinji Furusho 情報処理方法及び情報処理システム
JP2008287723A (ja) * 2007-05-21 2008-11-27 Sap Ag 繰り返し値を有するテーブルのブロック圧縮
JP2010539616A (ja) * 2007-09-21 2010-12-16 ハッソ−プラトナー−インスティテュート フュア ソフトバレシステムテヒニク ゲゼルシャフト ミット ベシュレンクテル ハフツング Oltpデータをレポートするための、重複がないetlレスシステム及びその方法
WO2013136520A1 (ja) * 2012-03-16 2013-09-19 株式会社 日立製作所 情報処理システム及び情報処理システムの制御方法
WO2013141308A1 (ja) * 2012-03-22 2013-09-26 日本電気株式会社 分散ストレージシステム、ストレージ制御方法およびプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023088021A1 (zh) * 2021-11-18 2023-05-25 深圳智慧林网络科技有限公司 一种基于预设规则的数据压缩方法、装置、设备和介质

Also Published As

Publication number Publication date
JP6336302B2 (ja) 2018-06-06

Similar Documents

Publication Publication Date Title
US11138175B2 (en) Type-specific compression in database systems
US20190324975A1 (en) Hadoop olap engine
US10884987B2 (en) Block compression of tables with repeated values
JP6559892B2 (ja) データキューブのデータの記憶及び検索
US8032499B2 (en) Compression of tables based on occurrence of values
US11494339B2 (en) Multi-level compression for storing data in a data store
Lemire et al. Consistently faster and smaller compressed bitmaps with roaring
Larson et al. Enhancements to SQL server column stores
US20050246362A1 (en) System and method for dynamci log compression in a file system
CN107133342A (zh) 一种IndexR实时数据分析库
US20130013606A1 (en) Managing Storage of Data for Range-Based Searching
JP5735702B2 (ja) 情報処理システム及び情報処理システムの制御方法
CN112925821B (zh) 基于MapReduce的并行频繁项集增量数据挖掘方法
Amur et al. Memory-efficient groupby-aggregate using compressed buffer trees
JP2018046406A (ja) データ圧縮方法、データ圧縮装置、コンピュータプログラム及びデータベースシステム
JP7120439B2 (ja) データ一般化装置、データ一般化方法、プログラム
JP6336302B2 (ja) 情報処理装置、情報処理方法及びプログラム
Kuchnik et al. Progressive compressed records: Taking a byte out of deep learning data
EP3220290A1 (en) Processing of tabular data
JP7274293B2 (ja) 情報処理装置、情報処理方法及びプログラム
JP7466619B1 (ja) データベース管理システム、パーティション分割装置、パーティション分割方法およびパーティション分割プログラム
US11893016B1 (en) Secure predicate derivation of queries using metadata
CN111723121A (zh) 数据处理方法及装置
Pollack Delete and Update Operations
Liu Fast and Effective Compression for IoT Systems

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170217

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180116

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180319

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180403

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180502

R150 Certificate of patent or registration of utility model

Ref document number: 6336302

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250