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

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

▶ 株式会社日立製作所の特許一覧 ▶ 国立大学法人 東京大学の特許一覧

<>
  • 特開-データベース管理装置及び方法 図1
  • 特開-データベース管理装置及び方法 図2
  • 特開-データベース管理装置及び方法 図3
  • 特開-データベース管理装置及び方法 図4
  • 特開-データベース管理装置及び方法 図5
  • 特開-データベース管理装置及び方法 図6A
  • 特開-データベース管理装置及び方法 図6B
  • 特開-データベース管理装置及び方法 図6C
  • 特開-データベース管理装置及び方法 図7
  • 特開-データベース管理装置及び方法 図8
  • 特開-データベース管理装置及び方法 図9
  • 特開-データベース管理装置及び方法 図10
  • 特開-データベース管理装置及び方法 図11
  • 特開-データベース管理装置及び方法 図12
  • 特開-データベース管理装置及び方法 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024126486
(43)【公開日】2024-09-20
(54)【発明の名称】データベース管理装置及び方法
(51)【国際特許分類】
   G06F 16/22 20190101AFI20240912BHJP
【FI】
G06F16/22
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2023034882
(22)【出願日】2023-03-07
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(71)【出願人】
【識別番号】504137912
【氏名又は名称】国立大学法人 東京大学
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】西川 記史
(72)【発明者】
【氏名】藤原 真二
(72)【発明者】
【氏名】小澤 麻由子
(72)【発明者】
【氏名】茂木 和彦
(72)【発明者】
【氏名】合田 和生
(72)【発明者】
【氏名】早水 悠登
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175CA03
5B175KA08
(57)【要約】
【課題】検索条件やパーティションキーの有無に関わらず結合処理において内表のスキャン範囲を限定することが可能であり、且つ、結合処理の性能を向上させる。
【解決手段】表に格納されている値のレンジを表す列レンジ索引がある。結合処理の各段の結合において、当段の結合結果が次段の結合に関わる外表となる場合、データベース管理装置は、当段の結合に関わる内表におけるヒット行を次段の結合に関わる内表が含んでいる可能性があるか否かを、当段の結合列に対応の列レンジ索引と、次段の結合列に対応の列レンジ索引とを基に特定する。
【選択図】図1
【特許請求の範囲】
【請求項1】
記憶装置に格納されているデータベースのクエリを受け付けるクエリ受付部と、
前記クエリに応答した処理であるクエリ処理を実行するクエリ実行部と、
内表のスキャン範囲を表すデータであるフィルタを作成するフィルタ作成部と
を備え、
前記記憶装置が、表に格納されている値のレンジを表すデータである列レンジ索引を格納し、
前記クエリ処理は、複数段の結合を含んだ結合処理が行われる処理であり、
前記結合処理の各段の結合において、当段の結合結果が次段の結合に関わる外表となる場合、
前記フィルタ作成部は、フィルタ作成処理を行い、
前記クエリ実行部は、当該次段の結合に関わる内表のうち、当該フィルタ作成処理において作成されたフィルタが表す範囲のみをスキャンし、
前記フィルタ作成処理は、当段の結合に関わる内表におけるヒット行を次段の結合に関わる内表が含んでいる可能性があるか否かを、当段の結合列に対応の列レンジ索引と、次段の結合列に対応の列レンジ索引とを基に特定することを含む、
データベース管理装置。
【請求項2】
前記フィルタ作成処理は、更に、次段の結合に関わる内表が当段の結合に関わる内表におけるヒット行を含んでいる可能性がある場合は次段の結合に関わる内表のスキャンの実施を決定することを含む、
請求項1に記載のデータベース管理装置。
【請求項3】
前記データベースにおける表が、複数のセグメントで構成されており、
前記複数のセグメントの各々は、行より大きな単位であり、前記表のうちの二つ以上の行で構成されており、前記表が有する複数の列を有し、
前記列レンジ索引が、セグメント毎に存在し、
各列レンジ索引は、当該列レンジ索引に対応のセグメントの列に格納されている値のレンジを表すデータであり、
前記フィルタ作成処理は、
当段の結合に関わる内表におけるヒット行を含んだセグメントのレンジの少なくとも一部に重複するレンジを持つセグメントを、当段の結合列に対応の列レンジ索引と、次段の結合列に対応の列レンジ索引とを基に特定することと、
特定されたセグメントを表すデータをフィルタに追加することと
を含む、
請求項1に記載のデータベース管理装置。
【請求項4】
前記フィルタ作成部は、セグメントに最初のヒット行がある場合に、前記フィルタ作成処理を行う、
請求項3に記載のデータベース管理装置。
【請求項5】
前記クエリ処理が前記複数段の結合を含んだ前記結合処理を含む場合、前記クエリ処理が各列についてセグメント間のレンジの重複が小さいか否か、又は、前記データベースに格納されている値が使用されるアプリケーションが所定のアプリケーションか否かの判定である作成判定を行う作成判定部、
を更に備え、
前記フィルタ作成部は、前記作成判定の結果が真の場合に、前記フィルタ作成処理を行う、
請求項3に記載のデータベース管理装置。
【請求項6】
前記データベースにおける表が、複数のチャンクで構成されており、
各チャンクは、二つ以上のセグメントで構成されており、
前記フィルタ作成部は、前記特定されたセグメントの数に応じて、スキャン単位をセグメント、チャンク及び内表全体のいずれにするかを選択し、当該選択したスキャン単位に応じて、前記フィルタを更新、又は、前記フィルタを作成しない、
請求項3に記載のデータベース管理装置。
【請求項7】
前記特定されたセグメントの数が、セグメント数が小であるとの条件を満たす場合、前記スキャン単位は、セグメントであり、
前記特定されたセグメントの数が、セグメント数が中であるとの条件を満たす場合、前記スキャン単位は、チャンクであり、
前記特定されたセグメントの数が、セグメント数が大であるとの条件を満たす場合、前記スキャン単位は、内表全体である、
請求項6に記載のデータベース管理装置。
【請求項8】
前記結合処理は、再帰結合処理であり、
前記フィルタ作成処理は、
当段の結合に関わる内表におけるヒット行を含んだセグメントのレンジを、次段の結合列に対応の列レンジ索引から特定することと、
当該特定されたレンジの少なくとも一部に重複するレンジを持つセグメントを、当段の結合列に対応の列レンジ索引から特定することと、
当該特定されたセグメントを表すデータをフィルタに追加することと
を含む、
請求項3に記載のデータベース管理装置。
【請求項9】
前記結合処理は、多段結合処理であり、
前記フィルタ作成処理は、
当段の結合に関わる内表におけるヒット行を含んだセグメントのレンジを、当段の結合列に対応の列レンジ索引から特定することと、
当該特定されたレンジの少なくとも一部に重複するレンジを持つセグメントを、次段の結合列に対応の列レンジ索引から特定することと、
当該特定されたセグメントを表すデータをフィルタに追加することと
を含む、
請求項3に記載のデータベース管理装置。
【請求項10】
前記クエリ処理が前記複数段の結合を含んだ前記結合処理を含む場合、前記データベースに格納されている値が使用されるアプリケーションが所定のアプリケーションか否かの判定である作成判定を行う作成判定部、
を更に備え、
前記フィルタ作成部は、前記作成判定の結果が真の場合に、前記フィルタ作成処理を行う、
請求項1に記載のデータベース管理装置。
【請求項11】
記憶装置に格納されているデータベースのクエリに応答した処理であるクエリ処理が、複数段の結合を含んだ結合処理が行われる処理であり、且つ、前記結合処理の各段の結合において、当段の結合結果が次段の結合に関わる外表となる場合、
コンピュータが、フィルタ作成処理を行い、
コンピュータが、当該次段の結合に関わる内表のうち、当該フィルタ作成処理において作成されたフィルタが表す範囲のみをスキャンし、
前記記憶装置が、表に格納されている値のレンジを表すデータである列レンジ索引を格納し、
前記フィルタは、内表のスキャン範囲を表すデータであり、
前記フィルタ作成処理は、当段の結合に関わる内表におけるヒット行を次段の結合に関わる内表が含んでいる可能性があるか否かを、当段の結合列に対応の列レンジ索引と、次段の結合列に対応の列レンジ索引とを基に特定することを含む、
データベース管理方法。
【請求項12】
記憶装置に格納されているデータベースのクエリに応答した処理であるクエリ処理が、複数段の結合を含んだ結合処理が行われる処理であり、且つ、前記結合処理の各段の結合において、当段の結合結果が次段の結合に関わる外表となる場合、
フィルタ作成処理を行い、
当該次段の結合に関わる内表のうち、当該フィルタ作成処理において作成されたフィルタが表す範囲のみをスキャンする、
ことをコンピュータに実行させ、
前記記憶装置が、表に格納されている値のレンジを表すデータである列レンジ索引を格納し、
前記フィルタは、内表のスキャン範囲を表すデータであり、
前記フィルタ作成処理は、当段の結合に関わる内表におけるヒット行を次段の結合に関わる内表が含んでいる可能性があるか否かを、当段の結合列に対応の列レンジ索引と、次段の結合列に対応の列レンジ索引とを基に特定することを含む、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、データベース管理に関し、特に、データベースの表の結合に関する。
【背景技術】
【0002】
外表と内表の結合に関し、例えば、特許文献1及び非特許文献1乃至3に開示の技術が知られている。特許文献1及び非特許文献1乃至3のいずれの文献も、内表のスキャン範囲を限定する方法を開示している。
【0003】
具体的には、例えば、特許文献1及び非特許文献3は、外表の行セットを用いた内表のスキャン範囲限定の方法を開示する。非特許文献2は、外表の結合列に付与された検索条件を用いたスキャン範囲限定の方法を開示する。非特許文献3は、ブルームフィルタを用いたスキャン範囲限定の方法を開示する。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】US10,810,20
【非特許文献】
【0005】
【非特許文献1】Srikanth Kandula等著,「Pushing Data-Induced Predicates Through Joins in Big-Data Clusters」,VLDB2004
【非特許文献2】杉江伸祐著,「SQL実行時のブルームフィルタ(Bloom Filter)アルゴリズム」,2016年10月31日https://future-architect.github.io/articles/20161031/
【非特許文献3】Ali Afroozeh等著,「Faster SQL Queries on Delta Lake with Dynamic File Pruning」,2020年4月30日https://www.databricks.com/blog/2020/04/30/faster-sql-queries-on-delta-lake-with-dynamic-file-pruning.html
【発明の概要】
【発明が解決しようとする課題】
【0006】
特許文献1及び非特許文献3によれば、行ごとに内表のレンジの探索が必要となり、故に、結合の処理性能が低下する。
【0007】
非特許文献1によれば、検索条件が付与されない場合は内表のスキャン範囲を限定することができない。
【0008】
非特許文献2によれば、結合がパーティションキーを用いた結合でなければ内表のスキャン範囲を限定することができない。また、非特許文献2によれば、行ごとに該当のパーティションを探索する必要があり、故に、結合の処理性能が低下する。
【課題を解決するための手段】
【0009】
データベース管理装置は、記憶装置に格納されているデータベースのクエリに応答した処理であるクエリ処理を行う。クエリ処理が、複数段の結合を含んだ結合処理が行われる処理であり、且つ、当該結合処理の各段の結合において、当段の結合結果が次段の結合に関わる外表となる場合、データベース管理装置は、フィルタ作成処理を行い、当該次段の結合に関わる内表のうち、当該フィルタ作成処理において作成されたフィルタ(内表のスキャン範囲を表すデータ)が表す範囲のみをスキャンする。記憶装置が、表に格納されている値のレンジを表すデータである列レンジ索引を格納する。フィルタ作成処理は、当段の結合に関わる内表におけるヒット行を次段の結合に関わる内表が含んでいる可能性があるか否かを、当段の結合列に対応の列レンジ索引と、次段の結合列に対応の列レンジ索引とを基に特定ることを含む。
【発明の効果】
【0010】
本発明によれば、検索条件やパーティションキーの有無に関わらず結合処理において内表のスキャン範囲を限定することが可能であり、且つ、結合処理の性能を向上させることができる。
【図面の簡単な説明】
【0011】
図1】第1の実施形態に係るデータベース管理装置を含むシステム全体の構成を示す。
図2】データベースにおける表の構成を示す。
図3】列レンジ索引の構成を示す。
図4】再帰結合処理の例を示す。
図5】再帰結合処理におけるフィルタ作成の例を示す。
図6A】スキャン単位がセグメントであるケースの例を示す。
図6B】スキャン単位がチャンクであるケースの例を示す。
図6C】スキャン単位が内表全体であるケース(フィルタ作成無し)の例を示す。
図7】第1の実施形態に係るクエリ処理の流れを示す。
図8】次段フィルタ作成処理の流れを示す。
図9】第1の実施形態に係る作成判定処理の流れを示す。
図10】第2の実施形態における多段結合処理の例を示す。
図11】多段結合処理におけるフィルタ作成の例を示す。
図12】第2の実施形態に係るクエリ処理の流れを示す。
図13】第1又は第2の実施形態において内表のスキャン範囲を限定することが有用なデータ構造の例を示す。
【発明を実施するための形態】
【0012】
以下の説明では、「インターフェース装置」は、一つ以上のインターフェースデバイスでよい。当該一つ以上のインターフェースデバイスは、下記のうちの少なくとも一つでよい。
・一つ以上のI/O(Input/Output)インターフェースデバイス。I/O(Input/Output)インターフェースデバイスは、I/Oデバイスと遠隔の表示用計算機とのうちの少なくとも一つに対するインターフェースデバイスである。表示用計算機に対するI/Oインターフェースデバイスは、通信インターフェースデバイスでよい。少なくとも一つのI/Oデバイスは、ユーザインターフェースデバイス、例えば、キーボード及びポインティングデバイスのような入力デバイスと、表示デバイスのような出力デバイスとのうちのいずれでもよい。
・一つ以上の通信インターフェースデバイス。一つ以上の通信インターフェースデバイスは、一つ以上の同種の通信インターフェースデバイス(例えば一つ以上のNIC(Network Interface Card))であってもよいし二つ以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
【0013】
また、以下の説明では、「メモリ」は、一つ以上の記憶デバイスの一例である一つ以上のメモリデバイスであり、典型的には主記憶デバイスでよい。メモリにおける少なくとも一つのメモリデバイスは、揮発性メモリデバイスであってもよいし不揮発性メモリデバイスであってもよい。
【0014】
また、以下の説明では、「永続記憶装置」は、一つ以上の記憶デバイスの一例である一つ以上の永続記憶デバイスでよい。永続記憶デバイスは、典型的には、不揮発性の記憶デバイス(例えば補助記憶デバイス)でよく、具体的には、例えば、HDD(Hard Disk Drive)、SSD(Solid State Drive)、又はNVMe(Non-Volatile Memory Express)ドライブでよい。
【0015】
また、以下の説明では、「プロセッサ」は、一つ以上のプロセッサデバイスでよい。少なくとも一つのプロセッサデバイスは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサデバイスでよいが、GPU(Graphics Processing Unit)のような他種のプロセッサデバイスでもよい。少なくとも一つのプロセッサデバイスは、シングルコアでもよいしマルチコアでもよい。少なくとも一つのプロセッサデバイスは、プロセッサコアでもよい。少なくとも一つのプロセッサデバイスは、処理の一部又は全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)、CPLD(Complex Programmable Logic Device)又はASIC(Application Specific Integrated Circuit))といった広義のプロセッサデバイスでもよい。
【0016】
また、以下の説明では、「yyy部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサによって実行されることで実現されてもよいし、一つ以上のハードウェア回路(例えばFPGA又はASIC)によって実現されてもよいし、それらの組合せによって実現されてもよい。プログラムがプロセッサによって実行されることで機能が実現される場合、定められた処理が、適宜に記憶装置及び/又はインターフェース装置等を用いながら行われるため、機能はプロセッサの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配付計算機又は計算機が読み取り可能な記憶媒体(例えば非一時的な記憶媒体)であってもよい。各機能の説明は一例であり、複数の機能が一つの機能にまとめられたり、一つの機能が複数の機能に分割されたりしてもよい。
【0017】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通符号を使用し、同種の要素を区別して説明する場合には、参照符号(又は要素の識別番号)を使用することがある。
【0018】
本発明は、結合処理での内表のスキャン範囲の限定を実現する。本明細書において、結合処理は、再帰結合処理又は多段結合処理のように複数段の結合を含む結合処理であり、且つ、次段の結合において外表が前段の結合の結果に基づく表である結合である。以下、幾つかの実施形態を説明する。
[第1の実施形態]
【0019】
図1は、第1の実施形態に係るデータベース管理装置を含むシステム全体の構成を示す。
【0020】
データベース管理装置100は、インターフェース装置101、メモリ102及びプロセッサ103を備える。
【0021】
インターフェース装置101は、通信ネットワーク(例えばインターネット)150に接続されている。インターフェース装置101は、通信ネットワーク150を介して、ユーザ装置110及び外部記憶装置140と通信する。ユーザ装置110は、パーソナルコンピュータ等の物理的な計算機でもよいし、物理的な計算機に基づく仮想的な計算機でもよい。また、インターフェース装置101は、ユーザ装置110に代えて又は加えて、ユーザインターフェースデバイスとしての入出力デバイスに接続されていてもよい。すなわち、ユーザ装置110及び入出力デバイスのいずれとの間でも、データベース管理装置100が情報の入出力を行ってもよい。また、データベース管理装置100とユーザ装置110が接続される通信ネットワークと、データベース管理装置100と外部記憶装置140が接続される通信ネットワークは異なっていてもよい。
【0022】
外部記憶装置140は、永続記憶装置でもよいし、永続記憶装置を含んだ装置でもよいし、オンラインストレージでもよい。外部記憶装置140は、データベース141を記憶する。データベース141は、表151と列レンジ索引173とを含む。列レンジ索引173は、表151における結合列毎に存在し、列のレンジを表す索引データである。データベース141は、インメモリデータベースでもよい。「結合列」とは、結合に使われる列(結合対象としての列)である。
【0023】
メモリ102は、一つ又は複数のコンピュータプログラムを記憶する。これらのプログラムがプロセッサ103により実行されることで、DBMS(DataBase Management System)110が実現される。DBMS110は、クエリ受付部111、最適化部112及びクエリ実行部113といった機能を有する。
【0024】
クエリ受付部111は、データベース141に対するクエリをユーザ装置110から受け付ける。クエリは、例えば、SQL(Structured Query Language)によって記述される。ユーザ装置110は、クエリソースの一例でよい。クエリソースは、ユーザ装置110のようにデータベース管理装置100の外部の装置でもよいし、データベース管理装置100の内部の要素(例えば、プロセッサ103がメモリにおけるコンピュータプログラムを実行することで実現されるアプリケーション)であってもよい。
【0025】
最適化部112は、クエリ受付部111が受け付けたクエリに基づいて当該クエリを実行するために必要なクエリプランを作成してよい。クエリプランは、例えば、一つ以上のデータベース演算子と、データベース演算子の実行順序の関係を含む情報でよい。クエリプランは、例えば、データベース演算子をノード、データベース演算子の実行順序の関係をエッジとする木構造で表されてよい。
【0026】
最適化部112は、作成判定部120を有する。作成判定部120は、フィルタ作成の要否を判定する。作成判定部120は、フィルタ作成の要と判定した場合、スキャン作成フラグを“ON”とする。「スキャン作成フラグ」は、スキャン作成の要否を表すデータの一例であり、例えばメモリ102に記録されている。「フィルタ」は、結合においてスキャンされる内表のスキャン範囲を表すデータである。なお、作成判定部120は、最適化部112の外に設けられてもよい。
【0027】
クエリ実行部113は、作成されたクエリプランに基づいてクエリを実行し当該クエリの実行結果をユーザ装置110に返す。クエリ実行において、クエリ実行部113は、データベース演算子を実行するためのタスクを作成し、作成されたタスクを実行することで、そのタスクに対応したデータベース演算子に必要なデータの読込み要求(又は書込み要求)を発行することができる。クエリ実行部113は、一のタスクで複数のデータベース演算子を実行してもよい。タスクの実装としては、例えば、図示しないOS(Operating System)が実現するプロセスやカーネルスレッド等のほか、ライブラリ等が実現するユーザスレッドを用いてよい。
【0028】
クエリ実行部113は、フィルタ作成部130を有する。フィルタ作成部130は、フィルタを作成する。フィルタ作成部130は、スキャン作成フラグが“ON”の場合にフィルタ作成を行う。なお、フィルタ作成部130は、クエリ実行部113の外に設けられてもよい。
【0029】
図2は、データベース141における表151の構成を示す。
【0030】
表151は、一般に、複数の行と複数の列とを有する。本実施形態では、表151は、複数のチャンク171で構成される。チャンク171は、複数のセグメント172で構成される。セグメント172は、行より大きな単位であり、表151の一部の行(二つ以上の行)で構成され、表151が有する複数の列を有する。
【0031】
なお、表151の分割は、図2が示す例に限られないでよい。例えば、セグメント172より大きいチャンク171といった階層が無くてもよい。また、一部の複数のセグメント172が一部の複数の列を有し、別の一部の複数のセグメント172が別の一部の複数の列を有してもよい(但し、少なくとも第1の実施形態では、当段の結合列と次段の結合列は同一セグメント172に存在する必要がある)。また、本実施形態では、チャンク171のサイズもセグメント172のサイズも一律であるが、チャンク171のサイズ、及び/又は、セグメント172のサイズは、一律でなくてもよい。また、チャンク171が有するセグメント172の数も一律でなくてもよい。
【0032】
図3は、列レンジ索引173の構成を示す。
【0033】
列レンジ索引173は、上述したように、表151が有する結合列毎に存在する。列レンジ索引173は、対応列(当該列レンジ索引173に対応する列)に関し、当該列の値のレンジ、例えば、最小値及び最大値を表す。
【0034】
より具体的には、列レンジ索引173は、対応列について、チャンク171毎にサブ索引300を有する。サブ索引300は、対応チャンク(当該サブ索引300に対応するチャンク)171について、対応チャンク171が有するセグメント172毎に、対応列の当該セグメント172でのレンジを表す。また、サブ索引300は、対応チャンク171について、対応列の対応チャンク171でのレンジを表す。
【0035】
なお、本実施形態では、列が有する値は数値であり、値の大きさは、数値の大きさであるが、列が有する値が数値以外の値である場合、値の大きさは、値の種類によって定められた定義に従ってよい。例えば、値がアルファベットで構成される場合、アルファベットの先頭である“a”が最小値であってアルファベットの末尾である“z”が最大値とされてよい。
【0036】
第1の実施形態では、結合処理は、再帰クエリに従う再帰結合処理である。
【0037】
図4は、再帰結合処理の例を示す。
【0038】
フィルタ作成部130は、外表(Left)と内表(Right)の結合において、次段の結合での内表スキャン範囲を表すフィルタ400を作成する。次段の結合では、前段の結合の結果としての表が外表である。クエリ実行部113は、外表と内表の結合(次段の結合)において、内表のうち、フィルタ400が表す範囲のみをスキャンする。
【0039】
図5は、再帰結合処理におけるフィルタ作成の例を示す。
【0040】
セグメント172は、当段の結合列と次段の結合列の両方を含む。当段の結合列と次段の結合列のそれぞれについて、列レンジ索引173が存在する。複数の列A、列B、列C、…が存在するとする。図5では、列Aが当段の結合列として示され、列Bが次段の結合列として示され、故に、列Aの列レンジ索引173Aと、列Bの列レンジ索引173Bとが示されている。再帰結合処理が更に進んだ場合(更に次段の結合に進んだ場合)、当段の結合列に該当する列、及び、次段の列に該当する列は、それぞれシフトしてよい。具体的には、更に次段の結合では、列Bが当段の結合列に該当し、列Cが次段の結合列に該当してよい。再帰結合処理は、結合結果としての外表が得られなくなるまで結合が再帰的に行われる。
【0041】
図5に示す例では、フィルタ作成部130は、以下の処理を行う。
(S501)フィルタ作成部130は、当段の結合列Aに関する内表スキャンにおいてヒット行(クエリに記述の条件を満たす行)がある場合、当該ヒット行を含むセグメント172について、次段の結合列Bのレンジ(最小値及び最大値)を、次段の結合列Bに対応の列レンジ索引173Bから特定する。図5が示す例によれば、「当該ヒット行を含むセグメント172」は、セグメント5であり、「次段の結合列Bのレンジ」では、最小値が“411”であり最大値が“510”である。二つ以上のセグメント172の各々にヒット行がある場合、当該セグメント172について、次段の結合列Bのレンジが特定され、且つ、次のS502が行われる。
(S502)次に、フィルタ作成部130は、S501で特定されたレンジ(最小値及び最大値)を用いて、当段の結合列Aに対応の列レンジ索引173Aを探索する。フィルタ作成部130は、当段の結合列Aについて、当該レンジに含まれる値を有するセグメント172を特定する。図5が示す例によれば、特定されたセグメント172は、セグメント5及びセグメント6である。なぜなら、セグメント5の列Aレンジは、セグメント5の列Bレンジ(S501で特定された列Bレンジ)と少なくとも一部重複し、同様に、セグメント6の列Aレンジも、セグメント5の列Bレンジと少なくとも一部重複するからである。
(S503)フィルタ作成部130は、S502で特定された全てのセグメント172のセグメントIDが記述されたフィルタ400を作成する。このフィルタ400が、次段の内表スキャンに用いられる。
【0042】
フィルタ作成において、内表スキャン範囲の単位は、セグメント172に固定されないことが望ましい。
【0043】
具体的には、例えば、フィルタ作成部130は、図6Aに示すように、当段の結合列AについてS502で特定されたセグメント172の数が小の場合、S502で特定された各セグメント172のセグメントIDをフィルタ400に記述する(つまり、内表スキャン範囲の単位は、セグメント172である)。なお、「特定されたセグメント172の数が小」とは、下記(a1)及び(a2)のうち少なくとも(a2)を満たすことでよい。
(a1)当段の結合列Aについて、S502で特定されたセグメント172の総数が、閾値X未満である。
(a2)当段の結合列Aについて、S502で特定された一つ以上のセグメント172を含む一つ以上のチャンク171の各々について、S502で特定されたセグメント172の数が閾値Y1未満である。閾値Y1は、チャンク171が持つセグメント172の数に基づき定められてよい。閾値Y1は、全チャンク171に共通であってもよいし、チャンク171によって異なっていてもよい。
【0044】
また、例えば、フィルタ作成部130は、図6Bに示すように、当段の結合列AについてS502で特定されたセグメント172の数が中の場合、S502で特定された各セグメント172を含むチャンク171のチャンクIDを、フィルタ400に記述する(つまり、内表スキャン範囲の単位は、チャンク171である)。この場合、次段の結合において、内表スキャン範囲の判定の単位は、セグメント172よりも大きいチャンク171であり、故に、結合の処理性能を向上させることができる。なお、「特定されたセグメント172の数が中」とは、下記(b1)及び(b2)のうち少なくとも(b2)を満たすことでよい。
(b1)当段の結合列Aについて、S502で特定されたセグメント172の総数が、閾値X未満である。
(b2)当段の結合列Aについて、S502で特定された一つ以上のセグメント172を含む一つ以上のチャンク171の各々について、S502で特定されたセグメント172の数が閾値Y1以上閾値Y2以下である。閾値Y2も、閾値Y1と同様に、チャンク171が持つセグメント172の数に基づき定められてよく、また、全チャンク171に共通であってもよいし、チャンク171によって異なっていてもよい。例えば、閾値Y2は、チャンク171を構成するセグメント172の総数と同じ値でよい。
【0045】
また、例えば、フィルタ作成部130は、図6Cに示すように、当段の結合列AについてS502で特定されたセグメント172の数が大の場合、フィルタ400に内表スキャン範囲を指定しないでよい(例えばフィルタ400を作成しないでよい)。このような場合、内表スキャン範囲の判定が処理のオーバーヘッドになり得るが、本実施形態では、そのようなオーバーヘッドを避けることができる。なお、「特定されたセグメント172の数が大」とは、当段の結合列Aについて、S502で特定されたセグメント172の総数が、閾値X1以上であること、チャンク単位でチェックしなければならないとされたチャンク171(例えば、S502で特定されたセグメント172の数がチャンク171のセグメント総数に対し一定比率以上であるチャンク171)の数が閾値X2以上であること、又は、全チャンク数に対するチェックしなければならないチャンク171の数の比率が閾値X3以上であること、でよい。閾値X1~X3の少なくとも一つは、表が持つセグメント172の総数(又は表が持つチャンク171の総数)に基づき定められてよい。
【0046】
以上のように、本実施形態では、内表スキャン範囲の単位は、セグメント172に固定されない。フィルタ400には、セグメントIDに代えて又は加えて、チャンクIDが記述され得る。別の言い方をすれば、フィルタ400には、セグメントIDとチャンクIDが混在してもよい。
【0047】
図7は、第1の実施形態に係るクエリ処理の流れを示す。
【0048】
再帰クエリに応答して行われる処理であるクエリ処理では、再帰結合処理が行われる。再帰結合処理において、クエリ実行部113は、外表があるか否かを判定する(S701)。外表が無ければ、クエリ実行部113は、再帰結合処理を終える。外表があれば、クエリ実行部113は、当該外表と内表との結合を行うために、以下の処理を行う。
【0049】
クエリ実行部113は、内表の各セグメント172についてS703を行ったか否かを判定する(S702)。
【0050】
内表の全てのセグメント172についてS703が行われた場合、クエリ実行部113は、当段の結合結果を次段の外表に設定する(S711)。その後、処理がS701に戻る。なお、当段の結合結果が無い場合、S711はスキップされ、処理がS701に戻る。
【0051】
未だS703が行われていないセグメント172が内表にある場合、クエリ実行部113は、内表のセグメント172がフィルタ400に表されているか否かを判定する(S703)。「内表のセグメント172がフィルタ400に表されている」とは、フィルタ400が存在し、当該セグメント172のセグメントID、又は、当該セグメント172を含むチャンクのチャンクIDが、フィルタ400に記述されていることである。つまり、S703の判定(内表スキャン範囲の判定)の単位は、セグメント172又はチャンク171である。S703の判定結果が偽の場合(S703:No)、処理がS702に戻る。
【0052】
S703の判定結果が真の場合(S703:Yes)、クエリ実行部113は、当該セグメント172の全ての行から値(データ)を読み出したかを判定する(S704)。当該セグメント172の全ての行から値が読み出された場合、処理がS702に戻る。
【0053】
未だ値が読み出されていない行が当該セグメント172にある場合、クエリ実行部113は、そのような行のうちの一つの行(例えば先頭行)から値を読み出し、フィルタ作成フラグが“ON”か否かを判定する(S705)。S705の判定結果が偽の場合(S705:No)、S706~S709がスキップされ、S710が行われる。
【0054】
S705の判定結果が真の場合(S705:Yes)、クエリ実行部113は、当該セグメント172の最初の行がヒット行か否かを判定する(S706)。S706の判定結果が偽の場合(S706:No)、S707~S709がスキップされ、S710が行われる。
【0055】
S706の判定結果が真の場合(S706:Yes)、フィルタ作成部130は、次段の結合列の列レンジ索引173から、当該セグメント172のレンジ(最小値及び最大値)を特定する(S707)。フィルタ作成部130は、当段の結合列の列レンジ索引173から、S707で特定されたレンジと少なくとも一部重複するレンジを持つセグメント172を特定する(S708)。フィルタ作成部130は、次段フィルタ作成処理を行う(S709)。クエリ実行部113は、読出し元行から読み出された値を用いて外表との結合処理を行う(S710)。その後、処理がS704に戻る。
【0056】
図8は、次段フィルタ作成処理(図7のS709)の流れを示す。
【0057】
フィルタ作成部130は、S708で特定されたセグメント172の数が小か否かを判定する(S801)。S801の判定結果が真の場合(S801:Yes)、フィルタ作成部130は、S708で特定されたセグメント172のセグメントIDをフィルタ400に追加する(S802)。
【0058】
S801の判定結果が偽の場合(S801:No)、フィルタ作成部130は、S707で特定されたセグメント172の数が中か否かを判定する(S803)。S803の判定結果が真の場合(S803:Yes)、フィルタ作成部130は、S708で特定されたセグメント172を含んだチャンク171のチャンクIDをフィルタ400に追加する(S804)。
【0059】
S803の判定結果が偽の場合(S803:No)、フィルタ作成部130は、次段用の作成済みフィルタ400を削除し(S805)、フィルタ作成フラグを“OFF”とする(S806)。
【0060】
図9は、第1の実施形態に係る作成判定処理の流れを示す。作成判定処理は、各段の開始前に行う必要がある(但しS901は再帰クエリに応答したクエリ処理(図7に示した処理を含んだ処理)の開始前に一度行われればよい)。
【0061】
作成判定部120は、受け付けられたクエリが再帰クエリか否かを判定する(S901)。
【0062】
S901の判定結果が真の場合(S901:Yes)、作成判定部120は、各列の列レンジ索引173を基に、レンジの重複が小さいか否かを判定する(S902)。「セグメントのレンジの重複」とは、列毎に、セグメント間のレンジの重複の統計に関する値でよく、「セグメント172のレンジの重複が小さい」とは、当該統計に関する値が閾値以下であることでよい。なお、当該統計の情報は、データベース管理装置100の外部から入力されてもよいし、DBMS110が、クエリ処理の開始前のどこかの時点で当該統計の情報を取得してもよい。
【0063】
S902の判定結果が真の場合(S902:Yes)、作成判定部120は、フィルタ作成フラグを“ON”にする(S903)。
【0064】
以上が、第1の実施形態の説明である。
[第2の実施形態]
【0065】
第2の実施形態を説明する。その際、第1の実施形態との相違点を主に説明し、第1の実施形態との共通点については説明を省略又は簡略する。
【0066】
第2の実施形態では、結合処理は、多段結合クエリに従う多段結合処理である。
【0067】
図10は、多段結合処理の例を示す。
【0068】
フィルタ作成部130は、多段結合処理(ハッシュ結合)において、ハッシュ表を作成したのち次段の結合を行う場合、前段の結合処理の実施時に次段の結合の内表スキャンのためのフィルタ400を作成する。次段の結合では、前段の結合の結果としてのハッシュ表が外表である。クエリ実行部113は、外表と内表の結合(次段の結合)において、内表のうち、フィルタ400が表す範囲のみをスキャンする。
【0069】
図11は、多段結合処理におけるフィルタ作成の例を示す。
【0070】
図11が示す例によれば、結合条件は、S1.列A=S2.列Bである(S1及びS2はそれぞれ内表)。当段の結合列(S1A)の列レンジ索引173Xと次段の結合列(S2B)の列レンジ索引173Yがある。
【0071】
図11に示す例では、フィルタ作成部130は、以下の処理を行う。
(S1101)フィルタ作成部130は、当段の結合列S1Aに関する内表スキャンにおいてヒット行がある場合、当該ヒット行を含むセグメント172について、当段の結合列のレンジ(最小値及び最大値)を、当段の結合列S1Aの列レンジ索引173Xから特定する。図11が示す例によれば、「当該ヒット行を含むセグメント172」は、セグメント5であり、「当段の結合列S1Aのレンジ」では、最小値が“401”であり最大値が“500”である。二つ以上のセグメント172の各々にヒット行がある場合、当該セグメント172について、当段の結合列のレンジが特定され、且つ、次のS1102が行われる。
(S1102)次に、フィルタ作成部130は、S1101で特定されたレンジ(最小値及び最大値)を用いて、次段の結合列S2Bに対応の列レンジ索引173Yを探索する。フィルタ作成部130は、次段の結合列S2Bについて、当該レンジに含まれる値を有するセグメント172を特定する。図11が示す例によれば、特定されたセグメント172は、セグメント4及びセグメント5である。なぜなら、セグメント4の列S1Bレンジは、セグメント5の列S1Aレンジ(S501で特定されたレンジ)と少なくとも一部重複し、同様に、セグメント5の列S1Bレンジも、セグメント5の列S1Aレンジと少なくとも一部重複するからである。
(S1103)フィルタ作成部130は、S1102で特定された全てのセグメント172のセグメントIDが記述されたフィルタ400を作成する。このフィルタ400が、次段の内表スキャンに用いられる。なお、S1102で特定されたセグメント172の数によって、セグメントIDに代えてチャンクIDが記述されてもよい。
【0072】
図12は、第2の実施形態に係るクエリ処理の流れを示す。
【0073】
多段結合クエリに応答して行われる処理であるクエリ処理では、多段結合処理が行われる。多段結合処理において、クエリ実行部113は、多段結合クエリに従う全ての段の結合を終えたか否かを判定する(S1201)。全ての段の結合が終わった場合、クエリ実行部113は、多段結合処理を終える。未だ段があれば、クエリ実行部113は、以下の処理を行う。
【0074】
クエリ実行部113は、内表の各セグメント172についてS1203を行ったか否かを判定する(S1202)。
【0075】
内表の全てのセグメント172についてS1203が行われた場合、クエリ実行部113は、当段の結合結果を次段の外表に設定する(S1211)。その後、処理がS1201に戻る。
【0076】
未だS1203が行われていないセグメント172が内表にある場合、クエリ実行部113は、内表のセグメント172がフィルタ400に表されているか否かを判定する(S1203)。S1203の判定結果が偽の場合(S1203:No)、処理がS1202に戻る。
【0077】
S1203の判定結果が真の場合(S1203:Yes)、クエリ実行部113は、当該セグメント172の全ての行から値(データ)を読み出したかを判定する(S1204)。当該セグメント172の全ての行から値が読み出された場合、処理がS1202に戻る。
【0078】
未だ値が読み出されていない行が当該セグメント172にある場合、クエリ実行部113は、そのような行のうちの一つの行(例えば先頭行)から値を読み出し、当該値を用いて外表との結合処理を行う(S1205)。クエリ実行部113は、フィルタ作成フラグが“ON”か否かを判定する(S1206)。S1206の判定結果が偽の場合(S1206:No)、S1207~S1210がスキップされ、処理がS1204に戻る。
【0079】
S1206の判定結果が真の場合(S1206:Yes)、クエリ実行部113は、当該セグメント172の最初の行がヒット行か否かを判定する(S1207)。S1207の判定結果が偽の場合(S1207:No)、S1208~S1210がスキップされ、処理がS1204に戻る。
【0080】
S1207の判定結果が真の場合(S1207:Yes)、フィルタ作成部130は、当段の結合列の列レンジ索引173から、当該セグメント172のレンジ(最小値及び最大値)を特定する(S1208)。フィルタ作成部130は、次段の結合列の列レンジ索引173から、S1208で特定されたレンジと少なくとも一部重複するレンジを持つセグメント172を特定する(S1209)。フィルタ作成部130は、次段フィルタ作成処理(図8)を行う(S1210)。
【0081】
以上が、第2の実施形態の説明である。なお、第2の実施形態に係る作成判定処理では、図9のS901の判定は、受け付けられたクエリが再帰クエリか否かの判定に代えて、クエリが多段結合クエリか否かの判定である。その判定の結果が真の場合、S902及びS903が行われる。また、多段結合クエリか否かの判定は、多段結合クエリに応答したクエリ処理(図12に示した処理を含んだ処理))の開始前に一度行われればよいが、S902は、各段の開始前に行う必要がある。
【0082】
上述の説明を、例えば下記のように総括することができる。下記の総括は、補足説明や変形例の説明を含んでよい。
【0083】
データベース管理装置100は、外部記憶装置140(記憶装置の一例)に格納されているデータベース141のクエリを受け付けるクエリ受付部111と、クエリに応答した処理であるクエリ処理を実行するクエリ実行部113と、内表のスキャン範囲を表すデータであるフィルタを作成するフィルタ作成部130とを備える。外部記憶装置140が、表に格納されている値のレンジを表すデータである列レンジ索引を格納する。クエリ処理は、複数段の結合を含んだ結合処理が行われる処理である。結合処理の各段の結合において、当段の結合結果が次段の結合に関わる外表となる場合、フィルタ作成部130は、フィルタ作成処理を行う。クエリ実行部113は、当該次段の結合に関わる内表のうち、当該フィルタ作成処理において作成されたフィルタ400が表す範囲のみをスキャンする。フィルタ作成処理は、当段の結合に関わる内表におけるヒット行を次段の結合に関わる内表が含んでいる可能性があるか否かを、当段の結合列に対応の列レンジ索引と、次段の結合列に対応の列レンジ索引とを基に特定することを含む。これにより、検索条件やパーティションキーの有無に関わらず結合処理において内表のスキャン範囲を限定することが可能であり、且つ、結合処理の性能を向上させることができる。
【0084】
データベース141における表151が、複数のセグメント172で構成されていてよい。複数のセグメント172の各々は、行より大きな単位でよく、表151のうちの二つ以上の行で構成されていて、表151が有する複数の列を有してよい。外部記憶装置140において、列レンジ索引が、セグメント172毎に存在してよい。各列レンジ索引は、当該列レンジ索引に対応のセグメント172に格納されている値のレンジを表してよい。
【0085】
フィルタ作成処理は、当段の結合に関わる内表におけるヒット行を含んだセグメント172のレンジの少なくとも一部に重複するレンジを持つセグメント172を、当段の結合列に対応の列レンジ索引173(例えば173A又は173X)と、次段の結合列に対応の列レンジ索引173(例えば173B又は173Y)とを基に特定すること、及び、特定されたセグメント172を表すデータをフィルタ400に追加すること、を含んでよい。
【0086】
このように、フィルタ400には、次段の内表スキャン範囲が記述されるが、内表スキャン範囲は、行よりも大きいセグメント172でよい。このため、次段の結合において、内表スキャン範囲の判定の単位は、行よりも大きいセグメント172であり、故に、結合の処理性能を向上させることができる。また、当段の結合列及び次段の結合列の列レンジ索引173を基に次段の内表スキャン範囲としてのセグメント172を特定できるため、検索条件やパーティションキーの有無に関わらず結合処理において内表のスキャン範囲の限定が可能である。なお、フィルタ作成処理は、更に、次段の結合に関わる内表が当段の結合に関わる内表におけるヒット行を含んでいる可能性がある場合は次段の結合に関わる内表のスキャンの実施を決定することを含んでよい。クエリ実行部113は、当該次段の結合に関わる内表のスキャンの実施が決定された場合に、当該フィルタ作成処理において作成されたフィルタ400が表す範囲のみをスキャンしてよい。
【0087】
フィルタ作成部130は、セグメント172の最初のヒット行があった場合に、フィルタ作成処理を行ってよい。これにより、同一セグメント172についてヒット行が出る度に同一セグメント172についてセグメント特定及びフィルタ作成処理(例えばS707~S709又はS1208~S1210)をするといった無駄を回避することができ、結合処理の性能向上に寄与することができる。
【0088】
データベース管理装置100が作成判定部120を更に備えてよい。作成判定部120は、クエリ処理が複数段の結合を含んだ結合処理を含む場合、(A)各列についてセグメント間のレンジの重複が小さいか否か、又は、(B)データベースに格納されている値が使用されるアプリケーションが所定のアプリケーションか否かの判定である作成判定を行ってよい。フィルタ作成部130は、作成判定の結果が真の場合に(例えばフィルタ作成フラグが“ON”の場合に)、フィルタ作成処理を行ってよい。これにより、列においてセグメント間のレンジ重複が多く故に内表のスキャン範囲を限定する効果が小さい場合にフィルタ400の作成をしないようにすることができる。
【0089】
作成判定(A)の例は、次の通りでよい。すなわち、作成判定部120は、各列の列レンジ索引173を基に、各列について、セグメント毎のレンジの分布を確認し、レンジの重複が小さいか否かを判定してよい。結合処理において結合列となり得る全ての列についてレンジ重複が小と判定された場合、作成判定の結果が真(例えばフィルタ作成フラグが“ON”)でよい。
【0090】
作成判定(B)の例は、次の通りでよい。すなわち、「所定のアプリケーション」は、各列においてレンジ重複が小さいことが期待されるデータベースとなるいずれの種類のアプリケーションでよい。そのようなアプリケーションとして、例えば、図13に示すように、産業系アプリケーションがある。産業系アプリケーション(例えば、部品の生産)に関するデータベースは、グラフ構造データとなることが多い。例えば、部品同士は時間的に近く、データベース内では、再帰先のデータも時間的に近い。産業系アプリケーションでは、グラフ構造データを辿る処理(トラバース)が主要な検索パターンの一つである。グラフ構造データをトラバースするために再帰クエリが用いられてよい。再帰クエリでは、履歴表(内表)から抽出されたデータ(元データ)と当該履歴表の別部分のデータとの結合処理が繰り返し行われてよい。このような結合処理において、元データと関係がある部分のみがスキャンされ、結合処理の性能が向上し、以って、グラフ構造データのトラバース時間の短縮が期待される。
【0091】
表151が、複数のチャンク171で構成されていて、各チャンク171は、二つ以上のセグメント172で構成されていてよい。フィルタ作成部130は、特定されたセグメント172の数に応じて、スキャン単位をセグメント172、チャンク171及び内表全体のいずれにするかを選択し、当該選択したスキャン単位に応じて、フィルタ400を更新、又は、フィルタ400を作成しないでよい。これにより、結合処理の一層の性能向上が期待される。
【0092】
具体的には、例えば、特定されたセグメントの数が、セグメント数が小であるとの条件を満たす場合、スキャン単位は、セグメントでよい。特定されたセグメントの数が、セグメント数が中であるとの条件を満たす場合、スキャン単位は、チャンクでよい。特定されたセグメントの数が、セグメント数が大であるとの条件を満たす場合、スキャン単位は、内表全体でよい。これにより、セグメント数に応じてスキャン単位がセグメント又はチャンクといった適切な大きさとしたり、セグメント数によってはフィルタ400を作成することがオーバーヘッドとなることを避けたりすることができる。
【0093】
結合処理は、再帰結合処理でよい。フィルタ作成処理は、当段の結合に関わる内表におけるヒット行を含んだセグメント172のレンジを、次段の結合列に対応の列レンジ索引173Bから特定することと(例えばS501又はS707)、当該特定されたレンジの少なくとも一部に重複するレンジを持つセグメント172を、当段の結合列に対応の列レンジ索引173Aから特定することと(例えばS502又はS708)、当該特定されたセグメント172を表すデータ(例えばセグメントID又はチャンクID)をフィルタに追加することと(例えばS503又はS709)を含んでよい。これにより、再帰結合処理の性能を向上することができる。
【0094】
結合処理は、多段結合処理でよい。フィルタ作成処理は、当段の結合に関わる内表におけるヒット行を含んだセグメント172のレンジを、当段の結合列に対応の列レンジ索引173Xから特定することと(例えばS1101又はS1208)、当該特定されたレンジの少なくとも一部に重複するレンジを持つセグメント172を、次段の結合列に対応の列レンジ索引173Yから特定することと(例えばS1102又はS1209)、当該特定されたセグメント172を表すデータをフィルタ(例えばS1103又はS1210)に追加することとを含んでよい。これにより、多段結合処理の性能を向上することができる。
【0095】
以上、幾つかの実施形態を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
【符号の説明】
【0096】
100…データベース管理装置
図1
図2
図3
図4
図5
図6A
図6B
図6C
図7
図8
図9
図10
図11
図12
図13