JP2007219598A - 多重化データベースシステム及びその同期化方法、データベースサーバ、並びに、データベースサーバプログラム - Google Patents
多重化データベースシステム及びその同期化方法、データベースサーバ、並びに、データベースサーバプログラム Download PDFInfo
- Publication number
- JP2007219598A JP2007219598A JP2006036256A JP2006036256A JP2007219598A JP 2007219598 A JP2007219598 A JP 2007219598A JP 2006036256 A JP2006036256 A JP 2006036256A JP 2006036256 A JP2006036256 A JP 2006036256A JP 2007219598 A JP2007219598 A JP 2007219598A
- Authority
- JP
- Japan
- Prior art keywords
- processing request
- processing
- database
- execution
- management 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.)
- Withdrawn
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】 複数のトランザクションを並行処理しても各データベース間で矛盾の生じることがない多重化データベースシステムにおける同期化方法を提供する。
【解決手段】 仲介装置200が、クライアント300からの処理要求を複数のサーバ100に転送し、各サーバ100から受信した応答結果のうち正当なものをクライアント300に返す多重化データベースシステムにおいて、仲介装置200は処理要求に順序番号を付与する。各サーバ100は該順序番号に基づき処理要求を並べ替えるとともに、サーバ100においてロック競合等が生じないようDBMS120への投入順序を制御する。
【選択図】 図1
【解決手段】 仲介装置200が、クライアント300からの処理要求を複数のサーバ100に転送し、各サーバ100から受信した応答結果のうち正当なものをクライアント300に返す多重化データベースシステムにおいて、仲介装置200は処理要求に順序番号を付与する。各サーバ100は該順序番号に基づき処理要求を並べ替えるとともに、サーバ100においてロック競合等が生じないようDBMS120への投入順序を制御する。
【選択図】 図1
Description
本発明は、複数のデータベースマネージメントシステム(DBMS)を並列動作させた多重化データベースシステムに関し、特に各データベース間の同期技術に関する。
従来の多重化データベースシステムは、例えば特許文献1に記載されたものが知られている。このシステムでは、図22に示すように、それぞれデータベースを備えた2つの計算機1010と計算機1020が通信回線により接続されている。各計算機1010と1020とは、いわゆる二相コミット制御によりデータベース間の同期が図られている。
計算機1010は、各種の業務処理を実行する応用プログラム1011と、データベース1014の検索及び更新の制御を行うとともにトランザクションモニタ1013を介して他の計算機1020のデータベース1024における更新処理との同期を取るデータベース管理システム1012と、いわゆる二相コミット制御によってデータベース1014と1024の更新処理の同期をとるトランザクションモニタ1013とから構成される。計算機1020についても計算機1010と同様に、応用プログラム1021と、データベース管理システム1022と、トランザクションモニタ1023とから構成されている。
本システムにおいて、計算機1010のデータベース1014と計算機1020のデータベース1024で同じデータを保持し、更新があった場合でも両方のデータベース1014と1024に同じ更新が反映される処理手順について説明する。
応用プログラム1011は、あるトランザクション内でデータベース1014と1024を同一クエリで更新する。データベース1014は、データベース管理システム1012が更新し、データベース1024はデータベース管理システム1022が更新する。
そして、応用プログラム1011は、トランザクションの最後に今までの更新を確定する「COMMIT要求」又は今までの更新を取り消す「ROLLBACK要求」を発行する。「COMMIT要求」又は「ROLLBACK要求」は、トランザクションモニタ1013によってデータベース管理システム1012と、トランザクションモニタ1023を経由してデータベース管理システム1022へ送られる。
例えば、トランザクションモニタ1013が「COMMIT要求」を転送した場合、データベース管理システム1012と1022は、COMMIT実行の可否をトランザクションモニタ1013へ返答する。この際、データベース管理システム1012と1022は実際にはCOMMITを実行せず、実行の可否のみを答えるのみである。
トランザクションモニタ1013及び1023は、データベース管理システム1012及び1022の双方から「COMMIT可」の応答を受け取ると、それぞれデータベース管理システム1012及び1022に「COMMIT実行」を送信する。「COMMIT実行」を受け取ったデータベース管理システム10112と1022は、実際にCOMMITを実行する。
一方、例えばトランザクションモニタ1013が、データベース管理システム1012又は1022の一方から「COMMIT不可」の応答を受け取った場合、他方の応答が「COMMIT可」であったとしても、データベース管理システム1012と1022に対して「ROLLBACK実行」を送信し、トランザクションをキャンセルする。「ROLLBACK実行」を受け取ったデータベース管理システム1012と1022は、実際にROLLBACKを実行する。
以上のようにして、どちらか一方のデータベースだけ更新が反映されることを防ぎ、両方のデータベースに対して常に同一の更新が行われるようにすることで、データベース間の同期を保つ。
特開平6−161862号公報
しかしながら、上述の従来技術は、複数のデータベースにおける一トランザクションのデータベースの同期を図る方法であって、複数のトランザクション間でのデータベースの同期を制御することはできない。つまり、複数のトランザクションが並行に実行されている状態で、且つ、それらのトランザクションが同一のテーブルの同一行にほぼ同時にアクセスした場合には、データベースの同期が崩れたり、クライアントへ返す返答が一意に決まらないなどの問題が生じる。この問題点について以下に具体的に例示する。
図23に示すtest_tableという名前のテーブルを考える。この時、図24に示すトランザクションT1及びT2がほぼ同時に実行される場合を考える。トランザクションT1はid=101の行を更新し、トランザクションT2はid=101の行とid=102の行を更新する。どちらのトランザクションのUPDATEが先に実行されるかによって、id=101の値は異なってしまう。
2つのトランザクション中のUPDATEが実行される順序は以下の2通りが考えられる。
(1)T1のUPDATEの後にT2のUPDATE
(2)T2のUPDATEの後にT1のUPDATE
(1)の場合、2つのトランザクション実行後にはT2のUPDATEが残り、department=2となる。一方(2)の場合、2つのトランザクション実行後にはT1のUPDATEが残り、department=1となる。すなわち、(1)と(2)では最終的なテーブルtest_tableのデータが異なる。
(2)T2のUPDATEの後にT1のUPDATE
(1)の場合、2つのトランザクション実行後にはT2のUPDATEが残り、department=2となる。一方(2)の場合、2つのトランザクション実行後にはT1のUPDATEが残り、department=1となる。すなわち、(1)と(2)では最終的なテーブルtest_tableのデータが異なる。
つまり、複数のデータベースの初期状態が同じで、且つ、同じトランザクションを実行したとしても、あるDBMSでは(1)の順で実行し、別のDBMSは(2)の順で実行した場合、2つのデータベースは同期状態(同じデータを保持している状態)が崩れてしまう問題が発生する。
また、別の例として、図25に示すトランザクションT3及びT4がほぼ同時に実行される場合を考える。トランザクションT4のSELECTがトランザクションT3のCOMMITの前に実行されるか又は後に実行されるかで、トランザクションT4のSELECTで得られる値は異なってしまう。
トランザクションT4のSELECTとトランザクションT3のCOMMITが実行される順序は以下の2通りが考えられる。
(3)T4のSELECTの後にT3のCOMMIT
(4)T3のCOMMITの後にT4のSELECT
(3)の場合、トランザクションT4のSELECT実行後には、トランザクションT3のUPDATEが反映されていない古い値department=3が得られる。一方(4)の場合、トランザクションT4のSELECT実行後には、トランザクションT3のUPDATEが反映された値department=1が得られる。
(4)T3のCOMMITの後にT4のSELECT
(3)の場合、トランザクションT4のSELECT実行後には、トランザクションT3のUPDATEが反映されていない古い値department=3が得られる。一方(4)の場合、トランザクションT4のSELECT実行後には、トランザクションT3のUPDATEが反映された値department=1が得られる。
つまり、複数のデータベースの初期状態が同じで、且つ、同じトランザクションを実行したとしても、あるDBMSは(3)の順で実行し、別のDBMSは(4)の順で実行した場合、得られる値が異なってしまう。
本発明は、上記事情に鑑みてなされたものであり、その目的とするところは、複数のトランザクションを並行処理しても各データベース間で矛盾の生じることがない多重化データベースシステムにおける同期化方法を提供することにある。
上記目的を達成するために、本願発明は、複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、各データベースサーバは、仲介装置から受信した処理要求の実行順序を制御する実行順序制御手段と、実行順序制御手段で順序制御された処理要求を実行するデータベース管理システムとを備える。
仲介装置は、クライアントから受信した処理要求に順序番号を付して各データベースサーバに転送する。
一方、各データベースサーバの実行順序制御手段は、まず、仲介装置から受信した処理要求を該処理要求に付された順序番号にしたがって並べ替える。そして、実行順序制御手段は、並び替えられた処理要求について、順序番号順に、(イ)処理要求の実行によりデータベース管理システムにおいてロック競合が生じる可能性があるか否かを判定し、(ロ)ロック競合が生じる可能性がある場合には該処理要求を所定の記憶手段に記憶し、(ハ)ロック競合が生じる可能性がない場合にはデータベース管理システムに転送する。一方、実行順序制御手段は、前記記憶手段に記憶されている処理要求がロック競合を起こす可能性がなくなると該処理要求をデータベース管理システムに転送する。
本発明によれば、仲介装置においてクライアントコンピュータから受信した各処理要求に順序番号が付されるので、例えば通信障害等により各データベースサーバが受信する処理要求の順序が入れ替わった場合でも全てのデータベースサーバにおいて一意の順序で処理要求の処理が可能となる。また、各データベースサーバの実行制御部は、データベース管理システムでロック競合が生じる可能性のある処理要求を所定の記憶手段に一時保存し、ロック競合が生じる可能性がなくなってから当該処理要求をデータベース管理システムに投入する。これにより、各データベースサーバ間におけるロック競合に基づく処理結果の相違を防止できる。すなわち、各データベースサーバの同期が図れる。
また、本願発明では、さらに、各データベースサーバの実行順序制御手段が、並び替えられた処理要求について、順序番号順に、(イ)第1の処理要求と該第1の処理要求より新しい順序番号を有する第2の処理要求との間で各処理要求の実行順序の先後により処理結果が異なる可能性があるか否かを判定し、(ロ)処理結果が異なる可能性がない場合には各処理要求をデータベース管理システムに転送し、(ハ)処理結果が異なる可能性がある場合には前記第1の処理要求をデータベース管理システムに転送するとともに、前記第2の処理要求を所定の記憶手段に記憶する。一方、前記記憶手段に記憶されている第2の処理要求に対応する第1の処理要求の実行がデータベース管理システムにおいて完了すると、該第2の処理要求をデータベース管理システムに転送する。
本発明によれば、実行順序の先後により処理結果が相違する可能性のある2つの処理要求について、全てのデータベースサーバにおいて、古い順序番号が付された処理要求の実行が完了した後に新しい順序番号が付された処理要求が実行されることが保証される。これにより、各データベースサーバの同期が図れる。
以上説明したように本発明によれば、複数のトランザクションを並行処理させても各データベースサーバのデータベース管理システムでは常に一意の順番で処理要求が実行されるので、各データベースサーバ間の矛盾を未然に防止できる。
本発明の一実施の形態に係る多重化データベースシステムについて図面を参照して説明する。図1は本実施の形態に係る多重化データベースシステムの全体構成を説明するブロック図である。
この多重化データベースシステムは、図1に示すように、複数のデータベースサーバ(以下「サーバ」と言う)100と仲介装置200とをネットワークを介して接続したものであり、1以上のクライアントコンピュータ(以下「クライアント」と言う)300からアクセスされる。本実施の形態では、図1に示すように、2台のサーバ100a及び100bを有しており、2台のクライアント300a及び300bからアクセスされる。以降の説明において各サーバ100を他のサーバ100と区別する場合には添え字「a」「b」を付加するものとする。クライアント300についても同様である。なお、各装置間のネットワーク形態やプロトコルは不問である。本実施の形態では、TCP/IPを用いたネットワーク上において同期通信を行うものとする。
仲介装置200は、クライアント300側のIPアドレスをクライアント300に公開しており、クライアント300はデータベースにアクセスしたいときには当該IPアドレス宛にクエリを送信する。またクエリに対する応答の発信元アドレスは当該IPアドレスとなっている。これは、クライアント300からみると、1つのデータベースサーバとパケットを送受信していることと等価なため、このデータベースサーバを仮想サーバ400と考えることができる。この仮想サーバ400の目的は、サーバ100が冗長化されていることを隠蔽するためである。つまり、サーバ100a及び100bが両方稼働していようと、また片方のサーバ100aがダウンして他方のサーバ100bのみが稼働していようと、さらに新たなサーバが追加されようと、クライアント300には影響はなく、設定・動作を変更する必要がない。
仲介装置200は、図1に示すように、サーバ制御部210と、順序番号付与部220と、トランザクションID付与部230とを備えている。
仲介装置200のサーバ制御部210は、クライアント300からクエリを受信すると、当該クエリを正常稼働中のサーバ100に転送する。このときサーバ制御部210から各サーバ100に転送するクエリには、順序番号付与部220及びトランザクションID付与部230により順序番号及びトランザクションIDが付与される。各サーバ100では仲介装置200を介してクライアント300から受信したクエリを処理し、処理結果を仲介装置200に返す。仲介装置200のサーバ制御部210は、各サーバ100から受信した応答を互いに比較して応答の正当性を判断することによりサーバ100における障害を検出し、正当な応答の1つをクライアント300に返す。正当でない応答を返したサーバ100又は無応答のサーバ100は障害が発生したと判断し、当該サーバ100をシステムから切り離す。
応答の正当性判断方法は、例えば、サーバ100が3台以上ある場合には多数決で決める方法や、受信した応答を所定のルールに基づいて判断する方法がある。例えば、クライアント300からの「参照」要求に対して「更新成功」という応答が返ってきた場合、正常であればそのような応答はあり得ないので(「参照成功」など参照に関する応答のはず)、この応答は正しくないと判断する。また、応答パケット中にデータ長フィールドがある場合、このデータ長フィールドの値と実際に受信した応答パケット長を比較し、異なる場合は正しくないと判断する。また、複数のサーバ100の中からMasterサーバを予め1台決めておき、このサーバ100からの応答を常に正しいと判断する。また、上記複数の方法を併用する方法もある。例えば、3台で多数決を行った結果、応答の中身が全てバラバラであり、多数派のパケットを決められない場合はMasterサーバの応答を正しいと判断する。正常稼働しているサーバが1つだけの場合は、そのサーバからの応答を正常と判断する。
順序番号付与部220は、サーバ制御部210がクライアント300から受信したクエリに対して順序番号を付与する。順序番号が付与されたクエリは、前述したようにサーバ制御部210により各サーバ100に送信される。ここで、順序番号とは、仲介装置200におけるクエリの受信順序を一意に特定するためのものであり、数字や文字列などの表現形態や降順・昇順の区別等は不問である。本実施の形態では、処理の簡便性という観点から昇順の連番を用いる。なお、順序番号の付与は、各クエリがどのトランザクションに属しているかとは無関係に、単純に仲介装置200が受信した順番で付与する。また、順序番号が付せられたクエリはサーバ制御部210から各サーバ100に送信されるが、この送信順序は順序番号通りである必要はない。これは、後述するように、各サーバ100において当該順序番号に基づいてクエリの順序を再現可能だからである。
トランザクションID付与部230は、サーバ制御部210がクライアント300から受信したクエリに対してトランザクションIDを付与する。詳しくは、トランザクションID付与部230は、クエリが新たなトランザクションを開始するものである場合、新たなトランザクションIDを生成し、これを当該クエリに付与する。また、クエリが既存のトランザクションに属するものの場合、当該トランザクションのトランザクションIDを付与する。
データベースサーバ100は、実行順序制御部110と、データベース管理システム(DBMS)120と、記憶装置130とを備えている。
実行順序制御部110は、仲介装置200から受信したクエリを当該クエリに付与された順序番号にしたがって並べ替え、順序番号順にDBMS120に送信する。なお、DBMS120に送信するクエリは、仲介装置200で付せられた順序番号及びトランザクションIDは取り除かれたものである。ここで、実行順序制御部110は、送信しようとするクエリが所定の条件を満たす場合には、前記順序番号に関わらず当該クエリを所定の記憶装置に一時的に待機させ、他のクエリを先にDBMS120に送信する。この処理については後述する。
DBMS120は、SQL(Structured Query Language)を解して処理を行うRDBMS(Relational Database Management System)である。このDBMS120は、複数のトランザクションの並行処理をサポートしたものであり、トランザクション隔離レベルとして少なくともREAD COMMITEDとSERIALIZABLEをサポートしている。このようなDBMS120としては種々の市中品があり、例えばThe PostgreSQL Global Development GroupによるPostgreSQL(http://www.postgres.org/)や、Oracle社によるOracle(登録商標)(http://www.oracle.com)などが挙げられる。
記憶装置130は、DBMS120が実際にデータを記憶する媒体であり、磁気記憶装置や光学式記憶装置や光磁気式記憶装置などが挙げられる。この記憶装置130は、サーバ100に内蔵しても外付けであってもよく、さらにはネットワークを介して他の装置に設けてもよい。
次に、実行順序制御部110の詳細について図2〜3を参照して説明する。図2は実行順序制御部110のブロック図である。図2に示すように、実行順序制御部110は、クエリ並べ替え部111と、テーブルロック管理部112と、行ロック管理部113と、COMMIT実行管理部114と、クエリ実行管理部115と、所定の記憶手段に記憶されたクエリ完了情報116とを備えている。
クエリ並べ替え部111は、仲介装置200から受信したクエリを、該クエリに付与された順序番号に基づき並べ替えて、順次、後段のテーブルロック管理部112に渡す。このような処理を行うため、クエリ並べ替え部111は受信したクエリを一時記憶するためのバッファ領域(図示省略)を備える。
ところで、このクエリ並べ替え部111により、全てのサーバ100は、仲介装置200が各クライアント300から受信したクエリの受信順序を一意に把握できる。したがって、各サーバ100において当該順序に従って各クエリを順次DBMS120に投入すれば各サーバ100間での処理結果の矛盾は生じないと考えることもできる。しかしながら、この種のDBMS120では、処理の高速化等の観点から複数のトランザクションを並列実行できるようになっているので、クエリの投入順序とその実行順序が保証されないのが一般的である。したがって、全てのサーバ100で仲介装置200が受信した順番でDBMS120にクエリを順次投入しても、各サーバ100間での処理結果の同一性が保証されない。
この問題を解決するためには、DBMS120においてクエリの並列処理を行わないように前記順序番号に基づいてクエリを1つずつDBMS120に投入することも考えられるが、この場合には処理能力が著しく低減するので現実的ではない。
そこで、本発明に係る実行順序制御部110では、テーブルロック管理部112と、行ロック管理部113と、COMMIT実行管理部114と、クエリ実行管理部115とが互いに協働して、各サーバ100のDBMS120において一意の処理結果が得られるように、クエリ並べ替え部111で昇順に並び替えられたクエリのDBMS120への投入順序とタイミングを制御する。この順序制御の方法について図3を参照して説明する。
図3の表は、2つのSQL間で順序制御が必要か否かを表したものである。図3に示すように、LOCK TABLEと、INSERT・UPDATE・DELETE・SELECT FOR UPDATE・他のLOCK TABLEとの間では、アクセス先が同一テーブルの場合にテーブルロック競合が発生するため順序制御が必要となる。DBMS120がACCESS EXCLUSIVE MODEをサポートする場合には、LOCK TABLEとSELECTとの間でも順序制御が必要となる。ここで、ACCESS EXCLUSIVE MODEとは、他の全てのロックモードと競合し、同時に起こる全ての操作からロックしたテーブルを保護するモードを意味する。例えば、前述のPostgreSQLでは当該モードをサポートしている。これらのテーブルロックに起因する順序制御はテーブルロック管理部112で行う。
また、図3に示すように、更新クエリ同士は、すなわちUPDATEとDELETEとSELECT FOR UPDATEとは、アクセス先が同一テーブルの同一行の場合に行ロック競合が生じるため相互に順序制御が必要となる。実際に行ロック競合を起こすか否かは、更新クエリを実行する前にSELECTでどの行を更新するかを検査することにより知ることができる。同一行を更新しないならば順序制御は不要である。この行ロックに起因する順序制御は行ロック管理部113で行う。
さらに、図3に示すように、COMMITと、UPDATE・DELETE・SELECT FOR UPDATE・SELECT・SET TRANSACTION ISOLATION LEVEL SERIALIZABLEとは、COMMITを契機に今までの更新が確定しデータが実際に更新するため実行順序の前後により処理結果が異なる場合がある。したがって順序制御が必要となる。なお、DDL文(データ定義言語文)もCOMMITと同様である。この順序制御はCOMMIT実行管理部114で行う。
テーブルロック管理部112は、図2に示すように、テーブルロック管理表112aと、FIFO型のキュー112bとを備えている。テーブルロック管理部112は、(1)前段のクエリ並べ替え部111から渡されたクエリがテーブルロック競合を起こす可能性がある場合に当該クエリをキュー112bに保存し、テーブルロック競合を起こす可能性がない場合には当該クエリを後段の行ロック管理部113に渡し、(2)キュー112bに保存してあるクエリがテーブルロック競合を起こす可能性がなくなった場合、当該クエリをキュー112bから取り出して後段の行ロック管理部113に渡す。テーブルロック管理部112の詳細動作については後述する。
テーブルロック管理表112aは、DBMS120全体に対して1つ設けられており、DBMS120内の各テーブルについてのテーブルロック状況を記憶・管理するものである。図4にテーブルロック管理表112aの一例を示す。図4に示すように、テーブルロック管理表112aは、テーブル名,実行中のトランザクションのトランザクションID,ロック状況という情報を保持する。トランザクションIDは、仲介装置200で生成されクエリに付与されたものである。このトランザクションIDの欄は、トランザクションは複数並行して実行している場合には複数のトランザクションIDが格納される。ロック状況の欄は、「LOCK」「WAITING」「UNLOCK」という3つの値を取りうる。
「LOCK」は、当該テーブルについて現在LOCK TABLEを実行中のトランザクションが存在することを意味する。テーブルロック管理部112は、テーブルロック管理表112aを参照し、クエリ並べ替え部111から渡されたクエリの対象テーブルが「LOCK」であり、且つ、当該クエリがLOCK TABLEを実行中のトランザクションに属さない場合には、当該クエリをキュー112bに保持する。
「WAITING」は、LOCK TABLEを実行しようとしたが他のトランザクションが実行中であるため、当該LOCK TABLEがキュー112bに保持されている状態を意味する。テーブルロック管理部112は、実行中のトランザクションがLOCK TABLEのトランザクションだけになると、ロック状況を「LOCK」に変更し、LOCK TABLEを実行する。また、LOCK TABLE以外の実行中トランザクションに属するクエリは順次後段の行ロック管理部113に渡す。さらに、新規に開始されるトランザクションのクエリをキュー112bに保持する。
「UNLOCK」は、LOCK TABLEを実行中でもないし、実行待ちでもない状態を意味する。テーブルロック管理部112は、前段のクエリ並べ替え部111から渡されたクエリがLOCK TABLEであり、且つ、他のトランザクションが実行中ならば当該LOCK TABLEの対象テーブルについてテーブルロック管理表112aのロック状況を「WAITING」に変更し、LOCK TABLEをキュー112bにつなぐ。一方、他のトランザクションが実行中でないならば「LOCK」に変更し、LOCK TABLEを行ロック管理部113へ渡す。前段のクエリ並べ替え部111から渡されたクエリがLOCK TABLE以外の場合、テーブルロック管理部112は、当該クエリを行ロック管理部113へ渡す。
行ロック管理部113は、図2に示すように、行ロック管理表113aと、FIFO型のキュー113bとを備えている。行ロック管理部113は、(1)前段のテーブルロック管理部112から渡されたクエリが行ロック競合を起こす可能性がある場合に当該クエリをキュー113bに保存し、行ロック競合を起こす可能性がない場合には当該クエリを後段のCOMMIT実行管理部114に渡し、(2)キュー113bに保存してあるクエリが行ロック競合を起こす可能性がなくなった場合、当該クエリをキュー113bから取り出して後段のCOMMIT実行管理部114に渡す。行ロック管理部113の詳細動作については後述する。
行ロック管理表113aは、DBMS120内の各テーブルについて1つずつ設けられており、各テーブルにおける行ロック状況を記憶・管理するものである。図5に行ロック管理表113aの一例を示す。図5に示すように、行ロック管理表113aは、テーブル内の各行を一意に識別するための行IDと、この行IDで特定される行について行ロックしているトランザクションのトランザクションIDという情報を保持する。行IDは、当該テーブルに設定された主キーであってもよいし、DBMSによってはシステムによって自動付与されたID(例えば、上述のPostgreSQLではOID)であってもよい。
行ロック管理部113は、前段のテーブルロック管理部112から渡されたクエリが、UPDATE,DELETE,SELECT FOR UPDATEの何れかの場合、これらのクエリを実行する前に、SELECTでアクセスする行を検出する。検出方法は、元のクエリのWHERE句を使って行IDを取得し、行ロック管理表113aに蓄積されている行IDと比較する。もし、重複がなければその行IDとトランザクションIDを行ロック管理表113aに登録し、当該クエリを後段のCOMMIT実行管理部114に渡し、重複があれば行ロック競合が生じる可能性があるため当該クエリをキュー113bに保持する。前段のテーブルロック管理部112から渡されたクエリが、UPDATE等でない場合には、当該クエリを後段のCOMMIT実行管理部114に渡す。
COMMIT実行管理部114は、図2に示すように、COMMIT実行管理表114aと、FIFO型のキュー114bとを備えている。COMMIT実行管理部114は、(1)前段の行ロック管理部113から渡されたクエリが他のクエリとの間で実行順序の先後で処理結果が異なる可能性がある場合に当該クエリーをキュー114bに保存し、それ以外の場合には当該クエリを後段のクエリ実行管理部115に渡し、(2)キュー114bに保存してあるクエリを実行しても処理結果が一意に決定できる場合、当該クエリをキュー114bから取り出して後段のクエリ実行管理部115に渡す。COMMIT実行管理部114の詳細動作については後述する。
COMMIT実行管理表114aは、DBMS120内の各テーブルについて1つずつ設けられており、各テーブルにおけるトランザクションのCOMMIT状況を記憶・管理するものである。図6にCOMMIT実行管理表114aの一例を示す。図6に示すように、COMMIT実行管理表114aは、COMMITの実行状況と、現在実行中の対象クエリ数を表す対象クエリカウンタという情報を保持する。COMMIT状況は、COMMITを実行中であることを示す「COMMIT」と、他の対象クエリが実行中であるため実行待ちの状態であることを示す「WAITING」と,実行中でも実行待ちでもない状態を示す「NULL」という3つの値を取りうる。対象クエリカウンタは、現在実行中の対象クエリ数に応じて増減し、0の時にCOMMITを実行できる状態となることを意味する。なお、ここで対象クエリとは、前述したように、COMMIT,UPDATE,DELETE,SELECT FOR UPDATE,SELECT,SET TRANSACTION ISOLATION LEVEL SERIALIZABLEである。
クエリ実行管理部115は、前段のCOMMIT実行管理部114から渡されたクエリを順次DBMS120に投入し、DBMS120でのクエリの処理結果に応じてクエリ完了情報116を更新する。
クエリ完了情報116の一例を図7に示す。図7に示すように、クエリ完了情報116は、COMMIT実行管理対象フラグ、COMMIT完了フラグ、終了したトランザクションIDという3つの情報を保持する。COMMIT実行管理対象フラグは、COMMIT実行管理の対象のクエリ(COMMIT,UPDATE,DELETE,SELECT FOR UPDATE,SELECT,SET TRANSACTION ISOLATION LEVEL SERIALIZABLE)の実行が完了した時に、クエリ実行管理部115により「ON」に更新され、またCOMMIT実行管理部114により「OFF」に更新される。COMMIT完了フラグは、COMMITクエリの実行が完了した時に、クエリ実行管理部115により「ON」に更新され、またCOMMIT実行管理部114により「OFF」に更新される。終了したトランザクションIDは、COMMITクエリの実行が完了した時に、当該クエリの属するトランザクションIDがクエリ実行管理部115によって追加され、またテーブルロック管理部112及び行ロック管理部113がそれぞれ独立して削除を行う。このため、終了したトランザクションIDは、それぞれテーブルロック管理部112及び行ロック管理部113に対応して2つのフィールドで管理する。
次に、実行順序制御部110のテーブルロック管理部112・行ロック管理部113・COMMIT実行管理部114・クエリ実行管理部115の動作についてフローチャートを参照して詳述する。
まず、図8〜図13のフローチャートを参照してテーブルロック管理部112の動作について説明する。
図8に示すように、テーブルロック管理部112は、所定の初期化処理を行うと(ステップS1)、終了したトランザクションが存在するか否か(ステップS2)、及び、前段のクエリ並べ替え部111からクエリを受信したか否かを監視し(ステップS3)、それぞれのイベント検出により以下の動作を行う。
テーブルロック管理部112は、クエリ完了情報116を参照してトランザクションの終了を検出した場合(ステップS2)、テーブルロック管理表112a及びクエリ完了情報116から当該トランザクションのIDを削除する(ステップS4)。このステップS4で削除したトランザクションが処理対象としていたテーブルについて、テーブルロック管理表112aのロック状況が「UNLOCK」であった場合(ステップS5)、前記イベント検出の処理(ステップS2,S3)に戻る。
一方、前記ステップS4で削除したトランザクションが処理対象としていたテーブルについて、テーブルロック管理表112aのロック状況が「LOCK」であった場合(ステップS6)、図9に示すように、当該ロック状況を「UNLOCK」に更新する(ステップS7)。なお、このケースは、LOCK TABLEクエリを実行したトランザクションのみが実行されていた状況で、且つ、そのトランザクションがちょうど終了した状態である。次に、テーブルロック管理部112は、キュー112bが空になるまで(ステップS8)、当該キュー112bの先頭から順にクエリを取り出す(ステップS9)。取り出したクエリがLOCK TABLEクエリであり(ステップS10)且つ当該クエリの対象テーブルに対する他のトランザクションが無い場合には(ステップS11)、当該クエリの対象テーブルについてテーブルロック管理表112aのロック状況を「LOCK」に更新するとともに(ステップS12)、当該クエリを後段の行ロック管理部113へ渡し(ステップS13)、前記イベント検出の処理(ステップS2,S3)に戻る。当該クエリの対象テーブルに対する他のトランザクションが存在する場合には(ステップS11)、テーブルロック管理表112aのロック状況を「WAITING」に更新し(ステップS14)、前記イベント検出の処理(ステップS2,S3)に戻る。前記ステップS9で取り出したクエリがBEGINクエリの場合(ステップS10,S15)、取り出したクエリの属するトランザクションのIDをテーブルロック管理表112aに登録し(ステップS16)、当該クエリを後段の行ロック管理部113へ渡し(ステップS17)、キュー112bからのクエリの取り出し処理に(ステップS8,S9)に戻る。前記ステップS9で取り出したクエリがその他のものの場合(ステップS10,S15)、当該クエリを後段の行ロック管理部113へ渡し(ステップS17)、キュー112bからのクエリの取り出し処理に(ステップS8,S9)に戻る。
他方、前記ステップS4で削除したトランザクションが処理対象としていたテーブルについて、テーブルロック管理表112aのロック状況が「LOCK」でなかった場合(ステップS6)、すなわちロック状況が「WAITING」の場合には、キュー112bの先頭はLOCK TABLEクエリが存在していることになる。この場合、テーブルロック管理部112は図10に示すように、キュー112bの先頭のLOCK TABLEクエリのトランザクションだけが、ロック状況が「WAITING」となっている当該対象テーブルに対してトランザクション実行中であれば(ステップS18)、当該ロック状況を「LOCK」に更新し(ステップS19)、キュー112bの先頭からLOCK TABLEクエリを取り出して後段の行ロック管理部113へ渡す(ステップS20)。当該処理の後に、前記イベント検出の処理(ステップS2,S3)に戻る。
テーブルロック管理部112は、前段のクエリ並べ替え部111からのクエリ受信を検出すると(ステップS3)、図8に示すように、当該受信クエリがROLLBACKクエリの場合には(ステップS21)、受信クエリが属するトランザクションのIDを終了したトランザクションIDとしてクエリ完了情報116に登録する(ステップS22)。
次に、受信クエリの対象となるテーブルについてテーブルロック管理表112aのロック状況が「LOCK」の場合には(ステップS23)、図11に示すように、受信クエリが現在実行中のトランザクションに属していれば、当該クエリを後段の行ロック管理部113に渡し(ステップS24,S25)、他のトランザクションに属していれば当該クエリをキュー112bに保持する(ステップS24,S26)。当該処理の後に、前記イベント検出の処理(ステップS2,S3)に戻る。
一方、受信クエリの対象となるテーブルについてテーブルロック管理表112aのロック状況が「WAITING」の場合には(ステップS27)、図12に示すように、当該受信クエリがBEGIN又はLOCK TABLEであれば(ステップS28)、当該クエリをキュー112bに保持し(ステップS29)、それ以外の場合には当該クエリを後段の行ロック管理部113に渡す(ステップS30)。当該処理の後に、前記イベント検出の処理(ステップS2,S3)に戻る。
一方、受信クエリの対象となるテーブルについてテーブルロック管理表112aのロック状況が「WAITING」でない場合(ステップS27)、すなわち、ロック状況が「UNLOCK」の場合、図13に示すように、受信クエリがLOCK TABLEであり(ステップS31)、且つ、その対象テーブルに対する他のトランザクションが存在しない場合には(ステップS32)、当該対象テーブルについてのテーブルロック管理表112aのロック状況を「LOCK」に更新し(ステップS33)、当該クエリを後段の行ロック管理部113に渡す(ステップS34)。受信クエリがLOCK TABLEであるが(ステップS31)、その対象テーブルに対する他のトランザクションが存在する場合には(ステップS32)、当該クエリをキュー112bに保持し(ステップS35)、当該クエリの対象テーブルについてテーブルロック管理表112aのロック状況を「WAITING」に更新する(ステップS36)。受信クエリがBEGINの場合には(ステップS37)、テーブルロック管理表112aに当該クエリの属するトランザクションIDを登録するとともに(ステップS38)、当該クエリを後段の行ロック管理部113に渡す(ステップS34)。それ以外の受信クエリはそのまま後段の行ロック管理部113に渡す(ステップS34)。これらの処理の後に、前記イベント検出の処理(ステップS2,S3)に戻る。
次に、図14〜図15のフローチャートを参照して行ロック管理部113の動作について説明する。
図14に示すように、行ロック管理部113は、所定の初期化処理を行うと(ステップS101)、終了したトランザクションが存在するか否か(ステップS102)、及び、前段のテーブルロック管理部112からクエリを受信したか否かを監視し(ステップS103)、それぞれのイベント検出により以下の動作を行う。
行ロック管理部113は、トランザクションの終了を検出した場合(ステップS102)、行ロック管理表113a及びクエリ完了情報116から当該トランザクションのIDを持つ行を全て削除する(ステップS104)。次に、行ロック管理部113のキュー113b内の位置を指し示すポインタを当該キュー113bの先頭に設定する(ステップS105)。そして、当該ポインタの示す位置にクエリが存在するかを確認し(ステップS106)、クエリがない場合には前記イベント検出の処理(ステップS102,S103)に戻る。一方、クエリがある場合には、当該クエリをキュー113bから取り出し(ステップ107)、当該クエリの行IDが行ロック管理表113aに登録されているかを判定する(ステップS108)。登録されていない場合、当該クエリの行IDとトランザクションIDを行ロック管理表113aに登録するとともに(ステップS109)、当該クエリを後段のCOMMIT実行管理部114に渡し(ステップS110)、ポインタを1つ進めて処理を前記ステップS106に移す(ステップS111)。一方、当該クエリの行IDが行ロック管理表113aに登録されていない場合には、ポインタを1つ進めて処理を前記ステップS106に移す(ステップS111)。
行ロック管理部113は、前段のテーブルロック管理部112からのクエリを受信すると(ステップS103)、該クエリが行ロック管理部113の管理対象クエリであるかを判定し(ステップS112)、対象クエリでない場合には受信クエリを後段のCOMMIT実行管理部114に渡し(ステップS113)、前記イベント検出の処理(ステップS102,S103)に戻る。なお、ここで対象クエリとは、図3を参照して前述したように、UPDATE,DELETE,SELECT FOR UPDATEである。
前段のテーブルロック管理部112からの受信クエリが対象クエリの場合(ステップS112)、行ロック管理部113は、図15に示すように、当該対象クエリのWHERE句を流用して行IDを取得するSELECT文を生成する(ステップS114)。次に、当該SELECT文を後段のCOMMIT実行管理部114に渡し(ステップS115)、その処理結果から対象クエリが更新対象(行ロック対象)とする行の行IDを取得する(ステップS116)。次に、該行IDが行ロック管理表113aに登録されているかを判定し(ステップS117)、登録済の場合には行ロック競合が生じないよう当該対象クエリをキュー113bに保持する(ステップS118)。一方、未登録ならば取得した行ID及び対象クエリのトランザクションIDを行ロック管理表113aに登録するとともに(ステップS119)、当該クエリを後段のCOMMIT実行管理部114に渡す(ステップS120)。以上の処理の後、前記イベント検出の処理(ステップS102,S103)に戻る。
次に、図16〜図20のフローチャートを参照してCOMMIT実行管理部114の動作について説明する。
図16に示すように、テーブルロック管理部112は、所定の初期化処理を行うと(ステップS201)、対象クエリ又はCOMMITクエリが終了したか否か(ステップS202)、及び、前段の行ロック管理部113からクエリを受信したか否かを監視し(ステップS203)、それぞれのイベント検出により以下の動作を行う。なお、ここで対象クエリとは、図3を参照して前述したように、COMMIT,UPDATE,DELETE,SELECT FOR UPDATE,SELECT,SET TRANSACTION ISOLATION LEVEL SERIALIZABLEである。また、対象クエリ又はCOMMITクエリの終了検出は、クエリ完了情報116のCOMMIT実行管理対象フラグ及びCOMMIT完了フラグをそれぞれ監視すればよい。
COMMIT実行管理部114は、対象クエリ又はCOMMITクエリの終了を検出した場合(ステップS202)、クエリ完了情報116のCOMMIT実行管理対象フラグ又はCOMMIT完了フラグをOFFに更新する(ステップS204)。次に、COMMIT実行管理表114aのCOMMIT状況が「COMMIT」であるかを判定する(ステップS205)。
COMMIT実行管理表114aのCOMMIT状況が「COMMIT」の場合は、COMMITクエリのみが実行されていた状況で、そのCOMMITクエリが終了した状況を意味する。この場合、COMMIT実行管理部114は、図17に示すように、まずCOMMIT状況を「NULL」に更新する(ステップS206)。
次いで、COMMIT実行管理部114は、キュー114bが空であるかを判定し(ステップS207)、キュー114bが空の場合には前記イベント検出の処理(ステップS202,S203)に戻る。キュー114bにクエリが保持されている場合、当該キュー114bの先頭がCOMMITクエリでないならば(ステップS208)、COMMIT実行管理表114aの対象クエリカウンタを1増加させ(ステップS209)、当該クエリをキュー114bから取り出して後段のクエリ実行管理部115に渡し(ステップS210)、処理をステップS207に移す。
一方、当該キュー114bの先頭がCOMMITクエリの場合(ステップS208)、COMMIT実行管理表114aの対象クエリカウンタが0でないならば(ステップS211)、COMMIT実行管理表113aのCOMMIT状況を「WAITING」に更新し(ステップS212)、前記イベント検出の処理(ステップS202,S203)に戻る。COMMIT実行管理表114aの対象クエリカウンタが0の場合には(ステップS211)、COMMIT状況を「COMMIT」に更新し(ステップS213)、当該COMMITクエリをキュー114bから取り出して後段のクエリ実行管理部115に渡す(ステップS214)。これらの処理の後、前記イベント検出の処理(ステップS202,S203)に戻る。
前記ステップS205において、COMMIT実行管理表114aのCOMMIT状況が「COMMIT」でない場合は、図16に示すように、COMMIT実行管理表114aの対象クエリカウンタを1減少させる(ステップS215)。次いで、現在のCOMMIT状況が「NULL」の場合は(ステップS216)、前記イベント検出の処理(ステップS202,S203)に戻る。
前記ステップS216において、現在のCOMMIT状況が「NULL」でない場合、すなわちCOMMIT状況が「WAITING」の場合、COMMIT実行管理部114のキュー114bの先頭はCOMMITクエリとなっている。COMMIT実行管理部114は、図18に示すように、COMMIT実行管理表114aの対象クエリカウンタが0でないならば(ステップS217)、前記イベント検出の処理(ステップS202,S203)に戻る。対象クエリカウンタが0の場合には(ステップS217)、キュー114bの先頭からCOMMITクエリを取り出し(ステップS218)、COMMIT状況を「COMMIT」に更新し(ステップS219)、当該COMMITクエリを後段のクエリ実行管理部115へ渡す(ステップS220)。これらの処理の後、前記イベント検出の処理(ステップS202,S203)に戻る。
COMMIT実行管理部114は、前段の行ロック管理部113からのクエリを受信すると(ステップS203)、図16に示すように、まずCOMMIT実行管理表114aのCOMMIT状況が「NULL」であるかを判定する(ステップS221)。
COMMIT状況が「NULL」の場合、図19に示すように、受信クエリが前記対象クエリでないならば(ステップS222)、当該受信クエリを後段のクエリ実行管理部115へ渡し(ステップS223)、前記イベント検出の処理(ステップS202,S203)に戻る。受信クエリが前記対象クエリであり(ステップS222)、且つ、COMMIT以外の場合には(ステップS224)、COMMIT実行管理表114aの対象クエリカウンタを1増加させ(ステップS225)、当該受信クエリを後段のクエリ実行管理部115に渡し(ステップS226)、前記イベント検出の処理(ステップS202,S203)に戻る。
受信クエリがCOMMITの場合には(ステップS224)、COMMIT実行管理表114aの対象クエリカウンタが0か否かを判定する(ステップS227)。対象クエリカウンタが0の場合、COMMIT状況を「COMMIT」に更新し(ステップS228)、当該COMMITクエリを後段のクエリ実行管理部115へ渡し(ステップS229)、前記イベント検出の処理(ステップS202,S203)に戻る。対象クエリカウンタが0でない場合、COMMIT実行管理部114のキュー114bに当該COMMITクエリを保持し(ステップS230)、COMMIT実行管理表114aのCOMMIT状況を「WAITING」に更新し(ステップS231)、前記イベント検出の処理(ステップS202,S203)に戻る。
前記ステップS221においてCOMMIT状況が「NULL」でない場合、図20に示すように、受信クエリが前記対象クエリならば(ステップS232)、当該受信クエリをCOMMIT実行管理部114のキュー114bに保持し(ステップS233)、受信クエリが前記対象クエリでないならば(ステップS232)、当該受信クエリを後段のクエリ実行管理部115に渡す(ステップS234)。これらの処理の後、前記イベント検出の処理(ステップS202,S203)に戻る。
次に、図21のフローチャートを参照してクエリ実行管理部115の動作について説明する。
図21に示すように、クエリ実行管理部115は、所定の初期化処理を行うと(ステップS301)、実行するクエリがあるか否かの監視、具体的には前段のCOMMIT実行管理部114からクエリを受信したか否かの監視(ステップS302)、対象クエリの実行が完了したか否かの監視(ステップS303)、COMMITクエリの実行が完了した否かの監視(ステップS304)を行い、それぞれのイベント検出により以下の動作を行う。
クエリ実行管理部115は、前段のCOMMIT実行管理部114からのクエリ受信を検出すると(ステップS302)、当該受信クエリをDBMS120に投入する(ステップS305)。
また、クエリ実行管理部115は、対象クエリの実行完了を検出すると(ステップS303)、クエリ完了情報116のCOMMIT実行管理対象フラグを「ON」に更新する(ステップS306)。なお、ここでの対象クエリは、COMMIT,UPDATE,DELETE,SELECT FOR UPDATE,SET TRANSACTION ISOLATION LEVELである。
さらに、クエリ実行管理部115は、COMMITクエリの実行完了を検出すると(ステップS304)、つまりトランザクションの終了を検出すると、クエリ完了情報116のCOMMIT完了フラグを「ON」に更新する(ステップS307)。
このような実行順序制御部110の処理により、各サーバ100のDBMS120に投入されるクエリの順序は各サーバ100間で同じものとなり、且つ、DBMS120に投入されたクエリの実行によって処理結果が一意となるので、各サーバ100の同期を図ることができる。
以上、本発明の実施形態について詳述したが、上記実施の形態は例示的なものであり、本発明はこれに限定されるものではない。本発明の範囲は特許請求の範囲に示されており、この特許請求の範囲の意味に入る全ての変形例は本発明に含まれるものである。
例えば、各DBMS120は要求に応じて同じ応答をするならば同じ実装である必要はない。すなわち、バージョン、仕様、プログラム言語、コンパイラの種類、コンパイラオプション、ハードウェアかソフトウェアか、などが異なっていてもよい。サーバには、PostgreSQLなどのフリーソフトウェアやOracleなどの市販のソフトウェア、独自開発のソフトウェア、いずれを使ってもよい。また、それらが混在していてもよい。例えば、サーバ100aのDBMS120aはPostgreSQLで、サーバ100bのDBMS120bはOracleでも良い。
また、上記実施の形態では、サーバはパソコン上のソフトウェアで実現しているが、ハードウェアで実装しても良い。
さらに、上記実施の形態では、仮想サーバ400に含まれる仲介装置200は1台のみであったが、複数台設けて冗長性を持たせることにより、より可用性の高い構成とすることも可能である。仲介装置を多重化させる技術については、例えば本願出願人による特開2003−345679号公報に記載されたものなどを用いればよい。
100…データベースサーバ、110…実行順序制御部、111…クエリ並べ替え部、112…テーブルロック管理部、113…行ロック管理部、114…COMMIT実行管理部、115…クエリ実行管理部、116…クエリ完了情報、120…DBMS、200…仲介装置、300…クライアント。
Claims (9)
- 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、各データベースサーバを同期化する方法であって、
各データベースサーバは、仲介装置から受信した処理要求の実行順序を制御する実行順序制御手段と、実行順序制御手段で順序制御された処理要求を実行するデータベース管理システムとを備え、
仲介装置が、クライアントから受信した処理要求に順序番号を付して各データベースサーバに転送するステップと、
各データベースサーバの実行順序制御手段が、
(a)仲介装置から受信した処理要求を該処理要求に付された順序番号にしたがって並べ替えるステップと、
(b)並び替えられた処理要求について、順序番号順に、(イ)処理要求の実行によりデータベース管理システムにおいてロック競合が生じる可能性があるか否かを判定し、(ロ)ロック競合が生じる可能性がある場合には該処理要求を所定の記憶手段に記憶し、(ハ)ロック競合が生じる可能性がない場合にはデータベース管理システムに転送するステップと、
(c)前記記憶手段に記憶されている処理要求がロック競合を起こす可能性がなくなると該処理要求をデータベース管理システムに転送するステップとを備えた
ことを特徴とする多重化データベースシステムにおける同期化方法。 - 各データベースサーバの実行順序制御手段が、
(d)並び替えられた処理要求について、順序番号順に、(イ)第1の処理要求と該第1の処理要求より新しい順序番号を有する第2の処理要求との間で各処理要求の実行順序の先後により処理結果が異なる可能性があるか否かを判定し、(ロ)処理結果が異なる可能性がない場合には各処理要求をデータベース管理システムに転送し、(ハ)処理結果が異なる可能性がある場合には前記第1の処理要求をデータベース管理システムに転送するとともに、前記第2の処理要求を所定の記憶手段に記憶するステップと、
(e)前記記憶手段に記憶されている第2の処理要求に対応する第1の処理要求の実行がデータベース管理システムにおいて完了すると、該第2の処理要求をデータベース管理システムに転送するステップとを備えた
ことを特徴とする請求項1記載の多重化データベースシステムにおける同期化方法。 - 前記(b)の(イ)のステップは、テーブルロックが生じる可能性を判定するステップと、行レベルロックが生じる可能性を判定するステップを含む
ことを特徴とする請求項1記載の多重化データベースシステムにおける同期化方法。 - 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、
各データベースサーバは、仲介装置から受信した処理要求の実行順序を制御する実行順序制御手段と、実行順序制御手段で順序制御された処理要求を実行するデータベース管理システムとを備え、
仲介装置は、クライアントから受信した処理要求に順序番号を付して各データベースサーバに転送する制御手段を備え、
各データベースサーバの実行順序制御手段は、
(a)仲介装置から受信した処理要求を該処理要求に付された順序番号にしたがって並べ替える手段と、
(b)並び替えられた処理要求について、順序番号順に、(イ)処理要求の実行によりデータベース管理システムにおいてロック競合が生じる可能性があるか否かを判定し、(ロ)ロック競合が生じる可能性がある場合には該処理要求を所定の記憶手段に記憶し、(ハ)ロック競合が生じる可能性がない場合にはデータベース管理システムに転送する手段と、
(c)前記記憶手段に記憶されている処理要求がロック競合を起こす可能性がなくなると該処理要求をデータベース管理システムに転送する手段とを備えた
ことを特徴とする多重化データベースシステム。 - 各データベースサーバの実行順序制御手段は、
(d)並び替えられた処理要求について、順序番号順に、(イ)第1の処理要求と該第1の処理要求より新しい順序番号を有する第2の処理要求との間で各処理要求の実行順序の先後により処理結果が異なる可能性があるか否かを判定し、(ロ)処理結果が異なる可能性がない場合には各処理要求をデータベース管理システムに転送し、(ハ)処理結果が異なる可能性がある場合には前記第1の処理要求をデータベース管理システムに転送するとともに、前記第2の処理要求を所定の記憶手段に記憶する手段と、
(e)前記記憶手段に記憶されている第2の処理要求に対応する第1の処理要求の実行がデータベース管理システムにおいて完了すると、該第2の処理要求をデータベース管理システムに転送する手段とを備えた
ことを特徴とする請求項4記載の多重化データベースシステム。 - 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおけるデータベースサーバであって、
仲介装置から受信した処理要求の実行順序を制御する実行順序制御手段と、
実行順序制御手段で順序制御された処理要求を実行するデータベース管理システムとを備え、
前記実行順序制御手段は、
(a)仲介装置から受信した処理要求を、仲介装置によって該処理要求に付された順序番号にしたがって並べ替える手段と、
(b)並び替えられた処理要求について、順序番号順に、(イ)処理要求の実行によりデータベース管理システムにおいてロック競合が生じる可能性があるか否かを判定し、(ロ)ロック競合が生じる可能性がある場合には該処理要求を所定の記憶手段に記憶し、(ハ)ロック競合が生じる可能性がない場合にはデータベース管理システムに転送する手段と、
(c)前記記憶手段に記憶されている処理要求がロック競合を起こす可能性がなくなると該処理要求をデータベース管理システムに転送する手段とを備えた
ことを特徴とするデータベースサーバ。 - 前記実行順序制御手段は、
(d)並び替えられた処理要求について、順序番号順に、(イ)第1の処理要求と該第1の処理要求より新しい順序番号を有する第2の処理要求との間で各処理要求の実行順序の先後により処理結果が異なる可能性があるか否かを判定し、(ロ)処理結果が異なる可能性がない場合には各処理要求をデータベース管理システムに転送し、(ハ)処理結果が異なる可能性がある場合には前記第1の処理要求をデータベース管理システムに転送するとともに、前記第2の処理要求を所定の記憶手段に記憶する手段と、
(e)前記記憶手段に記憶されている第2の処理要求に対応する第1の処理要求の実行がデータベース管理システムにおいて完了すると、該第2の処理要求をデータベース管理システムに転送する手段とを備えた
ことを特徴とする請求項6記載のデータベースサーバ。 - 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおけるデータベースサーバを実現するプログラムであって、
コンピュータを、
(a)仲介装置から受信した処理要求を、仲介装置によって該処理要求に付された順序番号にしたがって並べ替え、
(b)並び替えられた処理要求について、順序番号順に、(イ)処理要求の実行によりデータベース管理システムにおいてロック競合が生じる可能性があるか否かを判定し、(ロ)ロック競合が生じる可能性がある場合には該処理要求を所定の記憶手段に記憶し、(ハ)ロック競合が生じる可能性がない場合にはデータベース管理システムに転送し、
(c)前記記憶手段に記憶されている処理要求がロック競合を起こす可能性がなくなると該処理要求をデータベース管理システムに転送する実行順序制御手段と、
実行順序制御手段で順序制御された処理要求を実行するデータベース管理システムとして機能させる
ことを特徴とするデータベースサーバプログラム。 - 前記実行順序制御手段は、
(d)並び替えられた処理要求について、順序番号順に、(イ)第1の処理要求と該第1の処理要求より新しい順序番号を有する第2処理要求との間で各処理要求の実行順序の先後により処理結果が異なる可能性があるか否かを判定し、(ロ)処理結果が異なる可能性がない場合には各処理要求をデータベース管理システムに転送し、(ハ)処理結果が異なる可能性がある場合には前記第1の処理要求をデータベース管理システムに転送するとともに、前記第2の処理要求を所定の記憶手段に記憶し、
(e)前記記憶手段に記憶されている第2の処理要求に対応する第1の処理要求の実行がデータベース管理システムにおいて完了すると、該第2の処理要求をデータベース管理システムに転送する手段を備える
ことを特徴とする請求項8記載のデータベースサーバプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006036256A JP2007219598A (ja) | 2006-02-14 | 2006-02-14 | 多重化データベースシステム及びその同期化方法、データベースサーバ、並びに、データベースサーバプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006036256A JP2007219598A (ja) | 2006-02-14 | 2006-02-14 | 多重化データベースシステム及びその同期化方法、データベースサーバ、並びに、データベースサーバプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007219598A true JP2007219598A (ja) | 2007-08-30 |
Family
ID=38496868
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006036256A Withdrawn JP2007219598A (ja) | 2006-02-14 | 2006-02-14 | 多重化データベースシステム及びその同期化方法、データベースサーバ、並びに、データベースサーバプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007219598A (ja) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4462504B1 (ja) * | 2009-09-23 | 2010-05-12 | 修平 西山 | 一貫性保持の起点となるトランザクション・プロセスが所有する更新アクセス・カウンタによるマルチ・トランザクション制御システム |
WO2010134437A1 (ja) * | 2009-05-18 | 2010-11-25 | Nishiyama Shuhei | 仮想単一メモリストレージ上におけるメタ情報共有型分散データベース・システム |
WO2017077616A1 (ja) * | 2015-11-05 | 2017-05-11 | 株式会社Murakumo | データベースシステム、トランザクション管理ノード、方法およびプログラム |
WO2018203376A1 (ja) * | 2017-05-01 | 2018-11-08 | 株式会社Murakumo | データベースシステム、方法およびプログラム |
US10165086B2 (en) | 2013-09-04 | 2018-12-25 | Kabushiki Kaisha Toshiba | Information processing system, server apparatus, information processing method, and computer program product |
JP6694203B1 (ja) * | 2019-01-23 | 2020-05-13 | 株式会社Scalar | 改ざん検知性を有するシステム |
WO2020153452A1 (ja) * | 2019-01-23 | 2020-07-30 | 株式会社Scalar | 改ざん検知性を有するシステム |
CN114297291A (zh) * | 2021-12-09 | 2022-04-08 | 武汉达梦数据库股份有限公司 | 一种基于事务合并的并行执行方法及设备 |
-
2006
- 2006-02-14 JP JP2006036256A patent/JP2007219598A/ja not_active Withdrawn
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010134437A1 (ja) * | 2009-05-18 | 2010-11-25 | Nishiyama Shuhei | 仮想単一メモリストレージ上におけるメタ情報共有型分散データベース・システム |
US8140498B2 (en) | 2009-05-18 | 2012-03-20 | Shuhei Nishiyama | Distributed database system by sharing or replicating the meta information on memory caches |
CN102725739A (zh) * | 2009-05-18 | 2012-10-10 | 西山修平 | 虚拟单一存储装置上的元信息共享型分布式数据库系统 |
JP4462504B1 (ja) * | 2009-09-23 | 2010-05-12 | 修平 西山 | 一貫性保持の起点となるトランザクション・プロセスが所有する更新アクセス・カウンタによるマルチ・トランザクション制御システム |
JP2011070242A (ja) * | 2009-09-23 | 2011-04-07 | Shuhei Nishiyama | 一貫性保持の起点となるトランザクション・プロセスが所有する更新アクセス・カウンタによるマルチ・トランザクション制御システム |
US10165086B2 (en) | 2013-09-04 | 2018-12-25 | Kabushiki Kaisha Toshiba | Information processing system, server apparatus, information processing method, and computer program product |
JPWO2017077616A1 (ja) * | 2015-11-05 | 2018-08-16 | 株式会社Murakumo | データベースシステム、トランザクション管理ノード、方法およびプログラム |
WO2017077616A1 (ja) * | 2015-11-05 | 2017-05-11 | 株式会社Murakumo | データベースシステム、トランザクション管理ノード、方法およびプログラム |
WO2018203376A1 (ja) * | 2017-05-01 | 2018-11-08 | 株式会社Murakumo | データベースシステム、方法およびプログラム |
JPWO2018203376A1 (ja) * | 2017-05-01 | 2020-03-12 | 株式会社Murakumo | データベースシステム、方法およびプログラム |
JP6694203B1 (ja) * | 2019-01-23 | 2020-05-13 | 株式会社Scalar | 改ざん検知性を有するシステム |
WO2020153452A1 (ja) * | 2019-01-23 | 2020-07-30 | 株式会社Scalar | 改ざん検知性を有するシステム |
CN113287099A (zh) * | 2019-01-23 | 2021-08-20 | 株式会社斯凯拉 | 具有篡改检测性的系统 |
EP3916573A4 (en) * | 2019-01-23 | 2022-10-19 | Scalar, Inc | SYSTEM WITH TAMPER PROOF FEATURE |
CN114297291A (zh) * | 2021-12-09 | 2022-04-08 | 武汉达梦数据库股份有限公司 | 一种基于事务合并的并行执行方法及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10503699B2 (en) | Metadata synchronization in a distrubuted database | |
US7523110B2 (en) | High availability designated winner data replication | |
US7613740B2 (en) | Control of a data replication engine using attributes associated with a transaction | |
US6012059A (en) | Method and apparatus for replicated transaction consistency | |
US5434994A (en) | System and method for maintaining replicated data coherency in a data processing system | |
JP2007219598A (ja) | 多重化データベースシステム及びその同期化方法、データベースサーバ、並びに、データベースサーバプログラム | |
CN102257494B (zh) | 选择性的数据库复制方法 | |
US10185632B2 (en) | Data synchronization with minimal table lock duration in asynchronous table replication | |
US8688634B2 (en) | Asynchronous peer-to-peer data replication | |
US6938070B2 (en) | Conflict resolution for collaborative work system | |
Kemme et al. | Database replication: a tale of research across communities | |
EP2208148B1 (en) | System and method for replication and synchronisation | |
US20020059299A1 (en) | System and method for synchronizing databases | |
US20080059469A1 (en) | Replication Token Based Synchronization | |
US20060173850A1 (en) | Method and apparatus for collision resolution in an asynchronous database system | |
CN109923534A (zh) | 对具有未提交事务的数据库记录的多版本并发控制 | |
CA2375376A1 (en) | Collision avoidance in bidirectional database replication | |
JP2004295540A (ja) | トランザクション同期方法、データベースシステム及びデータベース装置 | |
US20180165341A1 (en) | Data replicating systems and data replicating methods | |
US8719313B2 (en) | Distributed data store with a designated master to ensure consistency | |
US9563521B2 (en) | Data transfers between cluster instances with delayed log file flush | |
US20110088013A1 (en) | Method and system for synchronizing software modules of a computer system distributed as a cluster of servers, application to data storage | |
US6799172B2 (en) | Method and system for removal of resource manager affinity during restart in a transaction processing system | |
CN112800060A (zh) | 数据处理方法、装置、计算机可读存储介质及电子设备 | |
JPH11249943A (ja) | 分散型データベースの同期管理システムおよび同期管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20070808 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20070809 |