JP5181140B2 - データベースを検索するためのコンピュータ・システム、方法及びコンピュータ・プログラム - Google Patents
データベースを検索するためのコンピュータ・システム、方法及びコンピュータ・プログラム Download PDFInfo
- Publication number
- JP5181140B2 JP5181140B2 JP2009039918A JP2009039918A JP5181140B2 JP 5181140 B2 JP5181140 B2 JP 5181140B2 JP 2009039918 A JP2009039918 A JP 2009039918A JP 2009039918 A JP2009039918 A JP 2009039918A JP 5181140 B2 JP5181140 B2 JP 5181140B2
- Authority
- JP
- Japan
- Prior art keywords
- time stamp
- value
- belonging
- time
- computer system
- 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/2455—Query execution
- G06F16/24552—Database cache management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (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
SELECT * FROM CD
WHERE ID=? AND EffectiveDate <= ?
ORDER BY EffectiveDate DESC FETCH FIRST 1 ROW ONLY
SELECT employee.id FROM employee WHERE employee.age < 25
というクエリの結果がキャッシュに保存されているとする。この場合、
SELECT employee.id FROM employee WHERE employee.age < 30
というクエリが発行されると、employee.age < 25の範囲のデータが上記キャッシュから取得され、employee.age>= 25 且つemployee.age < 30 の範囲のデータがデータベースから取得される。
上記キャッシュ手法では、キャッシュに保存された各データが最新であるかどうかを、タイムスタンプを用いて判断する。各データをキャッシュに載せた時間より新しい時間にキャッシュに載っているデータを検索範囲として含むクエリが発行された場合、キャッシュ・データの検証が行われる。しかしながら、上記キャッシュ手法において、タイムスタンプは、キャッシュ・データの検証のために使用されるに過ぎず、指定したクエリを高速に処理するためには使用されない。
上記データベースに挿入される値に対応付けられたIDごとに、
時間順にソートされている少なくとも1のタイムスタンプ(第1のタイムスタンプ)と、
該第1のタイムスタンプそれぞれに属する値と、
該第1のタイムスタンプのうちのいずれか1つを指定するポインタであって、上記第1のタイムスタンプは上記値が有効になる時刻を示す、上記ポインタと
を含む。
上記IDごとに、
上記ポイントされた上記第1のタイムスタンプと、
該第1のタイムスタンプに属する値と
を含む。
上記第1のデータ構造を格納する第1の記憶部と、
上記第2のデータ構造を格納する第2の記憶部と、
指定時刻における最新の値を上記データベースから検索するための問い合わせを受け付ける受付部であって、上記問い合わせは、少なくとも1のIDを特定するための記述と検索する時刻を示す第2のタイムスタンプとを含む、上記受付部と、
上記第1の記憶部に格納された上記特定されたIDに属する第1のタイムスタンプのうち、上記第2のタイムスタンプを超えない最大のタイムスタンプを有する第1のタイムスタンプ(第1の最大タイムスタンプ)を特定する特定部と、
上記特定されたIDに属し且つ上記ポイントされた第1のタイムスタンプが上記第1の最大タイムスタンプと同じであることに応じて、上記特定されたIDに属する値を上記第2の記憶部から取得する取得部と
を含む。
上記特定されたIDに属し且つ上記ポイントされた第1のタイムスタンプが上記第1の最大タイムスタンプよりも古いことに応じて、上記第1の最大タイムスタンプに属する値を上記第1の記憶部から取得する。
上記特定されたIDに属し且つ上記ポイントされた上記第1のタイムスタンプ及び該第1のタイムスタンプに属する値を、上記第1の最大タイムスタンプ及び該第1の最大タイムスタンプに属する値それぞれに置換する置換部をさらに含む。
上記第2のタイムスタンプが上記第2の記憶部に保存されている上記特定されたIDに属し且つ上記ポイントされた上記第1のタイムスタンプより古いことに応じて、上記特定されたIDに属し且つ上記第2のタイムスタンプを超えない最大のタイムスタンプ(第2の最大タイムスタンプ)と該第2の最大タイムスタンプに属する値とを取得し、上記第1の最大タイムスタンプが上記取得した第2の最大タイムスタンプより新しい場合、上記第1の最大タイムスタンプに属する値を上記第1の記憶部から取得する。
上記第2の記憶部に検索対象であるIDに属する値がない場合、
上記データベースを検索し、上記第2のタイムスタンプを超えない最大のタイムスタンプに属する値を取得する。
上記トランザクションに含まれる、
挿入対象である値と、
上記挿入対象である値が有効になる時刻を示す第3のタイムスタンプと
を、上記第1の記憶部に登録する登録部をさらに含む。
上記取得部が、上記データベースを検索して、
上記挿入対象である値に対応するIDに属する上記第3のタイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
上記挿入対象である値に対応するIDに属する上記第3のタイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値と
をさらに取得し、
上記登録部が、
上記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
上記取得した新しいタイムスタンプ及び該タイムスタンプに属する値と
を上記第1の記憶部にさらに登録し、
上記コンピュータ・システムが、上記登録された最大のタイムスタンプと前上記登録された新しいタイムスタンプとを時刻順にソートするソート部をさらに含む。
上記登録部が、
上記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、上記第2の記憶部にさらに登録する。
上記ポイントされた第1のタイムスタンプより古い時刻を示す第1のタイムスタンプ及び該第1のタイムスタンプに属する値を、上記第1の記憶部から削除する削除部をさらに含む。
上記第2の記憶部に保存されている、
上記ポイントされた第1のタイムスタンプ及び
該第1のタイムスタンプに属する値
を、
上記第3の最大タイムスタンプ及び
該第3の最大タイムスタンプに属する値
にそれぞれ置換する置換部をさらに含む。
挿入トランザクションの開始に応じて、
上記トランザクションに含まれる、
挿入対象である値と、
上記挿入対象である値が有効になる時刻を示すタイムスタンプと
を、第1の記憶部に登録するステップと、
上記登録に応じて、上記第1の記憶部に含まれる少なくとも1のタイムスタンプであって、上記挿入対象である値に対応するIDに属するタイムスタンプを時刻順にソートするステップと
を含む。
挿入トランザクションの開始に応じて、
上記トランザクションに含まれる挿入対象である値に対応するIDに属するタイムスタンプが第1の記憶部にない場合、上記データベースを検索して、
上記挿入対象である値に対応するIDに属する上記タイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
上記挿入対象である値に対応するIDに属する上記タイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値と
を取得するステップと、
上記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
上記取得した新しいタイムスタンプ及び該タイムスタンプに属する値と
を上記第1の記憶部に登録するステップと、
上記登録された最大のタイムスタンプと上記登録された新しいタイムスタンプとを時刻順にソートするステップと、
上記登録された最大のタイムスタンプをポインタで指定するステップと、
上記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、第2の記憶部にさらに登録するステップと
を含む。
上記第1のデータ構造を第1の記憶部に格納するステップと、
上記第2のデータ構造を第2の記憶部に格納するステップと、
指定時刻における最新の値を上記データベースから検索するための問い合わせを受け付けるステップであって、上記問い合わせは、少なくとも1のIDを特定するための記述と検索する時刻を示す第2のタイムスタンプとを含む、上記受け付けるステップと、
上記第1の記憶部に格納された上記特定されたIDに属する第1のタイムスタンプのうち、上記第2のタイムスタンプを超えない最大のタイムスタンプを有する第1のタイムスタンプ(第1の最大タイムスタンプ)を特定するステップと、
上記特定されたIDに属し且つ上記ポイントされた第1のタイムスタンプが上記第1の最大タイムスタンプと同じであることに応じて、上記特定されたIDに属する値を上記第2の記憶部から取得するステップと
を含む。
上記特定されたIDに属し且つ上記ポイントされた第1のタイムスタンプが上記第1の最大タイムスタンプよりも古いことに応じて、上記第1の最大のタイムスタンプに属する値を上記第1の記憶部から取得するステップをさらに含む。
上記第2の記憶部に保存されている、
上記特定されたIDに属し且つ上記ポイントされた上記第1のタイムスタンプ及び
該第1のタイムスタンプに属する値
を、
上記第1の最大タイムスタンプ及び
該第1の最大タイムスタンプに属する値
にそれぞれ置換するステップをさらに含む。
上記第2のタイムスタンプが上記第2の記憶部に保存されている上記特定されたIDに属し且つ上記ポイントされた上記第1のタイムスタンプより古いことに応じて、上記特定されたIDに属し且つ上記第2のタイムスタンプを超えない最大のタイムスタンプ(第2の最大タイムスタンプ)と該第2の最大タイムスタンプに属する値とを上記データベースから取得するステップと、
上記第1の最大タイムスタンプが上記取得した第2の最大タイムスタンプより新しい場合、上記第1の最大タイムスタンプに属する値を上記第1の記憶部から取得するステップと
をさらに含む。
上記データベースを検索し、上記第2のタイムスタンプを超えない最大のタイムスタンプに属する値を取得するステップをさらに含む。
本発明の1つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記トランザクションに含まれる、挿入対象である値と、上記挿入対象である値が有効になる時刻を示す第3のタイムスタンプとを、上記第1の記憶部に登録するステップをさらに含む。
上記データベースを検索して、上記挿入対象である値に対応するIDに属する上記第3のタイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、上記挿入対象である値に対応するIDに属する上記第3のタイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値とを取得するステップを含む。
また、上記登録するステップは、上記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、上記取得した新しいタイムスタンプ及び該タイムスタンプに属する値とを上記第1の記憶部に登録するステップをさらに含む。
本発明の1つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記登録された最大のタイムスタンプと上記登録された新しいタイムスタンプとを時刻順にソートするステップをさらに含む。
また、上記登録するステップは、
上記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、上記第2の記憶部にさらに登録するステップをさらに含む。
上記ポイントされた第1のタイムスタンプより古い時刻を示す第1のタイムスタンプ及び該第1のタイムスタンプに属する値を、上記第1の記憶部から削除するステップを含む。
上記第2の記憶部に保存されている、上記ポイントされた第1のタイムスタンプ及び該第1のタイムスタンプに属する値を、上記第3の最大タイムスタンプ及び該第3の最大タイムスタンプに属する値にそれぞれ置換するステップを含む。
「ID」とは、値の種類を識別するための項目である。IDは、値の種類を種類ごとに、例えば一意な識別子として表される。データベースが、例えば銀行預金についてのデータベースであって、値の種類が、例えば「口座名義人」、「入金額」、「出金額」及び「残高」であるとする。すると、IDは、例えば口座名義人を表す識別子「10」、入金額を表す識別子「11」、出金額を表す識別子「12」及び残高を表す識別子「13」で表される。また、値の種類は、複数の種類を組み合わせたものでもよい。値の種類は、例えば入金額と出金額とを組み合わせた「入出金額」としてもよい。
「値」とは、上記IDに属する具体的な値を示す項目である。上記IDが、例えば口座名義人を表す識別子「10」の場合、値は、例えば口座名義人の具体的な名前「ヤマダ タロウ」である。
「タイムスタンプ」とは、値に関連付けられた時間の情報を示す項目である。タイムスタンプは、タイムスタンプに属する値が有効になる時間を表す。時間の情報は、タイムスタンプ同士の順番を特定できる情報である。時間の情報は、例えば年、年月日、時刻又は時間と関連付けられた識別子である。上記値が、例えば具体的な入金額「10000」の場合、タイムスタンプは、例えば入金が実行された時間「2008−12−24 09:00:00」である。
タイムスタンプに設定される時間の情報をデータの有効時間という。
ID、値及びタイムスタンプは、データベースでサポートされているフォーマットであれば、どのような形式のデータであってもよい。上記形式は、例えば数値型、文字列型、日付型又はBOOLEAN型である。
問い合わせには、IDを特定するための記述及びタイムスタンプが含まれる。
IDを特定するための記述とは、例えば、IDがある識別子であること、IDがある範囲に含まれること、IDを表す識別子がある値より大きいこと又はIDを表す識別子がある値より小さいことを条件とする記述である。該記述は、クエリがSQLならば、例えば、where句の記述である。また、複数のIDが特定されてもよい。
テーブル(101)は、ID、値及びタイムスタンプを含む。上記IDは、値の種類を識別するための列項目である。上記値は、IDに属する具体的な値を示す列項目である。上記タイムスタンプは、上記値に関連付けられた時間の情報を示す列項目である。
例えば、2006年1月10日11:00にID=11の最新の値を返す問い合わせが行われると、1レコード目(102)の値が返される。2レコード目(103)の値はまだタイムスタンプの示す時間に達していないために、最新のデータとして返されることはない。
アプリケーション・サーバ(201)は、アプリケーション・プログラム(202)及びアプリケーション・キャッシュ(203)を含む、コンピュータ・システムである。また、アプリケーション・サーバ(201)は、DB(206)をさらに含んでもよい。アプリケーション・サーバ(201)は、トランザクション(211)を処理し、該処理の結果をDB(206)に反映させる。アプリケーション・プログラム(202)は、トランザクション(211)を処理するプログラムである。アプリケーション・キャッシュ(203)は、アプリケーション・プログラム(202)用に用意されたキャッシュ領域である。アプリケーション・キャッシュ(203)には、インサート・ログ・キャッシュ(204)及びカレント・キャッシュ(205)が含まれる。インサート・ログ・キャッシュ(204)は、IDごとに、挿入される値と該値に対応するタイムスタンプとを記録するログ領域である。カレント・キャッシュ(205)は、IDごとに、「現在の最新の値」として返した値及び該値に対応するタイムスタンプが保存される領域である。
トランザクション(211)が値の検索の場合、アプリケーション・プログラム(202)は、カレント・キャッシュ(205)から値の取得を試みる(213)。上記データ検索のクエリで指定するタイムスタンプが、カレント・キャッシュ(205)に保持されている上記クエリで指定するIDに属するタイムスタンプよりも新しい場合、アプリケーション・キャッシュ(203)上の値が、最新の値としてアプリケーション・プログラム(202)に返される(214)。上記データ検索のクエリで指定するタイムスタンプが、カレント・キャッシュ(205)に保持されている上記クエリで指定するIDに属するタイムスタンプよりも古い場合、インサート・ログ・キャッシュ(204)及びデータベース(206)への問い合わせ(215、217)が実行される。上記問い合わせの結果同士が比較され、タイムスタンプに指定された時点における最新の値が、アプリケーション・プログラム(202)に返される(214)。
本発明の実施態様では、現在時刻を指定してその時点の最新の値を返すクエリが多くを占めるシステムを前提としている。よって、カレント・キャッシュ(205)に保存されたクエリのタイムスタンプの示す時間は、上記トランザクション(211)に含まれるクエリのタイムスタンプの示す時間よりも後の時間であることが多くを占める。従って、データベースへのアクセス回数が減少し、検索時のレイテンシ短縮が可能である。
コンピュータ・システムは、挿入トランザクションが開始されると、該トランザクションのログをアプリケーション・キャッシュ(203)上にあるデータベースの遅延更新のためのログ・キャッシュであるインサート・ログ・キャッシュ(204)に書き込む。コンピュータ・システムは、上記インサート・ログ・キャッシュ(204)上のトランザクションのログを、IDごとにタイムスタンプ順にソートしたリスト状になるよう並べる。上記並べることが完了した時点で、そのトランザクションはコミットされる。なお、挿入される値に対応するIDについてのログがインサート・ログ・キャッシュ(204)に存在しない場合、コンピュータ・システムは、データベース(206)から、最新のデータ及び未来のデータを取得し、該データをIDについてのログとして、タイムスタンプ順にソートしたリスト状になるよう並べる。
コンピュータ・システムは、検索トランザクションが開始されると、カレント・キャッシュ・ポジションの指すタイムスタンプから、上記検索トランザクションに含まれるタイムスタンプまでのインサート・ログ・キャッシュ(203)の情報を反映し、最新のデータを返す。コンピュータ・システムは、カレント・キャッシュ・ポジションのポインタを、上記クエリ結果として返したデータを指すように変更する。なお、検索トランザクションに含まれるタイムスタンプに指定された時刻が、カレント・キャッシュ・ポジションの指すタイムスタンプに指定された時刻より古い場合、コンピュータ・システムは、インサート・ログ・キャッシュ(203)に含まれるタイムスタンプとデータベースへの問い合わせ結果に含まれるタイムスタンプとを比較して、上記検索トランザクションに含まれるタイムスタンプに指定された時刻での最新のデータを返す。
インサート・ログ・キャッシュ(301)は、挿入のクエリに対応するタイムスタンプと値との組(302〜305)を保持する。タイムスタンプと値との組(302〜305)は、インサート・ログ・キャッシュ(301)に組が挿入されるたびに、IDごとにタイムスタンプにソートして並べられる。インサート・ログ・キャッシュ(301)の例では、ID=11について、新しいタイムスタンプを含む組ほど、左に配置されている。また、カレント・キャッシュ・ポジションポインタは、カレント・キャッシュに収められているタイムスタンプ及び値を示している。
カレント・キャッシュ(311)は、IDごとに,上記カレント・キャッシュ・ポジション・ポインタで指されている組に含まれる値及びタイムスタンプを保持する。
データの挿入は、データ挿入のクエリによって実行される。データ挿入のクエリは、ID、タイムスタンプ及び値を含む。データ挿入のクエリは、ID及びタイムスタンプごとに値をデータベースに登録するためのクエリである。
データ挿入のクエリが発行されると、コンピュータ・システムは、以下のステップ401〜402を実行する。該実行により、インサート・ログ・キャッシュに登録されているリストであって、上記クエリによって指定するIDについての該リストが更新される。なお、上記リストがインサート・ログ・キャッシュに登録されていない場合、コンピュータ・システムは、ステップ400〜ステップ403を実行する前に、後述するキャッシュ・データを初期化する処理ステップ(図4C、ステップ421〜424)を実行する。
ステップ400は、処理の開始である。
ステップ401では、コンピュータ・システムは、インサート・ログ・キャッシュに値及びタイムスタンプを挿入する。コンピュータ・システムは、データ挿入のクエリで指定される値に対応するIDについてのリストに、上記データ挿入のクエリで指定される値とタイムスタンプとの組を登録する。そして、コンピュータ・システムは、上記リストに含まれる組を該組それぞれに含まれるタイムスタンプの示す時刻順にソートする。ソートが終了することに応じて、処理は、ステップ402に進む。
ステップ402では、コンピュータ・システムは、上記データ挿入のクエリについてのコミットを実行する。該コミットの実行により、データの挿入処理は終了する。
ステップ403は、処理の終了である。
データ検索のクエリが発行されると、コンピュータ・システムは、以下のステップ410〜419を実行する。該実行により、コンピュータ・システムは、カレント・キャッシュ、インサート・ログ・キャッシュ又はデータベースからデータ検索の結果を得ることができる。
ここで、上記検索のクエリは、ID、値及びタイムスタンプを含むテーブルを検索するクエリであるとする。また、検索されるレコードは、クエリで指定されたID(以下、指定ID)を含み、且つ、クエリで指定されたタイムスタンプ(以下、指定タイムスタンプ)より古いか又は同じかであるタイムスタンプうち最大のタイムスタンプを含むレコードであるとする。
ステップ410は、処理の開始である。
ステップ411では、コンピュータ・システムは、指定タイムスタンプがカレント・キャッシュに含まれるタイムスタンプと同じ又は新しいかを判定する。コンピュータ・システムは、指定タイムスタンプと、カレント・キャッシュに登録されているタイムスタンプであって、データ検索のクエリで指定されたIDに属する該タイムスタンプ(以下、キャッシュ・タイムスタンプ)とを比較する。該比較の結果、指定タイムスタンプが、上記キャッシュ・タイムスタンプと同じ又は上記キャッシュ・タイムスタンプより新しい場合、処理は、ステップ412に進む。上記指定タイムスタンプが、上記キャッシュ・タイムスタンプより古い場合、処理は、ステップ416に進む。
ステップ412では、コンピュータ・システムは、インサート・ログ・キャッシュに登録されており且つ上記検索のクエリによって指定されるIDについてのリストに、上記キャッシュ・タイムスタンプより新しいタイムスタンプであって、上記指定タイムスタンプを超えない該タイムスタンプを含む組が含まれているかどうかを検査する。該検査では、カレント・キャッシュ・ポジション・ポインタによってポイントされている組から、上記指定タイムスタンプを超えない最大のタイムスタンプを含む組までがチェックされる。該検査によって、上記キャッシュ・タイムスタンプよりも新しいタイムスタンプを含む組が発見された場合、コンピュータ・システムは、上記発見された組のうち、上記指定タイムスタンプを超えない最大のタイムスタンプを含む組をデータ検索の結果の値を含む組と判定する。そして、処理はステップ414に進む。発見されなかった場合、処理は、ステップ413に進む。
ステップ413では、コンピュータ・システムは、カレント・キャッシュに登録されている上記指定IDに属する値を、データ検索の結果として返し、処理を終了する。
ステップ414では、コンピュータ・システムは、最新の値及びタイムスタンプをカレント・キャッシュに登録する。コンピュータ・システムは、カレント・キャッシュに登録されているIDに属する値を、上記発見された組に含まれる値に置き換える。また、コンピュータ・システムは、キャッシュ・タイムスタンプを、上記発見された組に含まれるタイムスタンプに置き換える。上記置き換えが終了したならば、処理は、ステップ415に進む。
ステップ415では、コンピュータ・システムは、カレント・キャッシュ・ポジションを更新する。コンピュータ・システムは、カレント・キャッシュ・ポジション・ポインタのポイントする組を、上記発見された組に変更する。コンピュータ・システムは、上記発見された組に含まれる値をデータ検索の結果として返し、処理は終了する。
ステップ416では、コンピュータ・システムは、インサート・ログ・キャッシュに含まれる最新の値を特定する。コンピュータ・システムは、インサート・ログ・キャッシュに登録されているリストであって、上記検索のクエリによって指定されるIDについての該リストに、上記指定タイムスタンプより古いタイムスタンプを含む組が含まれているかどうかをチェックする。該チェックによって、上記指定タイムスタンプよりも古いタイムスタンプを含む組が発見された場合、コンピュータ・システムは、発見された組のうち最大のタイムスタンプを含む組をステップ418で比較される対象に特定する。上記特定が終了したならば、処理は、ステップ417に進む。
ステップ417では、コンピュータ・システムは、上記検索のクエリを用いて、データベースに問い合わせを行う。該問い合わせが終了したら、処理は、ステップ418に進む。
ステップ418では、コンピュータ・システムは、インサート・ログ・キャッシュに含まれる最新の値に対応するタイムスタンプと、データベースへの問い合わせ結果に含まれるタイムスタンプとを比較し、最新の値を特定する。ステップ416で特定された組がある場合、コンピュータ・システムは、上記特定された組に含まれるタイムスタンプと、上記問い合わせにより得られるタイムスタンプとを比較する。該比較において、上記特定された組に含まれるタイムスタンプが新しい場合、コンピュータ・システムは、上記特定された組に含まれる値をデータ検索の結果として返す。上記問い合わせにより得られるタイムスタンプが新しい場合、コンピュータ・システムは、問い合わせにより得られる値をデータ検索の結果として返す。そして、処理は終了する。
ステップ416で特定された組がない場合、コンピュータ・システムは、
上記問い合わせにより得られる値をデータ検索の結果として返す。そして、処理は終了する。
ステップ419は、処理の終了である。
データ挿入時において、値に関連付けられたIDについてのリストがインサート・ログ・キャッシュに登録されていない場合、コンピュータ・システムは、以下のステップ420〜425を実行する。該実行により、上記IDについてのアプリケーション・キャッシュが初期化される。
ステップ420は、処理の開始である。
ステップ421では、コンピュータ・システムは、データ挿入のクエリが発行された時点における最新のタイムスタンプに属する値と、問い合わせた時刻よりも新しい、未来の時刻のタイムスタンプに属する値を取得する。コンピュータ・システムは、値に対応するIDを含むレコードであって、下記(1)又は(2)の条件を満たすタイムスタンプを含む該レコードを、データベースから取得する。
(1)データ挿入のクエリが発行された時刻を越えない最大のタイムスタンプを含むレコード。
(2)取得の問い合わせが実行された時刻よりも新しい未来のタイムスタンプを含むレコード。
ステップ422では、コンピュータ・システムは、インサート・ログ・キャッシュに、値をタイムスタンプ順に登録する。コンピュータ・システムは、上記取得したレコードそれぞれに含まれるタイムスタンプと値との組を含むリストであって、値に対応するIDについての該リストを作成する。コンピュータ・システムは、上記リストに含まれる組を該組それぞれに含まれるタイムスタンプの示す時刻順にソートする。コンピュータ・システムは、上記リストをインサート・ログ・キャッシュに登録する。
ここで、コンピュータ・システムは、上記取得したレコードであって、上記インサート・ログ・キャッシュに登録されるリストに含まれるタイムスタンプ及び値を含む該レコードが、既にデータベースに反映済みであることを、例えば、上記リストに登録しておいてもよい。コンピュータ・システムは、上記既にデータベースに反映済みであることを、例えば、上記組のそれぞれに対応するフラグとして、上記リスト登録する。コンピュータ・システムは、上記リストをインサート・ログ・キャッシュに登録することに応じて、上記フラグを立てる。該フラグは、遅延更新が実行されるタイミングで、コンピュータ・システムに参照される。コンピュータ・システムは、立っているフラグに対応する組について、遅延更新を実行しない。こうすることにより、遅延更新によって、インサート・ログ・キャッシュに含まれ且つデータベースに反映済みのデータがデータベースに再び反映されることを防ぐことができる。なお、上記データベースに反映済みのデータが、重複でデータベースに登録されたとしても、同じデータが挿入されるだけであり問題はない。
ステップ423では、コンピュータ・システムは、問い合わせた時点における最新のタイムスタンプに属する値をカレント・キャッシュに登録する。コンピュータ・システムは、上記(1)の条件を満たすレコードを、値に対応するIDについてのレコードとして、カレント・キャッシュに登録する。
ステップ424では、コンピュータ・システムは、問い合わせた時点における最新のタイムスタンプに属する値にポインタを指定する。コンピュータ・システムは、インサート・ログ・キャッシュに登録されたタイムスタンプと値との組であって、上記(1)の条件を満たすレコードに含まれるタイムスタンプと値との該組に、カレント・キャッシュ・ポジションを指定する。
ステップ425は、処理の終了である。
リスト(501A)は、インサート・ログ・キャッシュに登録されているID=11についてのリストである。リスト(501A)は、組(502A〜504A)を含む。組(502A〜504A)はそれぞれ、タイムスタンプ及び値を含む。また、組(503A)は、カレント・キャッシュ・ポインタ(505A)でポイントされている組である。
ここで、例えば、値である「1700」及びタイムスタンプである「2006−01−12 12:00:00」をID=11に対応するデータとしてデータベースに登録するためのデータ挿入のクエリが発行されたとする。
コンピュータ・システムは、リスト(501A)に、上記クエリで指定される値とタイムスタンプとの組(506A)を登録(507)する。そして、コンピュータ・システムは、上記リスト(501A)に含まれる組(502A〜506A)を該組(502A〜506A)それぞれに含まれるタイムスタンプの示す時刻順にソートする。ここで、組(506A)に含まれるタイムスタンプである「2006−01−12 12:00:00」は、組(502A)に含まれるタイムスタンプである「2006−01−13 09:00:00」よりも古く、組(503A)に含まれるタイムスタンプである「2006−01−12 09:30:00」よりも新しい。よって、該ソートでは、組(502A)と組(503A)との間に組(506A)が入る。リスト(501B)は、ソート後のリストを示す。
上記ソートが終了することに応じて、コンピュータ・システムは、上記データ挿入のクエリについてのコミットを実行する。該コミットにより、データ挿入の処理は終了する。
第1の具体例として、データ検索の指定IDが「11」であり、指定タイムスタンプがその時点での現在時刻「2006―01−12 11:30:00」であるとする。
コンピュータ・システムは、指定タイムスタンプと、カレント・キャッシュ(521)に含まれるID=11に対応するタイムスタンプとを比較する。上記ID=11に対応するタイムスタンプは、「2006−01−12 09:30:00」である。よって、上記現在時刻である指定タイムスタンプは、上記ID=11に対応するタイムスタンプよりも新しいタイムスタンプである。
コンピュータ・システムは、インサート・ログ・キャッシュに含まれるID=11についてのリスト(512)を検査する。ここで、上記ID=11についてのリスト(512)は、左側がより新しいタイムスタンプを含む組になるようにソートされている。コンピュータ・システムは、カレント・キャッシュ・ポジション・ポインタによってポイントされている組(517)から、現在時刻である指定タイムスタンプを超えない最大のタイムスタンプを含む組までを順にチェックする。まず、コンピュータ・システムは、カレント・キャッシュ・ポジション・ポインタによってポイントされている組(517)に含まれるタイムスタンプをチェックする。なお、該チェックは、カレント・キャッシュ(521)における上記比較と同じ処理であるので省略可能である。組(517)に含まれるタイムスタンプは、「2006−01−12 09:30:00」であり、現在時刻である指定タイムスタンプを超えていない。よって、コンピュータ・システムは、さらに組(516)に含まれるタイムスタンプをチェックする。組(516)に含まれるタイムスタンプは、「2006−01−12 12:00:00」であり、現在時刻である指定タイムスタンプを超えている。カレント・キャッシュ(521)に含まれるID=11に対応するタイムスタンプよりも新しいタイムスタンプを含む組が、リスト(512)から発見されなかったため、コンピュータ・システムは、カレント・キャッシュに登録されているID=11に属する値を、データ検索の結果として返す。
コンピュータ・システムは、指定タイムスタンプと、カレント・キャッシュ(521)に含まれるID=11に対応するタイムスタンプとを比較する。上記ID=11に対応するタイムスタンプは、「2006−01−12 09:30:00」である。よって、上記現在時刻である指定タイムスタンプは、上記ID=11に対応するタイムスタンプよりも新しいタイムスタンプである。
コンピュータ・システムは、インサート・ログ・キャッシュ(511)に含まれるID=11についてのリスト(512)を検査する。ここで、上記ID=11についてのリスト(512)は、左側がより新しいタイムスタンプを含む組になるようにソートされている。コンピュータ・システムは、カレント・キャッシュ・ポジション・ポインタによってポイントされている組(517)から、現在時刻である指定タイムスタンプを超えない最大のタイムスタンプを含む組までを順にチェックする。まず、コンピュータ・システムは、カレント・キャッシュ・ポジションポインタによってポイントされている組(517)に含まれるタイムスタンプをチェックする。なお、該チェックは、カレント・キャッシュ(521)における上記比較と同じ処理であり省略可能である。組(517)に含まれるタイムスタンプは、「2006−01−12 09:30:00」であり、現在時刻である指定タイムスタンプを超えていない。よって、コンピュータ・システムは、さらに組(516)に含まれるタイムスタンプをチェックする。組(516)に含まれるタイムスタンプは、「2006−01−12 12:00:00」であり、現在時刻である指定タイムスタンプを超えていない。よって、コンピュータ・システムは、さらに組(515)に含まれるタイムスタンプをチェックする。組(515)に含まれるタイムスタンプは、「2006−01−13 09:00:00」であり、現在時刻である指定タイムスタンプを超えている。よって、コンピュータ・システムは、組(516)をデータ検索の結果の値を含む組と判定する。
コンピュータ・システムは、カレント・キャッシュに登録されているID=11に属する値を、上記判定された組(516)に含まれる値に置き換える。また、コンピュータ・システムは、カレント・キャッシュに登録されているID=11に対応するタイムスタンプを、上記判定された組(516)に含まれるタイムスタンプに置き換える。
コンピュータ・システムは、カレント・キャッシュ・ポジション・ポインタのポイントする組を、上記判定された組(516)に変更する。
コンピュータ・システムは、上記判定された組(516)に含まれる値をデータ検索の結果として返す。
コンピュータ・システムは、指定タイムスタンプと、カレント・キャッシュ(521)に含まれるID=11に対応するタイムスタンプとを比較する。上記ID=11に対応するタイムスタンプは、「2006−01−12 09:30:00」である。よって、上記指定タイムスタンプは、上記ID=11に対応するタイムスタンプよりも古いタイムスタンプである。
コンピュータ・システムは、インサート・ログ・キャッシュ(511)に含まれるID=11についてのリスト(512)を検査する。ここで、上記ID=11についてのリスト(512)は、左側がより新しいタイムスタンプを含む組になるようにソートされている。
コンピュータ・システムは、上記指定タイムスタンプよりも古いタイムスタンプを含む組のうち、最も新しいタイムスタンプを含む組が、リスト(511)に含まれているかをチェックする。該チェックでは、カレント・キャッシュ・ポジションポインタによってポイントされている組(517)の1つ右側にソートされている組があるかがチェックされる。該チェックにより、組(518)が発見される。よって、コンピュータ・システムは、組(518)に含まれるタイムスタンプ「2006−01−11 09:00:00」を以下の比較の対象とする。次に、コンピュータ・システムは、データベース(531)を検索する。該検索により取得されるタイムスタンプは、上記比較の対象とされたタイムスタンプよりも古い。
よって、コンピュータ・システムは、上記発見された組(518)に含まれる値をデータ検索の結果として返す。
現在時刻を含む問い合わせが発行された場合、常にカレント・キャッシュ・ポジション以降のデータが対象になる。もし未来の時刻を指定する問い合わせが発行された場合、カレント・キャッシュ・ポジションは変更しない。
データ挿入のクエリによって挿入される値に対応するIDについてのリストがインサート・ログ・キャッシュ(543)にない場合、キャッシュ・データの初期化が実行される。
インサート・ログ・キャッシュ(543)に、例えばID=11についてのリスト(544)が登録されていないとする。データベース(541)には、ID=11についてのレコード(546A〜549A)が保存されているとする。また、ID=11に属する値をデータベースに登録するためのデータ挿入のクエリが発行された時点における現在時刻を「2006−01−12 10:00:00」とする。
上記データ挿入のクエリが発行されると、コンピュータ・システムは、ID=11に属するタイムスタンプと該タイムスタンプとの組をデータベース(541)から取得する。ここで、取得する組は、上記データ挿入のクエリが発行された時点における現在時刻を越えない最大のタイムスタンプと該最大のタイムスタンプに属する値との組及び、現在時刻よりも新しいタイムスタンプと該タイムスタンプに属する値との組である。レコード(546A)に含まれるタイムスタンプは「2006−01−13 09:00:00」である。該タイムスタンプは、現在時刻よりも新しい。よって、コンピュータ・システムは、レコード(546A)に含まれるタイムスタンプ及び値との組をデータベース(541)から取得する。レコード(547A)に含まれるタイムスタンプは「2006−01−12 12:00:00」である。該タイムスタンプは、現在時刻よりも新しい。よって、コンピュータ・システムは、レコード(547A)に含まれるタイムスタンプ及び値との組をデータベース(541)から取得する。レコード(548A)に含まれるタイムスタンプは「2006−01−12 09:30:00」である。該タイムスタンプは、現在時刻を越えない最大のタイムスタンプである。よって、コンピュータ・システムは、レコード(548A)に含まれるタイムスタンプ及び値との組をデータベース(541)から取得する。レコード(549A)に含まれるタイムスタンプは「2006−01−12 09:00:00」である。該タイムスタンプは、現在時刻よりも古く、現在時刻を越えない最大のタイムスタンプでもない。よって、コンピュータ・システムは、レコード(549A)に含まれるタイムスタンプ及び値との組をデータベース(541)から取得しない。
次に、コンピュータ・システムは、ID=11についてのリスト(544)をインサート・ログ・キャッシュ(543)に作成する。コンピュータ・システムは、上記取得した組をリスト(544)にソートして登録する。コンピュータ・システムは、レコード(546A)から取得した組(546B)、レコード(547A)から取得した組(547B)及びレコード(548A)から取得した組(548B)をリスト(544)に、例えばタイムスタンプの降順に登録する。
次に、コンピュータ・システムは、現在時刻を越えない最大のタイムスタンプを含む組(548B)に含まれるタイムスタンプ及び値をカレント・キャッシュ(550)に登録する。
最後にコンピュータ・システムは、組(548B)にポインタ(549)を指定する。
データベースに対して遅延更新が実行された場合、コンピュータ・システムは、カレント・キャッシュ・ポジションが指定されているタイムスタンプ以降の未来のタイムスタンプを含む組をインサート・ログ・キャッシュに保持する。カレント・キャッシュ・ポジションが指定されているタイムスタンプよりも古い更新時間に対応するタイムスタンプを含む組は、上記遅延更新によるデータベースへの反映が完了した時点で削除可能である。
遅延更新が実行されると、コンピュータ・システムは、以下のステップ600〜603を実行する。
ステップ600は、処理の開始である。
ステップ601では、コンピュータ・システムは、インサート・ログ・キャッシュに含まれる全てのタイムスタンプ及び値をデータベースに反映する。ここで、後述する反映済みであることを示すフラグが立っている組に含まれるタイムスタンプ及び値については、データベースに反映しないとしてもよい。
ステップ602では、コンピュータ・システムは、ポイントされたタイムスタンプよりも古いタイムスタンプを含む組をインサート・ログ・キャッシュから削除し、処理は終了する。
ステップ603は、処理の終了である。
リスト(611)は、インサート・ログ・キャッシュに登録されているID=11についてのリストである。リスト(611)は、組(612〜615)を含む。組(612〜615)はそれぞれ、タイムスタンプ及び値を含む。また、組(613)は、カレント・キャッシュ・ポインタ(616)でポイントされているタイムスタンプを含む組である。また、インサート・ログ・キャッシュには、上記リスト(611)以外のリストは含まれていないとする。
遅延更新(619)が実行されると、コンピュータ・システムは、組(612〜615)に含まれるタイムスタンプ及び値を、データベース(617)に反映する(620)。さらに、コンピュータ・システムは、カレント・キャッシュ・ポインタ(616)でポイントされているタイムスタンプよりも古いタイムスタンプを含む組(614、615)をインサート・ログ・キャッシュから削除(621)する。該削除が終了することに応じて、遅延更新が実行された場合の処理が終了する。
クエリが実行されるタイミングとは別に、定期的にカレント・キャッシュ・ポジションが、インサート・ログ・キャッシュのデータの中で現在時刻での最新データを指すようにしてもよい。定期的とは、例えば1時間おき又は1日ごとである。該対応では、アプリケーション・サーバ又はインサート・ログ・キャッシュを管理するアプリケーションが定期的且つ自主的にカレント・キャッシュ・ポジションとカレント・キャッシュ上のデータとをメンテナンスする。該メンテナンスでは、IDごとに、カレント・キャッシュ・ポジションが、メンテナンスが実行された時刻を越えない最大のタイムスタンプと該最大のタイムスタンプに属する値との組を指し示すように更新される。また、上記最大のタイムスタンプと該最大のタイムスタンプに属する値がカレント・キャッシュに登録される。
コンピュータ・システムは、以下のステップ700〜704をIDごとに定期的に実行する。
ステップ700は、処理の開始である。
ステップ701では、コンピュータ・システムは、ポイントされたタイムスタンプが現在時刻における最新のタイムスタンプかを判定する。最新のタイムスタンプだと判定された場合、処理は終了する。最新のタイムスタンプではないと判定された場合、処理は、ステップ702に進む。
ステップ702では、コンピュータ・システムは、最新のタイムスタンプ及び値をカレント・キャッシュに登録する。登録が終了することに応じて、処理は、ステップ703に進む。
ステップ703では、コンピュータ・システムは、カレント・キャッシュ・ポジションを更新する。コンピュータ・システムは、上記最新のタイムスタンプをポイントするようにポインタの位置を変更する。該変更が終了することに応じて処理は終了する。
ステップ704は、処理の終了である。
上記メンテナンスにより、カレント・キャッシュ・ポジションのデータを最新結果として返す確率が上がる。よって、クエリの更なる高速化が可能となる。
リスト(711)は、インサート・ログ・キャッシュに登録されているID=11についてのリストである。リスト(711)は、組(712〜714)を含む。組(712〜714)はそれぞれ、タイムスタンプ及び値を含む。また、組(714)は、カレント・キャッシュ・ポインタ(715)でポイントされているタイムスタンプを含む組である。また、カレント・キャッシュ(716)には、組(714)に含まれるタイムスタンプ及び値が保存されている。また、現在時刻を「2006−01−12 10:00:00」とする。
メンテナンスが実行されると、コンピュータ・システムは、ポイントされたタイムスタンプを含む組(714)が現在時刻における最新のタイムスタンプを含む組かどうかを判定する。
コンピュータ・システムは、ポイントされたタイムスタンプの示す時刻「2006−01−11 09:00:00」よりも新しく且つ現在時刻を越えない最新のタイムスタンプ「2006−01−12 09:30:00」を含む組(713)がリスト(711)に含まれるので、組(713)に含まれるタイムスタンプ及び値をカレント・キャッシュ(716)に登録する(717)。
次に、コンピュータ・システムは、カレント・キャッシュ・ポインタ(715)によってポイントされているタイムスタンプを含む組を組(713)に更新(718)する。
該更新が終了することに応じて、ID=11についてのメンテナンス処理が終了する。
第1の記憶部(801)は、第1のデータ構造(802)を記憶する。
第1のデータ構造(802)は、IDごとのリスト(803〜805)を含む。IDごとのリストは、少なくとも1のタイムスタンプ及び該タイムスタンプに属する値を含む。図8Aの上記リスト(803〜805)は、第1のタイムスタンプA〜C(806〜808)及び第1のタイムスタンプA〜C(806〜808)それぞれに属する値A〜C(809〜811)を含む。ここで、第1のタイムスタンプA〜C(806〜808)それぞれは、タイムスタンプの示す時刻順にソートされている。また、ポインタ(812)は、第1のタイムスタンプA〜C(806〜808)のどれか1つをポイントする。ポインタ(812)は、例えば第1のタイムスタンプB(807)をポイントする。
第2の記憶部(813)は、第2のデータ構造(814)を記憶する。
第2のデータ構造(814)は、IDごと(815〜817)に、ポインタでポイントされた第1のタイムスタンプD〜F(818〜820)と、該第1のタイムスタンプD〜F(818〜820)それぞれに属する値D〜F(821〜823)とを含む。ポインタ(812)は、第1のタイムスタンプB(807)をポイントしているので、第1のタイムスタンプD(818)は、第1のタイムスタンプB(807)と同じタイムスタンプである。また、値D(821)は、値B(810)と同じ値である。
第1の記憶部(801)及び第2の記憶部(813)は、同一の記憶部であっても別々の記憶部であってもよい。同一の記憶部である場合、第1の記憶部(801)及び第2の記憶部(813)の両方が、例えばメモリであってもよい。また、別々の記憶部である場合、第1の記憶部(801)が例えばハードティスクであり、第2の記憶部(813)が例えばメモリであってもよい。
受付部(831)は、ユーザ又は他のコンピュータ・システムからのクエリを受け付ける。受付部(831)は、指定時刻における最新の値をデータベース(850)から検索するための検索トランザクション(830A)を受け付ける。また、受付部(831)は、データベース(850)に値を挿入するための挿入トランザクション(830B)を受け付ける。なお、以下の説明では、検索トランザクション(830A)及び挿入トランザクション(830B)の対象となるデータのIDは11とする。よって、ID=11についてのデータ構造(図8A、803及び815)に含まれる第1のタイムスタンプA〜D(図8A、806〜808及び818)及び値A〜D(図8A、809〜811及び821)が以下の説明に用いられる。
特定部(832)は、指定時刻における最新の値に対応するタイムスタンプを特定する。特定部(832)は、検索トランザクション(830A)に含まれる検索する時刻を示す第2のタイムスタンプを超えない最大のタイムスタンプを有する第1のタイムスタンプ(第1の最大タイムスタンプ)を第1の記憶部(801)から特定する。
取得部(833)は、第1の記憶部(801)、第2の記憶部(813)及びデータベース(850)の少なくとも1つから、タイムスタンプ及び該タイムスタンプに属する値を取得する。取得部(833)はまた、第1の最大タイムスタンプが、ポイントされた第1のタイムスタンプ(図8A、807又は815)と同じ場合、第1のタイムスタンプ(図8A、807又は815)に属する値(図8A、821)を第2の記憶部(813)から取得する。取得部(833)はまた、第1の最大タイムスタンプが、ポイントされた第1のタイムスタンプ(図8A、807又は815)より新しい場合、第1の最大タイムスタンプに属する値を第1の記憶部(801)から取得する。取得部(833)はまた、第2のタイムスタンプが第2の記憶部(813)に保存されている検索対象であるIDに属し且つポイントされた第1のタイムスタンプ(図8A、818)より古いことに応じて、上記第1の記憶部(801)とデータベース(850)との両方から、第2のタイムスタンプを超えない最大のタイムスタンプに属する値をそれぞれ取得する。取得部(833)はまた、上記取得されたそれぞれの値に属するタイムスタンプがより新しい時刻を示すタイムスタンプに属する値を取得した値とする。
置換部(834)は、第2の記憶部(813)に保存されている、検索対象であるIDに属し且つポイントされた第1のタイムスタンプ(図8A、818)及び該第1のタイムスタンプに属する値(図8A、821)を、指定時刻における最新のタイムスタンプ及び該タイムスタンプに属する値にそれぞれ置換する。
変更部(835)は、ポインタの指定する第1のタイムスタンプ(図8A、807)を、指定時刻又は現在時刻を越えない最新のタイムスタンプに変更する。
登録部(836)は、検索トランザクション(830A)、挿入トランザクション(830B)又はデータベース(850)に含まれるタイムスタンプ及び該タイムスタンプに属する値を、第1の記憶部(801)又は第2の記憶部(813)に登録する。
ソート部(837)は、第1の記憶部(801)にタイムスタンプ及び該タイムスタンプに属する値が登録されることに応じて、上記タイムスタンプを含むリストに含まれるタイムスタンプを降順又は昇順にソートする。
確定部(838)は、上記ソートが終了することに応じて、トランザクションをコミットする。
削除部(839)は、データベース(850)に対して遅延更新が実行されることに応じて、ポイントされた第1のタイムスタンプより古い時刻を示す第1のタイムスタンプ及び該第1のタイムスタンプに属する値を、第1の記憶部(801)から削除する。
指定部(840)は、第1のタイムスタンプ(図8A、806〜808)にポインタを指定する。
データベース(850)は、ID、値及びタイムスタンプを列項目に含むデータベースである。検索トランザクション(830A)が発行され且つ第1の記憶部(801)に指定時刻における最新の値が含まれない場合、データベース(850)から値及び該値に対応するタイムスタンプが取得される。挿入トランザクション(830B)が発行され且つ第1の記憶部(801)に挿入される値に対応するIDについてのリストがない場合、データベース(850)から値及び該値に対応するタイムスタンプが取得される。また、遅延更新が実行されることに応じて、ポイントされているタイムスタンプ(図8A、812)よりも古いタイムスタンプと該古いタイムスタンプに属する値が、データベース(850)に登録される。データベース(850)は、コンピュータ・システム(860)とは別のシステム上にあってもよい。
コンピュータ・システム(901)は、CPU(902)とメイン・メモリ(903)と含み、これらはバス(904)に接続されている。CPU(902)は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものであり、例えば、インテル社のXeon(商標)シリーズ、Core(商標)シリーズ、Atom(商標)シリーズ、Pentium(商標)シリーズ、Celeron(商標)シリーズ、AMD社のPhenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(商標)シリーズ及びSempron(商標)などを使用することができる。バス(904)には、ディスプレイ・コントローラ(905)を介して、LCDモニタなどのディスプレイ(906)が接続される。ディスプレイ(906)は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インタフェースで表示するために使用される。バス(904)にはまた、IDE又はSATAコントローラ(907)を介して、ハードディスク又はシリコン・ディスク(908)と、CD−ROM、DVDドライブ又はBDドライブ(909)が接続される。
Claims (18)
- テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うためのコンピュータ・システムであって、
第1のデータ構造を格納する第1の記憶部であって、前記第1のデータ構造が、
前記データベースに挿入される値に対応付けられたIDごとに、
時間順にソートされている少なくとも1のタイムスタンプ(以下、第1のタイムスタンプ)と、
該第1のタイムスタンプそれぞれに属する値と、
該第1のタイムスタンプのうちのいずれか1つを指定するポインタであって、前記第1のタイムスタンプは前記値が有効になる時刻を示す、前記ポインタと
を含む、前記第1の記憶部と、
第2のデータ構造を格納する第2の記憶部であって、前記第2のデータ構造が、
前記IDごとに、
前記ポインタによりポイントされた前記第1のタイムスタンプと、
該第1のタイムスタンプに属する値と
を含む、前記第2の記憶部と、
指定時刻における最新の値を前記データベースから検索するための問い合わせを受け付ける受付部であって、前記問い合わせは、少なくとも1のIDを特定するための記述と検索する時刻を示す第2のタイムスタンプとを含む、前記受付部と、
前記第1の記憶部に格納された前記特定されたIDに属する第1のタイムスタンプのうち、前記第2のタイムスタンプを超えない最大のタイムスタンプを有する第1のタイムスタンプ(以下、第1の最大タイムスタンプ)を特定する特定部と、
前記特定されたIDに属し且つ前記ポインタによりポイントされた第1のタイムスタンプが前記第1の最大タイムスタンプと同じであることに応じて、前記特定されたIDに属する値を前記第2の記憶部から取得する取得部と
を含む、前記コンピュータ・システム。 - 前記取得部が、
前記特定されたIDに属し且つ前記ポインタによりポイントされた第1のタイムスタンプが前記第1の最大タイムスタンプよりも古いことに応じて、前記第1の最大タイムスタンプに属する値を前記第1の記憶部から取得する、請求項1に記載のコンピュータ・システム。 - 前記第2の記憶部に保存されている、
前記特定されたIDに属し且つ前記ポインタによりポイントされた第1のタイムスタンプ及び
該第1のタイムスタンプに属する値
を、
前記第1の最大タイムスタンプ及び
該第1の最大タイムスタンプに属する値
にそれぞれ置換する置換部をさらに含む、請求項2に記載のコンピュータ・システム。 - 前記ポインタの指定するタイムスタンプを、前記特定されたIDに属し且つ前記ポインタによりポイントされた第1のタイムスタンプから前記第1の最大タイムスタンプに変更する変更部をさらに含む、請求項2に記載のコンピュータ・システム。
- 前記取得部が、
前記第2のタイムスタンプが前記第2の記憶部に保存されている前記特定されたIDに属し且つ前記ポインタによりポイントされた第1のタイムスタンプより古いことに応じて、前記特定されたIDに属し且つ前記第2のタイムスタンプを超えない最大のタイムスタンプ(以下、第2の最大タイムスタンプ)と該第2の最大タイムスタンプに属する値とを前記データベースから取得し、
前記第1の最大タイムスタンプが前記取得した第2の最大タイムスタンプより新しい場合、前記第1の最大タイムスタンプに属する値を前記第1の記憶部から取得する、請求項1〜4のいずれか一項に記載のコンピュータ・システム。 - 前記取得部が、
前記第2の記憶部に検索対象であるIDに属する値がない場合、
前記データベースを検索し、前記第2のタイムスタンプを超えない最大のタイムスタンプに属する値を取得する、請求項2に記載のコンピュータ・システム。 - 前記受付部が、前記データベースに値を挿入するためのトランザクションを受け付け、
前記トランザクションに含まれる、
挿入対象である値と、
前記挿入対象である値が有効になる時刻を示す第3のタイムスタンプと
を、前記第1の記憶部に登録する登録部をさらに含む、請求項1〜6のいずれか一項に記載のコンピュータ・システム。 - 前記登録に応じて、前記挿入対象である値に対応するIDに属する第1のタイムスタンプを時刻順にソートするソート部をさらに含む、請求項7に記載のコンピュータ・システム。
- 前記ソートが終了することに応じて、前記トランザクションをコミットする確定部をさらに含む、請求項8に記載のコンピュータ・システム。
- 前記挿入対象である値に対応するIDに属する第1のタイムスタンプが前記第1の記憶部にない場合、
前記取得部が、前記データベースを検索して、
前記挿入対象である値に対応するIDに属する前記第3のタイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
前記挿入対象である値に対応するIDに属する前記第3のタイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値と
をさらに取得し、
前記登録部が、
前記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
前記取得した新しいタイムスタンプ及び該タイムスタンプに属する値と
を前記第1の記憶部にさらに登録し、
前記コンピュータ・システムが、
前記登録された最大のタイムスタンプと前記登録された新しいタイムスタンプとを時刻順にソートするソート部
をさらに含む、請求項7に記載のコンピュータ・システム。 - 前記登録された最大のタイムスタンプを前記ポインタで指定する指定部をさらに含み、
前記登録部が、
前記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、前記第2の記憶部にさらに登録する、請求項10に記載のコンピュータ・システム。 - データベースに対して遅延更新が実行された場合、
前記ポインタによりポイントされた第1のタイムスタンプより古い時刻を示す第1のタイムスタンプ及び該第1のタイムスタンプに属する値を、前記第1の記憶部から削除する削除部をさらに含む、請求項1〜11のいずれか一項に記載のコンピュータ・システム。 - 前記ポインタの指定するタイムスタンプを、前記ポインタによりポイントされた第1のタイムスタンプから現在時刻を越えない最大の第1のタイムスタンプ(以下、第3の最大タイムスタンプ)に定期的に変更する変更部をさらに含む、請求項1〜12のいずれか一項に記載のコンピュータ・システム。
- 前記変更されることに応じて、
前記第2の記憶部に保存されている、
前記ポインタによりポイントされた第1のタイムスタンプ及び
該第1のタイムスタンプに属する値
を、
前記第3の最大タイムスタンプ及び
該第3の最大タイムスタンプに属する値
にそれぞれ置換する置換部をさらに含む、請求項13に記載のコンピュータ・システム。 - 前記データベースが、インサート・オンリー・データベースである、請求項1〜14のいずれか一項に記載のコンピュータ・システム。
- テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うことを可能にするデータ構造を用意する方法であって、
挿入トランザクションの開始に応じて、
前記トランザクションに含まれる挿入対象である値に対応するIDに属するタイムスタンプが第1の記憶部にない場合、前記データベースを検索して、
前記挿入対象である値に対応するIDに属する前記タイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
前記挿入対象である値に対応するIDに属する前記タイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値と
を取得するステップと、
前記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
前記取得した新しいタイムスタンプ及び該タイムスタンプに属する値と
を、前記第1の記憶部に登録するステップと、
前記登録された最大のタイムスタンプと前記登録された新しいタイムスタンプとを時刻順にソートするステップと、
前記登録された最大のタイムスタンプをポインタで指定するステップと、
前記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、第2の記憶部にさらに登録するステップと
を含む、前記方法。 - テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行う方法であって、
第1のデータ構造を第1の記憶部に格納するステップであって、前記第1のデータ構造が、
前記データベースに挿入される値に対応付けられたIDごとに、
時間順にソートされている少なくとも1のタイムスタンプ(以下、第1のタイムスタンプ)と、
該第1のタイムスタンプそれぞれに属する値と、
該第1のタイムスタンプのうちのいずれか1つを指定するポインタであって、前記第1のタイムスタンプは前記値が有効になる時刻を示す、前記ポインタと
を含む、前記第1の記憶部に格納するステップと、
第2のデータ構造を第2の記憶部に格納するステップであって、前記第2のデータ構造が、
前記IDごとに、
前記ポインタによりポイントされた前記第1のタイムスタンプと、
該第1のタイムスタンプに属する値と
を含む、前記第2の記憶部に格納するステップと、
指定時刻における最新の値を前記データベースから検索するための問い合わせを受け付けるステップであって、前記問い合わせは、少なくとも1のIDを特定するための記述と検索する時刻を示す第2のタイムスタンプとを含む、前記受け付けるステップと、
前記第1の記憶部に格納された前記特定されたIDに属する第1のタイムスタンプのうち、前記第2のタイムスタンプを超えない最大のタイムスタンプを有する第1のタイムスタンプ(以下、第1の最大タイムスタンプ)を特定するステップと、
前記特定されたIDに属し且つ前記ポインタによりポイントされた第1のタイムスタンプが前記第1の最大タイムスタンプと同じであることに応じて、前記特定されたIDに属する値を前記第2の記憶部から取得するステップと
を含む、前記方法。 - コンピュータに、請求項16又は17のいずれか一項に記載の方法の各ステップを実行させるコンピュータ・プログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009039918A JP5181140B2 (ja) | 2009-02-23 | 2009-02-23 | データベースを検索するためのコンピュータ・システム、方法及びコンピュータ・プログラム |
US12/708,588 US8495041B2 (en) | 2009-02-23 | 2010-02-19 | Data structure, computer system, method and computer program for searching database |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009039918A JP5181140B2 (ja) | 2009-02-23 | 2009-02-23 | データベースを検索するためのコンピュータ・システム、方法及びコンピュータ・プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2010198135A JP2010198135A (ja) | 2010-09-09 |
JP5181140B2 true JP5181140B2 (ja) | 2013-04-10 |
Family
ID=42631934
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009039918A Expired - Fee Related JP5181140B2 (ja) | 2009-02-23 | 2009-02-23 | データベースを検索するためのコンピュータ・システム、方法及びコンピュータ・プログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US8495041B2 (ja) |
JP (1) | JP5181140B2 (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8301610B2 (en) * | 2010-07-21 | 2012-10-30 | Sap Ag | Optimizing search for insert-only databases and write-once data storage |
TW201209614A (en) * | 2010-08-31 | 2012-03-01 | Ibm | Method for efficient response of Common Information Model (CIM) server |
JP5693369B2 (ja) * | 2011-05-13 | 2015-04-01 | キヤノン株式会社 | 情報処理装置、その制御方法及びコンピュータプログラム |
US9940360B2 (en) * | 2015-05-19 | 2018-04-10 | Sybase, Inc. | Streaming optimized data processing |
US10990586B2 (en) | 2015-09-16 | 2021-04-27 | Richard Banister | System and method for revising record keys to coordinate record key changes within at least two databases |
US10838827B2 (en) | 2015-09-16 | 2020-11-17 | Richard Banister | System and method for time parameter based database restoration |
US11366810B2 (en) * | 2020-04-27 | 2022-06-21 | Salesforce.Com, Inc. | Index contention under high concurrency in a database system |
US11194769B2 (en) * | 2020-04-27 | 2021-12-07 | Richard Banister | System and method for re-synchronizing a portion of or an entire source database and a target database |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5278979A (en) * | 1990-12-20 | 1994-01-11 | International Business Machines Corp. | Version management system using pointers shared by a plurality of versions for indicating active lines of a version |
US5799322A (en) * | 1995-01-24 | 1998-08-25 | Tandem Computer, Inc. | System and method for stopping updates at a specified timestamp in a remote duplicate database facility |
US5864849A (en) * | 1996-12-16 | 1999-01-26 | Lucent Technologies Inc. | System and method for restoring a multiple checkpointed database in view of loss of volatile memory |
JPH10301824A (ja) * | 1997-04-25 | 1998-11-13 | Nippon Telegr & Teleph Corp <Ntt> | 情報管理データが記録されているコンピュータ読み取り可能な記録媒体および情報管理システム |
US5999924A (en) * | 1997-07-25 | 1999-12-07 | Amazon.Com, Inc. | Method and apparatus for producing sequenced queries |
US6125371A (en) * | 1997-08-19 | 2000-09-26 | Lucent Technologies, Inc. | System and method for aging versions of data in a main memory database |
AU2134301A (en) * | 1999-12-08 | 2001-06-18 | University Of British Columbia, The | Weighted fair queuing scheduler |
JP3488184B2 (ja) * | 2000-06-30 | 2004-01-19 | 防衛庁技術研究本部長 | データ履歴制御処理装置 |
AUPR464601A0 (en) * | 2001-04-30 | 2001-05-24 | Commonwealth Of Australia, The | Shapes vector |
US6950823B2 (en) | 2002-12-23 | 2005-09-27 | International Business Machines Corporation | Transparent edge-of-network data cache |
EP1586057A2 (en) * | 2003-01-15 | 2005-10-19 | Luke Leonard Martin Porter | Time in databases and applications of databases |
US7480666B2 (en) * | 2005-08-11 | 2009-01-20 | International Business Machines Corporation | Method for navigating beans using filters and container managed relationships |
US20070050429A1 (en) * | 2005-08-26 | 2007-03-01 | Centric Software, Inc. | Time-range locking for temporal database and branched-and-temporal databases |
US7979401B2 (en) * | 2008-06-26 | 2011-07-12 | International Business Macines Corporation | Time based file system for continuous data protection |
-
2009
- 2009-02-23 JP JP2009039918A patent/JP5181140B2/ja not_active Expired - Fee Related
-
2010
- 2010-02-19 US US12/708,588 patent/US8495041B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2010198135A (ja) | 2010-09-09 |
US8495041B2 (en) | 2013-07-23 |
US20100217995A1 (en) | 2010-08-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5181140B2 (ja) | データベースを検索するためのコンピュータ・システム、方法及びコンピュータ・プログラム | |
Huang et al. | X-Engine: An optimized storage engine for large-scale E-commerce transaction processing | |
US6546394B1 (en) | Database system having logical row identifiers | |
US8429134B2 (en) | Distributed database recovery | |
US9946745B2 (en) | Lock-free transactional support for large-scale storage systems | |
CN100557595C (zh) | 用于验证远程数据库的方法和系统 | |
US8560500B2 (en) | Method and system for removing rows from directory tables | |
US20100281005A1 (en) | Asynchronous Database Index Maintenance | |
US20140229437A1 (en) | Method of Synchronizing Data Between Databases, and Computer System and Computer Program for the Same | |
US8478771B2 (en) | Systems and methods related to a temporal log structure database | |
US20030158851A1 (en) | Methods and apparatus for statistical data analysis and reduction for an enterprise application | |
EP1962195A1 (en) | System for enhancing access efficiency to data base and its method | |
JP2000501532A (ja) | データベースアクセス | |
CN106294772A (zh) | 分布式内存列式数据库的缓存管理方法 | |
JP5999351B2 (ja) | データベース処理装置、方法、プログラム及びデータ構造 | |
US20190129981A1 (en) | Asynchronous distributed data cleansing | |
US20190258618A1 (en) | Immediately-consistent lock-free indexing for distributed applications | |
US20080005077A1 (en) | Encoded version columns optimized for current version access | |
US7752181B2 (en) | System and method for performing a data uniqueness check in a sorted data set | |
EP1116137B1 (en) | Database, and methods of data storage and retrieval | |
CN102799996A (zh) | 网络广告策略匹配方法及系统 | |
Kamath et al. | Efficient transaction support for dynamic information retrieval systems | |
US11501354B2 (en) | Information processing apparatus for searching database | |
JP4152107B2 (ja) | データベース更新情報の反映システムおよびそのためのプログラム | |
Lempel et al. | Just in time indexing for up to the second search |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20101125 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20121024 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20121026 Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20121026 |
|
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: 20121129 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20121129 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20121129 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20121211 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5181140 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20160125 Year of fee payment: 3 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |