JP5230184B2 - 検索装置、検索方法及び検索プログラム - Google Patents
検索装置、検索方法及び検索プログラム Download PDFInfo
- Publication number
- JP5230184B2 JP5230184B2 JP2007320550A JP2007320550A JP5230184B2 JP 5230184 B2 JP5230184 B2 JP 5230184B2 JP 2007320550 A JP2007320550 A JP 2007320550A JP 2007320550 A JP2007320550 A JP 2007320550A JP 5230184 B2 JP5230184 B2 JP 5230184B2
- Authority
- JP
- Japan
- Prior art keywords
- search
- record
- record number
- unit
- acquisition
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24539—Query rewriting; Transformation using cached or materialised query results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/248—Presentation of query results
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (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)
Description
特許文献1では、演算装置のデータ受信領域が満杯になるとデータ処理装置内部のキャッシュメモリに先読みデータを記憶する。そして、後にキャッシュメモリに記憶した先読みデータを演算装置に転送することで演算処理の高速化を実現する。
特許文献2では、記憶装置が、RDBMSの構成情報、および実行対象クエリ、実行優先度情報などの情報を取得する。そして、取得した情報を用いて記憶装置においてデータキャッシュ制御を行うことで、データアクセス性能を向上させる。
組み込み機器で動作するRDBMSを操作して表示装置にレコードを表示するプログラム(以下、表示プログラム)では、「次のページの表示」「前のページの表示」という処理命令を、「検索結果のうち、先頭から○〜△番目のレコードの表示」等という実際に表示するレコードの番号を用いた具体的な処理命令に変換する。つまり、1度に5件表示する表示プログラムが、現在先頭から6〜10番目のレコードを表示している場合、「次のページの表示」という処理命令を「検索結果のうち、先頭から11〜15番目のレコードの表示」という処理命令変換し、「前のページの表示」という処理命令を「検索結果のうち、先頭から1〜5番目のレコードの表示」という処理命令に変換する。そして、変換後の命令に基づきRDBMSへ検索結果の取得要求を出す。
ここで、上記表示プログラムが検索結果の初期表示、つまり検索結果のうち、先頭から1〜5番目のレコードを表示しているとして、ユーザが左キーを押す(「前のページの表示」の処理命令を出す)と検索結果の末尾に位置するレコードを表示する動作を考える。表示プログラムは、上述のように実際に表示するレコードの番号を用いてRDBMSにレコード取得の要求を出す。「前のページの表示」の処理命令からレコード番号への変換をするためには、検索結果に含まれるレコード件数(以下、ヒット件数)が必要である。例えば、ヒット件数が500件と分かれば、「前のページの表示」の処理命令を「検索結果のうち、先頭から496〜500番目のレコードの表示」という処理命令に変換できる。
つまり、表示プログラムは、「次のページの表示」「前のページの表示」という処理を行うには、表示するレコードと同時に、ヒット件数を取得していなければならない。この課題を解決するためには、レコードを取得するための検索要求をRDBMSに出す前に、その検索要求と同じ条件を用いてヒット件数のみを取得する検索要求を出せばよい。しかし、同じ条件の検索を2回実行することになるため、効率的ではなく、検索結果の表示に時間がかかってしまう。
取得対象項目と検索対象テーブルと検索条件とを示す検索情報を入力する検索情報入力部と、
上記データベースのテーブルであって、上記検索情報入力部が入力した上記検索情報が示す検索対象テーブルから上記検索情報が示す検索条件を満たすレコードを検索して、検索したレコードから上記検索対象テーブルのレコードを一意に特定するレコード番号を順位付けしながら取得するレコード番号検索部と、
所定の順位を示す順位情報を入力する順位情報入力部と、
上記レコード番号検索部が取得したレコード番号であって、上記順位情報入力部が入力した順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを取得する対象項目取得部と
を備えることを特徴とする。
この実施の形態では、検索結果の任意の箇所に位置するレコードを高速に取得することを可能とした検索装置100について説明する。
検索システムは、検索装置100(検索結果取得制御部)、アプリケーション110(検索指示部の一例)、RDBMS120、記憶装置130を備える。
検索装置100は、検索結果の任意の箇所に位置するレコードを高速に取得することを可能とした装置であり、詳細については後述する。
アプリケーション110は、検索装置100を利用するプログラムである。アプリケーション110は、記憶装置130が記憶したデータを取得し、それらを表示し、また他の装置やプログラムに提供する。
RDBMS120は、記憶装置130に蓄積されたデータベースにアクセスする機能を提供するプログラムである。
記憶装置130は、例えば、HDD(Hard Disk Drive)、またはSSD(Solid State Disk)等の不揮発性記憶装置である。記憶装置130は、データの集合(データベース)を蓄積・記憶する。一般に、データベースは複数のテーブルを持つことができ、テーブルは複数のレコードを持つことができる。
つまり、検索装置100は、アプリケーション110からの検索指示に従い、RDBMS120を介して、記憶装置130が記憶したレコードの情報を取得する。そして、検索装置100は、検索して取得した情報をアプリケーション110へ送信する。
また、以下の説明において、処理装置は、例えば、後述するCPU911であり、通信装置は、例えば、後述する通信ボード915やバス912であり、入力装置は、例えば、後述する通信ボード915やキーボード902である。
要求制御部101は、アプリケーション110からの要求を受け付ける機能であり、検索情報入力部102、順位情報入力部103、通知部104を備える。
検索情報入力部102は、検索装置100の外部にあるアプリケーション110から通信装置や入力装置を介して検索開始要求(検索情報の一例)を受け、検索開始要求を通信装置や入力装置を介して検索制御部105へ送信する。
順位情報入力部103は、アプリケーション110から通信装置や入力装置を介して検索結果取得要求(順位情報の一例)を受け、検索結果取得要求を通信装置や入力装置を介して検索制御部105へ送信する。
通知部104は、検索制御部105から通信装置や入力装置を介して検索開始要求と検索結果取得要求とに対する通知(応答)を受信すると、アプリケーション110へ通信装置や入力装置を介して検索開始要求と検索結果取得要求とに対する通知(応答)を送信する。
レコード番号検索部106は、要求制御部101からの検索開始要求を受けると、RDBMS120を用いて検索条件を満たすレコードのレコード番号を処理装置により検索して取得するとともに、検索条件を満たすレコードの数(以下、ヒット件数)を処理装置により数え上げる。
対象項目取得部107は、RDBMS120を用いて取得したレコード番号を検索条件に指定してレコードを処理装置により取得し、取得したレコードを検索結果蓄積部108に格納する。
レコード番号検索部106と対象項目取得部107とは、それぞれの処理が完了すると、それぞれの処理が完了したことを通信装置や入力装置を介して通知部104へ通知する。
(1)アプリケーション110から取得対象項目と検索対象テーブルと検索条件とを示す検索開始要求が入力され、要求制御部101の検索情報入力部102が受け付ける。
(2)次に、検索情報入力部102は、検索開始要求を検索制御部105のレコード番号検索部106へ送信する。
(3)次に、レコード番号検索部106は、検索開始要求の検索条件を満たすレコードを検索対象テーブルから検索して、検索したレコードから上記検索対象テーブルのレコードを一意に特定するレコード番号を順位付けしながら取得して検索結果蓄積部108に記憶する。また、レコード番号検索部106は、併せてヒット件数をカウントする。
(4)次に、検索制御部105の対象項目取得部107は、レコード番号検索部106が取得したレコード番号を条件として指定して、レコード番号検索部106が順位付けした順に、検索対象テーブルの取得対象項目を取得して検索結果蓄積部108に記憶する。
(5)アプリケーション110から何番目のレコードのデータを取得するかを示す検索結果取得要求が入力され、要求制御部101の順位情報入力部103が受け付ける。
(6)順位情報入力部103は、検索結果取得要求を対象項目取得部107へ送信する。
(7)対象項目取得部107は、検索結果蓄積部108から該当のレコードのデータを処理装置により取得して検索結果蓄積部108に記憶する。
(8)通知部104は、対象項目取得部107が検索結果蓄積部108に記憶したデータをアプリケーション110へ送信する。
図2は、検索設定情報200の構造を示す図である。
検索設定情報200は、識別子201、取得対象カラム202(取得対象項目)、検索対象テーブル203、検索条件204、ヒット件数205、検索結果格納場所206、ステータス207を備える。
識別子201は、検索開始要求を一意に識別可能な識別情報である。
取得対象カラム202は、取得したいデータが格納されている1つ以上のカラムの名称を列挙したものである。
検索対象テーブル203は、記憶装置130が記憶したデータベースのテーブルのうち、検索を行うテーブルのテーブル名称である。
検索条件204は、データの絞込みの条件を示す情報である。検索条件204は、例えば、SQLであればWHERE句に記載される情報である。
ヒット件数205は、検索条件204を満たすレコードの件数であり、レコード番号検索部106が数え上げた値である。
検索結果格納場所206は、対象項目取得部107が検索結果蓄積部108に作成する検索結果300の位置(アドレス)である。
ステータス207は検索処理の進行状況である。
検索結果300は、レコード番号301、取得済フラグ302、取得対象カラム値303、取得対象行番号304を備える。ここで、検索結果300には、検索条件を満たすレコードの数だけ(ヒット件数だけ)レコード番号301と取得済フラグ302と取得対象カラム値303とが存在する。つまり、検索結果300では、レコード番号301と取得済フラグ302と取得対象カラム値303とを1つの組として、この組が1つ以上存在する。すなわち、検索結果300は、1つ以上のレコード番号301と取得済フラグ302と取得対象カラム値303とから構成される組と、1つの取得対象行番号304とを備える。
レコード番号301は、RDBMS120がアクセスするテーブルの中にあるレコードを一意に特定する番号である。
取得済フラグ302は、レコード番号301が示すレコードから取得対象カラムのデータを既に取得したか否かを示す情報(フラグ)である。つまり、取得済フラグ302は、後述する取得対象カラム値303にRDBMS120から取得した値が入っているか否かを示す情報である。
取得対象カラム値303は、RDBMS120がアクセスするテーブルのレコードのカラムのうち、取得対象カラム202が示すカラムの値である。取得対象カラム202が複数のカラム名を示す場合、取得対象カラム値303には複数の値が格納される。
取得対象行番号304は、対象項目取得部107が現在取得中のレコードの行番号である。つまり、取得対象行番号304は、検索条件を満たすレコードのうち、前から何番目のレコードを対象項目取得部107が取得中であるかを示す順位情報である。
なお、アプリケーション110が検索結果を表示する動作はいかなる方法でもよいため、ここでは説明しない。また、ここで説明する検索装置100の動作を行う前に、検索対象となるデータベースをオープンする必要があるが、ここでは説明ではその処理についての説明を省略し、データベースへの検索処理が可能な状態になっているものとする。
(S401):要求制御部101の検索情報入力部102は、アプリケーション110から検索開始要求を通信装置又は入力装置を介して受信する。
(S402):検索情報入力部102は、検索設定情報200を処理装置により作成して検索結果蓄積部108に記憶する。
(S403):検索情報入力部102は、識別子201に所定の値を格納する。ここで、所定の値とは、検索設定情報200を一意に特定できる値であればどのような値であってもよい。つまり、検索結果蓄積部108の中に検索設定情報200が複数ある場合、それらの識別子201と重複しない値を格納する。
(S404)〜(S406):検索情報入力部102は、アプリケーション110から受信した検索開始要求に含まれている情報を、検索結果蓄積部108に作成した検索設定情報200の取得対象カラム202、検索対象テーブル203、検索条件204に格納する。例えば、アプリケーション110から受信した検索開始要求が「SELECT Name,Genre,Address FROM ShopData WHERE Genre=’和食’;」というSQL文の場合、取得対象カラム202には「Name,Genre,Address」が格納され、検索対象テーブル203には「ShopData」が格納され、検索条件204には「Genre=’和食’」が格納される。なお、アプリケーション110から受け取った情報を、検索設定情報200に格納する具体的な手順は、検索装置100とアプリケーション110との間で予め決められているものとする。
(S407):検索情報入力部102は、検索設定情報200のステータス207に「検索開始前」を意味する所定の値を格納する。
(S408):検索情報入力部102は、レコード番号検索部106へ検索開始を指示する。つまり、検索情報入力部102は、検索設定情報200をレコード番号検索部106へ通知することにより、検索開始要求をレコード番号検索部106へ通知する。検索情報入力部102は、例えば、識別子201をレコード番号検索部106へ通知するとしてもよい。これにより、レコード番号検索部106は、検索結果蓄積部108から検索開始要求を取得できる。
(S409):要求制御部101の通知部104は、(S408)で検索情報入力部102がした指示に対するレコード番号検索部106からの応答を待たず、アプリケーション110に識別子201を送信する。ここで「応答を待たず」とは、アプリケーション110とレコード番号検索部106とは異なるプロセス、もしくはスレッドで動作しており、(S408)の指示が非同期命令であることを意味している。なお、識別子201はアプリケーション110が検索装置100から検索結果を受け取るときに用いる。
(S410):要求制御部101は、アプリケーション110から検索開始要求を受けた際の動作を完了する。
(S501):検索制御部105のレコード番号検索部106は、検索情報入力部102から検索開始の指示を受けると、検索結果300を検索結果蓄積部108に生成する。
(S502):レコード番号検索部106は、検索設定情報200の検索結果格納場所206に、(S501)で生成した検索結果300の先頭位置(アドレス)を設定(格納)する。
(S503):レコード番号検索部106は、ヒット件数205を初期化する。
(S504):レコード番号検索部106は、RDBMS120に対して、レコード番号を取得する検索を実行する。ここで、レコード番号とは、RDBMS120がテーブル内部にあるレコードを一意に特定するために用いる番号である。レコード番号は、RDBMS120の種類によっては、特殊な名称として保持されている場合や、テーブル設計時に特定の条件を満たすカラムをレコード番号と見なしている場合がある。ここでは、RDBMS120がレコード番号を「_RowId_」という名前のカラムとしてテーブル毎に保持しているものとする。つまり、レコード番号検索部106は、例えば、「SELECT _RowId_ From <テーブル名> WHERE <検索条件>;」というSQL文を作成する。レコード番号検索部106は、<テーブル名>には検索対象テーブル203に設定された値、<検索条件>には検索条件204に設定された値を設定する。そして、レコード番号検索部106は、上記SQL文をRDBMS120へ送信し、応答を受信する。
(S505):レコード番号検索部106は、RDBMS120からの応答がエラーであるか否かを判定する。エラーでないと判定した場合(S505でNo)、(S506)へ進む。一方、エラーであると判定した場合(S505でYes)、(S510)へ進む。
(S506):レコード番号検索部106は、RDBMS120から検索結果、つまりレコード番号を取得する。
(S507):レコード番号検索部106は、RDBMS120から「エラーなし」、「エラー発生」、「検索完了」のいずれかの応答を受信し、「エラー発生」又は「検索完了」であるか否かを判定する。そして、RDBMS120からの応答が「エラーなし」の場合(S507でNo)、(S508)へ進む。一方、RDBMS120からの応答が「エラー発生」又は「検索完了」の場合(S507でYes)、(S510)へ進む。
(S508):レコード番号検索部106は、(S506)で取得したレコード番号を、検索結果300のレコード番号301を順番に(順序付けしながら)設定する。ここで、検索結果300に対するレコード番号の設定処理は上書きでなく、追記である。つまり、レコード番号を取得する毎に、レコード番号301、取得済フラグ302、取得対象カラム値303の組の数が増加する。
(S509):レコード番号検索部106は、ヒット件数205をインクリメント(+1)する。そして、再び、レコード番号をRDBMS120から取得する処理(S506)へ戻り、処理を繰り返す。
(S510):レコード番号検索部106は、通知部104へヒット件数の数え上げが完了したことを通知する。また、レコード番号検索部106は、(S505)又は(S507)から(S510)へ遷移した理由(「検索完了」又は「エラー発生」)も合わせて通知部104へ通知(送信)する。
(S511):レコード番号検索部106は、ヒット件数の数え上げ動作を完了する。
(S601):検索制御部105の対象項目取得部107は、(S511)でレコード番号検索部106のヒット件数の数え上げ動作が完了すると、取得対象カラム202が示すカラムの値を検索結果300に設定する処理を開始する。
(S602):対象項目取得部107は、取得対象行番号304を1に初期化する。
(S603):対象項目取得部107は、順位情報入力部103から検索結果取得要求を受信したか否かを判定する。検索結果取得要求を受信していないと判定した場合(S603でNo)(S604)へ進む。一方、検索結果取得要求を受信したと判定した場合(S603でYes)、割り込み処理(S699)へ進む。割り込み処理については、後述する。
(S604):対象項目取得部107は、取得対象行番号304に対応するレコードの取得済フラグ302に基づき、取得対象行番号304に対応するレコードの値が取得済か否かを判定する。取得対象行番号304に対応するレコードの値が取得済でない場合(S604でNo)、(S605)へ進む。一方、取得対象行番号304に対応するレコードの値が取得済である場合(S604でYes)、(S610)へ進む。
(S605):対象項目取得部107は、取得対象行番号304が示す順位((S508)で付けた順位)のレコード番号301を取得する。対象項目取得部107は、例えば、取得対象行番号304の値が1の場合、検索結果の先頭(1位)のレコード番号301を取得する。
(S606):対象項目取得部107は、(S605)で取得したレコード番号301により特定されるレコードの、取得対象カラム202が示すカラムの値を取得する処理をRDBMS120に対して実行する。例えば、アプリケーション110から受信した検索開始要求が「SELECT Name,Genre,Address FROM ShopData WHERE Genre=’和食’;」というSQL文の場合、対象項目取得部107は、「SELECT <カラム名列> FROM <テーブル名> WHERE _RowId_=<レコード番号>」のSQL文を生成して実行する。ここで、対象項目取得部107は、<カラム名列>には取得対象カラム202に設定された値、<テーブル名>には取得対象テーブル203に設定された値、<レコード番号>には(S605)で取得したレコード番号301を設定する。そして、対象項目取得部107は、上記SQLをRDBMS120へ送信し、応答を受信する。
(S607):対象項目取得部107は、でRDBMS120からの応答がエラーであるか否かを判定する。エラーでないと判定した場合(S607でNo)、(S608)へ進む。一方、エラーであると判定した場合(S607でYes)、(S612)へ進む。
(S608):対象項目取得部107は、取得対象行番号304が示す順位の取得対象カラム値303に検索結果を設定する。つまり、上記SQLであれば、Name、Genre、Addressの各値を取得対象カラム値303に設定する。
(S609):対象項目取得部107は、取得対象行番号304が示す順位の取得済フラグ302を「取得済」を意味する値に更新する。
(S610):対象項目取得部107は、取得対象行番号304の値をインクリメント(+1)する。
(S611):対象項目取得部107は、取得対象行番号304の値が検索設定情報200のヒット件数205の値より大きいか否かを判定する。取得対象行番号304の値がヒット件数205の値以下である場合(S611でNo)、(S603)へ進み、処理を繰り返す。一方、取得対象行番号304の値がヒット件数205の値より大きい場合(S611でYes)、(S612)へ進む。
(S612):対象項目取得部107は、通知部104へ検索処理の完了通知を送信する。つまり、対象項目取得部107は、(S612)へ遷移した理由(「エラー発生」又は「取得対象行番号304の値がヒット件数205の値より大きい(検索完了に相当する)」を示す値を通知部104へ通知(送信)する。
(S613):対象項目取得部107は、取得対象カラム202が示すカラムの値を取得する動作を完了する。
つまり、アプリケーション110から「500番目のレコードのAddressカラム」の取得を要求する検索結果取得要求を順位情報入力部103へ送信した場合、まず、順位情報入力部103はステータス207が「検索完了」の値となっているかを確認する。そして、ここでは、検索処理が完了しているので、対象項目取得部107は序数(ここでは、500番目)に該当するレコードの取得対象カラム値303からAddressカラムの値を取得し、通知部104はアプリケーション110へ送信する。
なお、検索設定情報200のステータス207が「エラー発生」の場合、通知部104はアプリケーション110にエラーを返す。
まず、図7に基づき、割り込み処理について説明する。図7は、図6における割り込み処理(S699)の動作を示すフローチャートである。割り込み処理は、対象項目取得部107が図6に示すカラム値取得処理を実行中にアプリケーション110が検索結果取得要求を検索装置100へ送信した場合に発生する処理である。
(S702):対象項目取得部107は、検索結果300を参照し、序数からレコード番号301を求める。つまり、序数が示す順位のレコード番号301を取得する。
(S703):対象項目取得部107は、取得済フラグ302の値に基づき、該当するレコードの値を取得済であるか否かを判定する。該当するレコードの値を取得済でない場合(S703でNo)、(S704)へ進む。一方、該当するレコードの値を取得済である場合(S703でYes)、(S709)へ進む。
(S704):対象項目取得部107は、レコード番号301により特定されるレコードの取得対象カラム202が示すカラムの値を取得する処理をRDBMS120に対して実行する。例えば、アプリケーション110から受信した検索開始要求が「SELECT Name,Genre,Address FROM ShopData WHERE Genre=’和食’;」というSQL文の場合、対象項目取得部107は、「SELECT <カラム名列> FROM <テーブル名> WHERE _RowId_=<レコード番号>」のSQL文を生成する。ここで、対象項目取得部107は、<カラム名列>には取得対象カラム202に設定された値、<テーブル名>には取得対象テーブル203に設定された値、<レコード番号>には(S605)で取得したレコード番号301を設定する。
(S705):対象項目取得部107は、(S704)で設定した検索を実行して応答を受信する。
(S706):対象項目取得部107は、RDBMS120からの応答がエラーであるか否かを判定する。エラーでないと判定した場合(S706でNo)、(S707)へ進む。一方、エラーであると判定した場合(S706でYes)、(S709)へ進む。
(S707):対象項目取得部107は、取得した値を検索結果300の取得対象カラム303に設定する。
(S708):対象項目取得部107は、取得済フラグ302を取得済を示す値に更新する。
(S709):対象項目取得部107は、要求制御部101へ処理完了を示す値を通知(送信)する。
(S710):対象項目取得部107は、割り込み処理を完了する。
そして、割り込み処理を完了すると、通知部104は、検索結果300の取得対象カラム値303に設定された値をアプリケーション110へ送信する。
なお、ここでは1番目のレコードの取得対象カラム値303が示すカラムの値は既に検索結果蓄積部108に設定されているものとする。また、対象項目取得部107は、検索処理を完了していないものとする。つまり、対象項目取得部107は、上述した図6の処理を実行している最中であるとする。
検索結果取得要求を受信した対象項目取得部107は、上述した(S603)で検索結果取得要求を受信したと判定して(S603でYes)、割り込み処理(S699)へ進み、割り込み処理を開始する(S701)。続いて、対象項目取得部107は、序数が示す順位(ここでは、1位)のレコード番号301に設定されたレコード番号を取得する(S702)。対象項目取得部107は、取得済フラグ302の値に基づき、該当するレコードの値を取得済であるか否かを判定する(S703)。ここでは、1番目のレコードの値は取得済である。そのため、処理完了を示す値を通知部104へ通知(送信)する(S709)。そして、通知部104は、検索結果蓄積部108から、検索結果300の序数が示す順位(ここでは、1位)のレコードの取得対象カラム値303に設定されたNameカラムの値を、アプリケーション110へ送信する。
検索結果取得要求を受信した対象項目取得部107は、上述した(S603)で検索結果取得要求を受信したと判定して(S603でYes)、割り込み処理(S699)へ進み、割り込み処理を開始する(S701)。続いて、対象項目取得部107は、序数が示す順位(ここでは、1000位)のレコード番号301に設定されたレコード番号を取得する(S702)。対象項目取得部107は、取得済フラグ302の値に基づき、該当するレコードの値を取得済であるか否かを判定する(S703)。ここでは、1000番目のレコードの値は取得済でない。そのため、レコード番号を検索条件に設定して(S704)、検索を実行する(S705)。対象項目取得部107は、RDBMS120からの応答がエラーなしの場合(S706でNo)、取得した値を取得対象カラム303に設定して(S707)、取得済フラグ302を取得済に更新する(S708)。処理完了を示す値を通知部104へ通知(送信)する(S709)。そして、通知部104は、検索結果蓄積部108から、検索結果300の序数が示す順位(ここでは、1000位)のレコードの取得対象カラム値303に設定されたAddressカラムの値を、アプリケーション110へ送信する。
この実施の形態に係る検索装置100は、アプリケーション110からの検索開始要求を受けると、まず検索条件204を満たすレコード番号のみを取得し、レコード番号の個数を数えることでヒット件数を求め、ヒット件数の数え上げが完了した時点でアプリケーション110にヒット件数を通知する。そのため、アプリケーション110は、検索結果が何件であり、検索結果が表示ページの何ページ分に相当するのか(検索結果が500件で、表示を1度に5件できるなら100ページ分)などの判断を、検索結果全体の取得が完了する前に高速に行うことが可能である。したがって、「次のページの表示」「前のページの表示」という処理を、実際に表示するレコードの番号を用いた具体的な処理命令に高速に変換することが可能である。
全てのレコードの値の取得が完了していない場合に検索結果取得要求を受信すると、検索装置100は、実行している図6に示すカラム値取得処理を一時的に停止して、アプリケーション110から指定されたレコードのカラムの値を先に取得し、アプリケーション110へ送信する。そして、検索装置100は、改めて一時停止していた図6に示すカラム値取得処理を再開する。そのため、取得したいレコードが検索結果のどの位置(先頭、末尾、真中など)にあっても取得に要する時間はほぼ等しい。言い替えると、末尾にあるレコードの値であっても高速に取得することが可能である。
上記説明では、ヒット件数の通知を受けた後に、アプリケーション110が検索装置100に対して検索結果取得要求を出す場合の説明をした。しかし、ヒット件数の通知前に、アプリケーション110が検索装置100に対して検索結果取得要求を出してもよい。
この場合、レコード番号検索部106は、指定された序数に該当するレコード番号をRDBMS120から取得するまではレコード番号の取得を継続する。レコード番号検索部106が該当するレコード番号を取得すると、対象項目取得部107はそのレコード番号を用いて、取得対象カラム値303に値を設定する。そして、取得対象カラム値303に値を設定した後に、レコード番号検索部106は、再びレコード番号の取得処理に戻る。一方、通知部104は、対象項目取得部107が取得対象カラム値303に設定した値をアプリケーション110へ送信する。このような動作とすることで、アプリケーション110はヒット件数が分かる前に、レコード番号取得済であるレコードの取得が可能となり、レコードの高速な表示を実現することが可能である。
つまり、レコード番号検索部106は、レコード番号を取得し終える前に順位情報入力部103が検索結果取得要求を入力すると、検索結果取得要求が示す順位までレコード番号の取得を継続する。そして、対象項目取得部107は、レコード番号検索部106が検索結果取得要求が示す順位までレコード番号を取得すると、検索結果取得要求が示す順位のレコード番号により特定されるレコードの取得対象カラム202のデータを取得する。
このような動作を実現するためには、例えば、割り込み処理(S699)において、取得対象行番号304の値を、検索結果取得要求の序数の次の値(上記例では、序数が500番目なので、その次の501番目)に設定する。また、検索結果300に「取得完了レコード数」の項目を追加して、(S602)で対象項目取得部107が取得完了レコード数を初期化する処理を追加するとともに、(S610)の処理を、「取得完了レコード数のインクリメント」と「取得対象行番号304のインクリメントした値をヒット件数で割った余り(剰余)を取得対象行番号304に設定」とに変更して、さらに、(S611)を「取得完了レコード数>ヒット件数?」に変更する。ここで、取得対象行番号304のインクリメントした値をヒット件数で割った余り(剰余)を取得対象行番号304に設定するのは、取得対象行番号304が501番目から1000番目まで変化すると、次は1001番目ではなく、1番目に戻るようにするためである。
このような動作とすることで、アプリケーション110が500番目のレコードを取得した後に予想される501番目、502番目の検索結果を先に取得することができ、アプリケーション110に対する検索装置100の応答の高速化を実現することが可能である。
つまり、対象項目取得部107は、レコード番号検索部106がレコード番号を取得し終えると、レコード番号検索部106が順位付けした順位の先頭から順にレコード番号により特定されるレコードの取得対象カラム202のデータを取得して検索結果蓄積部108に記憶する。そして、検索対象テーブル203の取得対象カラム202のデータを取得して検索結果蓄積部108に記憶している間に順位情報入力部103が検索結果取得要求を入力すると、検索結果取得要求が示す順位から順にレコード番号により特定されるレコードの取得対象カラム202のデータを取得してアプリケーション110へ送信する。
なお、検索対象テーブル203の取得対象カラム202のデータを取得して検索結果蓄積部108に記憶している間に順位情報入力部103が検索結果取得要求を入力した場合であって、検索結果取得要求が示す順位のレコード番号により特定されるレコードから取得対象カラム202のデータを既に取得している場合には、先頭から順に上記レコード番号により特定されるレコードの取得対象カラム202のデータを取得して検索結果蓄積部108に記憶する処理を継続するとしてもよい。
検索装置100の検索結果取得順序制御方式は、アプリケーション110から受けた検索開始要求を、検索条件を満たすレコード番号の検索と、上記検索により得られるレコード番号を検索条件としたアプリケーション110指定のカラムの検索に分割し、上記レコード番号の検索にて検索条件を満たすレコードの件数を数え上げてアプリケーション110に通知し、上記レコード番号を条件とした検索中に、アプリケーション110から検索結果取得要求を受けると、上記レコード番号を条件とした検索を一時停止し、上記検索結果取得要求を優先的に処理し、その後レコード番号を条件とした検索を一時停止した箇所から再開することを特徴とする。
図8は、検索装置100のハードウェア構成の一例を示す図である。
図8に示すように、検索装置100は、プログラムを実行するCPU911(Central・Processing・Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう)を備えている。CPU911は、バス912を介してROM913、RAM914、LCD901(Liquid Crystal Display)、キーボード902、通信ボード915、磁気ディスク装置920(HDD,SSD等)と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置920の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
通信ボード915とキーボード902とは、入力装置の一例である。
また、通信ボード915とバス912とは、出力装置の一例である。
さらに、通信ボード915とバス912とは、通信装置の一例である。
また、さらに、LCD901は、表示装置の一例である。
ファイル群924には、上記の説明において「検索設定情報200」、「検索結果300」等として説明した情報やデータや信号値や変数値やパラメータが、「ファイル」や「データベース」の各項目として記憶される。「ファイル」や「データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのCPU911の動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のCPU911の動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、上記の説明におけるフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、RAM914のメモリ、その他光ディスク等の記録媒体に記録される。また、データや信号は、バス912や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
なお、上述したように、検索装置100、アプリケーション110、RDBMS120、記憶装置130は、それぞれが個々の装置として分かれた構成であってもよい。
また、上記説明において、「情報」として説明したものは、「値」、「データ」であってもよく、同様に、「値」として説明したものは、「情報」、「データ」であってもよく、同様に、「データ」として説明したものは、「情報」、「値」であってもよい。
Claims (8)
- データベースからデータを検索する検索装置であり、
取得対象項目と検索対象テーブルと検索条件とを示す検索情報を入力する検索情報入力部と、
上記データベースのテーブルであって、上記検索情報入力部が入力した上記検索情報が示す検索対象テーブルから上記検索情報が示す検索条件を満たすレコードを検索して、検索したレコードから上記検索対象テーブルのレコードを一意に特定するレコード番号を順位付けしながら取得するレコード番号検索部と、
所定の順位を示す順位情報を入力する順位情報入力部と、
上記レコード番号検索部が取得したレコード番号であって、上記順位情報入力部が入力した順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを取得する対象項目取得部と
を備え、
上記対象項目取得部は、上記レコード番号検索部がレコード番号を取得し終えると、上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得して記憶装置に記憶し、上記順位情報入力部が上記順位情報を入力すると、上記順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを既に上記記憶装置に記憶している場合には、そのデータを上記記憶装置から取得する
ことを特徴とする検索装置。 - 上記検索情報入力部は、所定の検索指示部の入力に従い上記検索情報を入力し、
上記レコード番号検索部は、レコード番号を取得するとともに、上記検索条件を満たすレコードの件数をカウントし、
上記検索装置は、さらに、
上記レコード番号検索部がカウントしたレコードの件数を上記所定の検索指示部へ通知する通知部
を備えることを特徴とする請求項1に記載の検索装置。 - 上記対象項目取得部は、上記レコード番号検索部がレコード番号を取得し終えると、上記レコード番号検索部が順位付けした順位の先頭から順に上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得して記憶装置に記憶するとともに、
上記検索対象テーブルの上記取得対象項目のデータを取得して記憶装置に記憶している間に上記順位情報入力部が上記順位情報を入力すると、上記順位情報が示す順位から順に上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得する
ことを特徴とする請求項1又は2に記載の検索装置。 - 上記対象項目取得部は、上記レコード番号検索部がレコード番号を取得し終えると、上記レコード番号検索部が順位付けした順位の先頭から順に上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得して記憶装置に記憶するとともに、
上記検索対象テーブルの上記取得対象項目のデータを取得して記憶装置に記憶している間に上記順位情報入力部が上記順位情報を入力した場合であって、上記順位情報が示す順位のレコード番号により特定されるレコードから上記取得対象項目のデータを既に取得している場合には、先頭から順に上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得して記憶装置に記憶する処理を継続する
ことを特徴とする請求項1から3までのいずれかに記載の検索装置。 - 上記レコード番号検索部は、レコード番号を取得し終える前に上記順位情報入力部が上記順位情報を入力すると、上記順位情報が示す順位までレコード番号の取得を継続し、
上記対象項目取得部は、上記レコード番号検索部が上記順位情報が示す順位までレコード番号を取得すると、上記順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを取得する
ことを特徴とする請求項1から4までのいずれかに記載の検索装置。 - 上記対象項目取得部は、上記レコード番号検索部がレコード番号を取得するのと合わせて、上記検索条件を満たすレコードから所定の項目も取得する
ことを特徴とする請求項1から5までのいずれかに記載の検索装置。 - データベースからデータを検索する検索方法であり、
入力装置が、取得対象項目と検索対象テーブルと検索条件とを示す検索情報を入力する検索情報入力ステップと、
処理装置が、上記データベースのテーブルであって、上記検索情報入力ステップで入力した上記検索情報が示す検索対象テーブルから上記検索情報が示す検索条件を満たすレコードを検索して、検索したレコードから上記検索対象テーブルのレコードを一意に特定するレコード番号を順位付けしながら取得するレコード番号検索ステップと、
入力装置が、所定の順位を示す順位情報を入力する順位情報入力ステップと、
処理装置が、上記レコード番号検索ステップで取得したレコード番号であって、上記順位情報入力ステップで入力した順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを取得する対象項目取得ステップと
を備え、
上記対象項目取得ステップでは、上記レコード番号検索ステップでレコード番号を取得し終えると、上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得して記憶装置に記憶し、上記順位情報入力ステップで上記順位情報が入力されると、上記順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを既に上記記憶装置に記憶している場合には、そのデータを上記記憶装置から取得する
ことを特徴とする検索方法。 - データベースからデータを検索する検索プログラムであり、
取得対象項目と検索対象テーブルと検索条件とを示す検索情報を入力する検索情報入力処理と、
上記データベースのテーブルであって、上記検索情報入力処理で入力した上記検索情報が示す検索対象テーブルから上記検索情報が示す検索条件を満たすレコードを検索して、検索したレコードから上記検索対象テーブルのレコードを一意に特定するレコード番号を順位付けしながら取得するレコード番号検索処理と、
所定の順位を示す順位情報を入力する順位情報入力処理と、
上記レコード番号検索処理で取得したレコード番号であって、上記順位情報入力処理で入力した順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを取得する対象項目取得処理と
をコンピュータに実行させ、
上記対象項目取得処理では、上記レコード番号検索処理でレコード番号を取得し終えると、上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得して記憶装置に記憶し、上記順位情報入力処理で上記順位情報が入力されると、上記順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを既に上記記憶装置に記憶している場合には、そのデータを上記記憶装置から取得する
ことを特徴とする検索プログラム。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007320550A JP5230184B2 (ja) | 2007-12-12 | 2007-12-12 | 検索装置、検索方法及び検索プログラム |
EP08011849.0A EP2071476B1 (en) | 2007-12-12 | 2008-07-01 | Search device, search method and search program |
US12/167,476 US20090157621A1 (en) | 2007-12-12 | 2008-07-03 | Search device, search method and search program |
CN2008101454186A CN101458696B (zh) | 2007-12-12 | 2008-08-05 | 检索装置和检索方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007320550A JP5230184B2 (ja) | 2007-12-12 | 2007-12-12 | 検索装置、検索方法及び検索プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2009146022A JP2009146022A (ja) | 2009-07-02 |
JP5230184B2 true JP5230184B2 (ja) | 2013-07-10 |
Family
ID=40510403
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007320550A Expired - Fee Related JP5230184B2 (ja) | 2007-12-12 | 2007-12-12 | 検索装置、検索方法及び検索プログラム |
Country Status (4)
Country | Link |
---|---|
US (1) | US20090157621A1 (ja) |
EP (1) | EP2071476B1 (ja) |
JP (1) | JP5230184B2 (ja) |
CN (1) | CN101458696B (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120239688A1 (en) * | 2009-12-04 | 2012-09-20 | Takatoshi Yanase | Table lookup apparatus, table lookup method, and table lookup system |
US9824126B2 (en) * | 2010-02-15 | 2017-11-21 | Blackberry Limited | Methods and apparatus for a comprehensive searching on a mobile device |
CN103023986B (zh) * | 2012-11-27 | 2016-01-13 | 中国电信股份有限公司 | 一种对多用户提供rdbms服务的系统和方法 |
CN104899279A (zh) * | 2015-05-29 | 2015-09-09 | 百度在线网络技术(北京)有限公司 | 用于数据处理的系统以及数据处理的方法 |
US10120938B2 (en) * | 2015-08-01 | 2018-11-06 | MapScallion LLC | Systems and methods for automating the transmission of partitionable search results from a search engine |
CN108052656A (zh) * | 2017-12-28 | 2018-05-18 | 迈普通信技术股份有限公司 | 一种数据缓存控制方法及设备 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02236668A (ja) * | 1989-03-10 | 1990-09-19 | Hitachi Ltd | 入出力処理方法 |
JPH04310183A (ja) * | 1991-04-09 | 1992-11-02 | Nec Software Kansai Ltd | リレーショナル型データベースの検索・出力方法 |
US5666526A (en) * | 1993-09-02 | 1997-09-09 | Microsoft Corp. | Method and system for supporting scrollable, updatable database queries |
JPH06314306A (ja) * | 1993-05-06 | 1994-11-08 | Hitachi Ltd | データベース表示方法 |
US5835904A (en) * | 1995-10-31 | 1998-11-10 | Microsoft Corporation | System and method for implementing database cursors in a client/server environment |
JP2001184353A (ja) * | 1999-12-21 | 2001-07-06 | Internatl Business Mach Corp <Ibm> | データベース情報のスクロール |
US6598041B1 (en) * | 2000-09-07 | 2003-07-22 | International Business Machines Corporation | Method, system, and program for processing modifications to data in tables in a database system |
JP4162184B2 (ja) | 2001-11-14 | 2008-10-08 | 株式会社日立製作所 | データベース管理システムの実行情報を取得する手段を有する記憶装置 |
US6907422B1 (en) * | 2001-12-18 | 2005-06-14 | Siebel Systems, Inc. | Method and system for access and display of data from large data sets |
EP1343132A1 (en) * | 2002-03-08 | 2003-09-10 | Fujitsu Siemens Computers, Inc. | Data viewer |
US20050027692A1 (en) * | 2003-07-29 | 2005-02-03 | International Business Machines Corporation. | Method, system, and program for accessing data in a database table |
US7849109B1 (en) * | 2004-07-30 | 2010-12-07 | Microsoft Corporation | Use of server processing of temporary results for stateless paging over arbitrary user queries |
US7406463B2 (en) * | 2004-11-04 | 2008-07-29 | International Business Machines Corporation | Advanced scrolling for relational database applications |
US7761451B2 (en) * | 2005-06-17 | 2010-07-20 | Microsoft Corporation | Efficient querying and paging in databases |
US20070067305A1 (en) * | 2005-09-21 | 2007-03-22 | Stephen Ives | Display of search results on mobile device browser with background process |
-
2007
- 2007-12-12 JP JP2007320550A patent/JP5230184B2/ja not_active Expired - Fee Related
-
2008
- 2008-07-01 EP EP08011849.0A patent/EP2071476B1/en not_active Expired - Fee Related
- 2008-07-03 US US12/167,476 patent/US20090157621A1/en not_active Abandoned
- 2008-08-05 CN CN2008101454186A patent/CN101458696B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101458696B (zh) | 2012-03-14 |
JP2009146022A (ja) | 2009-07-02 |
EP2071476A1 (en) | 2009-06-17 |
US20090157621A1 (en) | 2009-06-18 |
EP2071476B1 (en) | 2014-04-30 |
CN101458696A (zh) | 2009-06-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6152226B2 (ja) | キャッシュクエリ要求の生成 | |
JP5230184B2 (ja) | 検索装置、検索方法及び検索プログラム | |
JP6099046B2 (ja) | 文を検索する装置および方法 | |
JP6211196B2 (ja) | 自律的メモリ検索のための方法及びシステム | |
US10872368B2 (en) | System and method for browsing a product catalog and for dynamically generated product paths | |
US11048753B2 (en) | Flexible record definitions for semi-structured data in a relational database system | |
JP4948276B2 (ja) | データベース検索装置及びデータベース検索プログラム | |
US20080282190A1 (en) | Content display control apparatus and content display control method | |
EP3262497A1 (en) | Contextual zoom | |
US20150169576A1 (en) | Dynamic Search Results | |
JP5858307B2 (ja) | データベース管理システム、計算機、データベース管理方法 | |
EP2915076A1 (en) | Sorting search results | |
JP5160483B2 (ja) | ストレージシステム及びデータマイグレーション対応検索システム | |
CN113486226A (zh) | 用于搜索结果注释的方法和系统 | |
US9122727B1 (en) | Identification of related search queries that represent different information requests | |
JP5186270B2 (ja) | データベースのキャッシュシステム | |
JP6157965B2 (ja) | 電子機器、方法、およびプログラム | |
US8868593B1 (en) | User interface content view searching | |
JP5978297B2 (ja) | 管理システム及び管理方法 | |
JP5147296B2 (ja) | 計算機システム、データベース管理方法及びプログラム | |
JP5541014B2 (ja) | 書籍情報検索装置、書籍情報検索システム、書籍情報検索方法及びプログラム | |
US9411639B2 (en) | System and method for managing network navigation | |
JP6056211B2 (ja) | 情報管理装置、情報管理プログラム、及び情報管理方法 | |
JP2016048577A (ja) | データベース管理システム、計算機、データベース管理方法 | |
JP5813458B2 (ja) | データベース装置およびデータベース装置の制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20101008 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20120913 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20120918 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20121017 |
|
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: 20130219 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130319 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20160329 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |