JP2017167654A - データ管理装置及びデータベースの管理方法 - Google Patents

データ管理装置及びデータベースの管理方法 Download PDF

Info

Publication number
JP2017167654A
JP2017167654A JP2016049944A JP2016049944A JP2017167654A JP 2017167654 A JP2017167654 A JP 2017167654A JP 2016049944 A JP2016049944 A JP 2016049944A JP 2016049944 A JP2016049944 A JP 2016049944A JP 2017167654 A JP2017167654 A JP 2017167654A
Authority
JP
Japan
Prior art keywords
data
index
block
data block
value
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
JP2016049944A
Other languages
English (en)
Inventor
拓海 山岡
Takumi Yamaoka
拓海 山岡
修治 岩見
Shuji Iwami
修治 岩見
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.)
Hitachi Solutions Ltd
Original Assignee
Hitachi Solutions 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 Hitachi Solutions Ltd filed Critical Hitachi Solutions Ltd
Priority to JP2016049944A priority Critical patent/JP2017167654A/ja
Publication of JP2017167654A publication Critical patent/JP2017167654A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

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

Abstract

【課題】インデックスの追加処理とインデックスメンテナンスによる負荷の増大を抑制する。【解決手段】プロセッサとメモリとを有する計算機でデータベースの表データを管理するデータベースの管理方法であって、前記計算機が、リングバッファで構成された前記表データにデータを追加し、前記データを追加した前記リングバッファの位置を保持する最終書き込み位置を更新し、前記リングバッファを循環した回数を保持する第1の循環回数を更新し、前記データを検索するインデックス要素を格納したインデックスで、前記追加したデータに対応する前記インデックス要素を特定し、前記特定したインデックス要素に対応して、前記データを追加した前記表データの位置を示す位置情報と、前記位置情報に対応するデータを追加したときの前記リングバッファの循環回数を保持する第2の循環回数とを含むデータブロックを追加する。【選択図】図2

Description

本発明は、記憶装置にデータを保持するリレーショナルデータベースのインデックス技術に関するものである。
産業機器などにセンサーを取り付けて得られる稼働データや、情報システムの運用データは、ログデータとして蓄積され、障害発生時の原因調査や、情報セキュリティの監視などに活用されている。このようなデータを管理する場合、稼働ログまたは運用ログデータの容量が肥大化しないよう配慮し、有効なデータだけを格納して、不要となったデータは順次破棄する必要がある。特に、二次記憶装置の容量に制限のある傾向が高い組み込み機器では、このような設計が必須となっている。
このような一定件数のデータだけを管理するデータ管理システムにおいては、リングバッファ、または、循環参照と呼ばれるデータ構造が使われる。本技術に関連する公知技術文献として、特許文献1が知られている。
また、データ管理システムとして広く普及しているリレーショナルデータベースシステムでは、任意の値や文字列など、ユーザが定めた条件でデータを検索する機能を有し、その検索を高速化する技術としてインデックスが存在する。インデックス技術の代表的な例としてB−Treeインデックスが知られている。
図13は、B−Treeインデックスにリングバッファを採用したデータ構造の一例である。図示の例は、表データ1400のVALUE1403列の情報に対してB−Treeインデックス1500が構成されている状態を示す。表データ1400は、各レコードに対して二次記憶装置上の物理的な格納位置を示す格納位置ID1401と、格納された日時を格納するTIME1402と、所定の値を格納するVALUE1403と、データ本体を格納するDATA1404からひとつのレコードが構成される。
インデックス1500は、ルートブロック1501、リーフブロック1502、レコードIDブロック1503のデータで構成される。ルートブロック1501には、検索条件として指定された値に対応するリーフブロック1502の位置を算出するためのデータが記録される。リーフブロック1502には、検索対象の値に対するレコードIDブロック1503の格納位置を算出するためのデータが記録され、レコードIDブロック1503には、対象の値を格納している表データ1400のレコードの格納位置ID1401が記録される。
たとえば、検索条件に数値「2」が指定されている場合、ルートブロック1501内の情報から数値「2」の値を示すリーフブロック1510の格納位置が算出され、さらに、レコードIDブロック1511の格納位置が算出される。レコードIDブロック1511に記録された格納位置ID1401をもとに表データ1400の該当のレコードを順次取り出すことによって、インデックスを利用した検索が実現される。
リレーショナルデータベースに対して、リングバッファと同様の概念を取り入れることで、データ管理の最適化を実現した技術文献として、特許文献2が知られている。
特開2013-206147号公報 特開平08-255017号公報
図12は、リングバッファを取り入れたデータベースのデータ更新例として、表データ1400の最大格納数を5としたリングバッファにおけるデータ追加の例を示したものである。なお、表データ1400とインデックス1500は図13と同様の構成である。
始めに、データの登録処理として、格納時間が最も長い時間となっているデータ1410が、新規データ1411によって置き換えられる。新規データ1411の書き換えに伴い、インデックス1500の処理として、更新前のインデックス情報が削除され、追加された新規データ1411のインデックス情報が追加される。
図12の例では、始めに、格納位置IDが「2」であるデータ1410を指すインデックスのレコードIDブロック1511内の構成要素「2」が削除され、データ1410が新規データ1411で上書きされる。
次に、新規データ1411に対するインデックス1500のレコードIDブロック1512に構成要素「2」が追加される。また、レコードIDブロック1512が不要になった場合、リーフブロック1502の構成要素の削除が行われる場合がある。
すなわち、新しいデータを追加し、リングバッファによって最古のデータが上書きされるたびに、登録するデータのためのレコードIDブロック1512の更新と、古いデータのためのレコードIDブロック1511の更新の二つの処理が発生するということになる。これら二つのレコードIDブロック1511と1512は、二次記憶装置上の離れた位置に格納されているため、二次記憶装置上の二箇所への更新が必要となる。
さらに、データの追加と削除を繰り返していくと、二次記録装置の断片化などが発生することが懸念される。これを防ぐため、インデックス1500のメンテナンスと呼ばれる高負荷のデータの詰め替え処理が定期的に行われる。メンテナンスのタイミングは、利用者が定期的に実行するものや、一定の間隔で新規データ登録時にデータ管理システムが実施する場合がある。
組み込み機器や小規模なデータ管理システムでは、システム全体の運用計画に合わせたタイミングでメンテナンスを実施することが難しいため、後者の方針を採用しているシステムがある。そのため、意図しないタイミングでインデックスのメンテナンス処理が発生してしまう場合があり、データ管理システムの導入の妨げとなっている。上記特許文献2においても、データ管理の最適化方法に関しての記述は存在するが、インデックスのメンテナンスに関する性能を改善するための仕組みは存在しない。
本発明の目的は、インデックス処理に伴うレコードIDブロックの更新によるI/O回数とインデックスメンテナンスによる負荷の増大という、ボトルネックを解消することが可能なインデックスを有するデータ管理システムを提供することにある。
本発明は、プロセッサとメモリとを有するデータ管理装置であって、データを格納する表データと、前記データを検索するインデックス要素を格納するインデックスと、前記表データとインデックスを管理するデータベース管理部と、を有し、前記表データは、前記データを格納するリングバッファと、前記データを書き込んだ前記リングバッファの位置を保持する最終書き込み位置と、前記リングバッファを循環した回数を保持する第1の循環回数と、を有し、前記インデックスは、検索対象の値に対応して設定された前記インデックス要素と、前記インデックス要素に対応して、前記表データの位置を示す位置情報と、前記位置情報に対応するデータを書き込んだときの前記リングバッファの循環回数を保持する第2の循環回数とを含むデータブロックと、を有し、前記データベース管理部は、前記表データへデータを追加する際には、前記最終書き込み位置に前記データを書き込んでから、前記最終書き込み位置と前記第1の循環回数を更新する表データ登録部と、前記書き込んだデータに対応する前記インデックス要素で、当該インデックス要素に対応する前記データブロックを前記インデックスに追加するインデックス登録部と、を有する。
したがって、本発明によれば、インデックスのメンテナンスの契機を、新規データ登録時に処理対象のインデックス要素と同じ値を有する別データのインデックス要素に対して行うことでI/O回数を最小限にし、メンテナンス負荷を平滑化することができるため、ログデータ等を管理するデータベースにおける性能確保が可能となる。これにより、従来のリレーショナルデータベースでは適用が困難だった、容量が限られた組み込み機器の二次記憶装置における産業機器の稼働データの蓄積や、情報システムのログデータなどの運用などといった分野に活用することが可能となる。
本発明の実施例を示し、データ管理装置の一例を示すブロック図である。 本発明の実施例を示し、二次記憶装置のデータベースに格納される表データおよびインデックスの構成図である。 本発明の実施例を示し、新規データをデータベースに挿入する際に、データベース管理システムで行われる処理の一例を示すフローチャートである。 本発明の実施例を示し、新規データをデータベースに挿入する際の、表データに対する操作の一例を示す図である。 本発明の実施例を示し、新規データをデータベースに挿入する際にデータベース管理システムで行われる処理の一例を示すフローチャートである。 本発明の実施例を示し、データベース管理システムが、新規データをデータベースに挿入する際のインデックス操作中に行うメンテナンス処理のフローチャートである。 本発明の実施例を示し、レコードIDブロックのメンテナンス処理において、現在位置より表データの格納位置が前方の情報がメンテナンスされる例を示す図である。 本発明の実施例を示し、レコードIDブロックのメンテナンス処理において、現在位置より表データの格納位置が後方の情報がメンテナンスされる例を示す図である。 本発明の実施例を示し、データ管理装置で行われる検索処理の一例を示すフローチャートである。 本発明の実施例を示し、データ管理装置でデータの検索を行う例を示す説明図である。 本発明の実施例を示し、ハッシュインデックスを採用したインデックスの構成図である。 リングバッファを取り入れたデータベースのデータ更新例として、表データの最大格納数を5としたリングバッファにおいて、データ追加時の例を示した説明図である。 B−Treeインデックスにリングバッファを取り入れたデータベースにおいてデータの更新を行う例を示す説明図である。
以下、本発明の実施形態を添付図面に基づいて説明する。
以下、本発明を実施する場合の一形態を、図面を参照して具体的に説明する。
図1は、本発明の実施例を示し、データ管理装置1の一例を示すブロック図である。データ管理装置1は、演算を行うプロセッサ100と、データやプログラムを保持するメモリ102と、外部からのデータの検索や登録などの操作命令であるSQL文を受け付ける入力装置104と、SQL文の構文解析を行う構文解析部107と、データ検索要求に対してデータの検索を実現するデータ検索部108と、検索結果を出力する出力装置105と、データ更新要求に対してデータの更新を実現するデータ更新部109と、データやプログラムを格納する二次記憶装置103で構成された計算機である。
二次記憶装置103には、表データ201とインデックス301から構成されるデータベース111が配置され、メモリ102に設定したDBキャッシュ110を介してデータの読み込みと書き出しが行われる。
メモリ102には、データベース111を管理するデータベース管理システム101がロードされて、プロセッサ100によって実行される。データベース管理システム101は、構文解析部107と、データ検索部108と、データ更新部109と、表データ登録部1091と、インデックス登録部1092と、DBキャッシュ110を含む。
データ管理装置1は、図示しないネットワークを介して接続されたクライアント計算機から、データベース111の検索要求や登録要求を受け付けて、データベース管理システム101で処理した結果をクライアント計算機に応答する。
本実施例において、入力装置104に入力されたSQL文は、構文解析部107でSQL文の構文解析が行われる。SQL文が検索要求である場合は、データ検索部108にて、データベース111から該当のデータを検索し、出力装置105に検索結果が出力される。登録要求である場合は、データ更新部109の表データ登録部1091で表201の情報が登録され、さらに、インデックス登録部1092でインデックス301の情報が更新される。
構文解析部107と、データ検索部108と、データ更新部109等のデータベース管理システム101の各機能部はプログラムとしてメモリ102にロードされる。
プロセッサ100は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、プロセッサ100は、データ検索部プログラムに従って処理することでデータ検索部108として機能する。他のプログラムについても同様である。さらに、プロセッサ100は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
データベース管理システム101の各機能を実現するプログラム、テーブル等の情報は、二次記憶装置103や不揮発性半導体メモリ、ハードディスクドライブ、SSD(Solid State Drive)等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
図2は、二次記憶装置103上のデータベース111に格納される表データ201およびインデックス301の構成図である。図示の例は、表データ201に、最大格納数(レコード数)=5のリングバッファを採用し、インデックス301にはB−Treeインデックスを採用したデータ構造である。
表データ201は、データを格納する管理対象データ部202と、リングバッファの状態を管理する属性管理情報203から構成される。
表データ201の管理対象データ部202は、二次記憶装置103上の物理的な格納位置を示す格納位置ID2021と、管理対象のデータの書き込み日時を格納するTIME2022と、所定の値を格納するVALUE2023と、データ本体を格納するDATA2024からひとつのレコードが構成される。なお、VALUE2023は、ログデータなどを構成する所定の情報を格納することができる。
属性管理情報203は、現在の最新データの格納位置を示すCurrent Position属性(最終書き込み位置)2032と、データ登録時に管理対象データ部202においてデータ格納位置がリングバッファを循環した回数を示すCurrent Lap属性(循環回数)2031を含む。
インデックス301は、ルートブロック305と、リーフブロック306と、レコードIDブロック(データブロック)307で構成される。ルートブロック305には、検索条件として指定された値に対応するリーフブロック306の位置を算出するためのデータが格納される。リーフブロック306には、検索対象の値に対するレコードIDブロック307の格納位置を算出するためのデータが格納される。なお、ルートブロック305からリーフブロック306の総称をインデックス要素とする。
リーフブロック306の値に対応して、表データ201上の位置と、リングバッファの循環回数がレコードIDブロック307として設定される。レコードIDブロック307の各構成要素には、格納位置ID3071とインデックス構築時のCurrent Lap属性2031の値(循環回数)が記録されるLap情報3072が格納される。本実施例は、管理対象データ部202で管理するデータの最大格納件数を5とした場合の例である。
以下、上述のように構成されたデータ管理装置1で行われる処理の一例を説明する。
図3は、新規データをデータベース111へ登録する際に、表データ登録部1091で行われる表データ登録処理の一例を示すフローチャートである。
表データ登録部1091は、まず、Current Position属性2032の値に1を加算し(ステップS1)、管理対象データ部202で管理するデータの最大格納件数と比較する(ステップS2)。
Current Position属性2032の値が最大格納件数(5)より大きい場合は、表データ201の末尾を示すことになるので、表データ登録部1091は、Current Position属性2032に「1」を設定し、Current Lap属性2031に1を加算する(ステップS3)。
続いて、表データ登録部1091は、Current Position属性2032が指し示す管理対象データ部202の格納位置にデータが存在するか否かを判定し(ステップS4)、データが存在しない場合はデータを新規登録する(ステップS6)。一方、表データ登録部1091は、データが存在する場合、新規データで古いデータを上書きする(ステップS5)。
上記処理によって、表データ登録部1091は、リングバッファで構成された表データ201にデータを追加し、属性管理情報203で、リングバッファの書き込み位置と周回数を管理する。
図4は、データベース管理システム101が、新規データをデータベース111に挿入する際に、表データ201に対する操作を示すデータ構成図である。データベース管理システム101が、新規データ401を登録する場合、初めに、前記ステップS1により現在のCurrent Position属性2031の値が「4」から「5」に更新され、前記ステップS2によってCurrent Position属性2032の値と表格納最大件数(5)が比較される。
データベース管理システム101は、Current Position属性2032の値が、最大格納件数を超えていないため、表格納位置ID2021=「5」のデータが上書きされる。次の新規データ402が登録される場合では、Current Position属性2032の値=「5」が、前記ステップS1で「1」が加算されて「6」となる。
Current Position属性2032の値が表格納最大件数5を超えるため、前記ステップS3により データベース管理システム101は、Current Position属性2032に「1」を設定し、Current Lap属性2031に「1」を加算した値「4」を設定し、格納位置ID2021=1のデータが上書きされる。
図5は、新規データをデータベース111に挿入する際に、インデックス登録部1092で行われる処理の一例を示すフローチャートである。
インデックス登録部1092では、新規データが表データ201に登録されると、インデックス301に値を設定する。インデックス登録部1092は、インデックスとして利用する表データ201の値(例えば、VALUE2023)を元に、B−Treeで構成されたルートブロック305とリーフブロック206の探索を行う。
インデックス登録部1092は探索の結果、該当するレコードIDブロック307の格納位置の算出を行い(ステップS11)、該当のレコードIDブロック307をDBキャッシュ110に読み込む(ステップS12)。
次に、インデックス登録部1092は、DBキャッシュ110上のレコードIDブロック307のメンテナンスを行う(ステップS13)。レコードIDブロックのメンテナンスは、後述するように当該レコードIDブロック307の内容を、書き込みが行われた表データ201の内容に一致させる。
インデックス登録部1092は、メンテナンスが完了すると、レコードIDブロック307の末尾に追加した表データ201の格納位置ID2021とCurrent Lap属性2031の値を格納する(ステップS14)。最後に、インデックス登録部1092は、DBキャッシュ110上のレコードIDブロック307をインデックス301に書き込む(ステップS15)。
上記処理によって、インデックス登録部1092は、表データ201に追加されたレコードのインデックスに用いる値(VALUE2023)に対応するリーフブロック306を探索し、該当するリーフブロック306のレコードIDブロック307に格納位置ID2021とCurrent Lap属性2031を追加する。
そして、インデックス登録部1092は、該当するレコードIDブロック307についてメンテナンスを実施して、レコードIDブロック307の内容を表データ201と整合させてから新たな構成要素(データブロック)を追加する。
したがって、インデックス301のメンテナンスの契機を、新規データの登録時に処理対象のレコードIDブロック307の構成要素(データブロック)と同じ値を有する別データの構成要素に対して行うことで、二次記憶装置103へのI/O回数を最小限にすることが可能となる。また、レコードIDブロック307の構成要素のメンテナンスによって不要な構成要素を削除してから新たな構成要素を加えることで、メンテナンスで処理する構成要素の数を削減して処理負荷の低減を図ることができる。
すなわち、表データ201への書き込み毎に、対象となるレコードIDブロック307についてメンテナンスを実施するので、メンテナンスの負荷を平滑化することができるため、ログデータなどのデータベース管理システムにおける性能確保が可能となる。これにより、前記従来例のように、インデックス301の全体に対するメンテナンス処理は不要となって、従来のリレーショナルデータベースでは適用が困難だった、容量が限られた組み込み機器の二次記憶装置103における産業機器の稼働データの蓄積や、情報システムのログデータなどの運用などといった分野に活用することが可能となる。
なお、上記ではレコードIDブロック307のメンテナンスを行った(ステップS13)後に、構成要素の追加(ステップS14)を行う例を示したが、レコードIDブロック307に構成要素を追加してからメンテナンスを行ってもよい。
図6は、前記ステップS13で行われるインデックス追加処理時のメンテナンス処理の一例を示すフローチャートである。
インデックス登録部1092は、図5のステップS12で読み込んだDBキャッシュ110上のレコードIDブロック307に格納された構成要素のすべてについて(ステップS21)、格納位置ID3071とCurrent Position属性2032の比較を行う(ステップS22)。
インデックス登録部1092は、格納位置ID3071の値がCurrent Position属性2032以下の場合、ステップS23に進んでLap情報3072とCurrent Lap属性2031の値を比較し、Lap情報3072がCurrent Lap属性2031より小さい場合、DBキャッシュ110から対象の構成要素を削除する(ステップS25)。
一方、インデックス登録部1092は、前記ステップS22の比較において、格納位置ID3071の値がCurrent Position属性2032より大きい場合は、Lap情報3072に「1」を加算した値とCurrent Lap属性2031を比較し(ステップS24)する。インデックス登録部1092は、Lap情報3072に「1」を加算した値がCurrent Lap属性2031未満の場合、DBキャッシュ110から対象の構成要素を削除する(ステップS25)。
最後に、インデックス登録部1092は、DBキャッシュ110上のレコードIDブロック307の詰め直しを行う(ステップS26)。この詰め直しでは、レコードIDブロック307の不要な領域の消去などが行われる。
以上の処理によって、インデックス301で更新されるレコードIDブロック307は、不要な構成要素が削除された後に、不要な領域の消去などが行われて、ブロック内でフラグメントのないデータとしてメンテナンスが行われる。本実施例では、インデックス301の追加時に、追加対処のレコードIDブロック307についてメンテナンスを行うことで、メンテナンスを行う際のデータ管理装置1の負荷を抑制することができる。
これにより、インデックス301のレコードIDブロック307に新たな構成要素が追加される度にメンテナンスが行われ、一回のメンテナンスに要する計算機資源を低減できる。そして、レコードIDブロック307への構成要素の追加の度に、該当のレコードIDブロック307のメンテナンスを行っておくことで、多大な計算機資源を必要とするインデックス301全体のメンテナンスを不要にすることができる。
また、インデックス301のメンテナンスでは、レコードIDブロック307の構成要素のLap情報3072とCurrent Lap属性2031から不要となった構成要素を削除することができる。これにより、インデックス登録部1092は、実際の表データ201を参照することなく不要な構成要素を判定することができるので、処理負荷の低減を図ることができる。
図7は、インデックスのメンテナンス処理における、レコードIDブロック307のメンテナンスで、現在位置より表データ201の格納位置が前方の情報がメンテナンスされる例を示すものである。なお、表データ201の格納位置が前方とは、Current Position属性2032よりも値が小さい格納位置ID2021を指す。
表データ登録部1091により、新規データ401が表データ201に登録されて格納位置ID=「4」のデータが上書きされたあと、インデックス登録部1092では、新規データ401のVALUE2023の値である「2」を元に、対象のレコードIDブロック307の格納位置が算出され(ステップS11)、DBキャッシュ110上に読み込まれる(ステップS12)。
次に、インデックス301のメンテナンス処理(ステップS13)において、インデックス登録部1092では前記ステップS22の判定がレコードIDブロック307の構成要素501に対して行われる。
構成要素501の格納位置ID3071の値は「1」であり、Current Position属性2032の値が「4」であることから、次に前記図6のステップS23の比較が行われる。そして、構成要素501のLap情報3072の値が「2」であり、Current Lap属性2031の値が「3」であることから、構成要素501の情報はDBキャッシュ110上のレコードIDブロック307から削除される(ステップS25)。
インデックス登録部1092は、上述のようにレコードIDブロック307のインデックスのメンテナンスが完了した後、DBキャッシュ110上のレコードIDブロック307の末尾に新規データの構成要素502を追加し(ステップS14)、当該レコードIDブロック307がインデックス301に書き込まれる。
図8は、インデックスのメンテナンス処理における、レコードIDブロック307のメンテナンスで、現在位置より表データ201の格納位置が後方の情報がメンテナンスされる例を示すものである。なお、表データ201の格納位置が後方とは、Current Position属性2032よりも値が大きい格納位置ID2021を指す。
表データ登録部1091により、新規データ403が表データ201に登録されて格納位置ID=「4」のデータが上書きされたあと、インデックス登録部1092では、新規データ402のVALUE2023の値である「8」を元に、対象のレコードIDブロック307の格納位置が算出され、DBキャッシュ110上に読み込まれる(ステップS12)。
前記図6のステップS23の比較において、構成要素503が適用され、構成要素503の格納位置ID3071の値は「5」であり、Current Position属性2032の値が「4」であることから、次に前記ステップS24の比較が行われる。構成要素503のLap情報3072の値が「1」であり、Current Lap属性2031の値が「3」であることから、構成要素503の情報はDBキャッシュ110上のレコードIDブロックから削除される(ステップS25)。
このように、不要になったインデックス301のメンテナンスが、新規登録時のインデックスのメンテナンスに関する二次記憶装置103からの読み込みと書き込みのタイミングで同時に行われる構成となっている。
以上の処理及び構成によって、表データ201へデータを追加すると、インデックス301のレコードIDブロック307にも構成要素が追加される。インデックス登録部1092は、構成要素の追加に先立って当該レコードIDブロック307のメンテナンスを行って、不要な構成要素の削除を実施する。これにより、表データ201へデータが追加される度にインデックス301の部分的なメンテナンスが自動で行われることになる。したがって、データベース管理システム101では、インデックス301の構成要素のメンテナンスを明示的に実行しなくてもよい。
また、本実施例では、対象の表データ201に対してインデックスが一つ定義された例を示したが、複数のインデックスを定義した場合でも、インデックス登録部1092で行われるインデックス登録処理が、それぞれのインデックスに対して行われることは言うまでもない。
また、リレーショナルデータベースにおいては、ジャーナル情報の管理ならびにトランザクション制御によりDBキャッシュ110と二次記憶装置103の間の読み込みや書き込みのタイミングが制御されているが、本実施例におけるデータ構造が同様に適用できることは言うまでもない。
図9は、データ検索部108において、データの検索を行う処理の一例を示すフローチャートである。この処理は、データベース管理システム101が検索要求を受け付けたときに実行される。
データ検索部108では、受け付けた検索条件の値を元に、インデックス301のルートブロック305とリーフブロック306の探索を行い、該当するレコードIDブロック307の格納位置の算出を行う(ステップS31)。
次に、データ検索部108は、対象のレコードIDブロック307の各構成要素について(ステップS32)、格納位置ID3071とCurrent Position属性2032の比較を行い(ステップS33)、格納位置ID3071がCurrent Position属性2032以下の場合は、Lap情報3072とCurrent Lap属性2031の値の比較を行う(ステップS34)。
データ検索部108は、Lap情報3072がCurrent Lap属性2031の値以上である場合、検索結果として有効と判断し、結果リスト用のDBキャッシュ110に格納位置ID3071の値を登録する(ステップS36)。一方、データ検索部108は、Lap情報3072がCurrent Lap属性2031の値より小さい場合、次の構成要素に対する処理を行う(S37)。
前記ステップS33の判定において、格納位置ID3071がCurrent Position属性2032の値より大きい場合、データ検索部108は、Lap情報3072に「1」を加算した値とCurrent Lap属性2031の値の比較を行う(ステップS35)。Lap情報3072に「1」を加算した値がCurrent Lap属性2031の値以上である場合、データ検索部108は、検索結果として有効と判断し、結果リスト用のDBキャッシュ110に格納位置ID3071の値を登録する(ステップS36)。
最後に、データ検索部108は、前記ステップS36でDBキャッシュ110上に登録された検索対象の格納位置IDのすべてについて、表データ201の対象位置の情報を取得し、出力装置105へ検索結果の出力を行う(ステップS38)。
上記処理によって、検索要求を受け付けたデータベース管理システム101は、インデックス301に基づいて表データ201を検索し、検索結果を出力装置105に出力する。
図10は、本実施例において、データの検索を行う例を示した説明図である。検索条件として、値「2」が指定された場合、データ検索部108では、前記図9のステップS31により、リーフブロック306で「2」のレコードIDブロック307が算出される。図示の例では、VALUE2023=2に対応するレコードIDブロック307は、構成要素501、502を含んでいる。
次に構成要素501は、前記図9のステップS33により比較される。構成要素501の格納位置ID3071の値は、「1」であり、Current Position属性2032の値が「4」であることから、真と判定され前記ステップS34による比較が行われる。
次に、ステップS34では、構成要素501のLap情報3072の値が「2」であり、Current Lap属性2031の値が「3」であることから、偽と判定され構成要素501は検索結果から除外される。
次にデータ検索部108は次の構成要素502を取得して、前記ステップS33による比較が行われる。構成要素502の格納位置ID3071の値は、「4」であり、Current Position属性2032の値が「4」であることから、真と判定され前記ステップS34による比較が行われる。
ステップS34では、構成要素502のLap情報3072の値が「3」であり、Current Lap属性2031の値が「3」であることから、真と判定されて構成要素502の格納位置ID3071が検索結果に登録される。
最後にデータ検索部108では、前記ステップS37により、表データ201から検索結果が取得され出力装置105に出力される。
また、検索条件として、値「8」が指定された場合は、データ検索部108では、前記ステップS31により、レコードIDブロック307が算出される。図示の例では、VALUE2023=8に対応するレコードIDブロック307は、構成要素511、512を含む。
次にデータ検索部108では、構成要素511が前記ステップS33により比較される。構成要素511の格納位置ID3071の値は、「1」であり、Current Position属性2032の値が4であることから、真と判定され前記ステップS34による比較が行われる。
ステップS34では、構成要素511のLap情報3072の値が「1」であり、Current Lap属性2031の値が3であることから、偽と判定されて当該構成要素511は検索結果から除外される。
データ検索部108では、次の構成要素512に対して、前記ステップS33による比較が行われる。構成要素512の格納位置ID3071の値は、「5」であり、Current Position属性2032の値が「4」であることから、偽と判定され前記ステップS35による比較が行われる。ステップS34では、構成要素512のLap情報3072の値が1であり、Current Lap属性2031の値が3であることから、偽と判定され構成要素512の格納位置IDが検索結果から除外される。
最後に前記ステップS37では、該当の格納位置ID3071が検索結果用のDBキャッシュ110に登録されていないため、検索結果が0件として出力装置105に出力される。このように、インデックス301のレコードIDブロック307内に古い構成要素が残っていた場合でも、データ検索部108がLap情報3072に基づいて当該古い構成要素を読み飛ばすことで、ひとつのレコードIDブロック307に古い構成要素が残存していても検索結果から排除することができる。
また、図5、図6に示した通り、本発明では登録した表データ201に対応するインデックス301のレコードIDブロック307と同一ブロックに格納される構成要素が、表データ201への書き込み毎にメンテナンスされる仕組みとなっている。
しかし、インデックス301に利用される値は、本実施例で示したある一定範囲の数値データだけではなく、日時情報や文字列情報なども格納されるため、対象のリーフブロック306が再利用されない場合がある。この場合、本発明のインデックス301の効果が発揮されず、不要なデータが残ったままとなる場合がある。このようなデータを管理する場合では、インデックシングにハッシュインデックスを利用することで、対処することができる。
図11は、ハッシュインデックスのデータ構造の一例であり、表データ201のVALUE2023の情報に対してハッシュ値のインデックス301Aが構成されている状態を示す。各表データ201には、各レコードに対して二次記憶装置103上の物理的な格納位置を示す格納位置ID2021が付与されて記憶される。図11の例では、表データ201は図2と同様であり、図2に示したB−Treeのインデックス301に代わって、ハッシュインデックス301Aを採用したものである。
インデックス301Aはハッシュ関数330と、リーフブロック306と、レコードIDブロック307のデータブロックで構成される。ハッシュ関数330では、インデックス対象値を入力としてハッシュ値が出力される。
本実施例ではインデックス対象値としてVALUE2023の値を用いる例を示す。また、本実施例では、ハッシュ関数330が、インデックス対象値を10で除した余りを結果として算出する例を示す。したがって、インデックス要素のリーフブロック306は、0〜9の整数となる。
各リーフブロック306は、対応するハッシュ値の順に格納されており、ハッシュ値によって、該当するリーフブロック306が特定される。そして、レコードIDブロック307には、リーフブロック306に対応する構成要素3074〜3076が含まれる。
レコードIDブロック307の構成要素3074〜3076は、対象の値を格納している表データ201のレコードの格納位置ID3071と、インデックス対象値としてのVALUE3073と、表データ201に追加したときの循環回数を示すLap情報3072が、インデックス対象値順でソートされ、記録される。なお、レコードIDブロック307は、図2と同様に複数の構成要素(データブロック)を含むことができる。
たとえば、検索条件に数値「22」が指定されており、ハッシュ関数330が10の剰余で求めるものである場合、ハッシュ関数330によってハッシュ値が数値「2」と算出され、数値「2」の値を示すリーフブロック306の格納位置が算出され、さらに、レコードIDブロック307の構成要素3074が算出される。
算出されたレコードIDブロック307の構成要素3074に対して、データ検索部108は検索条件をキーにした二分木探索などを行い、該当ハッシュ値と等しい部分集合を取得し、記録された格納位置IDをもとに、表データ201の該当のレコードを順次取り出すことによって、ハッシュインデックスを利用した検索が実現される。
ハッシュインデックスを利用すると、異なる複数のインデックス対象値に対して同一のハッシュ値が得られる場合がある。これをシノニムと呼ぶ。たとえば、VALUE2023の値が「22」のときに得られるハッシュ値と、VALUE2023の値が「2」のときに得られるハッシュ値は同一の「2」となるためシノニムである。
そして、シノニムとなったレコードIDブロック307では、複数のデータが格納されるが、Lap情報3072の値によって、検索結果として利用するか否かを判定することができる。このため、本実施例のハッシュインデックスでは、レコードIDブロック307でシノニムを許容して複数のデータを格納することができる。
例えば、ハッシュ値=2のレコードIDブロック307の構成要素3074には、インデックス対象値が2、12、22、・・・となる表データ201のレコードの情報(VALUE3073)が登録される。
そのため、たとえば、新規データとして「22」の値を持つデータが表データ201に登録された場合、前記インデックスのメンテナンス処理(ステップS13)において、シノニムである「2」、「12」の構成要素もメンテナンス対象として処理されることが期待できる。
また、ハッシュインデックスを採用したことにより、インデックス301Aを利用した検索を行う際のレコードIDブロック307の構成要素の有効判定に、レコードIDブロック307に格納されたインデックス対象値の実値(VALUE3073)による判定が行われることは言うまでもない。
<まとめ>
本実施例のデータベース管理システム101のインデックス登録部1092は、表データ201にレコードが追加されると、追加されたレコードのインデクス対象値(VALUE2023)に対応するリーフブロック306のレコードIDブロック307をメンテナンスしてから、当該レコードIDブロック307に新たな格納位置ID2021とCurrent Lap属性2031を追加する。
インデックス301のメンテナンスは、表データ201を追加する度に、データを追加したレコードIDブロック307の単位で行うことができ、二次記憶装置103へのI/O回数を最小限にすることが可能となる。これにより、インデックス301のメンテナンスにかかる負荷を平滑化することができるため、データベース111でログデータを管理する場合などで性能確保が可能となる。これにより、従来のリレーショナルデータベースでは適用が困難だった、容量が限られた組み込み機器の二次記憶装置における産業機器の稼働データの蓄積や、情報システムのログデータなどの運用などといった分野に活用することが可能となる。
すなわち、インデックス301の追加とメンテナンスは、インデックス登録部1092がDBキャッシュ110に読み込んだレコードIDブロック307について行うため、前記従来例のように、二次記憶装置103上の二箇所への更新が不要になることでI/O回数を低減できる。
また、インデックス301のレコードIDブロック307内に古い構成要素が残っていた場合でも、データ検索部108がLap情報3072に基づいて当該古い構成要素を読み飛ばすことで、ひとつのレコードIDブロック307に古い構成要素が残存していても検索結果から排除することができる。すなわち、Lap情報3072をレコードIDブロック307の構成要素の有効または無効を判定する基準として利用することができる。
また、インデックス301Aにハッシュインデックスを取り入れることで、時間情報や文字列情報などの格納データの重複が発生しないデータに対するインデックスの管理においても、メンテナンスにかかる負荷を平滑化することができる。
また、上記実施例では、データベース111を二次記憶装置103に格納する例を示したが、これに限定されるものではなく、データベース111をメモリ102等の主記憶へ格納するインメモリデータベースに本発明を適用することができる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
1 データ管理装置
102 メモリ
103 二次記憶装置
100 プロセッサ
104 入力装置
105 出力装置
107 構文解析部
108 データ検索部108
109 データ更新部109
110 DBキャッシュ
111 データベース
201 表データ
203 属性管理情報
301 インデックス
1091 表データ登録部
1092 インデックス登録部

Claims (12)

  1. プロセッサとメモリとを有するデータ管理装置であって、
    データを格納する表データと、
    前記データを検索するインデックス要素を格納するインデックスと、
    前記表データとインデックスを管理するデータベース管理部と、を有し、
    前記表データは、
    前記データを格納するリングバッファと、
    前記データを追加した前記リングバッファの位置を保持する最終書き込み位置と、
    前記リングバッファを循環した回数を保持する第1の循環回数と、を有し、
    前記インデックスは、
    検索対象の値に対応して設定された前記インデックス要素と、
    前記インデックス要素に対応して、前記表データの位置を示す位置情報と、前記位置情報に対応するデータを追加したときの前記リングバッファの循環回数を保持する第2の循環回数とを含むデータブロックと、を有し、
    前記データベース管理部は、
    前記表データへデータを追加する際には、前記最終書き込み位置に前記データを追加してから、前記最終書き込み位置と前記第1の循環回数を更新する表データ登録部と、
    前記追加したデータに対応する前記インデックス要素で、当該インデックス要素に対応する前記データブロックを前記インデックスに追加するインデックス登録部と、
    を有することを特徴とするデータ管理装置。
  2. 請求項1に記載のデータ管理装置であって、
    前記インデックス登録部は、
    前記データブロックを追加する際に、前記データブロックのうち不要なデータブロックを前記第2の循環回数に基づいて特定し、当該特定されたデータブロックを削除することを特徴とするデータ管理装置。
  3. 請求項2に記載のデータ管理装置であって、
    前記インデックス登録部は、
    前記第1の循環回数と、前記第2の循環回数とを比較して、前記第1の循環回数と前記第2の循環回数が所定の関係であれば当該データブロックを不要なデータブロックと判定することを特徴とするデータ管理装置。
  4. 請求項2に記載のデータ管理装置であって、
    前記インデックス登録部は、
    前記データブロックを追加する前に、前記不要なデータブロックを削除することを特徴とするデータ管理装置。
  5. 請求項1に記載のデータ管理装置であって、
    前記インデックス要素は、
    前記データから所定のハッシュ関数で算出したハッシュ値を含み、同一のハッシュ値に複数のデータブロックを対応付けることを特徴とするデータ管理装置。
  6. 請求項1に記載のデータ管理装置であって、
    前記データベース管理部は、
    検索条件を受け付けて、当該検索条件に合致する前記インデックス要素を特定し、当該特定したインデックス要素に対応するデータブロックのうち不要なデータブロックを前記第2の循環回数に基づいて特定し、当該特定されたデータブロックを排除して前記検索条件に合致するデータブロックを検索する検索部を、さらに有することを特徴とするデータ管理装置。
  7. プロセッサとメモリとを有する計算機でデータベースの表データを管理するデータベースの管理方法であって、
    前記計算機が、リングバッファで構成された前記表データにデータを追加する第1のステップと、
    前記計算機が、前記データを追加した前記リングバッファの位置を保持する最終書き込み位置を更新し、前記リングバッファを循環した回数を保持する第1の循環回数を更新する第2のステップと、
    前記計算機が、前記データを検索するインデックス要素を格納したインデックスで、前記追加したデータに対応する前記インデックス要素を特定する第3のステップと、
    前記計算機が、前記特定したインデックス要素に対応して、前記データを追加した前記表データの位置を示す位置情報と、前記位置情報に対応するデータを追加したときの前記リングバッファの循環回数を保持する第2の循環回数とを含むデータブロックを追加する第4のステップと、
    を含むことを特徴とするデータベースの管理方法。
  8. 請求項7に記載のデータベースの管理方法であって、
    前記第4のステップは、
    前記データブロックを追加する際に、前記データブロックのうち不要なデータブロックを前記第2の循環回数に基づいて特定し、当該特定されたデータブロックを削除することを特徴とするデータベースの管理方法。
  9. 請求項8に記載のデータベースの管理方法であって、
    前記第4のステップは、
    前記第1の循環回数と、前記第2の循環回数とを比較して、前記第1の循環回数と前記第2の循環回数が所定の関係であれば当該データブロックを不要なデータブロックと判定することを特徴とするデータベースの管理方法。
  10. 請求項8に記載のデータベースの管理方法であって、
    前記第4のステップは、
    前記データブロックを追加する前に、前記不要なデータブロックを削除することを特徴とするデータベースの管理方法。
  11. 請求項7に記載のデータベースの管理方法であって、
    前記インデックス要素は、
    前記データから所定のハッシュ関数で算出したハッシュ値を含み、同一のハッシュ値に複数のデータブロックを対応付けることを特徴とするデータベースの管理方法。
  12. 請求項7に記載のデータベースの管理方法であって、
    検索条件を受け付けて、当該検索条件に合致する前記インデックス要素を特定し、当該特定したインデックス要素に対応するデータブロックのうち不要なデータブロックを前記第2の循環回数に基づいて特定し、当該特定されたデータブロックを排除して前記検索条件に合致するデータブロックを検索する第5のステップを、さらに含むことを特徴とするデータベースの管理方法。
JP2016049944A 2016-03-14 2016-03-14 データ管理装置及びデータベースの管理方法 Pending JP2017167654A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016049944A JP2017167654A (ja) 2016-03-14 2016-03-14 データ管理装置及びデータベースの管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016049944A JP2017167654A (ja) 2016-03-14 2016-03-14 データ管理装置及びデータベースの管理方法

Publications (1)

Publication Number Publication Date
JP2017167654A true JP2017167654A (ja) 2017-09-21

Family

ID=59913780

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016049944A Pending JP2017167654A (ja) 2016-03-14 2016-03-14 データ管理装置及びデータベースの管理方法

Country Status (1)

Country Link
JP (1) JP2017167654A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108829342A (zh) * 2018-05-09 2018-11-16 青岛海信宽带多媒体技术有限公司 一种日志存储方法、系统及存储装置
CN113297234A (zh) * 2020-09-30 2021-08-24 阿里云计算有限公司 一种数据处理方法、装置、设备及计算机可读存储介质
WO2023007812A1 (ja) * 2021-07-28 2023-02-02 日立Astemo株式会社 車載処理装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108829342A (zh) * 2018-05-09 2018-11-16 青岛海信宽带多媒体技术有限公司 一种日志存储方法、系统及存储装置
CN108829342B (zh) * 2018-05-09 2021-06-25 青岛海信宽带多媒体技术有限公司 一种日志存储方法、系统及存储装置
CN113297234A (zh) * 2020-09-30 2021-08-24 阿里云计算有限公司 一种数据处理方法、装置、设备及计算机可读存储介质
CN113297234B (zh) * 2020-09-30 2023-03-14 阿里云计算有限公司 一种数据处理方法、装置、设备及计算机可读存储介质
WO2023007812A1 (ja) * 2021-07-28 2023-02-02 日立Astemo株式会社 車載処理装置

Similar Documents

Publication Publication Date Title
US10620862B2 (en) Efficient recovery of deduplication data for high capacity systems
US10564850B1 (en) Managing known data patterns for deduplication
US10691693B2 (en) Cache for efficient record lookups in an LSM data structure
US9268804B2 (en) Managing a multi-version database
US10671642B2 (en) Copying data changes to a target database
US9747317B2 (en) Preserving past states of file system nodes
US9275095B2 (en) Compressing a multi-version database
US9569458B2 (en) Preserving a state using snapshots with selective tuple versioning
CN107491523B (zh) 存储数据对象的方法及装置
US8762333B2 (en) Apparatus and method for read optimized bulk data storage
US11580162B2 (en) Key value append
US10042870B2 (en) Supporting transient snapshot with coordinated/uncoordinated commit protocol
US9910877B2 (en) Query handling in a columnar database
JP6479186B2 (ja) 計算機システム及びデータベース管理方法
JP5999351B2 (ja) データベース処理装置、方法、プログラム及びデータ構造
US10007548B2 (en) Transaction system
JP2017167654A (ja) データ管理装置及びデータベースの管理方法
JP2016194826A (ja) データベースの処理制御方法、処理制御プロラム及びデータベースサーバ
JP6158361B2 (ja) 情報処理装置及び方法
KR101375794B1 (ko) 데이터베이스의 성능을 향상하기 위한 방법 및 장치
Fitzjarrell et al. Exadata Cell Wait Events