JP2012078927A - データベースにおけるキャッシュ制御方法、システム及びプログラム - Google Patents

データベースにおけるキャッシュ制御方法、システム及びプログラム Download PDF

Info

Publication number
JP2012078927A
JP2012078927A JP2010221450A JP2010221450A JP2012078927A JP 2012078927 A JP2012078927 A JP 2012078927A JP 2010221450 A JP2010221450 A JP 2010221450A JP 2010221450 A JP2010221450 A JP 2010221450A JP 2012078927 A JP2012078927 A JP 2012078927A
Authority
JP
Japan
Prior art keywords
search key
row
index
field
invalidation
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
JP2010221450A
Other languages
English (en)
Other versions
JP5567967B2 (ja
Inventor
Miki Enoki
美紀 榎
Yosuke Ozawa
陽介 小澤
Hiroshi Horii
洋 堀井
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2010221450A priority Critical patent/JP5567967B2/ja
Priority to US13/251,131 priority patent/US20120166419A1/en
Publication of JP2012078927A publication Critical patent/JP2012078927A/ja
Application granted granted Critical
Publication of JP5567967B2 publication Critical patent/JP5567967B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • G06F16/9574Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】限られたメモリ空間内で、データベースのキャッシュにアクセスするための無効化用インデックスを効率的に生成する。
【解決手段】限られたサイズ内の無効化用インデックスでキャシュヒット率を維持するため、ハッシュ分割された各分割領域に対する無効化用インデックスのテーブルにカウントのフィールドを設け、データ更新に対してカウントを増分し、データ参照に対してカウントを減分し、カウントのフィールドが所定の閾値よりも大きいことに応答して無効化用インデックスの行を統合し、統合により空いた行数分、カウント値が最小の行から順に無効化用インデックスの行を分割するようにすることによって、無効化用インデックスのサイズを妥当に保つとともに、参照アクセスに対してキャッシュ・ヒット率を高める。
【選択図】図11

Description

この発明は、コンピュータ・システムにおけるデータベース処理に関し、特に、データベースのデータをキャッシュすることにより、データ・アクセスを高速化する技法に関するものである。
従来より、データベースの検索を高速化するために、データをキャッシュすることが行われているが、データ更新によりキャッシュされたデータが最新でなくなる場合、キャッシュの無効化が必要となる。
その際、キャッシュ無効化の影響範囲を減らすために、インデックスを用いて無効化するキャッシュを特定する技術が知られている。しかし、その場合、インデックス用にメモリが必要になり、キャッシュのメモリサイズを圧迫してしまう、という問題があった。
それを軽減するために、インデックスに載せるデータを制限したり、ハッシュ分割したりすると、キャッシュ無効化の範囲が大きくなり、キャッシュ・ヒット率が低下してしまう。
データベースにアクセスするインデックスに載せるデータを制限する手法は、
http://db.cs.berkeley.edu/papers/ERL-M89-17.pdfあるいは、
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.40.5740などの文献に記述されている。
また、データ更新時のキャッシュメンテナンス手法で似たものとして、具体化ビュー(materialized view)のメンテナンスの技術がある。例えば、
http://pages.cs.wisc.edu/~gangluo/partial_full.pdfに記述された技術がある。
さらに、特許文献として、特開2000−35912号公報は、ディレクトリ情報を記憶するデータベースを備えたディレクトリ・サーバにおいて、高キャッシュ効率を確保することを目的とするものであり、開示されている技術によれば、まずデータベースのキャッシュの空間が、アクセスパターン別に分割される。そして、分割したそれぞれの空間でLRUをつかってキャッシュのeviction(キャッシュが指定したサイズからあふれた時にキャッシュデータを削除すること)を管理することにより、分割せず1つの空間でLRU管理するよりも高いキャッシュヒット率を維持できることが示されている。すなわち、上記アクセスパターンで分割したときに、各アクセスで必要とされない属性はキャッシュには載せないようにすることで、全属性を載せるのにくらべて無駄にキャッシュ空間を消費しない、という効果を与える。
特開2000−35912号公報
http://db.cs.berkeley.edu/papers/ERL-M89-17.pdf http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.40.5740 http://pages.cs.wisc.edu/~gangluo/partial_full.pdf
上記従来技術において、データ更新時のキャッシュ無効化の影響範囲を減らすために、インデックスを用いて無効化するキャッシュを特定する手法が提示される。ところが、一般的に、リソースの制限により、インデックスとして確保するメモリ領域のサイズは限度がある。しかし、インデックスのサイズを制限するためにインデックスに載せるデータを制限したり、ハッシュ分割した場合には、キャッシュ無効化の範囲が大きくなり、キャッシュ・ヒット率が低下してしまうという問題がある。
従って、本発明の目的は、限られたメモリ空間内で、データベースのキャッシュにアクセスするための無効化用インデックスを効率的に生成することにある。
本発明の別の目的は、ハッシュ分割された無効化用インデックスにおいて、キャッシュ無効化の影響を減らすことにある。
この発明は、上記問題を解決するためになされたものであり、限られたサイズ内の無効化用インデックスでキャシュヒット率を維持するため、ハッシュ分割された各分割領域に対する更新頻度と参照頻度の情報をもとに、更新の割合が高い分割領域をまとめ、参照の割合が高い分割領域はさらに細かく分割して無効化の影響をうけにくくすることにより、k個に均等に分割(ハッシュ分割)するよりもキャッシュヒット率が向上することを見込むものである。
本発明に従うシステムは先ず、例えば、INDEX_U1_HashMapと呼ぶ無効化用インデックスのテーブルをメモリ上に作成する。INDEX_U1_HashMapは、検索式の検索条件をハッシュしたフィールドと、その検索条件にヒットしたレコードのIDを含むフィールドと、カウントのフィールドを含む。
ある検索条件には一般的に複数のレコードがヒットするので、レコードのIDを含むフィールドは、複数のIDを含むことができる。
カウントのフィールドは、対応する検索条件でデータが更新、すなわち、その検索条件に該当するレコードのキャッシュが無効化されることに応答して増分され、対応する検索条件でデータが参照されることで減分される。これには限定されないが、典型的には増分とは1増やすことであり、減分とは1減らすことである。
所定期間経過後、本発明に従うシステムは、INDEX_U1_HashMapのカウントのフィールドを調べて、ここの値が所定の閾値よりも大きいことに応答してテーブルの行を統合し、統合によって空いた行数分、カウント値が最小の行から順に分割する。
カウントのフィールドが所定の閾値よりも大きいということは、更新の頻度が高いということであり、すると、行を統合することによって、INDEX_U1_HashMapの行の数を減らす。このことは、メモリ制約の下で、無効化用インデックスのテーブルの行の数を妥当に維持することを意味する。なお、更新に従って、対応するIDのフィールドのエントリは、フラッシュされる。
一方、カウントのフィールドが小さいということは、典型的には参照の頻度が高いということであり、すると、行を分割することによって、無効化用インデックスの行の無効化の影響を受けにくくする。すなわち、行を分割しておくと、ある検索条件に対してデータ更新が行われたとき、それにより影響を受ける行に含まれるIDが減り、キャッシュ・ヒット率が高まる。
このようにINDEX_U1_HashMapにおいて、カウントのフィールドの値に応じて統合され、あるいは分割されたテーブルは、以下では、INDEX_U1_WeightedHashMapとも呼ばれる。
この発明によれば、無効化用インデックスのテーブルにカウントのフィールドを設け、各行のデータ更新と参照クエリの数をもとに各行の重みを計算し、カウントのフィールドが所定の閾値よりも大きいことに応答して無効化用インデックスの行を統合し、統合により空いた行数分、カウント値が最小の行から順に無効化用インデックスの行を分割することによって重み付無効化用インデックスを生成することにより、サイズを妥当に保つとともに、参照アクセスに対してキャッシュ・ヒット率を高めるという効果が得られる。
アプリケーション・サーバに、インターネットを介して、クライアント・コンピュータが接続されることを示す図である。 クライアント・コンピュータのハードウェア構成を示す図である。 アプリケーション・サーバ・サーバのハードウェア構成を示す図である。 本発明の実施例の機能ブロック図である。 データベースのレコードの例を示す図である。 データ・キャッシュのエントリの例を示す図である。 無効化用インデックスのエントリの例を示す図である。 Index_U1_WeightHashMapを作成する処理の概要フローチャートを示す図である。 更新クエリが発行された際の処理のフローチャートを示す図である。 参照クエリが発行された際の処理のフローチャートを示す図である。 無効化用インデックスのエントリ分割処理のフローチャートを示す図である。 無効化用インデックスのエントリ分割処理の様子を示す図である。
以下、図面を参照して、本発明の実施例を説明する。特に断わらない限り、同一の参照番号は、図面を通して、同一の対象を指すものとする。また、以下で説明するのは、本発明の一実施形態であり、この発明を、この実施例で説明する内容に限定する意図はないことに留意されたい。
図1において、データベース・サーバの機能を併せ持つアプリケーション・サーバ102には、インターネット104を介して、複数のクライアント・コンピュータ106a、106b・・・106zから、HTTPなどのプロトコルにより、リクエストを受け取る。図1のシステムにおいては、クライアント・コンピュータのユーザは、Webブラウザを通じて、インターネット104の回線を介して、アプリケーション・サーバ102に、ログインする。具体的には、所定のURLをWebブラウザに打ち込んで、所定のページを表示する。なお、Webブラウザではなく、所定の専用クライアント・アプリケーション・プログラムを使ってログインするようにしてもよい。
次に、図2を参照して、図1で参照番号106a、106b・・・106zのように示されているクライアント・コンピュータのハードウェア・ブロック図について、説明する。図2において、クライアント・コンピュータは、主記憶206、CPU204、IDEコントローラ208をもち、これらは、バス202に接続されている。バス202には更に、ディスプレイ・コントローラ214と、通信インターフェース218と、USBインターフェース220と、オーディオ・インターフェース222と、キーボード・マウス・コントローラ228が接続されている。IDEコントローラ208には、ハードディスク・ドライブ(HDD)210と、DVDドライブ212が接続されている。DVDドライブ212は、必要に応じて、CD−ROMやDVDから、プログラムを導入するために使用する。ディスプレイ・コントローラ214には、好適には、LCD画面をもつディスプレイ装置216が接続されている。ディスプレイ装置216には、Webブラウザを通じて、アプリケーションの画面が表示される。
USBインターフェース220には、必要に応じて、拡張ハードディスクなどのデバイスを接続をすることができる。
キーボード・マウス・コントローラ228には、キーボード230と、マウス232が接続されている。キーボード230は、検索のためのキーデータや、パスワードなどを打ち込むために使用される。
CPU204は、例えば、32ビット・アーキテクチャまたは64ビット・アーキテクチャに基づく任意のものでよく、インテル社のPentium(インテル・コーポレーションの商標)4、Core(商標)2 Duo、AMD社のAthlon(商標)などを使用することができる。
ハードディスク・ドライブ210には、少なくとも、オペレーティング・システムと、オペレーティング・システム上で動作するWebブラウザ(図示しない)が格納されており、システムの起動時に、オペレーティング・システムは、メインメモリ206にロードされる。オペレーティング・システムは、Windows XP(マイクロソフト・コーポレーションの商標)、Windows Vista(マイクロソフト・コーポレーションの商標)、Windows(マイクロソフト・コーポレーションの商標) 7、Linux(Linus Torvaldsの商標)などを使用することができる。また、Webブラウザは、マイクロソフト・コーポレーションのInternet Explorer、Mozilla FoundationのMizilla FireFoxなど、任意のものを使用することができる。
通信インターフェース218は、オペレーティング・システムが提供するTCP/IP通信機能を利用して、イーサネット(商標)・プロトコルなどにより、アプリケーション・サーバ102と、通信する。
図3は、アプリケーション・サーバ102のハードウェア構成の概要ブロック図である。図3に示すように、クライアント・コンピュータ106a、106b・・・106zは、インターネット104を経由して、アプリケーション・サーバ102の通信インターフェース302に接続される。通信インターフェース302はさらに、バス304に接続され、バス304には、CPU306、主記憶(RAM)308、及びハードディスク・ドライブ(HDD)310が接続されている。
図示しないが、アプリケーション・サーバ102にはさらに、キーボード、マウス、及びディスプレイが接続され、これらによって、保守担当者が、アプリケーション・サーバ102全体の管理やメンテナンス作業を行うようにしてもよい。
アプリケーション・サーバ102のハードディスク・ドライブ310には、オペレーティング・システム、クライアント・コンピュータ106a、106b・・・106zのログイン管理のための、ユーザIDとパスワードの対応テーブルが保存されている。ハードディスク・ドライブ310にはさらに、アプリケーション・サーバ102をWebサーバとして機能させるためのApacheなどのソフトウェア、及びJava仮想環境を実現するJava EE、及びJava仮想環境上で動作する本発明に係る後述するアプリケーション・プログラム402が保存され、アプリケーション・サーバ102の立ち上げ時に、主記憶308にロードされて、動作する。これによって、クライアント・コンピュータ106a、106b・・・106zが、TCP/IPのプロトコルで、アプリケーション・サーバ102にアクセスすることが可能となる。
アプリケーション・サーバ102のハードディスク・ドライブ310にはさらに、後述するデータベース管理システム404とデータベース406が保存されている。
尚、上記アプリケーション・サーバ102として、インターナョナル・ビジネス・マシーンズ・コーポレーションから購入可能な、IBM(インターナョナル・ビジネス・マシーンズ・コーポレーションの商標)System X、System i、System pなどの機種のサーバを使うことができる。その際、使用可能なオペレーティング・システムは、AIX(インターナョナル・ビジネス・マシーンズ・コーポレーションの商標)、UNIX(The Open Groupの商標)、Linux(商標)、Windows(商標)2003 Serverなどがある。
次に、図4を参照して、本発明の機能構成を説明する。アプリケーション・プログラム402は、Java(R)で書かれたプログラムであり、O/Rマッピングのアプリケーションである。O/Rマッピングとは、Java(R)のようなオブジェクト指向言語で扱うオブジェクトとリレーショナル・データベースのレコードをマッピング(対応付け)する機能である。これには限定されないが、ここでは例えば、オンラインショッピングサイトを想定する。
アプリケーション・プログラム402は、データベース管理システム404に問い合わせを出す。データベース管理システム404は、好適にはリレーショナル・データベースであり、例えば、IBM(R) DB2である。
データベース管理システム404が管理するデータベース406は、ハードディスク・ドライブ310に保存され、図5に示すようなレコードをもつ。なお、図5は単なる例示であり、データベース406は、実際はより多くのレコードを含むことを理解されたい。
アプリケーション・プログラム402は、主記憶308中に、データ・キャッシュ408と、無効化用インデックス(以下では、単にインデックスとも呼ぶこともある)410をもち、データベース管理システム404を介してデータベース406から取得したデータを、データ・キャッシュ408に格納する。図6は、データ・キャッシュ408のエントリの例を示す図である。なお、図6は単なる例示であり、データ・キャッシュ408は、実際はより多くのエントリを含むことを理解されたい。
アプリケーション・プログラム402は、クライアント・コンピュータから、データベース406のデータの参照クエリまたは更新クエリを受け取る。アプリケーション・プログラム402は、参照クエリに対して、条件を満たすデータを返す。条件を満たすデータがデータ・キャッシュ408にあれば、データ・キャッシュ408のデータがクライアント・コンピュータに返される。条件を満たすデータがデータ・キャッシュ408に見つからなければ、アプリケーション・プログラム402は、データベース管理システム404に問い合わせを行う。
アプリケーション・プログラム402は、問い合わせに対して、無効化用インデックス410のエントリに格納されている、データ・キャッシュ408中のデータのIDを使用することで、データ・キャッシュ408のデータに高速アクセスする。
図7に、無効化用インデックス410の構造とエントリの例を示す。図示されているように、無効化用インデックス410は、検索条件のハッシュのフィールドAACC'と、データベース406のレコードのIDの番号を含むフィールドと、カウントを含むフィールドを有する。検索条件のハッシュのフィールドは、問い合わせのSQL文のwhere以下の検索条件から生成される。IDの番号を含むフィールドは、検索条件に該当するデータベース406のレコードのIDの番号を複数含むことができる。カウントを含むフィールドは、更新アクセスに応答して1だけ増分され、参照アクセスに応答して1だけ減分するように、アプリケーション・プログラム402によって操作される。
アプリケーション・プログラム402は、クライアント・コンピュータから、データベース406の更新クエリを受け取った場合は、データベース管理システム404に更新の問い合わせを行うとともに、データ・キャッシュ408中の該当するデータを削除する。更新処理によって、データ・キャッシュ408中の該当するデータは無効になるからである。
データ・キャッシュ408と、無効化用インデックス410は、アプリケーション・プログラム毎に主記憶308内に確保され、すると、アプリケーション・プログラムが複数、アプリケーション・サーバ102に走っている場合、1つのアプリケーション・プログラムに割当て可能な主記憶308の容量が制限される。本発明は、このような限られたメモリ容量の範囲内で、無効化用インデックス410を有効に利用することを意図する。
次に、アプリケーション・プログラム402による無効化用インデックス410に対する処理を、図8以下の図面を参照して、より詳細に説明する。
図8のフローチャートにおいて、アプリケーション・プログラム402は、ステップ802で、INDEX_U1_HashMapを使用した状態で処理を実行する。INDEX_U1_HashMapとは、図7に示すテーブルの構造をもつ無効化用インデックス410であり、この実施例では特に、初期的に作成された無効化用インデックス410を、INDEX_U1_HashMapと呼ぶことにする。
ここでのアプリケーション・プログラム402の典型的な処理とは、クライアント・コンピュータからの、データベースに対する更新クエリあるいは参照クエリを受け取ることである。更新クエリあるいは参照クエリを受け取った際の処理の詳細は、図9及び図10のフローチャートを参照して、後で説明する。
アプリケーション・プログラム402は、ステップ804で、一定期間、処理を実行することによって、更新頻度と参照頻度の情報を蓄積する。ここでいう一定期間とは、文字通り所定の時間であってもよいし、更新クエリあるいは参照クエリを所定の回数受け取ることであってもよい。
アプリケーション・プログラム402は、ステップ806で、更新頻度と参照頻度の情報をもとに、無効化用インデックスを再分割して、INDEX_U1_WeightedHashMapを生成する。このインデックス再分割処理は、図11のフローチャートを参照して、後で説明する。
なお、好適には、INDEX_U1_WeightedHashMapは、INDEX_U1_HashMapとは別の実体ではなく、この実施例では、INDEX_U1_HashMapに対して無効化用インデックスを再分割する処理を施した時点で、INDEX_U1_HashMapをINDEX_U1_WeightedHashMapと呼び変えている。
図8に示すINDEX_U1_WeightedHashMapの作成処理は、定期的に、あるいは所定のイベントに応答して、繰り返してもよい。このとき、ステップ802におけるINDEX_U1_HashMapとは、実際は前に作成されたINDEX_U1_WeightedHashMapであることに留意されたい。
次に、図9のフローチャートを参照して、アプリケーション・プログラム402がクライアント・コンピュータから更新クエリを受け取った場合の処理を説明する。
ステップ902では、クライアント・コンピュータが更新クエリを発行し、アプリケーション・プログラム402がその更新クエリを受け取る。ここで更新クエリとは例えば、次のようなSQL文であらわされるものである。
UPDATE ITEM SET CC = 'S72' WHERE AA = 'css' AND CC = 'S71'
ステップ904では、アプリケーション・プログラム402は、WHERE句のパラメータを抽出する。上記の例では、「AA = 'css' AND CC = 'S71'」が、WHERE句のパラメータである。
ステップ906では、アプリケーション・プログラム402は、WHERE句のパラメータからハッシュ値を計算する。本発明はこれに限定されるものではないが、この実施例では次のようにしてハッシュ値が計算される。すなわち、'css'と'S71'をそれぞれアスキーの文字コードで数値に変換すると、それぞれ、css = 678383、S71 = 512317となる。それを連結して、678383512317に対してハッシュ関数を適用して、ハッシュ値を得る。ここでのハッシュ関数とは、最も簡単なものとして、適当な素数での法(modulo)を使うこともできる。
この実施例の場合、適当な関数F()を用いて、
W = F('css','S71')
X = F('sjd','S71')
W = F('gh','S72')
W = F('sjd','S72')
....
のようになることを、図7の無効化用インデックスの例は示している。
図7のAACC'のフィールドに格納されるのは、このようにして計算されたハッシュ値である。なお、この実施例では、where句として、AA = ?? AND CC = ??のような定型の検索条件を想定しているので、ハッシュ値の計算が容易である。オンラインショッピングのサイトなどでは、いくつかの定型のクエリを決めて限定し使用するので、このような想定が可能である。
ステップ908では、アプリケーション・プログラム402は、計算結果のハッシュ値をもつINDEX_U1_HashMapの行のIDリストのフィールドにあるIDに対応するデータを、データ・キャッシュ408から削除する。更新クエリによって、そのIDに対応するデータが更新されたので、データ・キャッシュ408にある対応するデータが無効になったからである。これにあわせて、INDEX_U1_HashMapの行のIDリストのフィールドにあるIDのデータは、フラッシュされる。
ステップ910では、アプリケーション・プログラム402は、計算結果のハッシュ値をもつINDEX_U1_HashMapの行のカウントのフィールドの値を1だけ増分して、処理を終る。尚、他の更新が無効化用インデックスに影響を与えることも考えられる。その場合には、影響を受けた行のエントリを削除するなどして、無効化用インデックスを、メンテナンスするなどしてもよい。
次に、図10のフローチャートを参照して、アプリケーション・プログラム402がクライアント・コンピュータから参照クエリを受け取った場合の処理を説明する。
ステップ1002では、クライアント・コンピュータが参照クエリを発行し、アプリケーション・プログラム402がその参照クエリを受け取る。ここで参照クエリとは例えば、次のようなSQL文であらわされるものである。
SELECT * FROM ITEM WHERE AA = 'css' AND CC = 'S71'
ステップ1004では、アプリケーション・プログラム402は、参照クエリの検索条件で指定されたデータが、データ・キャッシュにあるかどうかを判断する。もしそうなら、アプリケーション・プログラム402は、ステップ1006で、無効化用インデックスに必要なカラムの値を抽出する。これは、実際上、ステップ904に関連して説明したのと等価な処理で、参照クエリのWHERE句のパラメータを抽出するものである。
ステップ1008では、アプリケーション・プログラム402は、カラムの値からハッシュ値を計算する。これは、実際上、ステップ906に関連して説明したのと等価な処理である。
ステップ1010では、アプリケーション・プログラム402は、ステップ1006で計算されたハッシュ値を、ハッシュ値フィールドにもつ無効化用インデックス410(INDEX_U1_HashMap)の行のカウント値を1だけ減少させる。
ステップ1012では、アプリケーション・プログラム402は、参照クエリで指定されたIDの値のデータをデータ・キャッシュ408から求めて返し、処理を終了する。
ステップ1004に戻って、アプリケーション・プログラム402が、参照クエリの検索条件で指定されたデータが、データ・キャッシュにないと判断すると、アプリケーション・プログラム402は、ステップ1014で、データベース管理システム404に問い合わせを出して、参照クエリの検索条件で指定されたデータをデータベース406から取得する。
ステップ1016で、アプリケーション・プログラム402は、データベース406から取得したデータを、データ・キャッシュ408に挿入する。
ステップ1018では、アプリケーション・プログラム402は、無効化用インデックスに必要なカラムの値を抽出する。これは、実際上、ステップ904に関連して説明したのと等価な処理で、参照クエリのWHERE句のパラメータを抽出するものである。
ステップ1020では、アプリケーション・プログラム402は、カラムの値からハッシュ値を計算する。これは、実際上、ステップ906に関連して説明したのと等価な処理である。
ステップ1022では、アプリケーション・プログラム402は、ステップ1020で生成したハッシュ値をもつ無効化用インデックス410の行があれば、そのIDリストのフィールドに、ステップ1016でデータ・キャッシュ408に挿入したデータのIDの値を格納する。もしステップ1020で生成したハッシュ値をもつ無効化用インデックス410の行がなければ、アプリケーション・プログラム402は、無効化用インデックス410に空の行を作成し、そのハッシュ値のフィールドに、ステップ1020で計算したハッシュ値を格納し、そのIDリストのフィールドに、ステップ1016でデータ・キャッシュ408に挿入したデータのIDの値を格納する。
ステップ1024では、アプリケーション・プログラム402は、ステップ1022で無効化用インデックス410(INDEX_U1_HashMap)の行のIDリストに追加されたIDの値に対応するデータをデータ・キャッシュ408から求めて返し、処理を終了する。
次に、図11のフローチャートを参照して、アプリケーション・プログラム402が、無効化用インデックス410(INDEX_U1_HashMap)の行を条件に従い分割し、あるいは統合する場合の処理を説明する。
ステップ1102では、アプリケーション・プログラム402は、無効化用インデックス410(INDEX_U1_HashMap)の行において、カウント数が、ユーザーが設定した閾値を超えている領域、すなわち、更新頻度の高い領域を選択する。図12のINDEX_U1_HashMapの例では、AACC'のハッシュ値がXの行とZの行がそれに該当する。
ステップ1104では、アプリケーション・プログラム402は、ステップ1102で選択した更新頻度の高い領域をまとめる処理を行う。それは具体的に、図12において、AACC'のハッシュ値がXの行1202とZの行1204を、INDEX_U1_WeightedHashMapにおいて、行1206に統合する処理である。このとき、行1206のAACC'のフィールドは、XZと表記されているが、これは、ハッシュ値がXとZのどちらでもこの行に該当することを意味する。これを実現するために、
XZ = F1(AAのフィールドの値,CCのフィールドの値) for ID=2,7,6,9,12となるような関数F1()を用意して、行1206のハッシュ値のフィールドには、ハッシュ値の計算に、F()でなくF1()を使うことを指示する目印をつけておく。あるいは、ハッシュ値のフィールドに、ハッシュ値の計算に使用される関数を入れておいてもよい。
このように統合された行では、統合前の行のIDリストも統合され、カウント値は、統合前の行から引き継ぐ必要はなく、0と置いてよい。3行以上の行の統合も可能であるが、別の閾値を設定して、合計のカウント値がその閾値を超える場合は、それ以上の統合はしないで、新たな行との統合をはかるようにしてもよい。
ステップ1106では、無効化用インデックス410(INDEX_U1_HashMap)の行のサイズがK、すなわち、許容される無効化用インデックスの行数以上かどうかをアプリケーション・プログラム402が判断し、もしそうなら、これ以上無効化用インデックス410行を増やすことは許されないので、単に処理は終る。
ステップ1106で、無効化用インデックス410の行のサイズがKより小さいと判断されると、ステップ1108に進み、そこで、アプリケーション・プログラム402は、カウント数の最も小さい領域、すなわち、参照割合の最も高い領域をさらに2分割する処理を行う。それは、図12では、行1208である。この分割は例えば、ステップ906でハッシュ関数として使われた素数の法(modulo)とは異なる素数の法を使って、INDEX_U1_HashMapの分割対象の行1208のIDリストにあるIDを振り分ける。すなわち、ステップ906で説明したデータを数値化した値に対して、元のハッシュ関数では、ID = 1,3,4に対応するデータが同一のハッシュ値をもっていたが、別の法に基づくハッシュ関数によって、INDEX_U1_HashMapの分割対象の行1208が、INDEX_U1_WeightedHashMapで、ID = 1に対応する行1210と、ID = 3,4に対応する行12012振り分けられる。
すなわち、前述の関数F()を用いると、
W = F('css','S71') // ID = 1
W = F('gh','S72') // ID = 3
W = F('sjd','S72') // ID = 4
のように、ID = 1,3,4で同じハッシュ値Wとなるが、別の関数F2()を用意して、
W1 = F2('css','S71') // ID = 1
W2 = F2('gh','S72') // ID = 3
W2 = F2('sjd','S72') // ID = 4
のように、ID = 1のグループと、ID = 3,4のグループで分かれるようにする。
その際、行1210と行1212のハッシュ値のフィールドには、ハッシュ値の計算に、F()でなくF2()を使うことを指示する目印をつけておく。あるいは、ハッシュ値のフィールドに、ハッシュ値の計算に使用される関数を入れておいてもよい。このとき、分割した後の行1210、1212では、カウント値をもとの行1208から引き継ぐ必要はなく、分割した直後で0とおいてよい。
一般的に、INDEX_U1_HashMapからINDEX_U1_WeightedHashMapを生成する際に、カウント値のフィールドは、0にクリアして加算しなおしてよい。
ステップ1108の行の分割は、ステップ1106で、無効化用インデックスのサイズが限界のKに達したと判断されるまで反復される。
このように無効化用インデックス410の行を分割しておくと、更新問い合わせに応答して一度に無効化される無効化用インデックス410の行は1つだけなので、更新問い合わせに従って無効化されるデータ・キャッシュのデータ数を減らし、キャッシュ・ヒット率を向上させることにより、データベース問い合わせを高速化することができる。
無効化用インデックス410におけるハッシュ・フィールドの計算は、必ずしもハッシュ関数を用いる必要はなく、WHERE句以下の式を数字に変換した結果の値を、レンジの固定刻みで振り分けるようにしてもよい。
また、上記実施例では、カウント値のフィールドの数値を、更新クエリに応答して1増加させ、参照クエリに応答して1減少させるようにしていたが、これには限定されず、次のようなバリエーションを採用してもよい。すなわち、この計算結果をカウント値のフィールドに格納する。
(1) 参照数×(参照数 / 更新数)
この場合は、値が高いほうが参照の割合と頻度が高い。
(2) キャッシュヒット率×参照数×(参照数 / 更新数)
これは、アプリケーションのふるまいの差を考慮して、キャッシュヒット率の差を入れた計算方式である。
(3) (キャッシュヒット数)×Chit / {更新数 × Cupdate + (キャッシュミス数) ×Cmiss }
これは、キャッシュヒット、キャッシュ無効化などのコストを考慮した計算方式であり、Chitはキャッシュヒットのコスト、Cupdateはキャッシュ無効化のコスト、Cmissはキャッシュミスのコストである。
さらに、上記実施例では、アプリケーション・サーバ中にデータベースが配置されているが、アプリケーション・サーバとは別にデータベース・サーバを設置して、そちらにデータベースを配置し、アプリケーション・サーバからデータベース・サーバにアクセスするようにしてもよい。
以上、特定のハードウェア及びソフトウェアのプラットアフォームの上で本発明の実施例を説明してきたが、本発明は、任意のコンピュータのハードウェア及びプラットフォームで実施可能であることを、この分野の当業者なら理解するであろう。
102 アプリケーション・サーバ
302 通信インターフェース
306 CPU
308 主記憶
310 ハードディスク・ドライブ
402 アプリケーション・プログラム
404 データベース管理システム
406 データベース
408 データ・キャッシュ
410 無効化用インデックス

Claims (15)

  1. データベースと、該データベースのデータをキャッシュしたデータ・キャッシュと、データ・キャッシュのデータにアクセスするための無効化用インデックスをもつシステムにおいて、コンピュータの処理によって、無効化用インデックスを制御する方法であって、
    検索キーのフィールドと、前記データベースのレコードのIDのリストのフィールドと、カウント値のフィールドをもつ無効化用インデックスを、前記システムのメモリに用意するステップと、
    参照クエリで取得したデータに基づき、検索キー作成に必要なカラム値を抽出して、前記無効化用インデックスの検索キーを作成するステップと、
    前記作成された検索キーをもつ前記無効化用インデックスの行を検索するステップと、
    前記作成された検索キーをもつ前記無効化用インデックスの行が見つかったことに応答して、前記カウント値を減少させるステップと、
    前記作成された検索キーをもつ前記無効化用インデックスの行が見つからなかったことに応答して、新たな前記無効化用インデックスの行を作成して、その検索キーのフィールドに、前記作成された検索キーを格納し、IDのリストのフィールドに、前記検索条件に合致する前記データベースのレコードのIDを格納するステップと、
    所定の時期に、前記カウント値が最小である、前記作成された検索キーをもつ前記無効化用インデックスの行を、前記データベースのレコードの値に関連する条件に基づき分割し、分割した各々の行のIDのリストのフィールドには、前記レコードの値に関連する条件に従い元の行のIDのリストに格納されていたIDの値を振り分けて格納し、分割した各々の行の検索キーのフィールドには、振り分けて格納されたIDの値に基づいて計算された異なる検索キーの値をそれぞれ格納する処理を、可能なインデックス・サイズ内で繰り返すステップを有する、
    無効化用インデックスを制御する方法。
  2. 更新クエリの検索条件部分に基づき、前記無効化用インデックスの検索キーを作成するステップと、
    前記作成された検索キーをもつ前記無効化用インデックスの行が見つかったことに応答して、その行のIDのリストのフィールドに格納されているIDに対応するデータ・キャッシュのデータを無効化し、その行のカウント値を増加させるステップをさらに有する、
    請求項1に記載の方法。
  3. 所定の時期に、前記カウント値が所定の閾値より大きい前記無効化用インデックスの行をまとめて、まとめられた行のIDのリストのフィールドのIDの値を合弁し、合弁されたIDの値に対応する検索キーを計算して、まとめられた行の検索キーのフィールドに格納するステップをさらに有する、請求項2に記載の方法。
  4. 前記カウント値を増加させるステップが、前記カウント値を1だけ増分させる、請求項2に記載の方法。
  5. 前記カウント値を増加または減少させるステップが、前記無効化用インデックスの各行のデータ更新と参照クエリの数を基に重みをつけた値を導出して、前記カウント値に格納する、請求項2に記載の方法。
  6. データベースと、該データベースのデータをキャッシュしたデータ・キャッシュと、データ・キャッシュのデータにアクセスするための無効化用インデックスをもつシステムにおいて、コンピュータの処理によって、無効化用インデックスを制御するプログラムであって、
    前記コンピュータに、
    検索キーのフィールドと、前記データベースのレコードのIDのリストのフィールドと、カウント値のフィールドをもつ無効化用インデックスを、前記システムのメモリに用意するステップと、
    参照クエリで取得したデータに基づき、検索キー作成に必要なカラム値を抽出して、前記無効化用インデックスの検索キーを作成するステップと、
    前記作成された検索キーをもつ前記無効化用インデックスの行を検索するステップと、
    前記作成された検索キーをもつ前記無効化用インデックスの行が見つかったことに応答して、前記カウント値を減少させるステップと、
    前記作成された検索キーをもつ前記無効化用インデックスの行が見つからなかったことに応答して、新たな前記無効化用インデックスの行を作成して、その検索キーのフィールドに、前記作成された検索キーを格納し、IDのリストのフィールドに、前記検索条件に合致する前記データベースのレコードのIDを格納するステップと、
    所定の時期に、前記カウント値が最小である、前記作成された検索キーをもつ前記無効化用インデックスの行を、前記データベースのレコードの値に関連する条件に基づき分割し、分割した各々の行のIDのリストのフィールドには、前記レコードの値に関連する条件に従い元の行のIDのリストに格納されていたIDの値を振り分けて格納し、分割した各々の行の検索キーのフィールドには、振り分けて格納されたIDの値に基づいて計算された異なる検索キーの値をそれぞれ格納する処理を、可能なインデックス・サイズ内で繰り返すステップを実行させる、
    無効化用インデックスを制御するプログラム。
  7. 更新クエリの検索条件部分に基づき、前記無効化用インデックスの検索キーを作成するステップと、
    前記作成された検索キーをもつ前記無効化用インデックスの行が見つかったことに応答して、その行のIDのリストのフィールドに格納されているIDに対応するデータ・キャッシュのデータを無効化し、その行のカウント値を増加させるステップをさらに有する、
    請求項6に記載のプログラム。
  8. 所定の時期に、前記カウント値が所定の閾値より大きい前記無効化用インデックスの行をまとめて、まとめられた行のIDのリストのフィールドのIDの値を合弁し、合弁されたIDの値に対応する検索キーを計算して、まとめられた行の検索キーのフィールドに格納するステップをさらに有する、請求項7に記載のプログラム。
  9. 前記カウント値を増加させるステップが、前記カウント値を1だけ増分させる、請求項7に記載のプログラム。
  10. 前記カウント値を増加または減少させるステップが、前記無効化用インデックスの各行のデータ更新と参照クエリの数を基に重みをつけた値を導出して、前記カウント値に格納する、請求項7に記載のプログラム。
  11. データベースと、該データベースのデータをキャッシュしたデータ・キャッシュと、データ・キャッシュのデータにアクセスするための無効化用インデックスをもつシステムにおいて、
    メモリと、
    検索キーのフィールドと、前記データベースのレコードのIDのリストのフィールドと、カウント値のフィールドをもつ無効化用インデックスを、前記メモリに作成する手段と、
    参照クエリで取得したデータに基づき、検索キー作成に必要なカラム値を抽出して、前記無効化用インデックスの検索キーを作成する手段と、
    前記作成された検索キーをもつ前記無効化用インデックスの行を検索する手段と、
    前記作成された検索キーをもつ前記無効化用インデックスの行が見つかったことに応答して、前記カウント値を減少させる手段と、
    前記作成された検索キーをもつ前記無効化用インデックスの行が見つからなかったことに応答して、新たな前記無効化用インデックスの行を作成して、その検索キーのフィールドに、前記作成された検索キーを格納し、IDのリストのフィールドに、前記検索条件に合致する前記データベースのレコードのIDを格納する手段と、
    所定の時期に、前記カウント値が最小である、前記作成された検索キーをもつ前記無効化用インデックスの行を、前記データベースのレコードの値に関連する条件に基づき分割し、分割した各々の行のIDのリストのフィールドには、前記レコードの値に関連する条件に従い元の行のIDのリストに格納されていたIDの値を振り分けて格納し、分割した各々の行の検索キーのフィールドには、振り分けて格納されたIDの値に基づいて計算された異なる検索キーの値をそれぞれ格納する処理を、可能なインデックス・サイズ内で繰り返す手段を有する、
    システム。
  12. 更新クエリの検索条件部分に基づき、前記無効化用インデックスの検索キーを作成する手段と、
    前記作成された検索キーをもつ前記無効化用インデックスの行が見つかったことに応答して、その行のIDのリストのフィールドに格納されているIDに対応するデータ・キャッシュのデータを無効化し、その行のカウント値を増加させる手段をさらに有する、
    請求項11に記載のシステム。
  13. 所定の時期に、前記カウント値が所定の閾値より大きい前記無効化用インデックスの行をまとめて、まとめられた行のIDのリストのフィールドのIDの値を合弁し、合弁されたIDの値に対応する検索キーを計算して、まとめられた行の検索キーのフィールドに格納する手段をさらに有する、請求項12に記載のシステム。
  14. 前記カウント値を増加させる手段が、前記カウント値を1だけ増分させる、請求項12に記載のシステム。
  15. 前記カウント値を増加または減少させる手段が、前記無効化用インデックスの各行のデータ更新と参照クエリの数を基に重みをつけた値を導出して、前記カウント値に格納する、請求項12に記載のシステム。
JP2010221450A 2010-09-30 2010-09-30 データベースにおけるキャッシュ制御方法、システム及びプログラム Expired - Fee Related JP5567967B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010221450A JP5567967B2 (ja) 2010-09-30 2010-09-30 データベースにおけるキャッシュ制御方法、システム及びプログラム
US13/251,131 US20120166419A1 (en) 2010-09-30 2011-09-30 Method, system and program for cache control in database

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010221450A JP5567967B2 (ja) 2010-09-30 2010-09-30 データベースにおけるキャッシュ制御方法、システム及びプログラム

Publications (2)

Publication Number Publication Date
JP2012078927A true JP2012078927A (ja) 2012-04-19
JP5567967B2 JP5567967B2 (ja) 2014-08-06

Family

ID=46239140

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010221450A Expired - Fee Related JP5567967B2 (ja) 2010-09-30 2010-09-30 データベースにおけるキャッシュ制御方法、システム及びプログラム

Country Status (2)

Country Link
US (1) US20120166419A1 (ja)
JP (1) JP5567967B2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8930627B2 (en) 2012-06-14 2015-01-06 International Business Machines Corporation Mitigating conflicts for shared cache lines
US9177026B2 (en) * 2012-09-27 2015-11-03 LogicBlox, Inc. Leapfrog tree-join
US20140095508A1 (en) 2012-10-01 2014-04-03 International Business Machines Efficient selection of queries matching a record using a cache
US9495400B2 (en) 2012-10-01 2016-11-15 International Business Machines Corporation Dynamic output selection using highly optimized data structures
US9747313B2 (en) * 2012-12-19 2017-08-29 Sap Se Timeline index for managing temporal data
US9489411B2 (en) * 2013-07-29 2016-11-08 Sybase, Inc. High performance index creation
CN103914565B (zh) * 2014-04-21 2017-05-24 北京搜狐新媒体信息技术有限公司 一种向数据库插入数据的方法及装置
KR101613146B1 (ko) * 2015-03-24 2016-04-18 주식회사 티맥스데이터 데이터베이스 암호화 방법
US10430408B2 (en) * 2015-09-24 2019-10-01 International Business Machines Corporation Technology to reduce cost of concatenation for hash array
CN107291756A (zh) 2016-04-01 2017-10-24 阿里巴巴集团控股有限公司 数据缓存的方法及装置
US20210149866A1 (en) * 2019-11-20 2021-05-20 Google Llc Universal data index for rapid data exploration

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1049422A (ja) * 1996-07-31 1998-02-20 Nec Corp リモートファイルのキャッシュ装置
JP2004118482A (ja) * 2002-09-26 2004-04-15 Toshiba Corp 記憶装置、および、キャッシュ方法
JP2010092222A (ja) * 2008-10-07 2010-04-22 Internatl Business Mach Corp <Ibm> 更新頻度に基づくキャッシュ機構

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7499907B2 (en) * 2001-10-12 2009-03-03 Teradata Us, Inc. Index selection in a database system
US7007015B1 (en) * 2002-05-01 2006-02-28 Microsoft Corporation Prioritized merging for full-text index on relational store
US7979425B2 (en) * 2006-10-25 2011-07-12 Google Inc. Server-side match
US7676451B2 (en) * 2007-05-03 2010-03-09 Teradata Us, Inc. Selective database statistics recollection
US7730070B2 (en) * 2007-06-10 2010-06-01 Apple Inc. Index aging and merging
US8275761B2 (en) * 2008-05-15 2012-09-25 International Business Machines Corporation Determining a density of a key value referenced in a database query over a range of rows

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1049422A (ja) * 1996-07-31 1998-02-20 Nec Corp リモートファイルのキャッシュ装置
JP2004118482A (ja) * 2002-09-26 2004-04-15 Toshiba Corp 記憶装置、および、キャッシュ方法
JP2010092222A (ja) * 2008-10-07 2010-04-22 Internatl Business Mach Corp <Ibm> 更新頻度に基づくキャッシュ機構

Also Published As

Publication number Publication date
US20120166419A1 (en) 2012-06-28
JP5567967B2 (ja) 2014-08-06

Similar Documents

Publication Publication Date Title
JP5567967B2 (ja) データベースにおけるキャッシュ制御方法、システム及びプログラム
EP2987096B1 (en) Caching external data sources for sql processing
LeFevre et al. MISO: souping up big data query processing with a multistore system
US10204135B2 (en) Materializing expressions within in-memory virtual column units to accelerate analytic queries
US8620900B2 (en) Method for using dual indices to support query expansion, relevance/non-relevance models, blind/relevance feedback and an intelligent search interface
Ozcan et al. A five-level static cache architecture for web search engines
CN107291806A (zh) 一种Web可视化环境中的数据视图副本迭代方法
US10789262B2 (en) Progressive chart rendering
CN103198361B (zh) 基于多种优化机制的xacml策略评估引擎系统
JP3499105B2 (ja) 情報検索方法および情報検索装置
US20200409955A1 (en) System and method for improved cache utilization using an organizational memory to generate a dashboard
US8150943B2 (en) Methods and apparatus for dynamically generating web pages
JP2022137281A (ja) データ照会方法、装置、電子デバイス、記憶媒体、及びプログラム
WO2016032574A1 (en) Serialized child associations in parent record
US8200673B2 (en) System and method for on-demand indexing
Ozcan et al. Second chance: A hybrid approach for dynamic result caching and prefetching in search engines
JP2014130492A (ja) インデックスの生成方法及び計算機システム
CN110716900A (zh) 一种数据查询方法和系统
JP4573710B2 (ja) データベース管理装置、データベース管理方法及びデータベース管理プログラム
JP5669638B2 (ja) 文書管理装置、文書管理方法、プログラム。
JP7428250B2 (ja) 文書検索の性能を評価する方法、システム、および装置
Akhtar et al. Change-aware scheduling for effectively updating linked open data caches
Akhtar et al. A cache-based method to improve query performance of linked Open Data cloud
Shen et al. An Efficient Directory Entry Lookup Cache With Prefix-Awareness for Mobile Devices
JP2015045995A (ja) 仮想データベースシステム管理装置、管理方法及び管理プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130603

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140218

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140513

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: 20140603

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140620

R150 Certificate of patent or registration of utility model

Ref document number: 5567967

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees