IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧

<>
  • 特開-更新方法、データベース更新装置 図1
  • 特開-更新方法、データベース更新装置 図2
  • 特開-更新方法、データベース更新装置 図3
  • 特開-更新方法、データベース更新装置 図4
  • 特開-更新方法、データベース更新装置 図5
  • 特開-更新方法、データベース更新装置 図6
  • 特開-更新方法、データベース更新装置 図7
  • 特開-更新方法、データベース更新装置 図8
  • 特開-更新方法、データベース更新装置 図9
  • 特開-更新方法、データベース更新装置 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024158839
(43)【公開日】2024-11-08
(54)【発明の名称】更新方法、データベース更新装置
(51)【国際特許分類】
   G06F 16/23 20190101AFI20241031BHJP
   G06F 16/2458 20190101ALI20241031BHJP
【FI】
G06F16/23
G06F16/2458
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2023074402
(22)【出願日】2023-04-28
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】黒川 能毅
(72)【発明者】
【氏名】樫山 俊彦
(72)【発明者】
【氏名】西川 記史
(72)【発明者】
【氏名】小澤 麻由子
(72)【発明者】
【氏名】茂木 和彦
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175CA09
(57)【要約】
【課題】データベースの更新に要する時間を短縮できる。
【解決手段】更新方法は、第1記憶装置に格納された複数のファイルを第2記憶装置にコピーし、第2記憶装置において更新されたファイルを第1記憶装置に書き戻すことで第1記憶装置に格納されるデータをコンピュータが更新する更新方法であって、複数のファイルはデータベースの一部を構成し、第2記憶装置に格納されたファイルへの書き込みを指示するクエリが、データベースのクラスターキーを用いた指定であるか否かを判断するクエリ判別処理と、第2記憶装置に格納されたファイルのうち、書き込み頻度が低いファイルを特定する低頻度ファイル特定処理と、低頻度ファイル特定処理により特定された書き込み頻度が低いファイルを第1記憶装置に書き込む、書き戻し処理と、を含む。
【選択図】図3
【特許請求の範囲】
【請求項1】
第1記憶装置に格納された複数のファイルを第2記憶装置にコピーし、前記第2記憶装置において更新された前記ファイルを前記第1記憶装置に書き戻すことで前記第1記憶装置に格納されるデータをコンピュータが更新する更新方法であって、
前記複数のファイルはデータベースの一部を構成し、
前記第2記憶装置に格納された前記ファイルへの書き込みを指示するクエリが、前記データベースのクラスターキーを用いた指定であるか否かを判断するクエリ判別処理と、
前記第2記憶装置に格納された前記ファイルのうち、書き込み頻度が低いファイルを特定する低頻度ファイル特定処理と、
前記低頻度ファイル特定処理により特定された書き込み頻度が低いファイルを前記第1記憶装置に書き込む、書き戻し処理と、を含む更新方法。
【請求項2】
請求項1に記載の更新方法において、
前記クエリ判別処理により前記クエリが前記データベースのクラスターキーを用いた指定であると判断された場合に、前記書き戻し処理を行う、更新方法。
【請求項3】
請求項1に記載の更新方法において、
前記第2記憶装置における前記ファイルが更新されるごとに前記ファイルの識別子を記録することで、更新された前記ファイルの順番を記録する書き出しLRUを更新する書き出しLRU更新処理をさらに含み、
前記低頻度ファイル特定処理には、前記書き出しLRUの参照を含む、更新方法。
【請求項4】
請求項3に記載の更新方法において、
前記書き出しLRUには、トランザクションが開始されて以後の前記ファイルの更新の順番が記録され、
トランザクションがコミットされると、前記第2記憶装置に格納された前記ファイルのうち、更新後に前記第1記憶装置に書き込まれていない前記ファイルの全てを前記第1記憶装置に書き込むコミット時処理をさらに含む、更新方法。
【請求項5】
請求項3に記載の更新方法において、
前記ファイルのそれぞれは、アドレスが付された仮想的なメモリ空間である仮想メモリ空間における特定の領域を切り出したものであり、
前記書き戻し処理において前記第1記憶装置に書き込む書き込み対象ファイルは、前記クエリ判別処理において判断に用いた前記クエリが書き込む前記仮想メモリ空間におけるアドレスに対して、前記書き込み対象ファイルが対応する前記仮想メモリ空間におけるアドレスと所定値以上異なることを追加の条件とする、更新方法。
【請求項6】
第1記憶装置に格納された複数のファイルを第2記憶装置にコピーし、前記第2記憶装置において更新された前記ファイルを前記第1記憶装置に書き戻すことで前記第1記憶装置に格納されるデータを更新するデータベース更新装置であって、
前記複数のファイルはデータベースの一部を構成し、
前記第2記憶装置に格納された前記ファイルへの書き込みを指示するクエリが、前記データベースのクラスターキーを用いた指定であるか否かを判断するクエリ判別部と、
前記第2記憶装置に格納された前記ファイルのうち、書き込み頻度が低いファイルを特定する低頻度ファイル特定部と、
前記低頻度ファイル特定部により特定された書き込み頻度が低いファイルを前記第1記憶装置に書き込む、書き戻し部と、を備えるデータベース更新装置。
【請求項7】
請求項6に記載のデータベース更新装置において、
前記書き戻し部は、前記クエリ判別部により前記クエリが前記データベースのクラスターキーを用いた指定であると判断された場合に、前記低頻度ファイル特定部により特定された書き込み頻度が低いファイルを前記第1記憶装置に書き込む、データベース更新装置。
【請求項8】
請求項6に記載のデータベース更新装置において、
前記第2記憶装置における前記ファイルが更新されるごとに前記ファイルの識別子を記録することで、更新された前記ファイルの順番を記録する書き出しLRUを更新する書き出しLRU更新処理をさらに含み、
前記低頻度ファイル特定部は、前記書き出しLRUを参照することで書き込み頻度が低いファイルを特定する、データベース更新装置。
【請求項9】
請求項8に記載のデータベース更新装置において、
前記書き出しLRUには、トランザクションが開始されて以後の前記ファイルの更新の順番が記録され、
トランザクションがコミットされると、前記第2記憶装置に格納された前記ファイルのうち、更新後に前記第1記憶装置に書き込まれていない前記ファイルの全てを前記第1記憶装置に書き込むコミット時処理をさらに含む、データベース更新装置。
【請求項10】
請求項8に記載のデータベース更新装置において、
前記ファイルのそれぞれは、アドレスが付された仮想的なメモリ空間である仮想メモリ空間における特定の領域を切り出したものであり、
前記書き戻し部において前記第1記憶装置に書き込む書き込み対象ファイルは、前記クエリ判別部において判断に用いた前記クエリが書き込む前記仮想メモリ空間におけるアドレスに対して、前記書き込み対象ファイルが対応する前記仮想メモリ空間におけるアドレスと所定値以上異なることを追加の条件とする、データベース更新装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、更新方法、およびデータベース更新装置に関する。
【背景技術】
【0002】
データベースは信頼性が求められるため、データベース利用者と物理的に離れたデータセンターなどに格納されることが一般的である。そのため、データベース利用者とデータベースとの間の通信には、距離などに起因する時間を要することが多く、この対策としてデータベース利用者の側にキャッシュを設ける構成が知られている。特許文献1には、データベースの更新処理を行うOLTP(Online Transaction Process)と、前記データベースに蓄積したデータの集計処理を行うOLAP(Online Analytical Processing)と、を備えるデータベース管理システムであって、前記OLTPのための行指向データを格納する不揮発性メモリと、前記不揮発性メモリ上で、前記OLTPがデータを更新して行指向に保持し、行指向に保持したデータを所定量蓄積した後、所定量蓄積したデータを揮発性メモリに列単位のブロックで格納するとともに、当該列単位のブロックを前記OLAPのために前記不揮発性メモリとは異なる二次記憶装置に格納するメモリ管理手段と、を備えることを特徴とするデータベース管理システムが開示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2020-13318号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1に記載されている発明では、データベースの更新に要する時間の短縮に検討の余地がある。複数の更新を行う場合は、更新の都度、前述の不揮発メモリにある更新後データを前述の二次記憶装置に格納する方法があるが、複数の更新が同一の不揮発メモリの領域にあると、同一領域のデータを何度も二次記憶装置に送ることとなる。一般に二次記憶装置は不揮発メモリより2桁以上遅いため、この繰り返される書き込みがネックとなり、データベース更新に時間を要すことになる。本発明の課題はこの書き込みのボトルネックを解消することにある。
【課題を解決するための手段】
【0005】
本発明の第1の態様による更新方法は、第1記憶装置に格納された複数のファイルを第2記憶装置にコピーし、前記第2記憶装置において更新された前記ファイルを前記第1記憶装置に書き戻すことで前記第1記憶装置に格納されるデータをコンピュータが更新する更新方法であって、前記複数のファイルはデータベースの一部を構成し、前記第2記憶装置に格納された前記ファイルへの書き込みを指示するクエリが、前記データベースのクラスターキーを用いた指定であるか否かを判断するクエリ判別処理と、前記第2記憶装置に格納された前記ファイルのうち、書き込み頻度が低いファイルを特定する低頻度ファイル特定処理と、前記低頻度ファイル特定処理により特定された書き込み頻度が低いファイルを前記第1記憶装置に書き込む、書き戻し処理と、を含む。
本発明の第1の態様によるデータベース更新装置は、第1記憶装置に格納された複数のファイルを第2記憶装置にコピーし、前記第2記憶装置において更新された前記ファイルを前記第1記憶装置に書き戻すことで前記第1記憶装置に格納されるデータを更新するデータベース更新装置であって、前記複数のファイルはデータベースの一部を構成し、前記第2記憶装置に格納された前記ファイルへの書き込みを指示するクエリが、前記データベースのクラスターキーを用いた指定であるか否かを判断するクエリ判別部と、前記第2記憶装置に格納された前記ファイルのうち、書き込み頻度が低いファイルを特定する低頻度ファイル特定部と、前記低頻度ファイル特定処理により特定された書き込み頻度が低いファイルを前記第1記憶装置に書き込む、書き戻し部と、を備える。
【発明の効果】
【0006】
本発明によれば、データベースの更新に要する時間を短縮できる。
【図面の簡単な説明】
【0007】
図1】データベースシステムの構成図
図2】サーバのハードウエア構成図
図3】データベース管理部の構成図
図4】書き出しLRUの構造を示す図
図5】インデックス情報の構造を示す図
図6】クエリ実行モジュールの処理を示すフローチャート
図7】タイミング生成モジュールの処理を示すフローチャート
図8図7における先行書き出し処理の詳細を示すフローチャート
図9】変形例1における先行書き出し処理の詳細を示すフローチャート
図10】変形例2におけるデータベースシステムの構成図
【発明を実施するための形態】
【0008】
―第1の実施の形態―
以下、図1図7を参照して、更新方法、データベース更新装置の第1の実施の形態を説明する。
【0009】
図1は、データベースシステム1000の構成図である。データベースシステム1000は、サーバ1と、低速ストレージ2と、クライアント9と、を含む。サーバ1および低速ストレージ2は、ネットワーク3を介して接続される。ネットワーク3はインターネットでもよいし、広域網、閉域網、およびローカル通信網のいずれでもよい。クライアント9はサーバ1に対して、後述するデータベース管理部10への書き込み指示を含むクエリ112を送信する。
【0010】
サーバ1は、データベース管理部10および高速ストレージ11を備える。データベース管理部10の詳細な構成は後述するが、少なくともメモリ120を備える。高速ストレージ11はたとえばSSD(Solid State Drive)やSSDのアレイであり、メモリ120はたとえばDRAMである。なお以下では、低速ストレージ2を「第1記憶装置」とも呼び、高速ストレージ11を「第2記憶装置」とも呼ぶ。
【0011】
低速ストレージ2は、ハードディスクドライブ(以下、「HDD」とも呼ぶ)などの不揮発性記憶装置を備える。低速ストレージ2は、ネットワーク接続機能を有するストレージ製品でもよいし、オンラインストレージサービスとして提供される記憶領域でもよい。図1では低速ストレージ2の概念を示しているにすぎず、低速ストレージ2は複数のハードウエアで構成されてもよいし、異なる地理環境で冗長構成が組まれてもよい。
【0012】
メモリ120、高速ストレージ11、および低速ストレージ2は、記憶領域である点で共通し、アクセス速度に大きな相違点がある。具体的には、メモリ120へのアクセスが最も早く、高速ストレージ11が中程度であり、低速ストレージ2へのアクセスが最も遅い。低速ストレージ2には、データベース管理部10が扱う全データが格納される。高速ストレージ11およびメモリ120には、データベース管理部10が扱うデータの一部が格納される。データベース管理部10は、全データをキャッシュファイル7に分割して保存しており、キャッシュファイル7は複数のページ71から構成される。
【0013】
メモリ120には複数のページ71が格納される。高速ストレージ11および低速ストレージ2には複数のキャッシュファイル7が格納される。高速ストレージ11は、メモリ120との間でページ71の単位でデータの入出力があり、低速ストレージ2との間でキャッシュファイル7の単位でデータの入出力がある。高速ストレージ11とメモリ120との間での直接のデータの入出力はない。なお、図1におけるメモリ120に格納されるページ71の数、それぞれのキャッシュファイル7を構成するページ71の数、高速ストレージ11に格納されるキャッシュファイル7の数、および低速ストレージ2に格納されるキャッシュファイル7の数は例示にすぎない。
【0014】
データベース管理部10は、仮想的なメモリ空間である仮想メモリ空間に対してデータの読み書きを行う。データベース管理部10は、この仮想メモリ空間を所定の粒度で区切り、区切られた仮想メモリ空間の領域に格納されたデータを1つのファイルとして扱う。このファイルのファイル名は、区切られた仮想メモリ空間のアドレスに基づき決定される。たとえば、区切られた仮想メモリ空間の先頭アドレスそのものをファイル名としてもよいし、区切られた仮想メモリ空間の先頭アドレスを所定の値で除した値をファイル名としてもよいし、区切られた仮想メモリ空間の中央や末尾のアドレスをファイル名としてもよい。いずれの命名規則を採用する場合でも、仮想メモリ空間における連続する領域は、キャッシュファイル7のファイル名が連続する。
【0015】
図2は、サーバ1のハードウエア構成図である。サーバ1は、中央演算装置であるCPU41、読み出し専用の記憶装置であるROM42、読み書き可能な記憶装置であるRAM43、高速ストレージ11、および通信装置45を備える。図1に示したメモリ120は、RAM43の一部の領域である。RAM43はたとえば、DRAM(Dynamic Random Access Memory)である。通信装置45はネットワーク3を介した低速ストレージ2との通信を実現する。
【0016】
CPU41がROM42に格納されるプログラムをRAM43に展開して実行することで様々な演算を行う。サーバ1は、CPU41、ROM42、およびRAM43の組み合わせの代わりに書き換え可能な論理回路であるFPGA(Field Programmable Gate Array)や特定用途向け集積回路であるASIC(Application Specific Integrated Circuit)により実現されてもよい。またサーバ1は、CPU41、ROM42、およびRAM43の組み合わせの代わりに、異なる構成の組み合わせ、たとえばCPU41、ROM42、RAM43とFPGAの組み合わせにより実現されてもよい。
【0017】
図3はデータベース管理部10の構成図である。データベース管理部10は、クエリ実行モジュール104と、スキャン実行モジュール105と、トランザクション実行モジュール106と、インポート実行モジュール107と、データ入出力モジュール108と、タイミング生成モジュール109と、管理バッファ110と、インポート向けバッファ111と、クエリプラン113と、インデックス情報114と、書き出しLRU115と、を備える。
【0018】
クライアント9は、不図示のユーザからデータベース管理部10の操作を受け付けて、クエリ112という形にして、データベース管理部10に問い合わせる。クライアント9はまた、データベース管理部10から操作の結果を受け付け、ユーザに提示する。サーバ1は、データベース管理部10が動作するコンピュータハードウェアであり、高速ストレージ11を内蔵する。サーバ1は、ネットワーク3で外部の端末であるクライアント9や低速ストレージ2に接続される。データベース管理部10はクライアント9からクエリ112を受け付け、各種モジュールを用いてデータの検索や書き込みを行い、処理結果をクライアント9に返す。
【0019】
クエリ実行モジュール104は、クライアント9から受け取ったクエリ112を解釈し、スキャン実行モジュール105、トランザクション実行モジュール106、およびインポート実行モジュール107が実行可能な命令列であるクエリプラン113に変換する。クエリ実行モジュール104は、クエリプラン113を元にスキャン実行モジュール105、トランザクション実行モジュール106、およびインポート実行モジュール107に実行コマンドを順番に送信する。
【0020】
スキャン実行モジュール105は、クエリ実行モジュール104が生成するクエリプラン113内のスキャン実行コマンドを受けて、データベース管理部10内に保存されるデータのスキャン、すなわち検索を実行する。スキャン実行モジュール105による検索結果はクエリ実行モジュール104に返され、集計されて最終的にクライアント9に返される。
【0021】
トランザクション実行モジュール106は、クエリ実行モジュール104が生成するクエリプラン113内のトランザクション実行コマンドに基づき、データベース管理部10に保存されているデータの選択されている特定行に対してトランザクションを実行する。トランザクション実行モジュール106によるトランザクションの実行結果はクエリ実行モジュール104に返され、最終的にクライアント9に返される。インポート実行モジュール107は、クエリ実行モジュール104が生成するクエリプラン113内のインポート実行コマンドに基づき、データベース管理部10の外部からのデータを読み込み、データベース管理部10の内部データとして保存する。
【0022】
データ入出力モジュール108は、スキャン実行モジュール105、トランザクション実行モジュール106、およびインポート実行モジュール107からデータ読み出しや書き込みの要求を受け付ける。データ入出力モジュール108は、読み込みや書き込みの対象となるページ71(以下、「対象ページ」と呼ぶ)が管理バッファ110に存在するか否かを判定し、対象ページが管理バッファ110に存在する場合は管理バッファ110からデータを読み出し、対象ページが管理バッファ110に存在しない場合には次の判断を行う。
【0023】
すなわちデータ入出力モジュール108は、高速ストレージ11に対象ページが存在するか否かを判定し、高速ストレージ11に対象ページが存在する場合は高速ストレージ11から読み出し、高速ストレージ11に対象ページが存在しない場合は低速ストレージ2から対象ページを含むキャッシュファイル7を読み出す。高速ストレージ11から読み出されたキャッシュファイル内の必要なデータは本管理バッファ110内に保存される。低速ストレージ2からキャッシュファイル7が読み出された場合は、当該キャッシュファイル7を高速ストレージ11にも保存する。なお、低速ストレージ2への書き出しはタイミング生成モジュール109の主導で行われる。具体的にはデータ入出力モジュール108は、タイミング生成モジュール109が決定したタイミングで、タイミング生成モジュール109が決定した書き出し対象を低速ストレージ2へ書き込む。
【0024】
タイミング生成モジュール109は、データ入出力モジュール108からデータ書き出し命令を受けると、書き出し対象のキャッシュファイル7が高速ストレージ11に存在するか否かを判定する。タイミング生成モジュール109は、対象キャッシュが高速ストレージ11に存在しない場合は低速ストレージ2から対象キャッシュを読み出して高速ストレージ11に保存して、この対象キャッシュにデータの書き出しを行う。その後にタイミング生成モジュール109は、特定の条件を満たす場合に低速ストレージ2へ対象キャッシュの書き出しを行う。タイミング生成モジュール109は、この判断のためにインデックス情報114および書き出しLRU115を参照する。タイミング生成モジュール109の動作は後に詳述する。
【0025】
管理バッファ110は、スキャン実行モジュール105やトランザクション実行モジュール106が高速に読み書き可能な記憶領域である。管理バッファ110には、スキャン実行モジュール105やトランザクション実行モジュール106による読み出し要求により得たテーブルデータや管理データが一時保存される。また管理バッファ110には、スキャン実行モジュール105やトランザクション実行モジュール106による書き込み要求による書き込みデータが一時保存される。前述のとおり、管理バッファ110にはページ71の単位でデータが保管され、適切なタイミングで管理バッファ110のページ71が高速ストレージ11の適切なキャッシュファイル7に書き込まれる。高速ストレージ11から低速ストレージ2へのキャッシュファイル7の書き込みは、タイミング生成モジュール109の指示により行われる。
【0026】
インポート向けバッファ111は、インポート実行モジュール107が使用する書き出しデータバッファである。クエリ112は、クライアント9から送信される、データベース管理部10に向けた要求である。クエリ112はたとえば、データベースデータの検索、結合、インポートなどの要求処理である。一般に1つのクエリ112には複数の要求処理が組み合わされているが、1つのクエリ112に含まれる要求処理の数は特に限定されない。クエリプラン113は、クライアント9から送付されるクエリ112をクエリ実行モジュール104が解釈することで生成される。クエリプラン113は、複雑な要求であるクエリ112が分解されたものであり、単純なスキャン処理やトランザクション処理のリストである。
【0027】
インデックス情報114は、データベース管理部10のデータを高速に処理するために、データを整理しその結果をインデックス情報114としてデータベース内に保存する。インデックス情報114を使用すると、データの並びが局所的であるかどうかが判定可能となる。書き出しLRU115は、高速ストレージ11内のキャッシュファイル7へのデータ書き出し履歴が記録されたLRU(Least Recently Used)リストである。書き出しLRU115は高速ストレージ11に格納されたキャッシュファイル7へのデータ書き出しが起こるたびに更新される。書き出しLRU115には、最後にアクセスされたキャッシュファイル7から順番にリストが並ぶように構成されている。
【0028】
図4は、書き出しLRU115の構造を示す図である。書き出しLRU115は、たとえば有限長のリストであり、複数のエントリから構成される。書き出しLRU115を構成するそれぞれのエントリは、キャッシュファイル名1151と、ダーティビット1152と、次エントリポインタ1153と、から構成される。
【0029】
キャッシュファイル名1151は、データベース管理部10から書き込みがされたキャッシュファイル7の名前である。ダーティビット1152は、データベース管理部10からの書き込みを低速ストレージ2へ反映したか否かを示すブール値である。キャッシュファイル7に対してデータベース管理部10からの書き込みが行われるとダーティビット1152は「1」に設定され、低速ストレージ2に書き出されると「0」に設定される。次エントリポインタ1153は、次のエントリが格納されるアドレスである。ただし最後のエントリにおける次エントリポインタ1153は、後続のエントリが存在しないことを示す終端ポインタである。
【0030】
書き出しLRU115は、データベース管理部10から高速ストレージ11に対して書き込みが行われるたびに更新される。ここで、書き込みがされたキャッシュファイル7を「書き込み対象ファイル」と呼ぶと、書き込み対象ファイルがキャッシュファイル名1151として書き出しLRU115のいずれかのエントリに記載されていたか否かにより書き出しLRU115の更新方法が異なる。
【0031】
まず、書き込み対象ファイルがキャッシュファイル名1151として書き出しLRU115のいずれかのエントリに記載されていた場合を説明する。ただしここでは、書き込み対象ファイルがキャッシュファイル名1151として記載されたエントリを「対象エントリ」と呼ぶ。この場合は、対象エントリのダーティビット1152は「1」に設定され、対象エントリの次エントリポインタ1153は、直前に先頭であったエントリのアドレスに設定される。
【0032】
次に、書き込み対象ファイルがキャッシュファイル名1151として書き出しLRU115のいずれのエントリにも記載されていなかった場合を説明する。この場合は新たにエントリが作成される。そのエントリのキャッシュファイル名1151は書き込み対象ファイルに設定され、ダーティビット1152は「1」に設定され、次エントリポインタ1153は直前に先頭であったエントリのアドレスに設定される。なお、本実施の形態では書き出しLRU115はリストにより実現しているが、リスト以外の手段、たとえば配列により実現してもよい。
【0033】
図5は、インデックス情報114の構造を示す図である。インデックス情報114は複数のエントリから構成される。それぞれのエントリは、キャッシュファイルIDと、インデックスIDと、アドレス最小値と、アドレス最大値とから構成される。キャッシュファイルIDは、キャッシュファイル7の識別子、すなわちキャッシュファイル7のファイル名である。インデックスIDは、インデックスの識別子である。アドレス最小値およびアドレス最大値は、仮想メモリ空間におけるアドレスの範囲である。
【0034】
図6は、クエリ実行モジュール104の処理を示すフローチャートである。クエリ実行モジュール104は、まずステップS201においてクライアント9からクエリ112を受信する。続くステップS202ではクエリ実行モジュール104は、クエリ112を解釈してクエリプラン113を作成する。このクエリプラン113は、後述するステップS208において使用される。続くステップS203ではクエリ実行モジュール104は、ステップS202において作成したクエリプラン113を実行することでクエリ112を処理する。
【0035】
図7は、タイミング生成モジュール109の処理を示すフローチャートである。まずステップS204ではタイミング生成モジュール109は、クエリ実行モジュール104またはデータ入出力モジュール108からトランザクションの更新処理におけるページ71の高速ストレージ11への書き出し要求を受ける。続くステップS205ではタイミング生成モジュール109は、ページ71を書き出す対象のキャッシュファイル7をインデックス情報114を参照して特定し、そのキャッシュファイル7が高速ストレージ11に存在するかを判断する。タイミング生成モジュール109は、対象のキャッシュファイル7が高速ストレージ11に存在すると判断する場合はステップS207に進み、対象のキャッシュファイル7が高速ストレージ11に存在しないと判断する場合はステップS206に進む。
【0036】
ステップS206ではタイミング生成モジュール109は、対象のキャッシュファイル7を低速ストレージ2から読み出して高速ストレージ11に格納し、ステップS207に進む。ステップS207ではタイミング生成モジュール109は、高速ストレージ11に格納されている対象のキャッシュファイル7に当該ページ71を書き出す。続くステップS207ではタイミング生成モジュール109は、書き出しLRU115を更新する。すなわち、ステップS207における書き込み対象のキャッシュファイル7が一番最後に使用されたことを示すように、書き出しLRU115が更新される。
【0037】
続くステップS208ではタイミング生成モジュール109は、クエリプラン113を参照し、現在のトランザクション更新の検索が、クラスターキーを使用しているか否かを判断する。この判断は、現在のトランザクション更新の検索がクラスタを構成しているか否か、または検索対象となるキャッシュファイル7が特定可能か否か、とも言い換えることができる。タイミング生成モジュール109は、現在のトランザクション更新の検索がクラスターキーを使用していると判断する場合はステップS220に進み、現在のトランザクション更新の検索がクラスターキーを使用していないと判断する場合はステップS214に進む。なお以下ではステップS208の処理を「クエリ判別処理」とも呼び、ステップS208の処理を実現する機能を「クエリ判別部」とも呼ぶ。
【0038】
ステップS220は先行書き出し処理である。先行書き出し処理の詳細は図8を参照して後に説明する。タイミング生成モジュール109は、先行書き出し処理が終了するとステップS214に進む。
【0039】
ステップS214ではタイミング生成モジュール109は、トランザクション処理のコミットがされたか否かを判断する。タイミング生成モジュール109は、コミットされたと判断する場合はステップS215に進み、コミットされていないと判断する場合はステップS204に戻る。ステップS215ではタイミング生成モジュール109は、高速ストレージ11に格納されており、まだ書き出されていない全てのキャッシュファイル7を低速ストレージ2へ書き出しを行い、図7に示す処理を終了する。なお以下ではステップS215の処理を「コミット時処理」とも呼び、ステップS215の処理を実現する機能を「コミット時処理部」とも呼ぶ。
【0040】
図8は、図7における先行書き出し処理の詳細を示すフローチャートである。ステップS221ではタイミング生成モジュール109は、処理対象とする書き出しLRU115のエントリである対象エントリを書き出しLRU115の先頭のエントリに設定してステップS222に進む。ステップS222ではタイミング生成モジュール109は、対象エントリが先頭から所定の範囲内であるか否かを判断する。所定の範囲とは、予め定められた定数であり、たとえば「100」である。タイミング生成モジュール109は、対象エントリが先頭から所定の範囲内であると判断する場合はステップS224に進み、対象エントリが先頭から所定の範囲内ではないと判断する場合はステップS223に進む。なお以下ではステップS222の処理を「低頻度ファイル特定処理」とも呼び、ステップS222の処理を実現する機能を「低頻度ファイル特定部」とも呼ぶ。
【0041】
ステップS223ではタイミング生成モジュール109は、対象エントリに対応するキャッシュファイル7を低速ストレージ2へ書き出してステップS224に進む。なお以下ではステップS223の処理を「書き戻し処理」とも呼び、ステップS223の処理を実現する機能を「書き戻し部」とも呼ぶ。ステップS224ではタイミング生成モジュール109は、対象エントリがリストの末尾、すなわち書き出しLRU115の末尾のエントリであるか否かを判断する。タイミング生成モジュール109は、対象エントリがリストの末尾であると判断する場合は図8に示す処理を終了し、対象エントリがリストの末尾ではないと判断する場合はステップS225に進む。ステップS225ではタイミング生成モジュール109は、対象エントリを書き出しLRU115における次のエントリに更新してステップS222に戻る。
【0042】
なお、トランザクション処理がコミットされずにロールバックが必要になった場合には、公知の様々な手法を用いて対処できる。たとえば、低速ストレージ2がスナップショットやシャドーコピーと呼ばれる、ファイルを更新前の状態に戻す機能を有する場合にはこの機能を用いてもよい。また低速ストレージ2への書き込みの際に、キャッシュファイル7を上書きするのではなく、タイムスタンプ等を付加した別名で保存しておき、コミット時に本来のファイル名に変更する運用とすれば、別名で保存したファイルを削除することでロールバック相当となる。
【0043】
上述した第1の実施の形態によれば、次の作用効果が得られる。
(1)サーバ1のデータベース管理部10が実行する低速ストレージ2に格納されるデータの更新方法は次のクエリ判別処理、低頻度ファイル特定処理、および書き戻し処理を含む。サーバ1は、低速ストレージ2に格納された複数のファイルを高速ストレージ11にコピーし、高速ストレージ11において更新されたファイルを低速ストレージ2に書き戻すことで低速ストレージ2に格納されるデータを更新する。低速ストレージ2に格納される複数のキャッシュファイル7はデータベースの一部を構成する。高速ストレージ11に格納されたファイルへの書き込みを指示するクエリ112が、データベースのクラスターキーを用いた指定であるか否かを判断するクエリ判別処理(図7のステップS208)と、高速ストレージ11に格納されたファイルのうち、書き込み頻度が低いファイルを特定する低頻度ファイル特定処理(図8のステップS222)と、低頻度ファイル特定処理により特定された書き込み頻度が低いファイルを低速ストレージ2に書き込む、書き戻し処理(図8のステップS223)と、を含む。そのため、一部のキャッシュファイル7を低速ストレージ2に先行して書き込むことで、データベースの更新に要する時間を短縮できる。
【0044】
(2)高速ストレージ11におけるファイルが更新されるごとにファイルの識別子を記録することで、更新されたファイルの順番を記録する書き出しLRU115を更新する書き出しLRU更新処理(図7のステップS207)を含む。低頻度ファイル特定処理には、書き出しLRU115の参照を含む。そのため、書き出しLRU115を用いて高速ストレージ11におけるキャッシュファイル7への書き込みを記録し、最近の更新がないキャッシュファイル7を特定できる。
【0045】
(3)書き出しLRU115には、トランザクションが開始されて以後のファイルの更新の順番が記録される。トランザクションがコミットされると(S214:YES)、高速ストレージ11に格納されたキャッシュファイル7のうち、更新後に低速ストレージ2に書き込まれていないキャッシュファイル7の全てを低速ストレージ2に書き込むコミット時処理(図7のステップS215)を含む。
【0046】
(変形例1)
図9は、変形例1における先行書き出し処理の詳細を示すフローチャートである。第1の実施の形態に示した図8と本変形例における図9との相違点は、ステップS229が追加されている点である。ステップS222において否定判断されると、ステップS229に進む。ステップS229ではタイミング生成モジュール109は、書き出しLRU115における最新のエントリと、対象エントリの対応するアドレスが所定値以上異なるか否かを判断する。タイミング生成モジュール109は、最新のエントリと対象エントリの対応するアドレスが所定値以上異なると判断する場合はステップS223に進み、最新のエントリと対象エントリの対応するアドレスの差異が所定値未満であると判断する場合はステップS224に進む。
【0047】
この変形例1によれば、次の作用効果が得られる。
(4)キャッシュファイル7のそれぞれは、アドレスが付された仮想的なメモリ空間である仮想メモリ空間における特定の領域を切り出したものである。書き戻し処理において低速ストレージ2に書き込む書き込み対象ファイルは、クエリ判別処理において判断に用いたクエリ112が書き込む仮想メモリ空間におけるアドレスに対して、書き込み対象ファイルが対応する仮想メモリ空間におけるアドレスと所定値以上異なること(図9のステップS229)を追加の条件とする。そのため、最新エントリと仮想アドレスが比較的近いキャッシュファイル7、換言するとこれから再び書き込まれる可能性が高いと想定されるキャッシュファイル7の低速ストレージ2への書き出し(S223)を抑制できる。
【0048】
(変形例2)
図10は変形例2におけるデータベースシステム1000Aの構成図である。上述した実施の形態との相違点は、サーバ1のメモリ120にページ71の単位ではなくキャッシュファイル7の単位でデータが格納される点である。ただしその他の構成に相違はなく、図6図8に示したフローチャートの処理も同様である。
【0049】
(変形例3)
上述した実施の形態では、低速ストレージ2はサーバ1とネットワーク3を介して接続された。しかし低速ストレージ2はネットワーク3を介さずにサーバ1と接続されてもよいし、低速ストレージ2はサーバ1に内蔵されてもよい。また、高速ストレージ11がサーバ1の外部に配され、低速ストレージ2と同様にネットワーク3を介してサーバ1と接続されてもよい。メモリ120、高速ストレージ11、および低速ストレージ2は、応答時間が異なる点が必須の構成要件であり、物理的な位置関係は何ら限定されない。応答時間の差異は、物理的な距離に起因してもよいし、ハードウエア性能に起因してもよいし、ソフトウエア処理に起因してもよい。ソフトウエア処理に起因する応答時間の差は、たとえば処理の優先度の高低が原因となりうる。
【0050】
(変形例4)
上述した実施の形態では、データベース管理部10が高速ストレージ11への書き出しは、書き出しLRU115を用いて管理された。しかし書き出しLRU115を用いることは必須の構成要件ではなく、図8のステップS222の判断が可能な情報が作成されればよい。たとえば、直近に更新された所定数のキャッシュファイル7のファイル名のリストを保持してもよいし、直近の所定回数の書き込みにおいて書き込みがされていないキャッシュファイル7のリストを保持してもよい。
【0051】
(変形例5)
上述した実施の形態では、ステップS208において肯定判断がされた場合のみステップS220における先行書き出し処理が実行された。しかしステップS208が肯定判断された場合以外でもステップS220を実行してもよい。たとえば、ステップS207が実行されたら常にステップS220を実行してもよいし、ステップS207が所定回数、たとえば10回実行されるたびにステップS220を実行してもよい。さらに、ステップS207の実行とは関係なく、所定の時間ごと、たとえば30秒ごとにステップS220を実行してもよい。
【0052】
上述した各実施の形態および変形例において、機能ブロックの構成は一例に過ぎない。別々の機能ブロックとして示したいくつかの機能構成を一体に構成してもよいし、1つの機能ブロック図で表した構成を2以上の機能に分割してもよい。また各機能ブロックが有する機能の一部を他の機能ブロックが備える構成としてもよい。
【0053】
上述した各実施の形態および変形例において、サーバ1のプログラムはROM42に格納されるとしたが、プログラムは不図示の不揮発性記憶装置に格納されていてもよい。また、サーバ1が不図示の入出力インタフェースを備え、必要なときに入出力インタフェースとサーバ1が利用可能な媒体を介して、他の装置からプログラムが読み込まれてもよい。ここで媒体とは、例えば入出力インタフェースに着脱可能な記憶媒体、または通信媒体、すなわち有線、無線、光などのネットワーク、または当該ネットワークを伝搬する搬送波やディジタル信号、を指す。また、プログラムにより実現される機能の一部または全部がハードウエア回路やFPGAにより実現されてもよい。
【0054】
上述した各実施の形態および変形例は、それぞれ組み合わせてもよい。上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。
【符号の説明】
【0055】
1 :サーバ
2 :低速ストレージ
7 :キャッシュファイル
9 :クライアント
10 :データベース管理部
11 :高速ストレージ
43 :RAM
71 :ページ
104 :クエリ実行モジュール
105 :スキャン実行モジュール
106 :トランザクション実行モジュール
107 :インポート実行モジュール
108 :データ入出力モジュール
109 :タイミング生成モジュール
110 :管理バッファ
112 :クエリ
114 :インデックス情報
120 :メモリ
1000:データベースシステム
1151:キャッシュファイル名
1152:ダーティビット
1153:次エントリポインタ
109 :タイミング生成モジュール
115 :書き出しLRU
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10