(57)【要約】      （修正有）【課題】タイムスタンプを指定して参照トランザクションを発行するデータベース・システムにおいて、タイムスタンプが異なる場合にトランザクションが高速化される方法。【解決手段】テーブル内に値と該値それぞれに関連付けられた時間の情報とを含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うためのデータ構造を提供する。該データ構造の１つは、データベースに挿入される値に対応付けられたＩＤごとに、時間順にソートされている少なくとも１のタイムスタンプ（以下、第１のタイムスタンプ）と、第１のタイムスタンプそれぞれに属する値と、第１のタイムスタンプのうちのいずれか１つを指定するポインタであって、第１のタイムスタンプは上記値が有効になる時刻を示す、ポインタとを含む。データ構造の他の１つは、ＩＤごとに、ポイントされた第１のタイムスタンプと、該第１のタイムスタンプに属する値とを含む。【選択図】図２
2010198135.tif 000002
【特許請求の範囲】
【請求項１】
テーブル内に値と該値それぞれに関連付けられた時間の情報とを含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うコンピュータ・システムにおいて、該コンピュータ・システムの第１の記憶部に格納されるデータ構造であって、
前記データベースに挿入される値に対応付けられたＩＤごとに、
時間順にソートされている少なくとも１のタイムスタンプ（以下、第１のタイムスタンプ）と、
該第１のタイムスタンプそれぞれに属する値と、
該第１のタイムスタンプのうちのいずれか１つを指定するポインタであって、前記第１のタイムスタンプは前記値が有効になる時刻を示す、前記ポインタと
を含むデータ構造。
【請求項２】
請求項１に記載のコンピュータ・システムの第２の記憶部に格納されるデータ構造であって、
前記ＩＤごとに、
前記ポイントされた前記第１のタイムスタンプと、
該第１のタイムスタンプに属する値と
を含むデータ構造。
【請求項３】
テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うためのコンピュータ・システムであって、
請求項１に記載のデータ構造（以下、第１のデータ構造）を格納する第１の記憶部と、
請求項２に記載のデータ構造（以下、第２のデータ構造）を格納する第２の記憶部と、
指定時刻における最新の値を前記データベースから検索するための問い合わせを受け付ける受付部であって、前記問い合わせは、少なくとも１のＩＤを特定するための記述と検索する時刻を示す第２のタイムスタンプとを含む、前記受付部と、
前記第１の記憶部に格納された前記特定されたＩＤに属する第１のタイムスタンプのうち、前記第２のタイムスタンプを超えない最大のタイムスタンプを有する第１のタイムスタンプ（以下、第１の最大タイムスタンプ）を特定する特定部と、
前記特定されたＩＤに属し且つ前記ポイントされた第１のタイムスタンプが前記第１の最大タイムスタンプと同じであることに応じて、前記特定されたＩＤに属する値を前記第２の記憶部から取得する取得部と
を含む、前記コンピュータ・システム。
【請求項４】
前記取得部が、
前記特定されたＩＤに属し且つ前記ポイントされた第１のタイムスタンプが前記第１の最大タイムスタンプよりも古いことに応じて、前記第１の最大タイムスタンプに属する値を前記第１の記憶部から取得する、請求項３に記載のコンピュータ・システム。
【請求項５】
前記第２の記憶部に保存されている、
前記特定されたＩＤに属し且つ前記ポイントされた第１のタイムスタンプ及び
該第１のタイムスタンプに属する値
を、
前記第１の最大タイムスタンプ及び
該第１の最大タイムスタンプに属する値
にそれぞれ置換する置換部をさらに含む、請求項４に記載のコンピュータ・システム。
【請求項６】
前記ポインタの指定するタイムスタンプを、前記特定されたＩＤに属し且つ前記ポイントされた第１のタイムスタンプから前記第１の最大タイムスタンプに変更する変更部をさらに含む、請求項４に記載のコンピュータ・システム。
【請求項７】
前記取得部が、
前記第２のタイムスタンプが前記第２の記憶部に保存されている前記特定されたＩＤに属し且つ前記ポイントされた第１のタイムスタンプより古いことに応じて、前記特定されたＩＤに属し且つ前記第２のタイムスタンプを超えない最大のタイムスタンプ（以下、第２の最大タイムスタンプ）と該第２の最大タイムスタンプに属する値とを前記データベースから取得し、
前記第１の最大タイムスタンプが前記取得した第２の最大タイムスタンプより新しい場合、前記第１の最大タイムスタンプに属する値を前記第１の記憶部から取得する、請求項３に記載のコンピュータ・システム。
【請求項８】
前記取得部が、
前記第２の記憶部に検索対象であるＩＤに属する値がない場合、
前記データベースを検索し、前記第２のタイムスタンプを超えない最大のタイムスタンプに属する値を取得する、請求項４に記載のコンピュータ・システム。
【請求項９】
前記受付部が、前記データベースに値を挿入するためのトランザクションを受け付け、
前記トランザクションに含まれる、
挿入対象である値と、
前記挿入対象である値が有効になる時刻を示す第３のタイムスタンプと
を、前記第１の記憶部に登録する登録部をさらに含む、請求項３に記載のコンピュータ・システム。
【請求項１０】
前記登録に応じて、前記挿入対象である値に対応するＩＤに属する第１のタイムスタンプを時刻順にソートするソート部をさらに含む、請求項９に記載のコンピュータ・システム。
【請求項１１】
前記ソートが終了することに応じて、前記トランザクションをコミットする確定部をさらに含む、請求項１０に記載のコンピュータ・システム。
【請求項１２】
前記挿入対象である値に対応するＩＤに属する第１のタイムスタンプが前記第１の記憶部にない場合、
前記取得部が、前記データベースを検索して、
前記挿入対象である値に対応するＩＤに属する前記第３のタイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
前記挿入対象である値に対応するＩＤに属する前記第３のタイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値と
をさらに取得し、
前記登録部が、
前記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
前記取得した新しいタイムスタンプ及び該タイムスタンプに属する値と
を前記第１の記憶部にさらに登録し、
前記コンピュータ・システムが、
前記登録された最大のタイムスタンプと前記登録された新しいタイムスタンプとを時刻順にソートするソート部
をさらに含む、請求項９に記載のコンピュータ・システム。
【請求項１３】
前記登録された最大のタイムスタンプを前記ポインタで指定する指定部をさらに含み、
前記登録部が、
前記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、前記第２の記憶部にさらに登録する、請求項１２に記載のコンピュータ・システム。
【請求項１４】
データベースに対して遅延更新が実行された場合、
前記ポイントされた第１のタイムスタンプより古い時刻を示す第１のタイムスタンプ及び該第１のタイムスタンプに属する値を、前記第１の記憶部から削除する削除部をさらに含む、請求項３に記載のコンピュータ・システム。
【請求項１５】
前記ポインタの指定するタイムスタンプを、前記ポイントされた第１のタイムスタンプから現在時刻を越えない最大の第１のタイムスタンプ(以下、第３の最大タイムスタンプ)に定期的に変更する変更部をさらに含む、請求項３に記載のコンピュータ・システム。
【請求項１６】
前記変更されることに応じて、
前記第２の記憶部に保存されている、
前記ポイントされた第１のタイムスタンプ及び
該第１のタイムスタンプに属する値
を、
前記第３の最大タイムスタンプ及び
該第３の最大タイムスタンプに属する値
にそれぞれ置換する置換部をさらに含む、請求項１５に記載のコンピュータ・システム。
【請求項１７】
前記データベースが、インサート・オンリー・データベースである、請求項３に記載のコンピュータ・システム。
【請求項１８】
テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うことを可能にするデータ構造を用意する方法であって、
挿入トランザクションの開始に応じて、前記トランザクションに含まれる、
挿入対象である値と、
前記挿入対象である値が有効になる時刻を示すタイムスタンプと
を、第１の記憶部に登録するステップと、
前記登録に応じて、前記挿入対象である値に対応するＩＤに属する少なくとも１のタイムスタンプを時刻順にソートするステップと
を含む、前記方法。
【請求項１９】
テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うことを可能にするデータ構造を用意する方法であって、
挿入トランザクションの開始に応じて、
前記トランザクションに含まれる挿入対象である値に対応するＩＤに属するタイムスタンプが第１の記憶部にない場合、前記データベースを検索して、
前記挿入対象である値に対応するＩＤに属する前記タイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
前記挿入対象である値に対応するＩＤに属する前記タイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値と
を取得するステップと、
前記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
前記取得した新しいタイムスタンプ及び該タイムスタンプに属する値と
を、前記第１の記憶部に登録するステップと、
前記登録された最大のタイムスタンプと前記登録された新しいタイムスタンプとを時刻順にソートするステップと、
前記登録された最大のタイムスタンプをポインタで指定するステップと、
前記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、第２の記憶部にさらに登録するステップと
を含む、前記方法。
【請求項２０】
テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行う方法であって、
請求項１に記載のデータ構造（以下、第１のデータ構造）を第１の記憶部に格納するステップと、
請求項２に記載のデータ構造（以下、第２のデータ構造）を第２の記憶部に格納するステップと、
指定時刻における最新の値を前記データベースから検索するための問い合わせを受け付けるステップであって、前記問い合わせは、少なくとも１のＩＤを特定するための記述と検索する時刻を示す第２のタイムスタンプとを含む、前記受け付けるステップと、
前記第１の記憶部に格納された前記特定されたＩＤに属する第１のタイムスタンプのうち、前記第２のタイムスタンプを超えない最大のタイムスタンプを有する第１のタイムスタンプ（以下、第１の最大タイムスタンプ）を特定するステップと、
前記特定されたＩＤに属し且つ前記ポイントされた第１のタイムスタンプが前記第１の最大タイムスタンプと同じであることに応じて、前記特定されたＩＤに属する値を前記第２の記憶部から取得するステップと
を含む、前記方法。
【請求項２１】
コンピュータに、請求項１８〜２０のいずれか一項に記載の方法の各ステップを実行させるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースを検索するためのデータ構造、並びにそのコンピュータ・システム、方法及びコンピュータ・プログラムに関する。
【背景技術】
【０００２】
一般的なデータベース・システムでは、データ処理は、参照、挿入、更新及び削除の各処理を含む。しかし、インサート・オンリー（Ｉｎｓｅｒｔ  ｏｎｌｙ）のデータベース・システムでは、上記処理のうち、挿入、更新及び削除の全ての処理が挿入処理として表現される。インサート・オンリーのデータベース・システムにおいて、データベースのデータの挿入、更新及び削除を含む上記挿入処理が実行される場合、データベース内のデータは直接書き換えられず、ログのような形式を使用してデータベース内に新たに挿入される。よって、上記データベース内のデータは、過去のデータ処理の履歴を参照できるような形式を使用してデータベース内に格納される。
【０００３】
過去のデータ処理の履歴を参照できるような形式において、データベースに保存される値は、各値に対応付けられたＩＤとタイムスタンプとによって特定される。各タイムスタンプは、各値が有効となる時間を表す。ここで、値が有効となるとは、値が参照可能であることを意味する。タイムスタンプに未来の時間が設定されることで、該未来の時間に参照可能になる値が、上記未来の時間の到達前にデータベースに挿入されうる。
【０００４】
インサート・オンリーのデータベース・システムは、例えば、勘定系システムにおいて見られるデータベース・システムである。勘定系システムでは、大容量のトランザクションを高速に処理することが求められる。
【０００５】
トランザクションに含まれるデータアクセス処理を高速化する手法として、遅延更新（Ｄｅｆｅｒｒｅｄ  ｕｐｄａｔｅ）がある。遅延更新は、更新トランザクションにおいて、システムがトランザクション・ログの書き込みを完了した時点でコミットする手法である。システムは、データベースに更新データを実際に反映させる処理を、トランザクションの実行とは非同期にまとめて行う。上記遅延更新により、更新トランザクションのスループットが改善されることが知られている。
【０００６】
また、参照トランザクションにおいて、検索結果をアプリケーション側にキャッシュする手法が知られている。該キャッシュにより、データベースへのアクセス処理時間のボトルネックとなるアクセス処理の回数が減らされる。その結果、データアクセス処理のレイテンシが短縮される。
【０００７】
インサート・オンリーのデータベース・システムにおいて、参照処理を含む参照トランザクションが実行される場合、上記タイムスタンプが指定される必要がある。また、参照トランザクションにおいて、最も多く発行されるクエリは、その時点で有効なデータ中の最新の値を返すクエリである。よって、上記タイムスタンプには、現在時刻が指定されることが多い。つまり、上記タイムスタンプの値が、上記クエリごとに現在時刻に変更されてしまう。従って、前回のクエリ結果がキャッシュに保存されており且つ前回のクエリの結果と返す値が同じ場合であっても、タイムスタンプが異なるためにキャッシュミスと判断される。そのために、取得する値がキャッシュに保存されている場合であっても、キャッシュから値は取得されず、データベースへのアクセスが都度発生してしまう。
【０００８】
上記キャッシュミスと判断されることが発生しうる原因は、タイムスタンプのフィールドが、時間データという特別な意味と認識されず、単なるデータ空間とみなされているからである。
【０００９】
下記に示すＳＱＬは、タイムスタンプのフィールドが単なるデータ空間とみなされていることを示すクエリの例である。該例は、テーブルＣＤからデータを取得するためにＩＤとタイムスタンプ（EffectiveDate）とを指定している。該指定によって、指定したタイムスタンプの時点における最新の値が返される。
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 の範囲のデータがデータベースから取得される。
上記キャッシュ手法では、キャッシュに保存された各データが最新であるかどうかを、タイムスタンプを用いて判断する。各データをキャッシュに載せた時間より新しい時間にキャッシュに載っているデータを検索範囲として含むクエリが発行された場合、キャッシュ・データの検証が行われる。しかしながら、上記キャッシュ手法において、タイムスタンプは、キャッシュ・データの検証のために使用されるに過ぎず、指定したクエリを高速に処理するためには使用されない。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特表２００６−５１１８７６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
タイムスタンプを指定して参照トランザクションを発行するデータベース・システムにおいてクエリを発行する場合、タイムスタンプには、クエリごとに現在時刻が設定される。よって、クエリの結果がキャッシュにあり且つ返す値が同じ場合であっても、タイムスタンプが異なるのでキャッシュミスであると判断される。そのため、キャッシュからデータが取得されず、クエリの照会ごとに、データベースへのアクセスが発生してしまう。よって、タイムスタンプが異なる場合に、トランザクションが高速化される方法が求められている。
【課題を解決するための手段】
【００１４】
本発明は、テーブル内に値と該値それぞれに関連付けられた時間の情報とを含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うコンピュータ・システムにおいて、該コンピュータ・システムの第１の記憶部に格納されるデータ構造（第１のデータ構造）を提供する。該第１のデータ構造は、
上記データベースに挿入される値に対応付けられたＩＤごとに、
時間順にソートされている少なくとも１のタイムスタンプ（第１のタイムスタンプ）と、
該第１のタイムスタンプそれぞれに属する値と、
該第１のタイムスタンプのうちのいずれか１つを指定するポインタであって、上記第１のタイムスタンプは上記値が有効になる時刻を示す、上記ポインタと
を含む。
【００１５】
本発明はまた、上記第１のデータ構造とともに、第２の記憶部に格納されるデータ構造（第２のデータ構造）を提供する。該第２のデータ構造は、
上記ＩＤごとに、
上記ポイントされた上記第１のタイムスタンプと、
該第１のタイムスタンプに属する値と
を含む。
【００１６】
本発明はまた、テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うためのコンピュータ・システムを提供する。該コンピュータ・システムは、
上記第１のデータ構造を格納する第１の記憶部と、
上記第２のデータ構造を格納する第２の記憶部と、
指定時刻における最新の値を上記データベースから検索するための問い合わせを受け付ける受付部であって、上記問い合わせは、少なくとも１のＩＤを特定するための記述と検索する時刻を示す第２のタイムスタンプとを含む、上記受付部と、
上記第１の記憶部に格納された上記特定されたＩＤに属する第１のタイムスタンプのうち、上記第２のタイムスタンプを超えない最大のタイムスタンプを有する第１のタイムスタンプ（第１の最大タイムスタンプ）を特定する特定部と、
上記特定されたＩＤに属し且つ上記ポイントされた第１のタイムスタンプが上記第１の最大タイムスタンプと同じであることに応じて、上記特定されたＩＤに属する値を上記第２の記憶部から取得する取得部と
を含む。
【００１７】
本発明の１つの実施態様では、上記取得部が、
上記特定されたＩＤに属し且つ上記ポイントされた第１のタイムスタンプが上記第１の最大タイムスタンプよりも古いことに応じて、上記第１の最大タイムスタンプに属する値を上記第１の記憶部から取得する。
【００１８】
本発明の１つの実施態様では、上記コンピュータ・システムは、上記第２の記憶部に保存されている、
上記特定されたＩＤに属し且つ上記ポイントされた上記第１のタイムスタンプ及び該第１のタイムスタンプに属する値を、上記第１の最大タイムスタンプ及び該第１の最大タイムスタンプに属する値それぞれに置換する置換部をさらに含む。
【００１９】
本発明の１つの実施態様では、上記コンピュータ・システムは、上記特定されたＩＤに属し且つ上記ポインタの指定するタイムスタンプを、上記ポイントされた第１のタイムスタンプから上記第１の最大タイムスタンプに変更する変更部をさらに含む。
【００２０】
本発明の１つの実施態様では、上記取得部が、
上記第２のタイムスタンプが上記第２の記憶部に保存されている上記特定されたＩＤに属し且つ上記ポイントされた上記第１のタイムスタンプより古いことに応じて、上記特定されたＩＤに属し且つ上記第２のタイムスタンプを超えない最大のタイムスタンプ（第２の最大タイムスタンプ）と該第２の最大タイムスタンプに属する値とを取得し、上記第１の最大タイムスタンプが上記取得した第２の最大タイムスタンプより新しい場合、上記第１の最大タイムスタンプに属する値を上記第１の記憶部から取得する。
【００２１】
本発明の１つの実施態様では、上記取得部が、上記取得した第２の最大タイムスタンプが第１の最大タイムスタンプより新しい場合、上記取得した第２の最大タイムスタンプに属する値を取得した値とする。
【００２２】
本発明の１つの実施態様では、上記取得部が、
上記第２の記憶部に検索対象であるＩＤに属する値がない場合、
上記データベースを検索し、上記第２のタイムスタンプを超えない最大のタイムスタンプに属する値を取得する。
【００２３】
本発明の１つの実施態様では、上記受付部が、上記データベースに値を挿入するためのトランザクションを受け付け、
上記トランザクションに含まれる、
挿入対象である値と、
上記挿入対象である値が有効になる時刻を示す第３のタイムスタンプと
を、上記第１の記憶部に登録する登録部をさらに含む。
【００２４】
本発明の１つの実施態様では、上記コンピュータ・システムは、上記登録に応じて、上記挿入対象である値に対応するＩＤに属する第１のタイムスタンプを時刻順にソートするソート部をさらに含む。
【００２５】
本発明の１つの実施態様では、上記コンピュータ・システムは、上記ソートが終了することに応じて、上記トランザクションをコミットする確定部をさらに含む。
【００２６】
本発明の１つの実施態様では、上記挿入対象である値に対応するＩＤに属する第１のタイムスタンプが、上記第１の記憶部にない場合、
上記取得部が、上記データベースを検索して、
上記挿入対象である値に対応するＩＤに属する上記第３のタイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
上記挿入対象である値に対応するＩＤに属する上記第３のタイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値と
をさらに取得し、
上記登録部が、
上記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
上記取得した新しいタイムスタンプ及び該タイムスタンプに属する値と
を上記第１の記憶部にさらに登録し、
上記コンピュータ・システムが、上記登録された最大のタイムスタンプと前上記登録された新しいタイムスタンプとを時刻順にソートするソート部をさらに含む。
【００２７】
本発明の１つの実施態様では、上記コンピュータ・システムは、上記登録された最大のタイムスタンプを上記ポインタで指定する指定部をさらに含み、
上記登録部が、
上記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、上記第２の記憶部にさらに登録する。
【００２８】
本発明の１つの実施態様では、上記コンピュータ・システムは、データベースに対して遅延更新が実行された場合、
上記ポイントされた第１のタイムスタンプより古い時刻を示す第１のタイムスタンプ及び該第１のタイムスタンプに属する値を、上記第１の記憶部から削除する削除部をさらに含む。
【００２９】
本発明の１つの実施態様では、上記コンピュータ・システムは、上記ポインタの指定するタイムスタンプを、上記ポイントされた第１のタイムスタンプから現在時刻を越えない最大の第１のタイムスタンプ(以下、第２の最大タイムスタンプ)に定期的に変更する変更部をさらに含む。
【００３０】
本発明の１つの実施態様では、上記コンピュータ・システムは、上記変更されることに応じて、
上記第２の記憶部に保存されている、
上記ポイントされた第１のタイムスタンプ及び
該第１のタイムスタンプに属する値
を、
上記第３の最大タイムスタンプ及び
該第３の最大タイムスタンプに属する値
にそれぞれ置換する置換部をさらに含む。
【００３１】
本発明はまた、テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うことを可能にするデータ構造を用意する方法を提供する。該方法は、上記コンピュータ・システムに下記ステップを実行させる。該ステップは、
挿入トランザクションの開始に応じて、
上記トランザクションに含まれる、
挿入対象である値と、
上記挿入対象である値が有効になる時刻を示すタイムスタンプと
を、第１の記憶部に登録するステップと、
上記登録に応じて、上記第１の記憶部に含まれる少なくとも１のタイムスタンプであって、上記挿入対象である値に対応するＩＤに属するタイムスタンプを時刻順にソートするステップと
を含む。
【００３２】
本発明はまた、テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うことを可能にするデータ構造を用意する方法を提供する。該方法は、上記コンピュータ・システムに下記ステップを実行させる。該ステップは、
挿入トランザクションの開始に応じて、
上記トランザクションに含まれる挿入対象である値に対応するＩＤに属するタイムスタンプが第１の記憶部にない場合、上記データベースを検索して、
上記挿入対象である値に対応するＩＤに属する上記タイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
上記挿入対象である値に対応するＩＤに属する上記タイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値と
を取得するステップと、
上記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、
上記取得した新しいタイムスタンプ及び該タイムスタンプに属する値と
を上記第１の記憶部に登録するステップと、
上記登録された最大のタイムスタンプと上記登録された新しいタイムスタンプとを時刻順にソートするステップと、
上記登録された最大のタイムスタンプをポインタで指定するステップと、
上記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、第２の記憶部にさらに登録するステップと
を含む。
【００３３】
本発明はまた、テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行う方法を提供する。該方法は、上記コンピュータ・システムに下記ステップを実行させる。該ステップは、
上記第１のデータ構造を第１の記憶部に格納するステップと、
上記第２のデータ構造を第２の記憶部に格納するステップと、
指定時刻における最新の値を上記データベースから検索するための問い合わせを受け付けるステップであって、上記問い合わせは、少なくとも１のＩＤを特定するための記述と検索する時刻を示す第２のタイムスタンプとを含む、上記受け付けるステップと、
上記第１の記憶部に格納された上記特定されたＩＤに属する第１のタイムスタンプのうち、上記第２のタイムスタンプを超えない最大のタイムスタンプを有する第１のタイムスタンプ（第１の最大タイムスタンプ）を特定するステップと、
上記特定されたＩＤに属し且つ上記ポイントされた第１のタイムスタンプが上記第１の最大タイムスタンプと同じであることに応じて、上記特定されたＩＤに属する値を上記第２の記憶部から取得するステップと
を含む。
【００３４】
本発明の１つの実施態様では、上記取得するステップが、
上記特定されたＩＤに属し且つ上記ポイントされた第１のタイムスタンプが上記第１の最大タイムスタンプよりも古いことに応じて、上記第１の最大のタイムスタンプに属する値を上記第１の記憶部から取得するステップをさらに含む。
【００３５】
本発明の１つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、
上記第２の記憶部に保存されている、
上記特定されたＩＤに属し且つ上記ポイントされた上記第１のタイムスタンプ及び
該第１のタイムスタンプに属する値
を、
上記第１の最大タイムスタンプ及び
該第１の最大タイムスタンプに属する値
にそれぞれ置換するステップをさらに含む。
【００３６】
本発明の１つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記ポインタの指定するタイムスタンプを、上記特定されたＩＤに属し且つ上記ポイントされた第１のタイムスタンプから上記第１の最大タイムスタンプに変更するステップをさらに含む。
【００３７】
本発明の１つの実施態様では、上記取得するステップは、
上記第２のタイムスタンプが上記第２の記憶部に保存されている上記特定されたＩＤに属し且つ上記ポイントされた上記第１のタイムスタンプより古いことに応じて、上記特定されたＩＤに属し且つ上記第２のタイムスタンプを超えない最大のタイムスタンプ（第２の最大タイムスタンプ）と該第２の最大タイムスタンプに属する値とを上記データベースから取得するステップと、
上記第１の最大タイムスタンプが上記取得した第２の最大タイムスタンプより新しい場合、上記第１の最大タイムスタンプに属する値を上記第１の記憶部から取得するステップと
をさらに含む。
【００３８】
本発明の１つの実施態様では、上記取得するステップは、上記第２の記憶部に検索対象であるＩＤに属する値がない場合、
上記データベースを検索し、上記第２のタイムスタンプを超えない最大のタイムスタンプに属する値を取得するステップをさらに含む。
【００３９】
本発明の１つの実施態様では、上記受け付けるステップは、上記データベースに値を挿入するためのトランザクションを受け付けるステップを含む。
本発明の１つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記トランザクションに含まれる、挿入対象である値と、上記挿入対象である値が有効になる時刻を示す第３のタイムスタンプとを、上記第１の記憶部に登録するステップをさらに含む。
【００４０】
本発明の１つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記登録に応じて、上記挿入対象である値に対応するＩＤに属する第１のタイムスタンプを時刻順にソートするステップを含む。
【００４１】
本発明の１つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記ソートが終了することに応じて、上記トランザクションをコミットするステップを含む。
【００４２】
本発明の１つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記挿入対象である値に対応するＩＤに属する値に対応する第１のタイムスタンプが上記第１の記憶部にない場合、
上記データベースを検索して、上記挿入対象である値に対応するＩＤに属する上記第３のタイムスタンプを超えない最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、上記挿入対象である値に対応するＩＤに属する上記第３のタイムスタンプより新しいタイムスタンプ及び該タイムスタンプに属する値とを取得するステップを含む。
また、上記登録するステップは、上記取得した最大のタイムスタンプ及び該最大のタイムスタンプに属する値と、上記取得した新しいタイムスタンプ及び該タイムスタンプに属する値とを上記第１の記憶部に登録するステップをさらに含む。
本発明の１つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記登録された最大のタイムスタンプと上記登録された新しいタイムスタンプとを時刻順にソートするステップをさらに含む。
【００４３】
本発明の１つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記登録された最大のタイムスタンプを上記ポインタで指定するステップをさらに含む。
また、上記登録するステップは、
上記登録された最大のタイムスタンプ及び該最大のタイムスタンプに属する値を、上記第２の記憶部にさらに登録するステップをさらに含む。
【００４４】
本発明の１つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、データベースに対して遅延更新が実行された場合、
上記ポイントされた第１のタイムスタンプより古い時刻を示す第１のタイムスタンプ及び該第１のタイムスタンプに属する値を、上記第１の記憶部から削除するステップを含む。
【００４５】
本発明の１つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記ポインタの指定するタイムスタンプを、上記ポイントされた第１のタイムスタンプから現在時刻を越えない最大の第１のタイムスタンプ(第３の最大タイムスタンプ)に定期的に変更するステップを含む。
【００４６】
本発明の１つの実施態様では、該方法は、上記コンピュータ・システムに下記ステップをさらに実行させる。該ステップは、上記変更されることに応じて、
上記第２の記憶部に保存されている、上記ポイントされた第１のタイムスタンプ及び該第１のタイムスタンプに属する値を、上記第３の最大タイムスタンプ及び該第３の最大タイムスタンプに属する値にそれぞれ置換するステップを含む。
【００４７】
本発明はまた、テーブル内に値と該値それぞれに関連付けられた時間の情報を含むデータベースを使用して、指定時刻における最新の値に対する問い合わせを行うコンピュータ・プログラムを提供する。該コンピュータ・プログラムは、コンピュータに、上記に記載のいずれか１つの方法の各ステップを実行させる。
【００４８】
本発明の１つの実施態様では、上記データベースが、インサート・オンリー・データベースである。
【発明の効果】
【００４９】
本発明の実施態様に従うデータベース・システムにおいて、タイムスタンプ指定検索を行うことによって、最も多く発行される現時点での最新データに関するリクエストが高速化される。また、本発明の実施態様に従うデータベースにおいて、未来のデータについても統合することが可能である。
【図面の簡単な説明】
【００５０】
【図１】本発明の実施態様において使用する、データベースのテーブルの例を示す。
【図２】本発明の実施態様における、図１に記載のデータベースを使用するアプリケーション・サーバの構成図の例を示す。
【図３Ａ】本発明の実施態様における、図２に記載のアプリケーション・サーバのアプリケーション・キャッシュに含まれるインサート・ログ・キャッシュのデータを示す。
【図３Ｂ】本発明の実施態様における、図２に記載のアプリケーション・サーバのカレント・キャッシュに含まれるデータの例を示す。
【図４Ａ】本発明の実施態様における、図２に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、データ挿入時の処理ステップの例を示す。
【図４Ｂ】本発明の実施態様における、図２に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、データ検索時の処理ステップの例を示す。
【図４Ｃ】本発明の実施態様における、図２に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、キャッシュ・データを初期化する処理ステップの例を示す。
【図５Ａ】本発明の実施態様における、図４Ａに対応するデータ挿入時の処理の具体例を示す。
【図５Ｂ】本発明の実施態様における、図４Ｂに対応するデータ検索時の処理の具体例を示す。
【図５Ｃ】本発明の実施態様における、図４Ｃに対応するキャッシュ・データを初期化する処理の具体例を示す。
【図６Ａ】本発明の実施態様における、図２に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、遅延更新が実行された場合の処理ステップの例を示す。
【図６Ｂ】本発明の実施態様における、図６Ａに対応する遅延更新が実行された場合の処理の具体例を示す。
【図７Ａ】本発明の実施態様における、図２に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、インサート・ログ・キャッシュをメンテナンスする処理ステップの例を示す。
【図７Ｂ】本発明の実施態様における、図７Ａに対応するメンテナンス処理の具体例を示す。
【図８Ａ】本発明の実施態様における、図２に記載のアプリケーション・キャッシュに対応する記憶部の構成図の例を示す。
【図８Ｂ】本発明の実施態様における、図２に記載のアプリケーション・サーバが有する機能を図示する機能ブロック図を示す。
【図９】本発明の実施態様における、図２に記載のアプリケーション・サーバのハードウェアのブロック図を示す。
【発明を実施するための形態】
【００５１】
本発明の実施態様において、「テーブル内に値と該値それぞれに関連付けられた時間の情報とを含むデータベース」とは、値を該値に関連付けられた時間の情報とともに保存するデータベースである。上記データベースは、例えば、インサート・オンリー・データベースである。データベースのテーブルは、ＩＤ、値及びタイムスタンプを含む。ＩＤ、値及びタイムスタンプは、例えばデータベースの列項目である。また、ＩＤ、値及びタイムスタンプは、それぞれ別のテーブルにリンク付けされて含まれてもよい。例えば、テーブルＡがＩＤを含み、テーブルＢが値を含み、テーブルＣがタイムスタンプを含むならば、テーブルＡ〜Ｃがそれぞれ共通のキー項目によってリンク付けされていればよい。
「ＩＤ」とは、値の種類を識別するための項目である。ＩＤは、値の種類を種類ごとに、例えば一意な識別子として表される。データベースが、例えば銀行預金についてのデータベースであって、値の種類が、例えば「口座名義人」、「入金額」、「出金額」及び「残高」であるとする。すると、ＩＤは、例えば口座名義人を表す識別子「１０」、入金額を表す識別子「１１」、出金額を表す識別子「１２」及び残高を表す識別子「１３」で表される。また、値の種類は、複数の種類を組み合わせたものでもよい。値の種類は、例えば入金額と出金額とを組み合わせた「入出金額」としてもよい。
「値」とは、上記ＩＤに属する具体的な値を示す項目である。上記ＩＤが、例えば口座名義人を表す識別子「１０」の場合、値は、例えば口座名義人の具体的な名前「ヤマダ  タロウ」である。
「タイムスタンプ」とは、値に関連付けられた時間の情報を示す項目である。タイムスタンプは、タイムスタンプに属する値が有効になる時間を表す。時間の情報は、タイムスタンプ同士の順番を特定できる情報である。時間の情報は、例えば年、年月日、時刻又は時間と関連付けられた識別子である。上記値が、例えば具体的な入金額「１００００」の場合、タイムスタンプは、例えば入金が実行された時間「２００８−１２−２４  ０９：００：００」である。
タイムスタンプに設定される時間の情報をデータの有効時間という。
ＩＤ、値及びタイムスタンプは、データベースでサポートされているフォーマットであれば、どのような形式のデータであってもよい。上記形式は、例えば数値型、文字列型、日付型又はＢＯＯＬＥＡＮ型である。
【００５２】
ＩＤと値及びタイムスタンプとは、１対多の関係にある。例えば、「２００８−１２−２４  ０９：００：００」に「１００００」が入金され、「２００８−１２−２５  ０９：００：００」に「１５０００」が入金されたとする。すると、「入金額」を表すＩＤ「１１」に、値「１００００」、値「１５０００」、タイムスタンプ「２００８−１２−２４  ０９：００：００」及びタイムスタンプ「２００８−１２−２５  ０９：００：００」がそれぞれＩＤ＝１１に属することになる。
【００５３】
本発明の実施態様において、「問い合わせを行う」とは、データベースに含まれるデータの照会を行うことをいう。例えば、データベース・アプリケーションに対してクエリを発行することをいう。クエリとして、例えばＳＱＬが用いられる。
問い合わせには、ＩＤを特定するための記述及びタイムスタンプが含まれる。
ＩＤを特定するための記述とは、例えば、ＩＤがある識別子であること、ＩＤがある範囲に含まれること、ＩＤを表す識別子がある値より大きいこと又はＩＤを表す識別子がある値より小さいことを条件とする記述である。該記述は、クエリがＳＱＬならば、例えば、where句の記述である。また、複数のＩＤが特定されてもよい。
【００５４】
本発明の実施態様において、「指定時刻における最新の値に対する問い合わせを行う」とは、例えば、値に対応するＩＤと該値に対応するタイムスタンプであって、指定時刻を表す該タイムスタンプとを指定する検索クエリをデータベースに発行することをいう。最新の値は、指定時刻を越えないタイムスタンプのうち最大のタイムスタンプに属する値を示す。検索クエリとして、例えば、ＳＱＬのselect文が用いられる。なお、上記指定時刻を表すタイムスタンプは、必ずしも現在時刻を表すとは限らない。上記タイムスタンプは、過去又は未来の時刻を表すこともありうる。
【００５５】
本発明の実施態様において、「時間順にソートされているタイムスタンプ」とは、タイムスタンプで示される時間の情報が降順又は昇順に並べられていることをいう。タイムスタンプは値に関連付けられているため、タイムスタンプが時間順に並べられると、値もまた並べられうる。
【００５６】
本発明の実施態様において、「遅延更新」とは、更新トランザクションにおいて、システムがトランザクション・ログの書き込みを完了した時点でコミットする手法をいう。システムは、データベースに更新データを実際に反映させる処理を、トランザクションの実行とは非同期にまとめて行う。
【００５７】
本発明の実施態様において、「トランザクション」とは、データベースに対して行われるあるまとまった処理をいう。該処理は、例えばクエリの集合で実行される。クエリは、例えばＳＱＬである。まとまった処理とは、例えば、複数のテーブルに含まれるＩＤに属する値の更新である。
【００５８】
以下、図面に従って、本発明の実施態様を説明する。本実施態様は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断らない限り、同一の符号は、同一の対象を指す。
【００５９】
図１は、本発明の実施態様において使用する、データベースのテーブルの例を示す。
テーブル（１０１）は、ＩＤ、値及びタイムスタンプを含む。上記ＩＤは、値の種類を識別するための列項目である。上記値は、ＩＤに属する具体的な値を示す列項目である。上記タイムスタンプは、上記値に関連付けられた時間の情報を示す列項目である。
例えば、２００６年１月１０日１１：００にＩＤ＝１１の最新の値を返す問い合わせが行われると、1レコード目（１０２）の値が返される。２レコード目（１０３）の値はまだタイムスタンプの示す時間に達していないために、最新のデータとして返されることはない。
【００６０】
図２は、本発明の実施態様における、図１に記載のデータベースを使用するアプリケーション・サーバの構成図の例を示す。
アプリケーション・サーバ（２０１）は、アプリケーション・プログラム（２０２）及びアプリケーション・キャッシュ（２０３）を含む、コンピュータ・システムである。また、アプリケーション・サーバ（２０１）は、ＤＢ（２０６）をさらに含んでもよい。アプリケーション・サーバ（２０１）は、トランザクション（２１１）を処理し、該処理の結果をＤＢ（２０６）に反映させる。アプリケーション・プログラム（２０２）は、トランザクション（２１１）を処理するプログラムである。アプリケーション・キャッシュ（２０３）は、アプリケーション・プログラム（２０２）用に用意されたキャッシュ領域である。アプリケーション・キャッシュ（２０３）には、インサート・ログ・キャッシュ（２０４）及びカレント・キャッシュ（２０５）が含まれる。インサート・ログ・キャッシュ（２０４）は、ＩＤごとに、挿入される値と該値に対応するタイムスタンプとを記録するログ領域である。カレント・キャッシュ（２０５）は、ＩＤごとに、「現在の最新の値」として返した値及び該値に対応するタイムスタンプが保存される領域である。
【００６１】
トランザクション（２１１）が値の挿入である場合、アプリケーション・プログラム（２０２）は、データ挿入のクエリのログであるトランザクション・ログを、リンクドリストの形でインサート・ログ・キャッシュ（２０４）に保持する。上記リンクドリストは、ＩＤごとに値のタイムスタンプ順にソートされる。上記データ挿入（２１２）のデータベース（２０６）への反映（２１６）は、非同期で行われる。
トランザクション（２１１）が値の検索の場合、アプリケーション・プログラム（２０２）は、カレント・キャッシュ（２０５）から値の取得を試みる（２１３）。上記データ検索のクエリで指定するタイムスタンプが、カレント・キャッシュ（２０５）に保持されている上記クエリで指定するＩＤに属するタイムスタンプよりも新しい場合、アプリケーション・キャッシュ（２０３）上の値が、最新の値としてアプリケーション・プログラム（２０２）に返される（２１４）。上記データ検索のクエリで指定するタイムスタンプが、カレント・キャッシュ（２０５）に保持されている上記クエリで指定するＩＤに属するタイムスタンプよりも古い場合、インサート・ログ・キャッシュ（２０４）及びデータベース（２０６）への問い合わせ（２１５、２１７）が実行される。上記問い合わせの結果同士が比較され、タイムスタンプに指定された時点における最新の値が、アプリケーション・プログラム（２０２）に返される（２１４）。
本発明の実施態様では、現在時刻を指定してその時点の最新の値を返すクエリが多くを占めるシステムを前提としている。よって、カレント・キャッシュ（２０５）に保存されたクエリのタイムスタンプの示す時間は、上記トランザクション（２１１）に含まれるクエリのタイムスタンプの示す時間よりも後の時間であることが多くを占める。従って、データベースへのアクセス回数が減少し、検索時のレイテンシ短縮が可能である。
【００６２】
キャッシュ内のデータが時間データという特別な意味を認識して動くようにするためには、アプリケーション・キャッシュ（２０３）を、時間データフィールドとしてユーザがあらかじめ特定しておけばよい。そして、アプリケーション・プログラム（２０２）を、上記時間データフィールドを時間データであると認識して、キャッシュをその時間データ順に保持できるような機構に拡張する。アプリケーション・プログラム（２０２）は、キャッシュが利用できるか又はデータベース（２０６）にアクセスしなければならないかを、アプリケーション・キャッシュ（２０３）内で判断させ適したデータを返す。フロントエンドのアプリケーションプログラム（図示せず）はデータアクセス先を意識する必要はなく、従来のプログラムのままで使用可能である。
【００６３】
本発明の実施態様では、データの有効時間のフィールドが時間データであることを利用して、アプリケーション・キャッシュ（２０３）のデータ格納方法がメンテナンスされる。該メンテナンスにより、高速な挿入と検索とが両立される。アプリケーション・キャッシュ（２０３）では、ＩＤごとにクエリを保存するレコードを時間順にソートされ、値とタイムスタンプとの組が、リンクドリストとして保持される。その上で、前回クエリで返した最新の値を指すカレント・キャッシュ・ポジション・ポインタを保持させる。これにより、挿入時にかかる余分なコストが、多くの場合、上記ポインタでポイントされたエントリとの比較１回に抑えられる。さらに、データベースに問い合わせることなく、検索時のタイムスタンプ時点における最新の値をキャッシュから取得することが可能である。
【００６４】
本発明の実施態様における、データ挿入の手順の概要を以下に示す。
コンピュータ・システムは、挿入トランザクションが開始されると、該トランザクションのログをアプリケーション・キャッシュ（２０３）上にあるデータベースの遅延更新のためのログ・キャッシュであるインサート・ログ・キャッシュ（２０４）に書き込む。コンピュータ・システムは、上記インサート・ログ・キャッシュ（２０４）上のトランザクションのログを、ＩＤごとにタイムスタンプ順にソートしたリスト状になるよう並べる。上記並べることが完了した時点で、そのトランザクションはコミットされる。なお、挿入される値に対応するＩＤについてのログがインサート・ログ・キャッシュ（２０４）に存在しない場合、コンピュータ・システムは、データベース（２０６）から、最新のデータ及び未来のデータを取得し、該データをＩＤについてのログとして、タイムスタンプ順にソートしたリスト状になるよう並べる。
【００６５】
本発明の実施態様における、データ検索の手順の概要を以下に示す。
コンピュータ・システムは、検索トランザクションが開始されると、カレント・キャッシュ・ポジションの指すタイムスタンプから、上記検索トランザクションに含まれるタイムスタンプまでのインサート・ログ・キャッシュ（２０３）の情報を反映し、最新のデータを返す。コンピュータ・システムは、カレント・キャッシュ・ポジションのポインタを、上記クエリ結果として返したデータを指すように変更する。なお、検索トランザクションに含まれるタイムスタンプに指定された時刻が、カレント・キャッシュ・ポジションの指すタイムスタンプに指定された時刻より古い場合、コンピュータ・システムは、インサート・ログ・キャッシュ（２０３）に含まれるタイムスタンプとデータベースへの問い合わせ結果に含まれるタイムスタンプとを比較して、上記検索トランザクションに含まれるタイムスタンプに指定された時刻での最新のデータを返す。
【００６６】
図３Ａは、本発明の実施態様における、図２に記載のアプリケーション・サーバのアプリケーション・キャッシュに含まれるインサート・ログ・キャッシュのデータを示す。
インサート・ログ・キャッシュ（３０１）は、挿入のクエリに対応するタイムスタンプと値との組（３０２〜３０５）を保持する。タイムスタンプと値との組（３０２〜３０５）は、インサート・ログ・キャッシュ（３０１）に組が挿入されるたびに、ＩＤごとにタイムスタンプにソートして並べられる。インサート・ログ・キャッシュ（３０１）の例では、ＩＤ＝１１について、新しいタイムスタンプを含む組ほど、左に配置されている。また、カレント・キャッシュ・ポジションポインタは、カレント・キャッシュに収められているタイムスタンプ及び値を示している。
【００６７】
図３Ｂは、本発明の実施態様における、図２に記載のアプリケーション・サーバのカレント・キャッシュに含まれるデータの例を示す。
カレント・キャッシュ（３１１）は、ＩＤごとに，上記カレント・キャッシュ・ポジション・ポインタで指されている組に含まれる値及びタイムスタンプを保持する。
【００６８】
図４Ａは、本発明の実施態様における、図２に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、データ挿入時の処理ステップの例を示す。
データの挿入は、データ挿入のクエリによって実行される。データ挿入のクエリは、ＩＤ、タイムスタンプ及び値を含む。データ挿入のクエリは、ＩＤ及びタイムスタンプごとに値をデータベースに登録するためのクエリである。
データ挿入のクエリが発行されると、コンピュータ・システムは、以下のステップ４０１〜４０２を実行する。該実行により、インサート・ログ・キャッシュに登録されているリストであって、上記クエリによって指定するＩＤについての該リストが更新される。なお、上記リストがインサート・ログ・キャッシュに登録されていない場合、コンピュータ・システムは、ステップ４００〜ステップ４０３を実行する前に、後述するキャッシュ・データを初期化する処理ステップ（図４Ｃ、ステップ４２１〜４２４）を実行する。
ステップ４００は、処理の開始である。
ステップ４０１では、コンピュータ・システムは、インサート・ログ・キャッシュに値及びタイムスタンプを挿入する。コンピュータ・システムは、データ挿入のクエリで指定される値に対応するＩＤについてのリストに、上記データ挿入のクエリで指定される値とタイムスタンプとの組を登録する。そして、コンピュータ・システムは、上記リストに含まれる組を該組それぞれに含まれるタイムスタンプの示す時刻順にソートする。ソートが終了することに応じて、処理は、ステップ４０２に進む。
ステップ４０２では、コンピュータ・システムは、上記データ挿入のクエリについてのコミットを実行する。該コミットの実行により、データの挿入処理は終了する。
ステップ４０３は、処理の終了である。
【００６９】
図４Ｂは、本発明の実施態様における、図２に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、データ検索時の処理ステップの例を示す。
データ検索のクエリが発行されると、コンピュータ・システムは、以下のステップ４１０〜４１９を実行する。該実行により、コンピュータ・システムは、カレント・キャッシュ、インサート・ログ・キャッシュ又はデータベースからデータ検索の結果を得ることができる。
ここで、上記検索のクエリは、ＩＤ、値及びタイムスタンプを含むテーブルを検索するクエリであるとする。また、検索されるレコードは、クエリで指定されたＩＤ（以下、指定ＩＤ）を含み、且つ、クエリで指定されたタイムスタンプ（以下、指定タイムスタンプ）より古いか又は同じかであるタイムスタンプうち最大のタイムスタンプを含むレコードであるとする。
ステップ４１０は、処理の開始である。
ステップ４１１では、コンピュータ・システムは、指定タイムスタンプがカレント・キャッシュに含まれるタイムスタンプと同じ又は新しいかを判定する。コンピュータ・システムは、指定タイムスタンプと、カレント・キャッシュに登録されているタイムスタンプであって、データ検索のクエリで指定されたＩＤに属する該タイムスタンプ（以下、キャッシュ・タイムスタンプ）とを比較する。該比較の結果、指定タイムスタンプが、上記キャッシュ・タイムスタンプと同じ又は上記キャッシュ・タイムスタンプより新しい場合、処理は、ステップ４１２に進む。上記指定タイムスタンプが、上記キャッシュ・タイムスタンプより古い場合、処理は、ステップ４１６に進む。
ステップ４１２では、コンピュータ・システムは、インサート・ログ・キャッシュに登録されており且つ上記検索のクエリによって指定されるＩＤについてのリストに、上記キャッシュ・タイムスタンプより新しいタイムスタンプであって、上記指定タイムスタンプを超えない該タイムスタンプを含む組が含まれているかどうかを検査する。該検査では、カレント・キャッシュ・ポジション・ポインタによってポイントされている組から、上記指定タイムスタンプを超えない最大のタイムスタンプを含む組までがチェックされる。該検査によって、上記キャッシュ・タイムスタンプよりも新しいタイムスタンプを含む組が発見された場合、コンピュータ・システムは、上記発見された組のうち、上記指定タイムスタンプを超えない最大のタイムスタンプを含む組をデータ検索の結果の値を含む組と判定する。そして、処理はステップ４１４に進む。発見されなかった場合、処理は、ステップ４１３に進む。
ステップ４１３では、コンピュータ・システムは、カレント・キャッシュに登録されている上記指定ＩＤに属する値を、データ検索の結果として返し、処理を終了する。
ステップ４１４では、コンピュータ・システムは、最新の値及びタイムスタンプをカレント・キャッシュに登録する。コンピュータ・システムは、カレント・キャッシュに登録されているＩＤに属する値を、上記発見された組に含まれる値に置き換える。また、コンピュータ・システムは、キャッシュ・タイムスタンプを、上記発見された組に含まれるタイムスタンプに置き換える。上記置き換えが終了したならば、処理は、ステップ４１５に進む。
ステップ４１５では、コンピュータ・システムは、カレント・キャッシュ・ポジションを更新する。コンピュータ・システムは、カレント・キャッシュ・ポジション・ポインタのポイントする組を、上記発見された組に変更する。コンピュータ・システムは、上記発見された組に含まれる値をデータ検索の結果として返し、処理は終了する。
ステップ４１６では、コンピュータ・システムは、インサート・ログ・キャッシュに含まれる最新の値を特定する。コンピュータ・システムは、インサート・ログ・キャッシュに登録されているリストであって、上記検索のクエリによって指定されるＩＤについての該リストに、上記指定タイムスタンプより古いタイムスタンプを含む組が含まれているかどうかをチェックする。該チェックによって、上記指定タイムスタンプよりも古いタイムスタンプを含む組が発見された場合、コンピュータ・システムは、発見された組のうち最大のタイムスタンプを含む組をステップ４１８で比較される対象に特定する。上記特定が終了したならば、処理は、ステップ４１７に進む。
ステップ４１７では、コンピュータ・システムは、上記検索のクエリを用いて、データベースに問い合わせを行う。該問い合わせが終了したら、処理は、ステップ４１８に進む。
ステップ４１８では、コンピュータ・システムは、インサート・ログ・キャッシュに含まれる最新の値に対応するタイムスタンプと、データベースへの問い合わせ結果に含まれるタイムスタンプとを比較し、最新の値を特定する。ステップ４１６で特定された組がある場合、コンピュータ・システムは、上記特定された組に含まれるタイムスタンプと、上記問い合わせにより得られるタイムスタンプとを比較する。該比較において、上記特定された組に含まれるタイムスタンプが新しい場合、コンピュータ・システムは、上記特定された組に含まれる値をデータ検索の結果として返す。上記問い合わせにより得られるタイムスタンプが新しい場合、コンピュータ・システムは、問い合わせにより得られる値をデータ検索の結果として返す。そして、処理は終了する。
ステップ４１６で特定された組がない場合、コンピュータ・システムは、
上記問い合わせにより得られる値をデータ検索の結果として返す。そして、処理は終了する。
ステップ４１９は、処理の終了である。
【００７０】
図４Ｃは、本発明の実施態様における、図２に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、キャッシュ・データを初期化する処理ステップの例を示す。
データ挿入時において、値に関連付けられたＩＤについてのリストがインサート・ログ・キャッシュに登録されていない場合、コンピュータ・システムは、以下のステップ４２０〜４２５を実行する。該実行により、上記ＩＤについてのアプリケーション・キャッシュが初期化される。
ステップ４２０は、処理の開始である。
ステップ４２１では、コンピュータ・システムは、データ挿入のクエリが発行された時点における最新のタイムスタンプに属する値と、問い合わせた時刻よりも新しい、未来の時刻のタイムスタンプに属する値を取得する。コンピュータ・システムは、値に対応するＩＤを含むレコードであって、下記（１）又は（２）の条件を満たすタイムスタンプを含む該レコードを、データベースから取得する。
（１）データ挿入のクエリが発行された時刻を越えない最大のタイムスタンプを含むレコード。
（２）取得の問い合わせが実行された時刻よりも新しい未来のタイムスタンプを含むレコード。
ステップ４２２では、コンピュータ・システムは、インサート・ログ・キャッシュに、値をタイムスタンプ順に登録する。コンピュータ・システムは、上記取得したレコードそれぞれに含まれるタイムスタンプと値との組を含むリストであって、値に対応するＩＤについての該リストを作成する。コンピュータ・システムは、上記リストに含まれる組を該組それぞれに含まれるタイムスタンプの示す時刻順にソートする。コンピュータ・システムは、上記リストをインサート・ログ・キャッシュに登録する。
ここで、コンピュータ・システムは、上記取得したレコードであって、上記インサート・ログ・キャッシュに登録されるリストに含まれるタイムスタンプ及び値を含む該レコードが、既にデータベースに反映済みであることを、例えば、上記リストに登録しておいてもよい。コンピュータ・システムは、上記既にデータベースに反映済みであることを、例えば、上記組のそれぞれに対応するフラグとして、上記リスト登録する。コンピュータ・システムは、上記リストをインサート・ログ・キャッシュに登録することに応じて、上記フラグを立てる。該フラグは、遅延更新が実行されるタイミングで、コンピュータ・システムに参照される。コンピュータ・システムは、立っているフラグに対応する組について、遅延更新を実行しない。こうすることにより、遅延更新によって、インサート・ログ・キャッシュに含まれ且つデータベースに反映済みのデータがデータベースに再び反映されることを防ぐことができる。なお、上記データベースに反映済みのデータが、重複でデータベースに登録されたとしても、同じデータが挿入されるだけであり問題はない。
ステップ４２３では、コンピュータ・システムは、問い合わせた時点における最新のタイムスタンプに属する値をカレント・キャッシュに登録する。コンピュータ・システムは、上記（１）の条件を満たすレコードを、値に対応するＩＤについてのレコードとして、カレント・キャッシュに登録する。
ステップ４２４では、コンピュータ・システムは、問い合わせた時点における最新のタイムスタンプに属する値にポインタを指定する。コンピュータ・システムは、インサート・ログ・キャッシュに登録されたタイムスタンプと値との組であって、上記（１）の条件を満たすレコードに含まれるタイムスタンプと値との該組に、カレント・キャッシュ・ポジションを指定する。
ステップ４２５は、処理の終了である。
【００７１】
図５Ａは、本発明の実施態様における、図４Ａに対応するデータ挿入時の処理の具体例を示す。
リスト（５０１Ａ）は、インサート・ログ・キャッシュに登録されているＩＤ＝１１についてのリストである。リスト（５０１Ａ）は、組（５０２Ａ〜５０４Ａ）を含む。組（５０２Ａ〜５０４Ａ）はそれぞれ、タイムスタンプ及び値を含む。また、組（５０３Ａ）は、カレント・キャッシュ・ポインタ（５０５Ａ）でポイントされている組である。
ここで、例えば、値である「１７００」及びタイムスタンプである「２００６−０１−１２  １２：００：００」をＩＤ＝１１に対応するデータとしてデータベースに登録するためのデータ挿入のクエリが発行されたとする。
コンピュータ・システムは、リスト（５０１Ａ）に、上記クエリで指定される値とタイムスタンプとの組（５０６Ａ）を登録（５０７）する。そして、コンピュータ・システムは、上記リスト（５０１Ａ）に含まれる組（５０２Ａ〜５０６Ａ）を該組（５０２Ａ〜５０６Ａ）それぞれに含まれるタイムスタンプの示す時刻順にソートする。ここで、組（５０６Ａ）に含まれるタイムスタンプである「２００６−０１−１２  １２：００：００」は、組（５０２Ａ）に含まれるタイムスタンプである「２００６−０１−１３  ０９：００：００」よりも古く、組（５０３Ａ）に含まれるタイムスタンプである「２００６−０１−１２  ０９：３０：００」よりも新しい。よって、該ソートでは、組（５０２Ａ）と組（５０３Ａ）との間に組（５０６Ａ）が入る。リスト（５０１Ｂ）は、ソート後のリストを示す。
上記ソートが終了することに応じて、コンピュータ・システムは、上記データ挿入のクエリについてのコミットを実行する。該コミットにより、データ挿入の処理は終了する。
【００７２】
図５Ｂは、本発明の実施態様における、図４Ｂに対応するデータ検索時の処理の具体例を示す。
第１の具体例として、データ検索の指定ＩＤが「１１」であり、指定タイムスタンプがその時点での現在時刻「２００６―０１−１２  １１：３０：００」であるとする。
コンピュータ・システムは、指定タイムスタンプと、カレント・キャッシュ（５２１）に含まれるＩＤ＝１１に対応するタイムスタンプとを比較する。上記ＩＤ＝１１に対応するタイムスタンプは、「２００６−０１−１２  ０９：３０：００」である。よって、上記現在時刻である指定タイムスタンプは、上記ＩＤ＝１１に対応するタイムスタンプよりも新しいタイムスタンプである。
コンピュータ・システムは、インサート・ログ・キャッシュに含まれるＩＤ＝１１についてのリスト（５１２）を検査する。ここで、上記ＩＤ＝１１についてのリスト（５１２）は、左側がより新しいタイムスタンプを含む組になるようにソートされている。コンピュータ・システムは、カレント・キャッシュ・ポジション・ポインタによってポイントされている組（５１７）から、現在時刻である指定タイムスタンプを超えない最大のタイムスタンプを含む組までを順にチェックする。まず、コンピュータ・システムは、カレント・キャッシュ・ポジション・ポインタによってポイントされている組（５１７）に含まれるタイムスタンプをチェックする。なお、該チェックは、カレント・キャッシュ（５２１）における上記比較と同じ処理であるので省略可能である。組（５１７）に含まれるタイムスタンプは、「２００６−０１−１２  ０９：３０：００」であり、現在時刻である指定タイムスタンプを超えていない。よって、コンピュータ・システムは、さらに組（５１６）に含まれるタイムスタンプをチェックする。組（５１６）に含まれるタイムスタンプは、「２００６−０１−１２  １２：００：００」であり、現在時刻である指定タイムスタンプを超えている。カレント・キャッシュ（５２１）に含まれるＩＤ＝１１に対応するタイムスタンプよりも新しいタイムスタンプを含む組が、リスト（５１２）から発見されなかったため、コンピュータ・システムは、カレント・キャッシュに登録されているＩＤ＝１１に属する値を、データ検索の結果として返す。
【００７３】
第２の具体例として、データ検索の指定ＩＤが「１１」であり、指定タイムスタンプがその時点での現在時刻「２００６−０１−１２  １７：３６：００」であるとする。
コンピュータ・システムは、指定タイムスタンプと、カレント・キャッシュ（５２１）に含まれるＩＤ＝１１に対応するタイムスタンプとを比較する。上記ＩＤ＝１１に対応するタイムスタンプは、「２００６−０１−１２  ０９：３０：００」である。よって、上記現在時刻である指定タイムスタンプは、上記ＩＤ＝１１に対応するタイムスタンプよりも新しいタイムスタンプである。
コンピュータ・システムは、インサート・ログ・キャッシュ（５１１）に含まれるＩＤ＝１１についてのリスト（５１２）を検査する。ここで、上記ＩＤ＝１１についてのリスト（５１２）は、左側がより新しいタイムスタンプを含む組になるようにソートされている。コンピュータ・システムは、カレント・キャッシュ・ポジション・ポインタによってポイントされている組（５１７）から、現在時刻である指定タイムスタンプを超えない最大のタイムスタンプを含む組までを順にチェックする。まず、コンピュータ・システムは、カレント・キャッシュ・ポジションポインタによってポイントされている組（５１７）に含まれるタイムスタンプをチェックする。なお、該チェックは、カレント・キャッシュ（５２１）における上記比較と同じ処理であり省略可能である。組（５１７）に含まれるタイムスタンプは、「２００６−０１−１２  ０９：３０：００」であり、現在時刻である指定タイムスタンプを超えていない。よって、コンピュータ・システムは、さらに組（５１６）に含まれるタイムスタンプをチェックする。組（５１６）に含まれるタイムスタンプは、「２００６−０１−１２  １２：００：００」であり、現在時刻である指定タイムスタンプを超えていない。よって、コンピュータ・システムは、さらに組（５１５）に含まれるタイムスタンプをチェックする。組（５１５）に含まれるタイムスタンプは、「２００６−０１−１３  ０９：００：００」であり、現在時刻である指定タイムスタンプを超えている。よって、コンピュータ・システムは、組（５１６）をデータ検索の結果の値を含む組と判定する。
コンピュータ・システムは、カレント・キャッシュに登録されているＩＤ＝１１に属する値を、上記判定された組（５１６）に含まれる値に置き換える。また、コンピュータ・システムは、カレント・キャッシュに登録されているＩＤ＝１１に対応するタイムスタンプを、上記判定された組（５１６）に含まれるタイムスタンプに置き換える。
コンピュータ・システムは、カレント・キャッシュ・ポジション・ポインタのポイントする組を、上記判定された組（５１６）に変更する。
コンピュータ・システムは、上記判定された組（５１６）に含まれる値をデータ検索の結果として返す。
【００７４】
第３の具体例として、データ検索の指定ＩＤが「１１」であり、指定タイムスタンプが「２００６−０１−１２  ０９：００：００」であるとする。
コンピュータ・システムは、指定タイムスタンプと、カレント・キャッシュ（５２１）に含まれるＩＤ＝１１に対応するタイムスタンプとを比較する。上記ＩＤ＝１１に対応するタイムスタンプは、「２００６−０１−１２  ０９：３０：００」である。よって、上記指定タイムスタンプは、上記ＩＤ＝１１に対応するタイムスタンプよりも古いタイムスタンプである。
コンピュータ・システムは、インサート・ログ・キャッシュ（５１１）に含まれるＩＤ＝１１についてのリスト（５１２）を検査する。ここで、上記ＩＤ＝１１についてのリスト（５１２）は、左側がより新しいタイムスタンプを含む組になるようにソートされている。
コンピュータ・システムは、上記指定タイムスタンプよりも古いタイムスタンプを含む組のうち、最も新しいタイムスタンプを含む組が、リスト（５１１）に含まれているかをチェックする。該チェックでは、カレント・キャッシュ・ポジションポインタによってポイントされている組（５１７）の１つ右側にソートされている組があるかがチェックされる。該チェックにより、組（５１８）が発見される。よって、コンピュータ・システムは、組（５１８）に含まれるタイムスタンプ「２００６−０１−１１  ０９：００：００」を以下の比較の対象とする。次に、コンピュータ・システムは、データベース（５３１）を検索する。該検索により取得されるタイムスタンプは、上記比較の対象とされたタイムスタンプよりも古い。
よって、コンピュータ・システムは、上記発見された組（５１８）に含まれる値をデータ検索の結果として返す。
現在時刻を含む問い合わせが発行された場合、常にカレント・キャッシュ・ポジション以降のデータが対象になる。もし未来の時刻を指定する問い合わせが発行された場合、カレント・キャッシュ・ポジションは変更しない。
【００７５】
図５Ｃは、本発明の実施態様における、図４Ｃに対応するキャッシュ・データを初期化する処理の具体例を示す。
データ挿入のクエリによって挿入される値に対応するＩＤについてのリストがインサート・ログ・キャッシュ（５４３）にない場合、キャッシュ・データの初期化が実行される。
インサート・ログ・キャッシュ（５４３）に、例えばＩＤ＝１１についてのリスト（５４４）が登録されていないとする。データベース（５４１）には、ＩＤ＝１１についてのレコード（５４６Ａ〜５４９Ａ）が保存されているとする。また、ＩＤ＝１１に属する値をデータベースに登録するためのデータ挿入のクエリが発行された時点における現在時刻を「２００６−０１−１２  １０：００：００」とする。
上記データ挿入のクエリが発行されると、コンピュータ・システムは、ＩＤ＝１１に属するタイムスタンプと該タイムスタンプとの組をデータベース（５４１）から取得する。ここで、取得する組は、上記データ挿入のクエリが発行された時点における現在時刻を越えない最大のタイムスタンプと該最大のタイムスタンプに属する値との組及び、現在時刻よりも新しいタイムスタンプと該タイムスタンプに属する値との組である。レコード（５４６Ａ）に含まれるタイムスタンプは「２００６−０１−１３  ０９：００：００」である。該タイムスタンプは、現在時刻よりも新しい。よって、コンピュータ・システムは、レコード（５４６Ａ）に含まれるタイムスタンプ及び値との組をデータベース（５４１）から取得する。レコード（５４７Ａ）に含まれるタイムスタンプは「２００６−０１−１２  １２：００：００」である。該タイムスタンプは、現在時刻よりも新しい。よって、コンピュータ・システムは、レコード（５４７Ａ）に含まれるタイムスタンプ及び値との組をデータベース（５４１）から取得する。レコード（５４８Ａ）に含まれるタイムスタンプは「２００６−０１−１２  ０９：３０：００」である。該タイムスタンプは、現在時刻を越えない最大のタイムスタンプである。よって、コンピュータ・システムは、レコード（５４８Ａ）に含まれるタイムスタンプ及び値との組をデータベース（５４１）から取得する。レコード（５４９Ａ）に含まれるタイムスタンプは「２００６−０１−１２  ０９：００：００」である。該タイムスタンプは、現在時刻よりも古く、現在時刻を越えない最大のタイムスタンプでもない。よって、コンピュータ・システムは、レコード（５４９Ａ）に含まれるタイムスタンプ及び値との組をデータベース（５４１）から取得しない。
次に、コンピュータ・システムは、ＩＤ＝１１についてのリスト（５４４）をインサート・ログ・キャッシュ（５４３）に作成する。コンピュータ・システムは、上記取得した組をリスト（５４４）にソートして登録する。コンピュータ・システムは、レコード（５４６Ａ）から取得した組（５４６Ｂ）、レコード（５４７Ａ）から取得した組（５４７Ｂ）及びレコード（５４８Ａ）から取得した組（５４８Ｂ）をリスト（５４４）に、例えばタイムスタンプの降順に登録する。
次に、コンピュータ・システムは、現在時刻を越えない最大のタイムスタンプを含む組（５４８Ｂ）に含まれるタイムスタンプ及び値をカレント・キャッシュ（５５０）に登録する。
最後にコンピュータ・システムは、組（５４８Ｂ）にポインタ（５４９）を指定する。
【００７６】
図６Ａは、本発明の実施態様における、図２に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、遅延更新が実行された場合の処理ステップの例を示す。
データベースに対して遅延更新が実行された場合、コンピュータ・システムは、カレント・キャッシュ・ポジションが指定されているタイムスタンプ以降の未来のタイムスタンプを含む組をインサート・ログ・キャッシュに保持する。カレント・キャッシュ・ポジションが指定されているタイムスタンプよりも古い更新時間に対応するタイムスタンプを含む組は、上記遅延更新によるデータベースへの反映が完了した時点で削除可能である。
遅延更新が実行されると、コンピュータ・システムは、以下のステップ６００〜６０３を実行する。
ステップ６００は、処理の開始である。
ステップ６０１では、コンピュータ・システムは、インサート・ログ・キャッシュに含まれる全てのタイムスタンプ及び値をデータベースに反映する。ここで、後述する反映済みであることを示すフラグが立っている組に含まれるタイムスタンプ及び値については、データベースに反映しないとしてもよい。
ステップ６０２では、コンピュータ・システムは、ポイントされたタイムスタンプよりも古いタイムスタンプを含む組をインサート・ログ・キャッシュから削除し、処理は終了する。
ステップ６０３は、処理の終了である。
【００７７】
遅延更新が実行されることによって、カレント・キャッシュ・ポジションが指定されているタイムスタンプ以降の未来のタイムスタンプを含む組は、インサート・ログ・キャッシュに存在し且つデータベースに反映済みとなる。ここで、既にデータベースに反映済みであることを示すフラグを、例えば上記組ごとに立てておいてもよい。コンピュータ・システムは、上記組をデータベースに反映することに応じて、上記フラグを立てる。該フラグは、遅延更新が実行されるごとに、コンピュータ・システムに参照される。コンピュータ・システムは、フラグの立っている組について、遅延更新を実行しない。こうすることにより、遅延更新によって、インサート・ログ・キャッシュに含まれるデータベースに反映済みのデータがデータベースに再び反映されることを防ぐことができる。なお、上記データベースに反映済みのデータが、重複でデータベースに登録されたとしても、同じデータが挿入されるだけであるので問題ない。
【００７８】
図６Ｂは、本発明の実施態様における、図６Ａに対応する遅延更新が実行された場合の処理の具体例を示す。
リスト（６１１）は、インサート・ログ・キャッシュに登録されているＩＤ＝１１についてのリストである。リスト（６１１）は、組（６１２〜６１５）を含む。組（６１２〜６１５）はそれぞれ、タイムスタンプ及び値を含む。また、組（６１３）は、カレント・キャッシュ・ポインタ（６１６）でポイントされているタイムスタンプを含む組である。また、インサート・ログ・キャッシュには、上記リスト（６１１）以外のリストは含まれていないとする。
遅延更新（６１９）が実行されると、コンピュータ・システムは、組（６１２〜６１５）に含まれるタイムスタンプ及び値を、データベース（６１７）に反映する（６２０）。さらに、コンピュータ・システムは、カレント・キャッシュ・ポインタ（６１６）でポイントされているタイムスタンプよりも古いタイムスタンプを含む組（６１４、６１５）をインサート・ログ・キャッシュから削除（６２１）する。該削除が終了することに応じて、遅延更新が実行された場合の処理が終了する。
【００７９】
図７Ａは、本発明の実施態様における、図２に記載のアプリケーション・サーバのアプリケーション・プログラムによって実行される、インサート・ログ・キャッシュをメンテナンスする処理ステップの例を示す。
クエリが実行されるタイミングとは別に、定期的にカレント・キャッシュ・ポジションが、インサート・ログ・キャッシュのデータの中で現在時刻での最新データを指すようにしてもよい。定期的とは、例えば１時間おき又は１日ごとである。該対応では、アプリケーション・サーバ又はインサート・ログ・キャッシュを管理するアプリケーションが定期的且つ自主的にカレント・キャッシュ・ポジションとカレント・キャッシュ上のデータとをメンテナンスする。該メンテナンスでは、ＩＤごとに、カレント・キャッシュ・ポジションが、メンテナンスが実行された時刻を越えない最大のタイムスタンプと該最大のタイムスタンプに属する値との組を指し示すように更新される。また、上記最大のタイムスタンプと該最大のタイムスタンプに属する値がカレント・キャッシュに登録される。
コンピュータ・システムは、以下のステップ７００〜７０４をＩＤごとに定期的に実行する。
ステップ７００は、処理の開始である。
ステップ７０１では、コンピュータ・システムは、ポイントされたタイムスタンプが現在時刻における最新のタイムスタンプかを判定する。最新のタイムスタンプだと判定された場合、処理は終了する。最新のタイムスタンプではないと判定された場合、処理は、ステップ７０２に進む。
ステップ７０２では、コンピュータ・システムは、最新のタイムスタンプ及び値をカレント・キャッシュに登録する。登録が終了することに応じて、処理は、ステップ７０３に進む。
ステップ７０３では、コンピュータ・システムは、カレント・キャッシュ・ポジションを更新する。コンピュータ・システムは、上記最新のタイムスタンプをポイントするようにポインタの位置を変更する。該変更が終了することに応じて処理は終了する。
ステップ７０４は、処理の終了である。
上記メンテナンスにより、カレント・キャッシュ・ポジションのデータを最新結果として返す確率が上がる。よって、クエリの更なる高速化が可能となる。
【００８０】
図７Ｂは、本発明の実施態様における、図７Ａに対応するメンテナンス処理の具体例を示す。
リスト（７１１）は、インサート・ログ・キャッシュに登録されているＩＤ＝１１についてのリストである。リスト（７１１）は、組（７１２〜７１４）を含む。組（７１２〜７１４）はそれぞれ、タイムスタンプ及び値を含む。また、組（７１４）は、カレント・キャッシュ・ポインタ（７１５）でポイントされているタイムスタンプを含む組である。また、カレント・キャッシュ（７１６）には、組（７１４）に含まれるタイムスタンプ及び値が保存されている。また、現在時刻を「２００６−０１−１２  １０：００：００」とする。
メンテナンスが実行されると、コンピュータ・システムは、ポイントされたタイムスタンプを含む組（７１４）が現在時刻における最新のタイムスタンプを含む組かどうかを判定する。
コンピュータ・システムは、ポイントされたタイムスタンプの示す時刻「２００６−０１−１１  ０９：００：００」よりも新しく且つ現在時刻を越えない最新のタイムスタンプ「２００６−０１−１２  ０９：３０：００」を含む組（７１３）がリスト（７１１）に含まれるので、組（７１３）に含まれるタイムスタンプ及び値をカレント・キャッシュ（７１６）に登録する（７１７）。
次に、コンピュータ・システムは、カレント・キャッシュ・ポインタ（７１５）によってポイントされているタイムスタンプを含む組を組（７１３）に更新（７１８）する。
該更新が終了することに応じて、ＩＤ＝１１についてのメンテナンス処理が終了する。
【００８１】
図８Ａは、本発明の実施態様における、図２に記載のアプリケーション・キャッシュに対応する記憶部の構成図の例を示す。
第１の記憶部（８０１）は、第１のデータ構造（８０２）を記憶する。
第１のデータ構造（８０２）は、ＩＤごとのリスト（８０３〜８０５）を含む。ＩＤごとのリストは、少なくとも１のタイムスタンプ及び該タイムスタンプに属する値を含む。図８Ａの上記リスト（８０３〜８０５）は、第１のタイムスタンプＡ〜Ｃ（８０６〜８０８）及び第１のタイムスタンプＡ〜Ｃ（８０６〜８０８）それぞれに属する値Ａ〜Ｃ（８０９〜８１１）を含む。ここで、第１のタイムスタンプＡ〜Ｃ（８０６〜８０８）それぞれは、タイムスタンプの示す時刻順にソートされている。また、ポインタ（８１２）は、第１のタイムスタンプＡ〜Ｃ（８０６〜８０８）のどれか１つをポイントする。ポインタ（８１２）は、例えば第１のタイムスタンプＢ（８０７）をポイントする。
第２の記憶部（８１３）は、第２のデータ構造（８１４）を記憶する。
第２のデータ構造（８１４）は、ＩＤごと（８１５〜８１７）に、ポインタでポイントされた第１のタイムスタンプＤ〜Ｆ（８１８〜８２０）と、該第１のタイムスタンプＤ〜Ｆ（８１８〜８２０）それぞれに属する値Ｄ〜Ｆ（８２１〜８２３）とを含む。ポインタ（８１２）は、第１のタイムスタンプＢ（８０７）をポイントしているので、第１のタイムスタンプＤ（８１８）は、第１のタイムスタンプＢ（８０７）と同じタイムスタンプである。また、値Ｄ（８２１）は、値Ｂ（８１０）と同じ値である。
第１の記憶部（８０１）及び第２の記憶部（８１３）は、同一の記憶部であっても別々の記憶部であってもよい。同一の記憶部である場合、第１の記憶部（８０１）及び第２の記憶部（８１３）の両方が、例えばメモリであってもよい。また、別々の記憶部である場合、第１の記憶部（８０１）が例えばハードティスクであり、第２の記憶部（８１３）が例えばメモリであってもよい。
【００８２】
図８Ｂは、本発明の実施態様における、図２に記載のアプリケーション・サーバが有する機能を図示する機能ブロック図を示す。
受付部（８３１）は、ユーザ又は他のコンピュータ・システムからのクエリを受け付ける。受付部（８３１）は、指定時刻における最新の値をデータベース（８５０）から検索するための検索トランザクション（８３０Ａ）を受け付ける。また、受付部（８３１）は、データベース（８５０）に値を挿入するための挿入トランザクション（８３０Ｂ）を受け付ける。なお、以下の説明では、検索トランザクション（８３０Ａ）及び挿入トランザクション（８３０Ｂ）の対象となるデータのＩＤは１１とする。よって、ＩＤ＝１１についてのデータ構造（図８Ａ、８０３及び８１５）に含まれる第１のタイムスタンプＡ〜Ｄ（図８Ａ、８０６〜８０８及び８１８）及び値Ａ〜Ｄ（図８Ａ、８０９〜８１１及び８２１）が以下の説明に用いられる。
特定部（８３２）は、指定時刻における最新の値に対応するタイムスタンプを特定する。特定部（８３２）は、検索トランザクション（８３０Ａ）に含まれる検索する時刻を示す第２のタイムスタンプを超えない最大のタイムスタンプを有する第１のタイムスタンプ（第１の最大タイムスタンプ）を第１の記憶部（８０１）から特定する。
取得部（８３３）は、第１の記憶部（８０１）、第２の記憶部（８１３）及びデータベース（８５０）の少なくとも１つから、タイムスタンプ及び該タイムスタンプに属する値を取得する。取得部（８３３）はまた、第１の最大タイムスタンプが、ポイントされた第１のタイムスタンプ（図８Ａ、８０７又は８１５）と同じ場合、第１のタイムスタンプ（図８Ａ、８０７又は８１５）に属する値（図８Ａ、８２１）を第２の記憶部（８１３）から取得する。取得部（８３３）はまた、第１の最大タイムスタンプが、ポイントされた第１のタイムスタンプ（図８Ａ、８０７又は８１５）より新しい場合、第１の最大タイムスタンプに属する値を第１の記憶部（８０１）から取得する。取得部（８３３）はまた、第２のタイムスタンプが第２の記憶部（８１３）に保存されている検索対象であるＩＤに属し且つポイントされた第１のタイムスタンプ（図８Ａ、８１８）より古いことに応じて、上記第１の記憶部（８０１）とデータベース（８５０）との両方から、第２のタイムスタンプを超えない最大のタイムスタンプに属する値をそれぞれ取得する。取得部（８３３）はまた、上記取得されたそれぞれの値に属するタイムスタンプがより新しい時刻を示すタイムスタンプに属する値を取得した値とする。
置換部（８３４）は、第２の記憶部（８１３）に保存されている、検索対象であるＩＤに属し且つポイントされた第１のタイムスタンプ（図８Ａ、８１８）及び該第１のタイムスタンプに属する値（図８Ａ、８２１）を、指定時刻における最新のタイムスタンプ及び該タイムスタンプに属する値にそれぞれ置換する。
変更部（８３５）は、ポインタの指定する第１のタイムスタンプ（図８Ａ、８０７）を、指定時刻又は現在時刻を越えない最新のタイムスタンプに変更する。
登録部（８３６）は、検索トランザクション（８３０Ａ）、挿入トランザクション（８３０Ｂ）又はデータベース（８５０）に含まれるタイムスタンプ及び該タイムスタンプに属する値を、第１の記憶部（８０１）又は第２の記憶部（８１３）に登録する。
ソート部（８３７）は、第１の記憶部（８０１）にタイムスタンプ及び該タイムスタンプに属する値が登録されることに応じて、上記タイムスタンプを含むリストに含まれるタイムスタンプを降順又は昇順にソートする。
確定部（８３８）は、上記ソートが終了することに応じて、トランザクションをコミットする。
削除部（８３９）は、データベース（８５０）に対して遅延更新が実行されることに応じて、ポイントされた第１のタイムスタンプより古い時刻を示す第１のタイムスタンプ及び該第１のタイムスタンプに属する値を、第１の記憶部（８０１）から削除する。
指定部（８４０）は、第１のタイムスタンプ（図８Ａ、８０６〜８０８）にポインタを指定する。
データベース（８５０）は、ＩＤ、値及びタイムスタンプを列項目に含むデータベースである。検索トランザクション（８３０Ａ）が発行され且つ第１の記憶部（８０１）に指定時刻における最新の値が含まれない場合、データベース（８５０）から値及び該値に対応するタイムスタンプが取得される。挿入トランザクション（８３０Ｂ）が発行され且つ第１の記憶部（８０１）に挿入される値に対応するＩＤについてのリストがない場合、データベース（８５０）から値及び該値に対応するタイムスタンプが取得される。また、遅延更新が実行されることに応じて、ポイントされているタイムスタンプ（図８Ａ、８１２）よりも古いタイムスタンプと該古いタイムスタンプに属する値が、データベース（８５０）に登録される。データベース（８５０）は、コンピュータ・システム（８６０）とは別のシステム上にあってもよい。
【００８３】
図９は、本発明の実施態様における、図２に記載のアプリケーション・サーバのハードウェアのブロック図を示す。
コンピュータ・システム（９０１）は、ＣＰＵ（９０２）とメイン・メモリ（９０３）と含み、これらはバス（９０４）に接続されている。ＣＰＵ（９０２）は好ましくは、３２ビット又は６４ビットのアーキテクチャに基づくものであり、例えば、インテル社のＸｅｏｎ（商標）シリーズ、Ｃｏｒｅ（商標）シリーズ、Ａｔｏｍ（商標）シリーズ、Ｐｅｎｔｉｕｍ（商標）シリーズ、Ｃｅｌｅｒｏｎ（商標）シリーズ、ＡＭＤ社のＰｈｅｎｏｍ（商標）シリーズ、Ａｔｈｌｏｎ（商標）シリーズ、Ｔｕｒｉｏｎ（商標）シリーズ及びＳｅｍｐｒｏｎ（商標）などを使用することができる。バス（９０４）には、ディスプレイ・コントローラ（９０５）を介して、ＬＣＤモニタなどのディスプレイ（９０６）が接続される。ディスプレイ（９０６）は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インタフェースで表示するために使用される。バス（９０４）にはまた、ＩＤＥ又はＳＡＴＡコントローラ（９０７）を介して、ハードディスク又はシリコン・ディスク（９０８）と、ＣＤ−ＲＯＭ、ＤＶＤドライブ又はＢＤドライブ（９０９）が接続される。
【００８４】
ハードディスク又はシリコン・ディスク（９０８）には、オペレーティング・システム、Ｊ２ＥＥなどのＪａｖａ（商標）処理環境を提供するプログラム、その他のプログラム及びデータが、メイン・メモリ（９０３）にロード可能に記憶されている。
【００８５】
ＣＤ−ＲＯＭ、ＤＶＤ又はＢＤドライブ（９０９）は、必要に応じて、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ又はＢＤからプログラムをハードディスク又はシリコン・ディスク（９０８）に追加導入するために使用される。バス（９０４）には更に、キーボード・マウスコントローラ（９１０）を介して、キーボード（９１１）及びマウス（９１２）が接続されている。
【００８６】
通信インタフェース（９１４）は、例えばイーサネット（商標）・プロトコルに従う。通信インタフェース（９１４）は、通信コントローラ（９１３）を介してバス（９０４）に接続され、コンピュータ・システム及び通信回線（９１５）を物理的に接続する役割を担い、コンピュータ・システムのオペレーティング・システムの通信機能のＴＣＰ／ＩＰ通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は、有線ＬＡＮ環境、或いは例えばＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎなどの無線ＬＡＮ接続規格に基づく無線ＬＡＮ環境であってもよい。
【図１】
2010198135.tif 000003
【図２】
2010198135.tif 000004
【図３Ａ】
2010198135.tif 000005
【図３Ｂ】
2010198135.tif 000006
【図４Ａ】
2010198135.tif 000007
【図４Ｂ】
2010198135.tif 000008
【図４Ｃ】
2010198135.tif 000009
【図５Ａ】
2010198135.tif 000010
【図５Ｂ】
2010198135.tif 000011
【図５Ｃ】
2010198135.tif 000012
【図６Ａ】
2010198135.tif 000013
【図６Ｂ】
2010198135.tif 000014
【図７Ａ】
2010198135.tif 000015
【図７Ｂ】
2010198135.tif 000016
【図８Ａ】
2010198135.tif 000017
【図８Ｂ】
2010198135.tif 000018
【図９】
2010198135.tif 000019