JP5181140B2 - データベースを検索するためのコンピュータ・システム、方法及びコンピュータ・プログラム - Google Patents

データベースを検索するためのコンピュータ・システム、方法及びコンピュータ・プログラム Download PDF

Info

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
Application number
JP2009039918A
Other languages
English (en)
Other versions
JP2010198135A (ja
Inventor
美紀 榎
清久仁 河内谷
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 JP2009039918A priority Critical patent/JP5181140B2/ja
Priority to US12/708,588 priority patent/US8495041B2/en
Publication of JP2010198135A publication Critical patent/JP2010198135A/ja
Application granted granted Critical
Publication of JP5181140B2 publication Critical patent/JP5181140B2/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/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database 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

本発明は、データベースを検索するためのデータ構造、並びにそのコンピュータ・システム、方法及びコンピュータ・プログラムに関する。
一般的なデータベース・システムでは、データ処理は、参照、挿入、更新及び削除の各処理を含む。しかし、インサート・オンリー(Insert only)のデータベース・システムでは、上記処理のうち、挿入、更新及び削除の全ての処理が挿入処理として表現される。インサート・オンリーのデータベース・システムにおいて、データベースのデータの挿入、更新及び削除を含む上記挿入処理が実行される場合、データベース内のデータは直接書き換えられず、ログのような形式を使用してデータベース内に新たに挿入される。よって、上記データベース内のデータは、過去のデータ処理の履歴を参照できるような形式を使用してデータベース内に格納される。
過去のデータ処理の履歴を参照できるような形式において、データベースに保存される値は、各値に対応付けられたIDとタイムスタンプとによって特定される。各タイムスタンプは、各値が有効となる時間を表す。ここで、値が有効となるとは、値が参照可能であることを意味する。タイムスタンプに未来の時間が設定されることで、該未来の時間に参照可能になる値が、上記未来の時間の到達前にデータベースに挿入されうる。
インサート・オンリーのデータベース・システムは、例えば、勘定系システムにおいて見られるデータベース・システムである。勘定系システムでは、大容量のトランザクションを高速に処理することが求められる。
トランザクションに含まれるデータアクセス処理を高速化する手法として、遅延更新(Deferred update)がある。遅延更新は、更新トランザクションにおいて、システムがトランザクション・ログの書き込みを完了した時点でコミットする手法である。システムは、データベースに更新データを実際に反映させる処理を、トランザクションの実行とは非同期にまとめて行う。上記遅延更新により、更新トランザクションのスループットが改善されることが知られている。
また、参照トランザクションにおいて、検索結果をアプリケーション側にキャッシュする手法が知られている。該キャッシュにより、データベースへのアクセス処理時間のボトルネックとなるアクセス処理の回数が減らされる。その結果、データアクセス処理のレイテンシが短縮される。
インサート・オンリーのデータベース・システムにおいて、参照処理を含む参照トランザクションが実行される場合、上記タイムスタンプが指定される必要がある。また、参照トランザクションにおいて、最も多く発行されるクエリは、その時点で有効なデータ中の最新の値を返すクエリである。よって、上記タイムスタンプには、現在時刻が指定されることが多い。つまり、上記タイムスタンプの値が、上記クエリごとに現在時刻に変更されてしまう。従って、前回のクエリ結果がキャッシュに保存されており且つ前回のクエリの結果と返す値が同じ場合であっても、タイムスタンプが異なるためにキャッシュミスと判断される。そのために、取得する値がキャッシュに保存されている場合であっても、キャッシュから値は取得されず、データベースへのアクセスが都度発生してしまう。
上記キャッシュミスと判断されることが発生しうる原因は、タイムスタンプのフィールドが、時間データという特別な意味と認識されず、単なるデータ空間とみなされているからである。
下記に示すSQLは、タイムスタンプのフィールドが単なるデータ空間とみなされていることを示すクエリの例である。該例は、テーブルCDからデータを取得するためにIDとタイムスタンプ(EffectiveDate)とを指定している。該指定によって、指定したタイムスタンプの時点における最新の値が返される。
SELECT * FROM CD
WHERE ID=? AND EffectiveDate <= ?
ORDER BY EffectiveDate DESC FETCH FIRST 1 ROW ONLY
上記SQLでは、タイムスタンプのフィールドは時間データとして扱われていない。タイムスタンプのフィールドは、例えばIDのような他のデータのデータ空間と同様に扱われている。
下記特許文献1は、SQLの範囲検索における、効果的なエッジ・サーバでのキャッシュ手法を記載する。該キャッシュ手法は、クエリの指定範囲の包含関係をチェックし、再利用できるキャッシュを使いまわす手法である。例えば、
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 の範囲のデータがデータベースから取得される。
上記キャッシュ手法では、キャッシュに保存された各データが最新であるかどうかを、タイムスタンプを用いて判断する。各データをキャッシュに載せた時間より新しい時間にキャッシュに載っているデータを検索範囲として含むクエリが発行された場合、キャッシュ・データの検証が行われる。しかしながら、上記キャッシュ手法において、タイムスタンプは、キャッシュ・データの検証のために使用されるに過ぎず、指定したクエリを高速に処理するためには使用されない。
特表2006−511876号公報
タイムスタンプを指定して参照トランザクションを発行するデータベース・システムにおいてクエリを発行する場合、タイムスタンプには、クエリごとに現在時刻が設定される。よって、クエリの結果がキャッシュにあり且つ返す値が同じ場合であっても、タイムスタンプが異なるのでキャッシュミスであると判断される。そのため、キャッシュからデータが取得されず、クエリの照会ごとに、データベースへのアクセスが発生してしまう。よって、タイムスタンプが異なる場合に、トランザクションが高速化される方法が求められている。
本発明は、テーブル内に値と該値それぞれに関連付けられた時間の情報とを含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うコンピュータ・システムにおいて、該コンピュータ・システムの第1の記憶部に格納されるデータ構造(第1のデータ構造)を提供する。該第1のデータ構造は、
上記データベースに挿入される値に対応付けられたIDごとに、
時間順にソートされている少なくとも1のタイムスタンプ(第1のタイムスタンプ)と、
該第1のタイムスタンプそれぞれに属する値と、
該第1のタイムスタンプのうちのいずれか1つを指定するポインタであって、上記第1のタイムスタンプは上記値が有効になる時刻を示す、上記ポインタと
を含む。
本発明はまた、上記第1のデータ構造とともに、第2の記憶部に格納されるデータ構造(第2のデータ構造)を提供する。該第2のデータ構造は、
上記IDごとに、
上記ポイントされた上記第1のタイムスタンプと、
該第1のタイムスタンプに属する値と
を含む。
本発明はまた、テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うためのコンピュータ・システムを提供する。該コンピュータ・システムは、
上記第1のデータ構造を格納する第1の記憶部と、
上記第2のデータ構造を格納する第2の記憶部と、
指定時刻における最新の値を上記データベースから検索するための問い合わせを受け付ける受付部であって、上記問い合わせは、少なくとも1のIDを特定するための記述と検索する時刻を示す第2のタイムスタンプとを含む、上記受付部と、
上記第1の記憶部に格納された上記特定されたIDに属する第1のタイムスタンプのうち、上記第2のタイムスタンプを超えない最大のタイムスタンプを有する第1のタイムスタンプ(第1の最大タイムスタンプ)を特定する特定部と、
上記特定されたIDに属し且つ上記ポイントされた第1のタイムスタンプが上記第1の最大タイムスタンプと同じであることに応じて、上記特定されたIDに属する値を上記第2の記憶部から取得する取得部と
を含む。
本発明の1つの実施態様では、上記取得部が、
上記特定されたIDに属し且つ上記ポイントされた第1のタイムスタンプが上記第1の最大タイムスタンプよりも古いことに応じて、上記第1の最大タイムスタンプに属する値を上記第1の記憶部から取得する。
本発明の1つの実施態様では、上記コンピュータ・システムは、上記第2の記憶部に保存されている、
上記特定されたIDに属し且つ上記ポイントされた上記第1のタイムスタンプ及び該第1のタイムスタンプに属する値を、上記第1の最大タイムスタンプ及び該第1の最大タイムスタンプに属する値それぞれに置換する置換部をさらに含む。
本発明の1つの実施態様では、上記コンピュータ・システムは、上記特定されたIDに属し且つ上記ポインタの指定するタイムスタンプを、上記ポイントされた第1のタイムスタンプから上記第1の最大タイムスタンプに変更する変更部をさらに含む。
本発明の1つの実施態様では、上記取得部が、
上記第2のタイムスタンプが上記第2の記憶部に保存されている上記特定されたIDに属し且つ上記ポイントされた上記第1のタイムスタンプより古いことに応じて、上記特定されたIDに属し且つ上記第2のタイムスタンプを超えない最大のタイムスタンプ(第2の最大タイムスタンプ)と該第2の最大タイムスタンプに属する値とを取得し、上記第1の最大タイムスタンプが上記取得した第2の最大タイムスタンプより新しい場合、上記第1の最大タイムスタンプに属する値を上記第1の記憶部から取得する。
本発明の1つの実施態様では、上記取得部が、上記取得した第2の最大タイムスタンプが第1の最大タイムスタンプより新しい場合、上記取得した第2の最大タイムスタンプに属する値を取得した値とする。
本発明の1つの実施態様では、上記取得部が、
上記第2の記憶部に検索対象であるIDに属する値がない場合、
上記データベースを検索し、上記第2のタイムスタンプを超えない最大のタイムスタンプに属する値を取得する。
本発明の1つの実施態様では、上記受付部が、上記データベースに値を挿入するためのトランザクションを受け付け、
上記トランザクションに含まれる、
挿入対象である値と、
上記挿入対象である値が有効になる時刻を示す第3のタイムスタンプと
を、上記第1の記憶部に登録する登録部をさらに含む。
本発明の1つの実施態様では、上記コンピュータ・システムは、上記登録に応じて、上記挿入対象である値に対応するIDに属する第1のタイムスタンプを時刻順にソートするソート部をさらに含む。
本発明の1つの実施態様では、上記コンピュータ・システムは、上記ソートが終了することに応じて、上記トランザクションをコミットする確定部をさらに含む。
本発明の1つの実施態様では、上記挿入対象である値に対応するIDに属する第1のタイムスタンプが、上記第1の記憶部にない場合、
上記取得部が、上記データベースを検索して、
上記挿入対象である値に対応するIDに属する上記第3のタイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
上記挿入対象である値に対応するIDに属する上記第3のタイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値と
をさらに取得し、
上記登録部が、
上記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
上記取得した新しいタイムスタンプ及び該タイムスタンプに属する値と
を上記第1の記憶部にさらに登録し、
上記コンピュータ・システムが、上記登録された最大のタイムスタンプと前上記登録された新しいタイムスタンプとを時刻順にソートするソート部をさらに含む。
本発明の1つの実施態様では、上記コンピュータ・システムは、上記登録された最大のタイムスタンプを上記ポインタで指定する指定部をさらに含み、
上記登録部が、
上記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、上記第2の記憶部にさらに登録する。
本発明の1つの実施態様では、上記コンピュータ・システムは、データベースに対して遅延更新が実行された場合、
上記ポイントされた第1のタイムスタンプより古い時刻を示す第1のタイムスタンプ及び該第1のタイムスタンプに属する値を、上記第1の記憶部から削除する削除部をさらに含む。
本発明の1つの実施態様では、上記コンピュータ・システムは、上記ポインタの指定するタイムスタンプを、上記ポイントされた第1のタイムスタンプから現在時刻を越えない最大の第1のタイムスタンプ(以下、第2の最大タイムスタンプ)に定期的に変更する変更部をさらに含む。
本発明の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の記憶部から取得するステップと
を含む。
本発明の1つの実施態様では、上記取得するステップが、
上記特定されたIDに属し且つ上記ポイントされた第1のタイムスタンプが上記第1の最大タイムスタンプよりも古いことに応じて、上記第1の最大のタイムスタンプに属する値を上記第1の記憶部から取得するステップをさらに含む。
本発明の1つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、
上記第2の記憶部に保存されている、
上記特定されたIDに属し且つ上記ポイントされた上記第1のタイムスタンプ及び
該第1のタイムスタンプに属する値
を、
上記第1の最大タイムスタンプ及び
該第1の最大タイムスタンプに属する値
にそれぞれ置換するステップをさらに含む。
本発明の1つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記ポインタの指定するタイムスタンプを、上記特定されたIDに属し且つ上記ポイントされた第1のタイムスタンプから上記第1の最大タイムスタンプに変更するステップをさらに含む。
本発明の1つの実施態様では、上記取得するステップは、
上記第2のタイムスタンプが上記第2の記憶部に保存されている上記特定されたIDに属し且つ上記ポイントされた上記第1のタイムスタンプより古いことに応じて、上記特定されたIDに属し且つ上記第2のタイムスタンプを超えない最大のタイムスタンプ(第2の最大タイムスタンプ)と該第2の最大タイムスタンプに属する値とを上記データベースから取得するステップと、
上記第1の最大タイムスタンプが上記取得した第2の最大タイムスタンプより新しい場合、上記第1の最大タイムスタンプに属する値を上記第1の記憶部から取得するステップと
をさらに含む。
本発明の1つの実施態様では、上記取得するステップは、上記第2の記憶部に検索対象であるIDに属する値がない場合、
上記データベースを検索し、上記第2のタイムスタンプを超えない最大のタイムスタンプに属する値を取得するステップをさらに含む。
本発明の1つの実施態様では、上記受け付けるステップは、上記データベースに値を挿入するためのトランザクションを受け付けるステップを含む。
本発明の1つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記トランザクションに含まれる、挿入対象である値と、上記挿入対象である値が有効になる時刻を示す第3のタイムスタンプとを、上記第1の記憶部に登録するステップをさらに含む。
本発明の1つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記登録に応じて、上記挿入対象である値に対応するIDに属する第1のタイムスタンプを時刻順にソートするステップを含む。
本発明の1つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記ソートが終了することに応じて、上記トランザクションをコミットするステップを含む。
本発明の1つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記挿入対象である値に対応するIDに属する値に対応する第1のタイムスタンプが上記第1の記憶部にない場合、
上記データベースを検索して、上記挿入対象である値に対応するIDに属する上記第3のタイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、上記挿入対象である値に対応するIDに属する上記第3のタイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値とを取得するステップを含む。
また、上記登録するステップは、上記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、上記取得した新しいタイムスタンプ及び該タイムスタンプに属する値とを上記第1の記憶部に登録するステップをさらに含む。
本発明の1つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記登録された最大のタイムスタンプと上記登録された新しいタイムスタンプとを時刻順にソートするステップをさらに含む。
本発明の1つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記登録された最大のタイムスタンプを上記ポインタで指定するステップをさらに含む。
また、上記登録するステップは、
上記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、上記第2の記憶部にさらに登録するステップをさらに含む。
本発明の1つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、データベースに対して遅延更新が実行された場合、
上記ポイントされた第1のタイムスタンプより古い時刻を示す第1のタイムスタンプ及び該第1のタイムスタンプに属する値を、上記第1の記憶部から削除するステップを含む。
本発明の1つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記ポインタの指定するタイムスタンプを、上記ポイントされた第1のタイムスタンプから現在時刻を越えない最大の第1のタイムスタンプ(第3の最大タイムスタンプ)に定期的に変更するステップを含む。
本発明の1つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記変更されることに応じて、
上記第2の記憶部に保存されている、上記ポイントされた第1のタイムスタンプ及び該第1のタイムスタンプに属する値を、上記第3の最大タイムスタンプ及び該第3の最大タイムスタンプに属する値にそれぞれ置換するステップを含む。
本発明はまた、テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うコンピュータ・プログラムを提供する。該コンピュータ・プログラムは、コンピュータに、上記に記載のいずれか1つの方法の各ステップを実行させる。
本発明の1つの実施態様では、上記データベースが、インサート・オンリー・データベースである。
本発明の実施態様に従うデータベース・システムにおいて、タイムスタンプ指定検索を行うことによって、最も多く発行される現時点での最新データに関するリクエストが高速化される。また、本発明の実施態様に従うデータベースにおいて、未来のデータについても統合することが可能である。
本発明の実施態様において使用する、データベースのテーブルの例を示す。 本発明の実施態様における、図1に記載のデータベースを使用するアプリケーション・サーバの構成図の例を示す。 本発明の実施態様における、図2に記載のアプリケーション・サーバのアプリケーション・キャッシュに含まれるインサート・ログ・キャッシュのデータを示す。 本発明の実施態様における、図2に記載のアプリケーション・サーバのカレント・キャッシュに含まれるデータの例を示す。 本発明の実施態様における、図2に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、データ挿入時の処理ステップの例を示す。 本発明の実施態様における、図2に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、データ検索時の処理ステップの例を示す。 本発明の実施態様における、図2に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、キャッシュ・データを初期化する処理ステップの例を示す。 本発明の実施態様における、図4Aに対応するデータ挿入時の処理の具体例を示す。 本発明の実施態様における、図4Bに対応するデータ検索時の処理の具体例を示す。 本発明の実施態様における、図4Cに対応するキャッシュ・データを初期化する処理の具体例を示す。 本発明の実施態様における、図2に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、遅延更新が実行された場合の処理ステップの例を示す。 本発明の実施態様における、図6Aに対応する遅延更新が実行された場合の処理の具体例を示す。 本発明の実施態様における、図2に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、インサート・ログ・キャッシュをメンテナンスする処理ステップの例を示す。 本発明の実施態様における、図7Aに対応するメンテナンス処理の具体例を示す。 本発明の実施態様における、図2に記載のアプリケーション・キャッシュに対応する記憶部の構成図の例を示す。 本発明の実施態様における、図2に記載のアプリケーション・サーバが有する機能を図示する機能ブロック図を示す。 本発明の実施態様における、図2に記載のアプリケーション・サーバのハードウェアのブロック図を示す。
本発明の実施態様において、「テーブル内に値と該値それぞれに関連付けられた時間の情報とを含むデータベース」とは、値を該値に関連付けられた時間の情報とともに保存するデータベースである。上記データベースは、例えば、インサート・オンリー・データベースである。データベースのテーブルは、ID、値及びタイムスタンプを含む。ID、値及びタイムスタンプは、例えばデータベースの列項目である。また、ID、値及びタイムスタンプは、それぞれ別のテーブルにリンク付けされて含まれてもよい。例えば、テーブルAがIDを含み、テーブルBが値を含み、テーブルCがタイムスタンプを含むならば、テーブルA〜Cがそれぞれ共通のキー項目によってリンク付けされていればよい。
「ID」とは、値の種類を識別するための項目である。IDは、値の種類を種類ごとに、例えば一意な識別子として表される。データベースが、例えば銀行預金についてのデータベースであって、値の種類が、例えば「口座名義人」、「入金額」、「出金額」及び「残高」であるとする。すると、IDは、例えば口座名義人を表す識別子「10」、入金額を表す識別子「11」、出金額を表す識別子「12」及び残高を表す識別子「13」で表される。また、値の種類は、複数の種類を組み合わせたものでもよい。値の種類は、例えば入金額と出金額とを組み合わせた「入出金額」としてもよい。
「値」とは、上記IDに属する具体的な値を示す項目である。上記IDが、例えば口座名義人を表す識別子「10」の場合、値は、例えば口座名義人の具体的な名前「ヤマダ タロウ」である。
「タイムスタンプ」とは、値に関連付けられた時間の情報を示す項目である。タイムスタンプは、タイムスタンプに属する値が有効になる時間を表す。時間の情報は、タイムスタンプ同士の順番を特定できる情報である。時間の情報は、例えば年、年月日、時刻又は時間と関連付けられた識別子である。上記値が、例えば具体的な入金額「10000」の場合、タイムスタンプは、例えば入金が実行された時間「2008−12−24 09:00:00」である。
タイムスタンプに設定される時間の情報をデータの有効時間という。
ID、値及びタイムスタンプは、データベースでサポートされているフォーマットであれば、どのような形式のデータであってもよい。上記形式は、例えば数値型、文字列型、日付型又はBOOLEAN型である。
IDと値及びタイムスタンプとは、1対多の関係にある。例えば、「2008−12−24 09:00:00」に「10000」が入金され、「2008−12−25 09:00:00」に「15000」が入金されたとする。すると、「入金額」を表すID「11」に、値「10000」、値「15000」、タイムスタンプ「2008−12−24 09:00:00」及びタイムスタンプ「2008−12−25 09:00:00」がそれぞれID=11に属することになる。
本発明の実施態様において、「問い合わせを行う」とは、データベースに含まれるデータの照会を行うことをいう。例えば、データベース・アプリケーションに対してクエリを発行することをいう。クエリとして、例えばSQLが用いられる。
問い合わせには、IDを特定するための記述及びタイムスタンプが含まれる。
IDを特定するための記述とは、例えば、IDがある識別子であること、IDがある範囲に含まれること、IDを表す識別子がある値より大きいこと又はIDを表す識別子がある値より小さいことを条件とする記述である。該記述は、クエリがSQLならば、例えば、where句の記述である。また、複数のIDが特定されてもよい。
本発明の実施態様において、「指定時刻における最新の値に対する問い合わせを行う」とは、例えば、値に対応するIDと該値に対応するタイムスタンプであって、指定時刻を表す該タイムスタンプとを指定する検索クエリをデータベースに発行することをいう。最新の値は、指定時刻を越えないタイムスタンプのうち最大のタイムスタンプに属する値を示す。検索クエリとして、例えば、SQLのselect文が用いられる。なお、上記指定時刻を表すタイムスタンプは、必ずしも現在時刻を表すとは限らない。上記タイムスタンプは、過去又は未来の時刻を表すこともありうる。
本発明の実施態様において、「時間順にソートされているタイムスタンプ」とは、タイムスタンプで示される時間の情報が降順又は昇順に並べられていることをいう。タイムスタンプは値に関連付けられているため、タイムスタンプが時間順に並べられると、値もまた並べられうる。
本発明の実施態様において、「遅延更新」とは、更新トランザクションにおいて、システムがトランザクション・ログの書き込みを完了した時点でコミットする手法をいう。システムは、データベースに更新データを実際に反映させる処理を、トランザクションの実行とは非同期にまとめて行う。
本発明の実施態様において、「トランザクション」とは、データベースに対して行われるあるまとまった処理をいう。該処理は、例えばクエリの集合で実行される。クエリは、例えばSQLである。まとまった処理とは、例えば、複数のテーブルに含まれるIDに属する値の更新である。
以下、図面に従って、本発明の実施態様を説明する。本実施態様は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断らない限り、同一の符号は、同一の対象を指す。
図1は、本発明の実施態様において使用する、データベースのテーブルの例を示す。
テーブル(101)は、ID、値及びタイムスタンプを含む。上記IDは、値の種類を識別するための列項目である。上記値は、IDに属する具体的な値を示す列項目である。上記タイムスタンプは、上記値に関連付けられた時間の情報を示す列項目である。
例えば、2006年1月10日11:00にID=11の最新の値を返す問い合わせが行われると、1レコード目(102)の値が返される。2レコード目(103)の値はまだタイムスタンプの示す時間に達していないために、最新のデータとして返されることはない。
図2は、本発明の実施態様における、図1に記載のデータベースを使用するアプリケーション・サーバの構成図の例を示す。
アプリケーション・サーバ(201)は、アプリケーション・プログラム(202)及びアプリケーション・キャッシュ(203)を含む、コンピュータ・システムである。また、アプリケーション・サーバ(201)は、DB(206)をさらに含んでもよい。アプリケーション・サーバ(201)は、トランザクション(211)を処理し、該処理の結果をDB(206)に反映させる。アプリケーション・プログラム(202)は、トランザクション(211)を処理するプログラムである。アプリケーション・キャッシュ(203)は、アプリケーション・プログラム(202)用に用意されたキャッシュ領域である。アプリケーション・キャッシュ(203)には、インサート・ログ・キャッシュ(204)及びカレント・キャッシュ(205)が含まれる。インサート・ログ・キャッシュ(204)は、IDごとに、挿入される値と該値に対応するタイムスタンプとを記録するログ領域である。カレント・キャッシュ(205)は、IDごとに、「現在の最新の値」として返した値及び該値に対応するタイムスタンプが保存される領域である。
トランザクション(211)が値の挿入である場合、アプリケーション・プログラム(202)は、データ挿入のクエリのログであるトランザクション・ログを、リンクドリストの形でインサート・ログ・キャッシュ(204)に保持する。上記リンクドリストは、IDごとに値のタイムスタンプ順にソートされる。上記データ挿入(212)のデータベース(206)への反映(216)は、非同期で行われる。
トランザクション(211)が値の検索の場合、アプリケーション・プログラム(202)は、カレント・キャッシュ(205)から値の取得を試みる(213)。上記データ検索のクエリで指定するタイムスタンプが、カレント・キャッシュ(205)に保持されている上記クエリで指定するIDに属するタイムスタンプよりも新しい場合、アプリケーション・キャッシュ(203)上の値が、最新の値としてアプリケーション・プログラム(202)に返される(214)。上記データ検索のクエリで指定するタイムスタンプが、カレント・キャッシュ(205)に保持されている上記クエリで指定するIDに属するタイムスタンプよりも古い場合、インサート・ログ・キャッシュ(204)及びデータベース(206)への問い合わせ(215、217)が実行される。上記問い合わせの結果同士が比較され、タイムスタンプに指定された時点における最新の値が、アプリケーション・プログラム(202)に返される(214)。
本発明の実施態様では、現在時刻を指定してその時点の最新の値を返すクエリが多くを占めるシステムを前提としている。よって、カレント・キャッシュ(205)に保存されたクエリのタイムスタンプの示す時間は、上記トランザクション(211)に含まれるクエリのタイムスタンプの示す時間よりも後の時間であることが多くを占める。従って、データベースへのアクセス回数が減少し、検索時のレイテンシ短縮が可能である。
キャッシュ内のデータが時間データという特別な意味を認識して動くようにするためには、アプリケーション・キャッシュ(203)を、時間データフィールドとしてユーザがあらかじめ特定しておけばよい。そして、アプリケーション・プログラム(202)を、上記時間データフィールドを時間データであると認識して、キャッシュをその時間データ順に保持できるような機構に拡張する。アプリケーション・プログラム(202)は、キャッシュが利用できるか又はデータベース(206)にアクセスしなければならないかを、アプリケーション・キャッシュ(203)内で判断させ適したデータを返す。フロントエンドのアプリケーションプログラム(図示せず)はデータアクセス先を意識する必要はなく、従来のプログラムのままで使用可能である。
本発明の実施態様では、データの有効時間のフィールドが時間データであることを利用して、アプリケーション・キャッシュ(203)のデータ格納方法がメンテナンスされる。該メンテナンスにより、高速な挿入と検索とが両立される。アプリケーション・キャッシュ(203)では、IDごとにクエリを保存するレコードを時間順にソートされ、値とタイムスタンプとの組が、リンクドリストとして保持される。その上で、前回クエリで返した最新の値を指すカレント・キャッシュ・ポジション・ポインタを保持させる。これにより、挿入時にかかる余分なコストが、多くの場合、上記ポインタでポイントされたエントリとの比較1回に抑えられる。さらに、データベースに問い合わせることなく、検索時のタイムスタンプ時点における最新の値をキャッシュから取得することが可能である。
本発明の実施態様における、データ挿入の手順の概要を以下に示す。
コンピュータ・システムは、挿入トランザクションが開始されると、該トランザクションのログをアプリケーション・キャッシュ(203)上にあるデータベースの遅延更新のためのログ・キャッシュであるインサート・ログ・キャッシュ(204)に書き込む。コンピュータ・システムは、上記インサート・ログ・キャッシュ(204)上のトランザクションのログを、IDごとにタイムスタンプ順にソートしたリスト状になるよう並べる。上記並べることが完了した時点で、そのトランザクションはコミットされる。なお、挿入される値に対応するIDについてのログがインサート・ログ・キャッシュ(204)に存在しない場合、コンピュータ・システムは、データベース(206)から、最新のデータ及び未来のデータを取得し、該データをIDについてのログとして、タイムスタンプ順にソートしたリスト状になるよう並べる。
本発明の実施態様における、データ検索の手順の概要を以下に示す。
コンピュータ・システムは、検索トランザクションが開始されると、カレント・キャッシュ・ポジションの指すタイムスタンプから、上記検索トランザクションに含まれるタイムスタンプまでのインサート・ログ・キャッシュ(203)の情報を反映し、最新のデータを返す。コンピュータ・システムは、カレント・キャッシュ・ポジションのポインタを、上記クエリ結果として返したデータを指すように変更する。なお、検索トランザクションに含まれるタイムスタンプに指定された時刻が、カレント・キャッシュ・ポジションの指すタイムスタンプに指定された時刻より古い場合、コンピュータ・システムは、インサート・ログ・キャッシュ(203)に含まれるタイムスタンプとデータベースへの問い合わせ結果に含まれるタイムスタンプとを比較して、上記検索トランザクションに含まれるタイムスタンプに指定された時刻での最新のデータを返す。
図3Aは、本発明の実施態様における、図2に記載のアプリケーション・サーバのアプリケーション・キャッシュに含まれるインサート・ログ・キャッシュのデータを示す。
インサート・ログ・キャッシュ(301)は、挿入のクエリに対応するタイムスタンプと値との組(302〜305)を保持する。タイムスタンプと値との組(302〜305)は、インサート・ログ・キャッシュ(301)に組が挿入されるたびに、IDごとにタイムスタンプにソートして並べられる。インサート・ログ・キャッシュ(301)の例では、ID=11について、新しいタイムスタンプを含む組ほど、左に配置されている。また、カレント・キャッシュ・ポジションポインタは、カレント・キャッシュに収められているタイムスタンプ及び値を示している。
図3Bは、本発明の実施態様における、図2に記載のアプリケーション・サーバのカレント・キャッシュに含まれるデータの例を示す。
カレント・キャッシュ(311)は、IDごとに,上記カレント・キャッシュ・ポジション・ポインタで指されている組に含まれる値及びタイムスタンプを保持する。
図4Aは、本発明の実施態様における、図2に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、データ挿入時の処理ステップの例を示す。
データの挿入は、データ挿入のクエリによって実行される。データ挿入のクエリは、ID、タイムスタンプ及び値を含む。データ挿入のクエリは、ID及びタイムスタンプごとに値をデータベースに登録するためのクエリである。
データ挿入のクエリが発行されると、コンピュータ・システムは、以下のステップ401〜402を実行する。該実行により、インサート・ログ・キャッシュに登録されているリストであって、上記クエリによって指定するIDについての該リストが更新される。なお、上記リストがインサート・ログ・キャッシュに登録されていない場合、コンピュータ・システムは、ステップ400〜ステップ403を実行する前に、後述するキャッシュ・データを初期化する処理ステップ(図4C、ステップ421〜424)を実行する。
ステップ400は、処理の開始である。
ステップ401では、コンピュータ・システムは、インサート・ログ・キャッシュに値及びタイムスタンプを挿入する。コンピュータ・システムは、データ挿入のクエリで指定される値に対応するIDについてのリストに、上記データ挿入のクエリで指定される値とタイムスタンプとの組を登録する。そして、コンピュータ・システムは、上記リストに含まれる組を該組それぞれに含まれるタイムスタンプの示す時刻順にソートする。ソートが終了することに応じて、処理は、ステップ402に進む。
ステップ402では、コンピュータ・システムは、上記データ挿入のクエリについてのコミットを実行する。該コミットの実行により、データの挿入処理は終了する。
ステップ403は、処理の終了である。
図4Bは、本発明の実施態様における、図2に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、データ検索時の処理ステップの例を示す。
データ検索のクエリが発行されると、コンピュータ・システムは、以下のステップ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は、処理の終了である。
図4Cは、本発明の実施態様における、図2に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、キャッシュ・データを初期化する処理ステップの例を示す。
データ挿入時において、値に関連付けられたIDについてのリストがインサート・ログ・キャッシュに登録されていない場合、コンピュータ・システムは、以下のステップ420〜425を実行する。該実行により、上記IDについてのアプリケーション・キャッシュが初期化される。
ステップ420は、処理の開始である。
ステップ421では、コンピュータ・システムは、データ挿入のクエリが発行された時点における最新のタイムスタンプに属する値と、問い合わせた時刻よりも新しい、未来の時刻のタイムスタンプに属する値を取得する。コンピュータ・システムは、値に対応するIDを含むレコードであって、下記(1)又は(2)の条件を満たすタイムスタンプを含む該レコードを、データベースから取得する。
(1)データ挿入のクエリが発行された時刻を越えない最大のタイムスタンプを含むレコード。
(2)取得の問い合わせが実行された時刻よりも新しい未来のタイムスタンプを含むレコード。
ステップ422では、コンピュータ・システムは、インサート・ログ・キャッシュに、値をタイムスタンプ順に登録する。コンピュータ・システムは、上記取得したレコードそれぞれに含まれるタイムスタンプと値との組を含むリストであって、値に対応するIDについての該リストを作成する。コンピュータ・システムは、上記リストに含まれる組を該組それぞれに含まれるタイムスタンプの示す時刻順にソートする。コンピュータ・システムは、上記リストをインサート・ログ・キャッシュに登録する。
ここで、コンピュータ・システムは、上記取得したレコードであって、上記インサート・ログ・キャッシュに登録されるリストに含まれるタイムスタンプ及び値を含む該レコードが、既にデータベースに反映済みであることを、例えば、上記リストに登録しておいてもよい。コンピュータ・システムは、上記既にデータベースに反映済みであることを、例えば、上記組のそれぞれに対応するフラグとして、上記リスト登録する。コンピュータ・システムは、上記リストをインサート・ログ・キャッシュに登録することに応じて、上記フラグを立てる。該フラグは、遅延更新が実行されるタイミングで、コンピュータ・システムに参照される。コンピュータ・システムは、立っているフラグに対応する組について、遅延更新を実行しない。こうすることにより、遅延更新によって、インサート・ログ・キャッシュに含まれ且つデータベースに反映済みのデータがデータベースに再び反映されることを防ぐことができる。なお、上記データベースに反映済みのデータが、重複でデータベースに登録されたとしても、同じデータが挿入されるだけであり問題はない。
ステップ423では、コンピュータ・システムは、問い合わせた時点における最新のタイムスタンプに属する値をカレント・キャッシュに登録する。コンピュータ・システムは、上記(1)の条件を満たすレコードを、値に対応するIDについてのレコードとして、カレント・キャッシュに登録する。
ステップ424では、コンピュータ・システムは、問い合わせた時点における最新のタイムスタンプに属する値にポインタを指定する。コンピュータ・システムは、インサート・ログ・キャッシュに登録されたタイムスタンプと値との組であって、上記(1)の条件を満たすレコードに含まれるタイムスタンプと値との該組に、カレント・キャッシュ・ポジションを指定する。
ステップ425は、処理の終了である。
図5Aは、本発明の実施態様における、図4Aに対応するデータ挿入時の処理の具体例を示す。
リスト(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)は、ソート後のリストを示す。
上記ソートが終了することに応じて、コンピュータ・システムは、上記データ挿入のクエリについてのコミットを実行する。該コミットにより、データ挿入の処理は終了する。
図5Bは、本発明の実施態様における、図4Bに対応するデータ検索時の処理の具体例を示す。
第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に属する値を、データ検索の結果として返す。
第2の具体例として、データ検索の指定IDが「11」であり、指定タイムスタンプがその時点での現在時刻「2006−01−12 17:36:00」であるとする。
コンピュータ・システムは、指定タイムスタンプと、カレント・キャッシュ(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)に含まれる値をデータ検索の結果として返す。
第3の具体例として、データ検索の指定IDが「11」であり、指定タイムスタンプが「2006−01−12 09:00:00」であるとする。
コンピュータ・システムは、指定タイムスタンプと、カレント・キャッシュ(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)に含まれる値をデータ検索の結果として返す。
現在時刻を含む問い合わせが発行された場合、常にカレント・キャッシュ・ポジション以降のデータが対象になる。もし未来の時刻を指定する問い合わせが発行された場合、カレント・キャッシュ・ポジションは変更しない。
図5Cは、本発明の実施態様における、図4Cに対応するキャッシュ・データを初期化する処理の具体例を示す。
データ挿入のクエリによって挿入される値に対応する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)を指定する。
図6Aは、本発明の実施態様における、図2に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、遅延更新が実行された場合の処理ステップの例を示す。
データベースに対して遅延更新が実行された場合、コンピュータ・システムは、カレント・キャッシュ・ポジションが指定されているタイムスタンプ以降の未来のタイムスタンプを含む組をインサート・ログ・キャッシュに保持する。カレント・キャッシュ・ポジションが指定されているタイムスタンプよりも古い更新時間に対応するタイムスタンプを含む組は、上記遅延更新によるデータベースへの反映が完了した時点で削除可能である。
遅延更新が実行されると、コンピュータ・システムは、以下のステップ600〜603を実行する。
ステップ600は、処理の開始である。
ステップ601では、コンピュータ・システムは、インサート・ログ・キャッシュに含まれる全てのタイムスタンプ及び値をデータベースに反映する。ここで、後述する反映済みであることを示すフラグが立っている組に含まれるタイムスタンプ及び値については、データベースに反映しないとしてもよい。
ステップ602では、コンピュータ・システムは、ポイントされたタイムスタンプよりも古いタイムスタンプを含む組をインサート・ログ・キャッシュから削除し、処理は終了する。
ステップ603は、処理の終了である。
遅延更新が実行されることによって、カレント・キャッシュ・ポジションが指定されているタイムスタンプ以降の未来のタイムスタンプを含む組は、インサート・ログ・キャッシュに存在し且つデータベースに反映済みとなる。ここで、既にデータベースに反映済みであることを示すフラグを、例えば上記組ごとに立てておいてもよい。コンピュータ・システムは、上記組をデータベースに反映することに応じて、上記フラグを立てる。該フラグは、遅延更新が実行されるごとに、コンピュータ・システムに参照される。コンピュータ・システムは、フラグの立っている組について、遅延更新を実行しない。こうすることにより、遅延更新によって、インサート・ログ・キャッシュに含まれるデータベースに反映済みのデータがデータベースに再び反映されることを防ぐことができる。なお、上記データベースに反映済みのデータが、重複でデータベースに登録されたとしても、同じデータが挿入されるだけであるので問題ない。
図6Bは、本発明の実施態様における、図6Aに対応する遅延更新が実行された場合の処理の具体例を示す。
リスト(611)は、インサート・ログ・キャッシュに登録されているID=11についてのリストである。リスト(611)は、組(612〜615)を含む。組(612〜615)はそれぞれ、タイムスタンプ及び値を含む。また、組(613)は、カレント・キャッシュ・ポインタ(616)でポイントされているタイムスタンプを含む組である。また、インサート・ログ・キャッシュには、上記リスト(611)以外のリストは含まれていないとする。
遅延更新(619)が実行されると、コンピュータ・システムは、組(612〜615)に含まれるタイムスタンプ及び値を、データベース(617)に反映する(620)。さらに、コンピュータ・システムは、カレント・キャッシュ・ポインタ(616)でポイントされているタイムスタンプよりも古いタイムスタンプを含む組(614、615)をインサート・ログ・キャッシュから削除(621)する。該削除が終了することに応じて、遅延更新が実行された場合の処理が終了する。
図7Aは、本発明の実施態様における、図2に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、インサート・ログ・キャッシュをメンテナンスする処理ステップの例を示す。
クエリが実行されるタイミングとは別に、定期的にカレント・キャッシュ・ポジションが、インサート・ログ・キャッシュのデータの中で現在時刻での最新データを指すようにしてもよい。定期的とは、例えば1時間おき又は1日ごとである。該対応では、アプリケーション・サーバ又はインサート・ログ・キャッシュを管理するアプリケーションが定期的且つ自主的にカレント・キャッシュ・ポジションとカレント・キャッシュ上のデータとをメンテナンスする。該メンテナンスでは、IDごとに、カレント・キャッシュ・ポジションが、メンテナンスが実行された時刻を越えない最大のタイムスタンプと該最大のタイムスタンプに属する値との組を指し示すように更新される。また、上記最大のタイムスタンプと該最大のタイムスタンプに属する値がカレント・キャッシュに登録される。
コンピュータ・システムは、以下のステップ700〜704をIDごとに定期的に実行する。
ステップ700は、処理の開始である。
ステップ701では、コンピュータ・システムは、ポイントされたタイムスタンプが現在時刻における最新のタイムスタンプかを判定する。最新のタイムスタンプだと判定された場合、処理は終了する。最新のタイムスタンプではないと判定された場合、処理は、ステップ702に進む。
ステップ702では、コンピュータ・システムは、最新のタイムスタンプ及び値をカレント・キャッシュに登録する。登録が終了することに応じて、処理は、ステップ703に進む。
ステップ703では、コンピュータ・システムは、カレント・キャッシュ・ポジションを更新する。コンピュータ・システムは、上記最新のタイムスタンプをポイントするようにポインタの位置を変更する。該変更が終了することに応じて処理は終了する。
ステップ704は、処理の終了である。
上記メンテナンスにより、カレント・キャッシュ・ポジションのデータを最新結果として返す確率が上がる。よって、クエリの更なる高速化が可能となる。
図7Bは、本発明の実施態様における、図7Aに対応するメンテナンス処理の具体例を示す。
リスト(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についてのメンテナンス処理が終了する。
図8Aは、本発明の実施態様における、図2に記載のアプリケーション・キャッシュに対応する記憶部の構成図の例を示す。
第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)が例えばメモリであってもよい。
図8Bは、本発明の実施態様における、図2に記載のアプリケーション・サーバが有する機能を図示する機能ブロック図を示す。
受付部(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)とは別のシステム上にあってもよい。
図9は、本発明の実施態様における、図2に記載のアプリケーション・サーバのハードウェアのブロック図を示す。
コンピュータ・システム(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)が接続される。
ハードディスク又はシリコン・ディスク(908)には、オペレーティング・システム、J2EEなどのJava(商標)処理環境を提供するプログラム、その他のプログラム及びデータが、メイン・メモリ(903)にロード可能に記憶されている。
CD−ROM、DVD又はBDドライブ(909)は、必要に応じて、CD−ROM、DVD−ROM又はBDからプログラムをハードディスク又はシリコン・ディスク(908)に追加導入するために使用される。バス(904)には更に、キーボード・マウスコントローラ(910)を介して、キーボード(911)及びマウス(912)が接続されている。
通信インタフェース(914)は、例えばイーサネット(商標)・プロトコルに従う。通信インタフェース(914)は、通信コントローラ(913)を介してバス(904)に接続され、コンピュータ・システム及び通信回線(915)を物理的に接続する役割を担い、コンピュータ・システムのオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は、有線LAN環境、或いは例えばIEEE802.11a/b/g/nなどの無線LAN接続規格に基づく無線LAN環境であってもよい。

Claims (18)

  1. テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うためのコンピュータ・システムであって、
    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の記憶部から取得する取得部と
    を含む、前記コンピュータ・システム。
  2. 前記取得部が、
    前記特定されたIDに属し且つ前記ポインタによりポイントされた第1のタイムスタンプが前記第1の最大タイムスタンプよりも古いことに応じて、前記第1の最大タイムスタンプに属する値を前記第1の記憶部から取得する、請求項に記載のコンピュータ・システム。
  3. 前記第2の記憶部に保存されている、
    前記特定されたIDに属し且つ前記ポインタによりポイントされた第1のタイムスタンプ及び
    該第1のタイムスタンプに属する値
    を、
    前記第1の最大タイムスタンプ及び
    該第1の最大タイムスタンプに属する値
    にそれぞれ置換する置換部をさらに含む、請求項に記載のコンピュータ・システム。
  4. 前記ポインタの指定するタイムスタンプを、前記特定されたIDに属し且つ前記ポインタによりポイントされた第1のタイムスタンプから前記第1の最大タイムスタンプに変更する変更部をさらに含む、請求項に記載のコンピュータ・システム。
  5. 前記取得部が、
    前記第2のタイムスタンプが前記第2の記憶部に保存されている前記特定されたIDに属し且つ前記ポインタによりポイントされた第1のタイムスタンプより古いことに応じて、前記特定されたIDに属し且つ前記第2のタイムスタンプを超えない最大のタイムスタンプ(以下、第2の最大タイムスタンプ)と該第2の最大タイムスタンプに属する値とを前記データベースから取得し、
    前記第1の最大タイムスタンプが前記取得した第2の最大タイムスタンプより新しい場合、前記第1の最大タイムスタンプに属する値を前記第1の記憶部から取得する、請求項1〜4のいずれか一項に記載のコンピュータ・システム。
  6. 前記取得部が、
    前記第2の記憶部に検索対象であるIDに属する値がない場合、
    前記データベースを検索し、前記第2のタイムスタンプを超えない最大のタイムスタンプに属する値を取得する、請求項に記載のコンピュータ・システム。
  7. 前記受付部が、前記データベースに値を挿入するためのトランザクションを受け付け、
    前記トランザクションに含まれる、
    挿入対象である値と、
    前記挿入対象である値が有効になる時刻を示す第3のタイムスタンプと
    を、前記第1の記憶部に登録する登録部をさらに含む、請求項1〜6のいずれか一項に記載のコンピュータ・システム。
  8. 前記登録に応じて、前記挿入対象である値に対応するIDに属する第1のタイムスタンプを時刻順にソートするソート部をさらに含む、請求項に記載のコンピュータ・システム。
  9. 前記ソートが終了することに応じて、前記トランザクションをコミットする確定部をさらに含む、請求項に記載のコンピュータ・システム。
  10. 前記挿入対象である値に対応するIDに属する第1のタイムスタンプが前記第1の記憶部にない場合、
    前記取得部が、前記データベースを検索して、
    前記挿入対象である値に対応するIDに属する前記第3のタイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
    前記挿入対象である値に対応するIDに属する前記第3のタイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値と
    をさらに取得し、
    前記登録部が、
    前記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
    前記取得した新しいタイムスタンプ及び該タイムスタンプに属する値と
    を前記第1の記憶部にさらに登録し、
    前記コンピュータ・システムが、
    前記登録された最大のタイムスタンプと前記登録された新しいタイムスタンプとを時刻順にソートするソート部
    をさらに含む、請求項に記載のコンピュータ・システム。
  11. 前記登録された最大のタイムスタンプを前記ポインタで指定する指定部をさらに含み、
    前記登録部が、
    前記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、前記第2の記憶部にさらに登録する、請求項10に記載のコンピュータ・システム。
  12. データベースに対して遅延更新が実行された場合、
    前記ポインタによりポイントされた第1のタイムスタンプより古い時刻を示す第1のタイムスタンプ及び該第1のタイムスタンプに属する値を、前記第1の記憶部から削除する削除部をさらに含む、請求項1〜11のいずれか一項に記載のコンピュータ・システム。
  13. 前記ポインタの指定するタイムスタンプを、前記ポインタによりポイントされた第1のタイムスタンプから現在時刻を越えない最大の第1のタイムスタンプ(以下、第3の最大タイムスタンプ)に定期的に変更する変更部をさらに含む、請求項1〜12のいずれか一項に記載のコンピュータ・システム。
  14. 前記変更されることに応じて、
    前記第2の記憶部に保存されている、
    前記ポインタによりポイントされた第1のタイムスタンプ及び
    該第1のタイムスタンプに属する値
    を、
    前記第3の最大タイムスタンプ及び
    該第3の最大タイムスタンプに属する値
    にそれぞれ置換する置換部をさらに含む、請求項13に記載のコンピュータ・システム。
  15. 前記データベースが、インサート・オンリー・データベースである、請求項1〜14のいずれか一項に記載のコンピュータ・システム。
  16. テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うことを可能にするデータ構造を用意する方法であって、
    挿入トランザクションの開始に応じて、
    前記トランザクションに含まれる挿入対象である値に対応するIDに属するタイムスタンプが第1の記憶部にない場合、前記データベースを検索して、
    前記挿入対象である値に対応するIDに属する前記タイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
    前記挿入対象である値に対応するIDに属する前記タイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値と
    を取得するステップと、
    前記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
    前記取得した新しいタイムスタンプ及び該タイムスタンプに属する値と
    を、前記第1の記憶部に登録するステップと、
    前記登録された最大のタイムスタンプと前記登録された新しいタイムスタンプとを時刻順にソートするステップと、
    前記登録された最大のタイムスタンプをポインタで指定するステップと、
    前記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、第2の記憶部にさらに登録するステップと
    を含む、前記方法。
  17. テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行う方法であって、
    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の記憶部から取得するステップと
    を含む、前記方法。
  18. コンピュータに、請求項16又は17のいずれか一項に記載の方法の各ステップを実行させるコンピュータ・プログラム。
JP2009039918A 2009-02-23 2009-02-23 データベースを検索するためのコンピュータ・システム、方法及びコンピュータ・プログラム Expired - Fee Related JP5181140B2 (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

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