説明

データ記憶方法

第1のメモリと第2のメモリを備えるシステムにおけるデータベースにデータを記憶する方法が提供される。この方法は、前記第2のメモリから第1のページを読み出すステップと、前記第2のメモリから読み出したデータの少なくとも一部を変更して、前記データベースに記憶すべき変更されたデータを作成するステップと、前記変更されたデータを、前記第1のメモリのデータの第2のページに書き込むステップと、前記第2のページを、前記第1のメモリから前記第2のメモリへコピーするステップとを有する。前記第2のページのデータは、前記データが変更された順序に基づいて連続的に順序が付けられている。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベースにデータを記憶するための方法に関するものであり、より詳しくは、リレーショナルデータベースにレコードを更新し、そして、リレーショナルデータベースに新規のレコードを追加するための方法に関するものである。
【背景技術】
【0002】
多くの現代のアプリケーションは、大量のデータの記憶装置を要求する。一般的には、データは、データベースと呼ばれる、集約的に構造化された1つ以上のデータの集合で記憶される。現代のデータベースに記憶される、大量のデータを管理するために、データベース管理システムを使用して、データベースの作成及びメインテナンスを容易にすることが一般的である。
【0003】
一般的なタイプのデータベースに、リレーショナルデータベースがある。リレーショナルデータベースは、リレーション(関係)の集合としてデータを表現する。各リレーションは、複数のタプルを備え、各タプルは共通の属性に対して値を提供する。各リレーションは、行及び列で構成されているテーブル(表)によって表現される。テーブルの各行は、リレーションのタプルを表現し、各列は、そのリレーションの属性を表現する。
【0004】
タプルは、コンピュータシステムでは「レコード」として記憶される。各タプルの属性値は、フィールドと呼ばれる、レコード内のバイトのシーケンスによって表現される。
【0005】
リレーショナルデータベース管理システム(RDBMS)は、ユーザアプリケーションによって提供されるクエリー動作を実行する。クエリー動作は、コンピュータのメインメモリに記憶されるデータベースレコードについて実行される。データへの高速アクセスの必要性のために、メインメモリは、一般的には、ランダムアクセスメモリ(RAM)によって提供される。必要な高速アクセス時間を提供しながら、メインメモリを提供するために一般的に使用されるRAMのタイプは揮発性記憶技術であり、これは、情報を記憶するための電力を要求する。また、RAMのコストが相対的に高いことは、合理的な大規模データベースに対しては、メインメモリが、データベースのすべてのテーブルのすべてのレコードを記憶するためには十分に大きくないことを意味する。
【0006】
このように、データベースのテーブルは、低速ではあるが高容量として一般的に提供されるセカンダリメモリにも記憶され、これは、ハードディスクドライブのような不揮発性記憶装置である。
【0007】
データベースのレコードを読み出すあるいは変更することが要求される場合、まず、レコードがメインメモリに存在するかどうかが判定される。特定のレコードがメインメモリに存在しない場合、そのレコードは、セカンダリメモリに配置され、処理のためにメインメモリにコピーされる。メインメモリがセカンダリメモリからコピーされる追加のレコードを記憶するために十分な空きスペース(領域)を有していない場合、セカンダリメモリからコピーされる追加のレコードを記憶するためのスペースを作成するために、メインメモリに記憶されるどのレコードを排出するべきかを判定する必要がある。メインメモリから排出するために選択されるレコードがメインメモリ内で変更されている場合、その変更されているレコードは、レコードがメインメモリから排出される場合にその変更が損失しないことを保証するために、セカンダリメモリへコピーされる。
【0008】
データは、8ビットの集合でメモリに記憶され、それらはそれぞれバイトと呼ばれる。ディスクは、論理的には、固定サイズのグループの所定数のバイトで構成され、一般的には、これは、「ブロック」として知られる。ディスクからのデータを読み出し、また、ディスクへデータを書き込むための動作は、まとめてI/O動作として知られていて、また、一般的には、各I/O動作において整数ブロックで読み書きすることがより有効である。
【0009】
データベースのテーブルに含まれるレコードは、ページと呼ばれるグループに記憶される。時には、データベースのページのサイズは、データベースが記憶されているハードディスクのブロックサイズに一致するように選択され、そうすることで、データベースのレコードは、個々のレコードではなくページ全体で、ハードディスクとメインメモリ間をコピーされ、これによって、メインメモリとセカンダリメモリとの間のレコード転送の効率性を最大にしている。つまり、特定のレコードが要求される場合、そのレコードを含むページがセカンダリメモリからメインメモリへコピーされる。そのレコードが変更される場合、ページ全体(その変更を含む)がメインメモリからセカンダリメモリへコピーされる。
【発明の概要】
【発明が解決しようとする課題】
【0010】
ページがセカンダリメモリからメインメモリへ一旦コピーされる場合では、そのページに含まれるレコード群の1つだけが、あるいはいくつかのサブセットだけが変更されることが多い。それゆえ、セカンダリメモリへページ全体をコピーする必要性は、大量数の未変更のレコードも、セカンダリメモリへ書き込まれることになり、これは、非常に非効率である。
【0011】
本発明の目的は、上述の課題の少なくとも1つを除去するあるいは軽減することである。
【課題を解決するための手段】
【0012】
本発明の第1の態様に従えば、第1のメモリと第2のメモリを備えるシステムにおけるデータベースにデータを記憶する方法が提供される。この方法は、前記第2のメモリから第1のページを読み出すステップと、前記第2のメモリから読み出されるデータの少なくとも一部を変更して、前記データベースに記憶すべき変更されたデータを作成するステップと、前記変更されたデータを、前記第1のメモリのデータの第2のページに書き込むステップと、前記第2のページを、前記第1のメモリから前記第2のメモリへコピーするステップとを有し、前記第2のページのデータは、前記データが変更された順序に基づいて連続的に順序付けられている。
【0013】
前記データの第1のページと前記第2のページは、複数のデータベースのレコードを含んでいても良い。前記変更されたデータは、1つ以上のデータベースのレコードを含んでいても良い。前記第2のページに書き込まれる前記変更されたデータは、前記第1のページのレコード群の内の1つの少なくとも一部に基づくデータを含んでいても良い。
【0014】
データが変更される順序に基づく順序でデータ(例えば、データベースのレコード)を前記第2のページに記憶することによって、従来のログ取得処理とチェックポイント処理によって使用されるタイプのログファイルを維持する必要性が取り除かれる。
【0015】
また、本明細書で説明される方法は、第1のメモリから第2のメモリへの要求されるページコピー動作の数を削減するという効果がある。例えば、ページを平均してK個のレコードに割り当てることができる場合、提案の発明を用いると、K個のレコードの変更は、第1のメモリから第2のメモリへコピーされるページは1つだけで済むようになる。近接ランダムアクセスパターンを有する大規模データベースを伴う従来のデータベース管理システムでは、平均して、K個のレコードの変更は、セカンダリメモリにはK個のページがコピーされることになることが予想される。
【0016】
変更されたデータを第2のページに書き込むことは、第2のページに従前に書き込まれているデータに、その変更されたデータを付加することを含んでいても良い。
【0017】
インデックスは、前記第2のメモリから読み出される前記第1のページのレコードを参照することができ、この方法は、前記変更されたデータが書き込まれる前記第2のページを参照するための前記インデックスのエントリを変更するステップを更に有していても良い。即ち、本発明の態様に従うデータベースに記憶されるレコードに対するインデックスが存在する場合、そのデータベースのレコードの変更は、そのレコードの新規の位置を示すために更新されるべき、変更されたレコードに対応するインデックスのエントリを要求することができる。例えば、インデックスがページ番号とそのページのオフセットを使用してレコードを参照する場合、上述のレコードの変更は、そのレコードに対応するインデックスのエントリが、そのページ内に記憶されるレコードにおける、その新規のページとそのオフセットを参照するために更新されることを要求することになる。
【0018】
この方法は、更に、読み出された第1のページに含まれず、かつデータベースに記憶されるべき新規のデータを含む、新規のデータベースのレコードを第2のページに追加することを含んでいても良い。つまり、書き込むデータは、新規のレコードの書き込み、あるいは、既存のレコードの変更を表すデータの書き込みを含んでいても良い。どちらの場合でも、データは、その作成あるいは変更の順序で書き込まれる。
【0019】
第2のページは、所定量のデータがその第2のページに書き込まれている場合に前記第2のメモリに書き込まれても良い。例えば、第2のページが一杯である(即ち、すべての自身のレコードが、新規に作成されたデータあるいは変更されたデータを含んでいる)場合、それは、第2のメモリを「フラッシュ」することができる。それにより、第2のページは、第1のメモリで空きにすることができる。それゆえ、取り消し(undo)/やり直し(redo)ログを保持する必要がない。なぜなら、第2のページが一杯になると、「フラッシュ」はオンザフライで実行することができるからである。
【0020】
所定量のデータが前記第2のページに書き込まれる場合、更なる第2のページが作成されても良い。更なる第2のページに記憶されるデータは、データが変更される順序に基づいて連続的に順序付けられていても良い。
【0021】
データの読出/書込動作に関して、前記第1のメモリは第1の関連アクセス時間を有していても良く、前記第2のメモリは第2の関連アクセス時間を有していても良い。前記第1のアクセス時間は前記第2のアクセス時間よりも遅くても良い。前記第1のメモリは揮発性メモリであっても良く、一方、前記第2のメモリは不揮発性メモリであっても良い。例えば、前記第1のメモリは、例えば、揮発性のランダムアクセスメモリ(RAM)であっても良く、前記第1のアクセス時間は、前記第2のアクセス時間よりも1000倍の桁で高速であっても良い。前記第2のメモリは、例えば、ハードディスクドライブであっても良い。
【0022】
この方法は、更に、前記第2のメモリに記憶されている複数のページに含まれる同一データの内、旧式のバージョンと旧式でないバージョンを識別するために、前記複数のページを処理するステップと、前記旧式でないデータが隣接して配置されるように、前記複数のページの最初の1つのページ内にデータを再配置するステップと、前記複数のページの別ページから、前記複数のページの前記最初の1つのページへ旧式でないデータをコピーし、前記複数のページの前記最初の1つのページに旧式のデータを上書きし、前記複数のページの前記最初の1つのページに旧式でないデータを維持するステップとを備えていても良い。このような処理は、旧式のデータだけを有する、1つ以上の複数のページを得ることができる。旧式のデータだけを含むページは、前記第2のメモリのスペースを空きにするために「解放」することができる。
【0023】
この方法は、トランザクションの開始と完了を示すデータを、前記第2のページに記憶するステップを更に備えていても良い。
【0024】
この方法は、部分的に実行されるトランザクションを識別するために、トランザクションの開始と完了を示す前記データを処理するステップを更に備えていても良い。
【0025】
この方法は、前記第2のページに記憶される前記データを読み出すステップと、前記第2のページから読み出されるデータを変更するステップと、前記読み出されたデータに影響を与えることなく、前記変更されたデータを、前記第2のページ、あるいは、更なる第2のページへ書き込むステップとを更に備えていても良い。
【0026】
上述の方法に従ってデータベースにデータを記憶することによって、ログ処理が暗黙的に発生する。なぜなら、新規のレコードの挿入、あるいは既存のレコードの変更は、データが書き込まれる最終ページに新規のレコードを割り当てることになるからである。
【0027】
本発明の態様は、任意の便利な形式で実現することができることが理解されるであろう。例えば、本発明は、適切なコンピュータプログラムによって実現されても良い。このコンピュータプログラムは、有形の搬送媒体(例えば、ディスク)あるいは無形の搬送媒体(例えば、通信信号)であっても良い、適切な搬送媒体で搬送されても良い。本発明の態様は、適切な装置を使用して実現されても良く、この適切な装置は、本発明を実現するように構成されているコンピュータプログラムを実行するプログラマブルコンピュータの形態をとることができる。
【図面の簡単な説明】
【0028】
【図1】本発明の実施形態が実現されるコンピュータシステムを示す図である。
【図2】上位レベルでの本発明の実施形態の動作を示すフローチャートである。
【図3】図1のコンピュータシステムのメインメモリに、データがどのようにして記憶されるかを示す図である。
【図4】データベースにレコードを追加するために実行される処理を示すフローチャートである。
【図5】データベースのレコードを変更するために実行される処理を示すフローチャートである。
【図6】図1のコンピュータシステムのメインメモリに記憶されるデータに、データのレコードの変更がどのように影響を与えるかを示す図である。
【図7】図1のコンピュータシステムのメインメモリに記憶されるレコードの全体ページを示す図である。
【図8】セカンダリメモリに記憶される冗長レコードを識別し抹消するために実行される処理を示すフローチャートである。
【図9a】データベースのページの位置に、図8の処理がどのように影響を与えるかを示す図である。
【図9b】データベースのページの位置に、図8の処理がどのように影響を与えるかを示す図である。
【図10】トランザクションの原子性を保証するために実行される処理を示すフローチャートである。
【発明を実施するための形態】
【0029】
図1は、本発明の実施形態を実現するために構成されるコンピュータ1を示している。コンピュータ1は、RAMによって提供されるメインメモリ2と、ハードディスクドライブによって提供されるセカンダリメモリ3とを備える。プロセッサ4は、メインメモリ2の第1の論理部分5に記憶されている命令を読み出し、実行するように構成されている。これらの命令によって操作されるデータは、メインメモリ2の第2の論理部分6に記憶される。メインメモリ2の第1の論理部分5に記憶される命令は、とりわけ、プロセッサ4を制御して、メインメモリ2の第2の論理部分6とセカンダリメモリ3との間でデータをコピーする。
【0030】
メインメモリ2の第1の論理部分5に記憶される命令は、セカンダリメモリ3に記憶されるリレーショナルデータベースの一部を形成する、メインメモリ2に記憶されるデータの処理を制御する。このリレーショナルデータベースのデータは、複数のページ7の形式で、メインメモリ2とセカンダリメモリ3の両方に記憶される。ここで、各ページは、データベースのレコードの形式で、所定量のデータを備えている。
【0031】
特定のデータベースのテーブルの特定のレコードを効率的に配置することを、プロセッサ4によって実行されるユーザアプリケーションに可能にするために、メインメモリ2とセカンダリメモリ3のそれぞれは、インデックス8a、8bと呼ばれる追加のデータ構造を記憶する。インデックス8a、8bはそれぞれ、順序付け基準として、いくつかのレコードを使用する、順序付けされたレコードリファレンスのリストである。各データベースのテーブルは、そのデータベースのテーブルのすべてのレコードに渡る走査を可能するための、少なくとも1つのインデックスを有する。インデックスの順序付け基準は、テーブルの、「キー」と呼ばれる、非ヌル値の属性を使用して確立される。レコードがテーブルに挿入されるあるいはテーブルから削除される毎に、関連するテーブルのインデックスが更新される。レコードリファレンスは、インデックスを走査する場合に、各レコードへのアクセスを可能にするために、各インデックスセルに保存される。このリファレンスは、通常は、「rid」(レコード識別子)として知られており、そして、これは、ページ番号と、レコードが割り当てられる場合にページの先頭バイトからの内部バイトオフセットで構成される。例えば、レコードがページ2の第8バイト目に記憶される場合、ridは、ページ2とオフセット8を特定することになる。
【0032】
データは、所定サイズのページで、セカンダリメモリ3とメインメモリ2との間で転送される。プロセッサ4によって実行されるユーザアプリケーションによって要求される場合、データは、セカンダリメモリ3からメインメモリ2へ転送される。データは、永続的な記憶のために、メインメモリ2からセカンダリメモリ3へ転送される。
【0033】
メモリ2に記憶されるページ7aは、メインメモリ2からセカンダリメモリ3へコピーされているページである。メインメモリ2に記憶されているページ7bは、セカンダリメモリ3に記憶されているレコードに対する変更、及びセカンダリメモリ3に記憶されているレコードに追加されるべきレコードの少なくとも一方を記憶する。このように、ページ7bは、メインメモリ2からセカンダリメモリ3へコピーされる必要があるものである。ページ7aは、セカンダリメモリ3へコピーされる必要はない(ページ7aがメインメモリ2から削除されるとしても)、これは、これらのページのレコードは既にセカンダリメモリ3に記憶されていて、任意の追加あるいは変更がページ7bの1つに記憶されているからである。ページ7bは、以下では、ページログと呼ぶことにする。
【0034】
図2は、データベースにデータを記憶するための、プロセッサ4によって実行される処理を示している。ステップS1で、レコード(既存のレコードに対する変更あるいは完全に新規のレコードを表している)は、データが現在追加されているページログのページ7bの末尾(最後)に記憶される。このページ7bが一杯である場合(即ち、更なるレコードを記憶するための空きスペースがない)、ステップ2で、ページは、永続的な記憶のためにセカンダリメモリ3へコピーされる。ページ7bのレコードは、これらのレコードが変更された及び作成されたのいずれか一方が行われた一時的な順序に従って順序付けされる。
【0035】
図3は、関連するインデックス8aに付随する、ページ7bの詳細を示している。上述のように、また、図3で示されるように、レコードが、それらの作成あるいは変更の順序で、ページ7bを構成するページログに追加される。つまり、ページ7bは、20個のレコードを記憶する第1のページ9を備え、この20個のレコードは、それらの作成あるいは変更の順序でページ9に追加されている。インデックス8aは、上述の第1のページ9のレコードを参照している。但し、説明を簡単にするために、図3では、リファレンスのサブセットだけを示している。
【0036】
ページ9が一杯になると、図4を参照して説明するように、それは、メインメモリ2からセカンダリメモリ3へコピーされ、新規のページが作成される。ステップS3で、ページ7bの1つのレコードへの挿入を要求するコマンドが処理される。この挿入は、新規のレコードの作成、あるいは既存のレコードの変更から生じ得る。ステップS4で、挿入対象のレコードを保持するために、ページのログの現在の「最終」ページにスペースがあるかどうかが判定される。スペースがある場合、処理は、ステップS5へ進み、そこで、レコードは、「最終」ページに挿入される。そのようなスペースがない場合、処理は、ステップS4からステップS6へ進み、そこで、新規のページが作成されて(図3では、ページ10として)、挿入対象のレコードを保持する。そして、このページが、ページログの「最終」ページとなる。処理は、ステップS6からステップS5へ進み、そこで、レコードは、新規のページに追加される。
【0037】
レコードが変更される場合に実行される処理について、図5及び図6を参照して説明する。図5をまず参照すると、ステップS7で、特定のレコードに対するリクエストが処理され、ステップS8で、特定のレコードが、メインメモリ2に現在常駐しているページに記憶されているかどうかを判定するためのチェックが実行される。このチェックは、対象のレコードが記憶されているページを識別するために、インデックス8aと8bを使用して、そして、対象のレコードが記憶されているページがメインメモリ2に常駐しているかどうかを判定することによって実行することができる。対象のページがメインメモリ2に常駐している場合でない場合、ステップS9で、対象のページは、セカンダリメモリ3からメインメモリ2へコピーされる。対象のページを受け入れるための、メインメモリ2内の空きスペースが十分でない場合、メインメモリ2に現在常住している1つ以上のページ7aが、十分な空きスペースを提供するためにメインメモリから排出される。排出するページ(群)7aをどれにするかの選択は、ファーストインファーストアウト(FIFO)選択ポリシーに基づいていても良い。
【0038】
図6は、ステップS9の処理後の、メインメモリ2の取り得る状態を示している。ページ11がメインメモリ2に記憶されていることがわかる。ここで、ページ11は、セカンダリメモリ3からコピーされているものである。このページ11は、ステップS7でリクエストされているレコードを記憶する。これは、インデックス8aのエントリ12によって識別される。
【0039】
対象のページがメインメモリ2に記憶されていて、また、上述の方法で対象のページのコピーの後、処理がステップS9からステップS10へ進んでいる場合には、処理は、ステップS8から直接ステップS10へ進む。ステップS10で、対象のレコードが変更され、ステップS11で、その変更された値を含むレコードの新規のコピーが作成される。変更された値を含むレコードは、ページログを作成するページ7bの1つに記憶されるものである。それゆえ、処理は、ステップS11からステップS12へ進み、そこで、変更された値を含むレコードを保持するために、ページログの「最終」ページにスペースがあるかどうかを判定するためのチェックが実行される。スペースがある場合、処理は、ステップS13へ進み、そこで、変更された値を含むレコードがページログの「最終」ページに記憶される。ページログに変更された値を含むレコードが記憶されると、ステップS14で、インデックス8aが更新され、そうすることで、図6の破線で示されるように、インデックス8aのエントリ12は、ページログの「最終」ページの最終レコードを参照することになる。インデックス8aのエントリ12とページ11のレコードとの間のリンクはこれ以上存在しない。
【0040】
本発明のいくつかの実施形態では、ステップS11で、インデックスのエントリの現在のridは、ステップS14でインデックスが更新される前に、レコードの「前値」フィールドに保存される。図10を参照して後述するように、これは、例えば、クラッシュのイベント時に、変更をロールバックすることが可能となる。
【0041】
ステップS12で、ページログの「最終」ページに十分なスペースがないことが判定される場合、上述のステップS13で処理を継続する前に、ステップS15で、ページログの新規のページが作成されることが理解されるであろう。
【0042】
上述の説明は、セカンダリメモリ3からコピーされるのではなく、ページログの一部を形成しないページに記憶されるレコードの変更に関するものである。いくつかの場合では、メインメモリ2に存在するページログのページに記憶されるレコードが、図5を参照して説明されるタイプの処理によって変更されても良いことが理解されるであろう。例えば、図7を参照すると、ページログを作成するページ7bのページ14に記憶されるレコード13への変更が要求される場合がある。このような場合、変更を表すレコード15がページ16に作成され、そして、インデックス8a、より詳しくは、インデックス8aのエントリ17が、レコード15を参照するために更新される。
【0043】
図7からは、ページ14が一杯であることがわかる(即ち、レコードを記憶することができるスペースがこれ以上ない)。そのような場合、ページ14が、メインメモリ2からセカンダリメモリ3へコピーされる。
【0044】
上述の説明から、データベースのレコードへのすべての変更(新規のレコードの作成及び既存のレコードの変更を含む)が、ページログの現在の「最終」ページへレコードを追加することによって実行されることがわかる。このような場合、セカンダリメモリ3にすべての変更が正しく記憶されることを保証するために、ページログのページだけがメインメモリ2からセカンダリメモリ3へとコピーされる必要がある。
【0045】
すべての変更が、ページログの現在の「最終」ページに記憶されるならば、他のページに記憶される従前のバージョンのレコード群は旧式のものとなるが、セカンダリメモリ3の記憶スペースを占有し続けることになる。セカンダリメモリ3の記憶容量は典型的には大きい(また、メインメモリ2の記憶容量も大きい)ならば、このことは必ずしも問題とならない。しかしながら、いくつかの実施形態では、旧式のレコード群を識別して、セカンダリメモリから削除するための処理が実現される。これについては、図8及び図9を参照して説明する。以下の説明では、ページ群は、別のページとの間で順序付けられていて、そして、かつ各ページは、自身の直後のページとのリンクを含んでいると想定する。
【0046】
ステップS16で、処理対象のページが選択される。以下の説明では、選択されたページはページ#1として参照され、一方、その直後のページはページ#2として参照される。いくつかの実施形態では、ステップS16で、ページは、そのページ内で旧式となるレコード群(即ち、破棄されるレコード群)の比率に基づいて選択される。このような旧式のレコード群は、例えば、インデックス内の任意のエントリによって参照されないレコード群を識別するインデックスを処理することによって識別することができる。より詳細には、特定のページにおけるレコードとそのオフセットに対して、このインデックスは、そのインデックスがそのページとそのオフセットに対応するridを有するエントリを含んでいるかどうかを判定するためにサーチされても良い。そのインデックスがそのような対応するridを含んでいない場合、そのレコードは使用されない。選択的には、ステップS16で、各ページと時間とを関連付け、そして、最も古いページを選択することが好ましい場合がある。上述の技術を使用してページが作成されると、ページは、一時的な順序で必然的に作成されることになり、最も古いページのそのような選択は比較的単純なものとなる。
【0047】
ステップS16でページを選択すると、処理は、ステップS17からステップS20によって定義されるループに進み、そこで、ページ#1のすべてのレコードが順に処理される。ステップS17で、ページ#1内に処理対象のレコードが残っているかどうかを判定するためのチェックが実行される。残っている場合、ステップS18で、処理が継続する。ステップS18で、次のレコードが選択され、ステップS19で、レコードが旧式であるかどうかを判定するためのチェックが実行される。そのような場合、処理はステップS17に戻り、ループを継続する。ステップS19で、旧式でないレコードが処理される場合、ステップS20で、このレコードは、旧式のレコードを現在保持している、ページ内の最上位の位置へ移動される。このレコードは、自身の内容をページ内のより上位の位置へコピーすることによって移動され、これにより、そのレコードを保持しているスペースを空きスペースであることを示すようにすることができる。
【0048】
ステップS17で、ページ#1内のすべてのレコード群が処理されていると判定される場合、処理はステップS21へ進み、そこで、ページ#1が任意の旧式のレコードあるいは空きスペース(即ち、ステップS20で、旧式のレコードを現在のレコードと置換することによる結果として)を含んでいるかどうかを判定するためのチェックが実行される。ステップS21で、ページ#1が旧式のレコードあるいは空きスペースを含んでいると判定される場合、処理はステップS21からステップS22へ進み、そこで、ページ#1の直後にあるページであるページ#2に処理対象のレコードが残っているかどうかを判定するためのチェックが実行される。ページ#2に処理対象のレコードが残っている場合、処理はステップS22からステップS23へ進み、そこで、ページ#2の次のレコードが処理対象として選択され、その後、ステップS24で処理を継続する。ここでは、選択されたレコードが旧式のものであるかどうかが判定される。選択されたレコードが旧式のものである場合、処理はステップS24からステップS22へ進む。ステップS24で、選択されたレコードが旧式のものでないと判定される場合、選択されたレコードは、ページ#1の最上位の空き位置(即ち、旧式のレコードを記憶する最上位の位置、あるいは最上位の空きスペース)へ移動される。そして、処理は、ステップS25からステップS21へと進む。
【0049】
ステップS22で、ページ#2がこれ以上の処理対象のレコードを含んでいないと判定される場合、処理はステップS22からステップS26へ進む。同様に、ステップS21で、ページ#1が旧式のレコードあるいは空きスペースを含んでいないと判定される場合、処理はステップS21からステップS26へ進む。
【0050】
ステップS26で、ページ#2で任意の現在のレコードを含んでいるかどうかが判定される。即ち、ページ#2のすべてのレコードが旧式のものであるかどうか(特に、以下では、ページ#1へレコードをコピーすることができるか)が判定される。ページ#2のすべてのレコードが旧式のものである場合、ページ#2は、有用な情報をこれ以上記憶することがないものとして、空きとすることができる。ステップS27で、ページ#2が空きとなり、ステップS28で、ページ#1が変更される。そうすることで、従前のページ#2に続くページとして自身の次のページ(ページ#3として参照される)を識別する。
【0051】
ステップS26で、ページ#2が現在のレコードを含んでいると判定される場合、処理はステップS26からステップS29へ進み、そこで、ページ#2は、上述の処理(即ち、図8の処理の目的のためにページ#2はページ#1となる)を使用して処理される。
【0052】
従前の処理では、処理対象のページは、セカンダリメモリ3からメインメモリ2へコピーされる。上述の処理によって変更された任意のページは、永続的な記憶のためにセカンダリメモリ3へコピーされる。システムクラッシュのイベント時には、いくつかのレコードがページ間で複製されても良い。そのような複製を識別し、かつ除外することが要望される場合、それは、各レコードとログ番号等を関連付けることによって達成することができる。そのようなログ番号は、図5のステップS11でレコードが作成する場合に初期化されても良い。
【0053】
図8の処理は、旧式のレコードが時々削除されることを保証するように構成されている優先度の低い処理を使用して実現することができる。これによって、セカンダリメモリ記憶装置の過度の必要条件を回避する。
【0054】
図9aと図9bは、図8を参照して説明される処理前後のページ#1とページ#2の例を示している。
【0055】
図9aでは、ページ#1は6個のレコードを記憶しているが、実際には、これらのレコードの内の3個のレコードは旧式のものである。ページ2は、2つの旧式でないレコード(レコード#4とレコード#5)だけを記憶している。図9bは、上述の処理後を示していて、レコード#4とレコード#5は、ページ#1へ移動され、そうすることで、ページ#2は旧式のレコードだけを記憶し、それゆえ、ページ#2を空きにすることができる。
【0056】
図9aと図9bは、インデックス8がページ#1とページ#2のレコードを参照していることを示している。実行される処理はインデックスのエントリを補正する。例えば、図9aのページ#2の自身の位置でレコード#4を参照するインデックスのエントリは、図9bのページ#1の自身の位置でレコード#4を参照する。
【0057】
いくつかの実施形態では、現在のバージョンのレコードが直前のバージョンである場合、そのレコードは旧式のものであるとみなされない。これは、システムクラッシュのイベント時にロールバック動作を正しく実行させることを可能にするためである。例えば、レコードが旧式のものであると見なされない場合、そのレコードは、コミットされないトランザクションの一部となる。このトランザクションについては、以下で詳述する。
【0058】
RDBMSでは、特定のレコードに影響を与えるいくつかの動作のセットは、原子性、一貫性、完全性及び耐久性(時には、「ACID」属性と呼ばれる)を保証するような方法で実行される。一般論として、これは、動作のセットが自身で完全に実行されるべきであり、あるいは、不可能である場合には、完全に中断されるべきである。つまり、これらの動作のサブセットだけが実行され、その動作のその他の部分が実行されないことは生じるべきではない。完全に実行されなければならない動作のセットは、時には、トランザクションと呼ばれる。
【0059】
周知のデータベース管理システムでは、トランザクションの原子性はログファイルを使用して保証される。つまり、既知のデータベース管理システムでは、トランザクションのコミットポイントは、そのトランザクションが正常に実行されて、トランザクションの結果がセカンダリメモリに記憶されるログファイルに記録されるポイントであり、そうすることで、トランザクションの結果を、システム故障のイベント時に再生することができる。一般的には、コミットされるトランザクションの一部を形成する動作がセカンダリメモリのデータベースに書き込まれる場合、クラッシュからRDBMSのリカバリー時のログファイル全体を読み出すことを回避するために、チェックポイントのエントリがログファイルに追加される。
【0060】
トランザクションが完全に実行される場合、コミット手順が実行され、そして、「トランザクションコミット完了」メッセージがユーザアプリケーションに送信されることで、トランザクションに含まれるすべての動作が正常に終了したことと、かつ動作の耐久性を通知する。そうでなければ、すべてのレコードの内容を、トランザクションの実行が開始される直前の値に戻すロールバック手順が起動される。ロールバック手順の終了時には、ユーザアプリケーションにも、トランザクションの実行の失敗が通知される。
【0061】
本発明のシステムでは、トランザクションのコミットポイントは、そのトランザクションを行う動作のすべてがページログからセカンダリメモリに書き込まれていて、かつ、インデックスが新規のレコードを指し示すように更新されている時点のポイントである。
【0062】
トランザクションの原子性が必要とされる場合、上述の方法は、単純なチェックポイント手順を提供するように変更されても良く、そうすることで、システムクラッシュからリカバリーする場合にすべてのデータベースのページを読み出すことを回避することができる。これは、トランザクションの開始と完了に関する情報を含む「フェイク」トランザクションレコードをページ内に含ませることによって達成することができる。より詳しくは、これらの「フェイクレコード」は、トランザクションの開始、トランザクションのコミット、及びトランザクションの中止を示している。例えば、「開始トランザクション(スタートトランザクション)」レコードはページログに挿入されて、「開始トランザクション」レコードに続く動作が単一のトランザクションの一部であり、そして、「コミット」レコードがそのトランザクションの最終動作の直後のページログに書き込むことができることを示すことができる。同様に、トランザクションが中止される場合、「中止された」レコードを、トランザクションが中止される前の直前の動作の直後のページログに書き込むことができる。
【0063】
システムクラッシュが発生すると、対応するトランザクションのコミットレコードあるいはトランザクションのトランザクション中止レコードを持たない、トランザクションの開始レコードを識別することの逆の順序で、レコードが処理される。任意のこのようなトランザクションの開始レコードに遭遇すると、トランザクションの開始レコードに続くすべてのレコードが破棄され、そして、それらのレコードに関連付けられているインデックスのエントリが、レコードの「前値」フィールドを使用して、データベース内のそれらのレコードの従前の位置を示すように設定される。
【0064】
図10は、システムクラッシュのイベント時(例えば、電力不足のイベント時)に実行することができる処理の例を示していて、ここではデータがメインメモリ2から損失している。
【0065】
ステップS30で、セカンダリメモリ3に記憶されているページの最終ページ(つまり、システムクラッシュ前にセカンダリメモリにコミットされる最終ページ)が取得され、そして、現在のページとして設定される。ステップS31で、そのページの最終レコードが現在のレコードとして設定される。ステップS32で、現在のレコードが開始トランザクションレコードであるかどうかが判定される。現在のレコードが開始トランザクションレコードでない場合、処理はステップS33へ進み、そこで、現在のレコードがコミットレコードあるいは中止レコードであるかどうかが判定される。
【0066】
ステップS33で、現在のレコードがコミットレコードあるいは中止レコードでないと判定される場合、処理はステップS34へ進み、そこで、現在のページに従前のレコードが存在するかどうかが判定される。ステップS34で、現在のページに従前のレコードが存在するかどうかが判定される場合、処理はステップS35へ進み、任意の従前のページが存在するかどうか(即ち、現在のページがセカンダリメモリにコミットされた最初のページであるかどうか、これ以上、従前のページがないかどうか)が判定される、これ以上、従前のページが存在しないと判定される場合、処理はステップS35から最後のステップS38へ進む。
【0067】
一方、ステップS35で、更なる従前のページが存在すると判定される場合、処理は、ステップS35からステップS36へ進み、従前のページ(即ち、現在のページの直前のページ)が新規の現在のページとして設定される。そして、処理はステップS36からステップS31へ進む。
【0068】
ステップS34で、現在のページに従前のレコードが存在する場合、処理はステップS37へ進み、そこで、現在のページの現在のレコードの前のレコードが新規の現在のレコードとして設定される。そして、処理は、ステップS37からステップS32へ進む。
【0069】
ステップS33で、現在のレコードがコミットレコードあるいは中止レコードであると判定される場合、これは、ステップS38で、データベースに記憶されている任意のレコードをロールバックする必要がないことを示し、そして、処理を終了する。つまり、ステップS33で、中止レコードあるいはコミットレコードに遭遇すると、これは、未完了のトランザクションの一部であるレコードはデータベースに存在しないことを示すことになる。
【0070】
ステップS32で、現在のレコードが開始トランザクションレコードであると判定される場合、処理はステップS39へ進み、そこで、現在のレコードに続くすべてのレコード(即ち、開始トランザクションレコードの後にデータベースに追加されるレコード)がロールバックされる。そして、処理は、ステップS39から最後のステップS38へ進む。
【0071】
図10を参照して説明される処理は、暗黙的なチェックポイント手順を含んでいることが理解されるであろう。これは、処理は常にコミットフェイクレコードあるいは中止フェイクレコード時に終了するので、システムクラッシュからのリカバリー時にデータベース内の各レコードを処理する必要がない場合には、処理は常に終了するからである。それゆえ、一般的には、データベース内の各レコードを処理する必要がなくなる。
【0072】
データベースとコンピュータという用語は、それらの任意の特定の実装に制限されず広く解釈されるべきであることが理解されるであろう。添付の請求項の範囲から逸脱することなく、本発明の様々な変更及び応用がなされることが、本発明の教示から当業者は理解するであろう。

【特許請求の範囲】
【請求項1】
第1のメモリと第2のメモリを備えるシステムにおけるデータベースにデータを記憶する方法であって、
前記第2のメモリから第1のページのデータを読み出すステップと、
前記第2のメモリから読み出される前記データの少なくとも一部を変更して、前記データベースに記憶すべき変更されたデータを作成するステップと、
前記変更されたデータを、前記第1のメモリのデータの第2のページに書き込むステップと、
前記第2のページを、前記第1のメモリから前記第2のメモリへコピーするステップとを有し、
前記第2のページのデータは、前記データが変更された順序に基づいて連続的に順序付けられている
ことを特徴とする方法。
【請求項2】
前記書き込むステップは、前記第2のページに書き込まれる前のデータに前記変更されたデータを追加する
ことを特徴とする請求項1に記載の方法。
【請求項3】
前記データの第1のページと前記第2のページは、複数のデータベースのレコードを含み、
前記変更されたデータは、1つ以上のデータベースのレコードを含んでいる
ことを特徴とする請求項1または2に記載の方法。
【請求項4】
前記第2のページに書き込まれる前記変更されたデータは、前記第1のページのレコード群の内の1つの少なくとも一部に基づくデータを含んでいる
ことを特徴とする請求項3に記載の方法。
【請求項5】
前記第2のメモリから読み出される前記第1のページのレコードを参照するインデックスを備え、
前記変更されたデータが書き込まれる前記第2のページを参照するための前記インデックスのエントリを変更するステップを更に有する
ことを特徴とする請求項4に記載の方法。
【請求項6】
前記読み出される第1のページに含まれず、前記データベースに記憶すべき新規のデータを備える、新規のデータベースのレコードを前記第2のページに追加するステップを更に有する
ことを特徴とする請求項3に記載の方法。
【請求項7】
所定量のデータが前記第2のページに書き込まれている場合に、更なる第2のページが作成され、
前記更なる第2のページに記憶されるデータは、前記データが変更される順序に基づいて連続的に順序付けされている
ことを特徴とする請求項1乃至6のいずれか1項に記載の方法。
【請求項8】
所定量のデータが前記第2のページに書き込まれている場合に、前記第2のページが前記第2のメモリにコピーされる
ことを特徴とする請求項1乃至7のいずれか1項に記載の方法。
【請求項9】
前記第1のメモリは第1の関連アクセス時間を有し、
前記第2のメモリは第2の関連アクセス時間を有し、
データの読出/書込動作に関して、前記第1のアクセス時間は前記第2のアクセス時間よりも遅い
ことを特徴とする請求項1乃至8のいずれか1項に記載の方法。
【請求項10】
前記第2のメモリに記憶されている複数のページに含まれる同一データの内、旧式のバージョンと旧式でないバージョンを識別するために、前記複数のページを処理するステップと、
前記旧式でないデータが隣接して配置されるように、前記複数のページの最初の1つのページ内にデータを再配置するステップと、
前記複数のページの別ページから、前記複数のページの前記最初の1つのページへ旧式でないデータをコピーして、前記複数のページの前記最初の1つのページの旧式のデータを上書きし、前記複数のページの前記最初の1つのページに旧式でないデータを保持するステップと
を有することを特徴とする請求項1乃至9のいずれか1項に記載の方法。
【請求項11】
トランザクションの開始と完了を示すデータを、前記第2のページに記憶するステップを更に有する
ことを特徴とする請求項1乃至10のいずれか1項に記載の方法。
【請求項12】
部分的に実行されるトランザクションを識別するために、トランザクションの開始と完了を示す前記データを処理するステップを更に有する
ことを特徴とする請求項11に記載の方法。
【請求項13】
前記第2のページに記憶される前記データを読み出すステップと、
前記第2のページから読み出される前記データを変更するステップと、
前記読み出されたデータに影響を与えることなく、前記変更されたデータを、前記第2のページ、あるいは、更なる第2のページへ書き込むステップと
を更に有することを特徴とする請求項1乃至12のいずれか1項に記載の方法。
【請求項14】
請求項1乃至13のいずれか1項に記載の方法を実行するように構成されているコンピュータ可読命令を記憶するコンピュータ可読媒体。
【請求項15】
データを記憶するためのコンピュータ装置であって、
第1のメモリと、
第2のメモリと、
請求項1乃至13のいずれか1項に記載の方法を実行するために、前記第1のメモリと前記第2のメモリと通信して、前記第1のメモリと前記第2のメモリそれぞれに対して、データの読み書きを行うように構成されているプロセッサと
を備えることを特徴とするコンピュータ装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9a】
image rotate

【図9b】
image rotate

【図10】
image rotate


【公表番号】特表2013−519139(P2013−519139A)
【公表日】平成25年5月23日(2013.5.23)
【国際特許分類】
【出願番号】特願2012−551512(P2012−551512)
【出願日】平成22年2月9日(2010.2.9)
【国際出願番号】PCT/EP2010/051602
【国際公開番号】WO2011/098118
【国際公開日】平成23年8月18日(2011.8.18)
【出願人】(598036300)テレフオンアクチーボラゲット エル エム エリクソン(パブル) (2,266)
【出願人】(511227473)ウニベルシダッド ポリテクニカ デ マドリッド (4)
【氏名又は名称原語表記】Universidad Politecnica de Madrid
【住所又は居所原語表記】Ramiro de Maeztu, 7, E−28040 Madrid, SPAIN