JP2012014502A - トランザクションを集約して処理する方法、システム、およびプログラム - Google Patents

トランザクションを集約して処理する方法、システム、およびプログラム Download PDF

Info

Publication number
JP2012014502A
JP2012014502A JP2010150989A JP2010150989A JP2012014502A JP 2012014502 A JP2012014502 A JP 2012014502A JP 2010150989 A JP2010150989 A JP 2010150989A JP 2010150989 A JP2010150989 A JP 2010150989A JP 2012014502 A JP2012014502 A JP 2012014502A
Authority
JP
Japan
Prior art keywords
client
transaction
database
query
sql
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.)
Granted
Application number
JP2010150989A
Other languages
English (en)
Other versions
JP5536568B2 (ja
Inventor
Hiroshi Horii
洋 堀井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2010150989A priority Critical patent/JP5536568B2/ja
Priority to US13/172,142 priority patent/US8527501B2/en
Publication of JP2012014502A publication Critical patent/JP2012014502A/ja
Application granted granted Critical
Publication of JP5536568B2 publication Critical patent/JP5536568B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2336Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】 トランザクションを集約して処理する方法、システム、およびプログラムを提供することである。
【解決手段】上記課題を解決するために第1の態様として、コンピュータの処理により、データベースにアクセスして、複数の照会クエリを含むトランザクションを集約する方法であって、前記コンピュータが前記データベースと接続され、複数クライアントから複数トランザクションを受信するステップと、前記複数トランザクション中の照会クエリを集約し、集約トランザクションとしてデータベースに送信するステップを有する。
【選択図】図1

Description

本発明はトランザクションの処理方法に関し、特に複数の照会クエリを含む集約トランザクションの処理方法、システムに関する。
通常、データベースにおけるトランザクション処理は、一貫した状態のデータベースを維持するよう設計されている。相互依存のある複数の操作が全て完了するか、全てキャンセルされることを保証している。そのために、ロック、ロールバック、デッドロックの回避の仕組みがある。
ロックとは、特定のデータに対するアクセスや更新を制御することである。特にデータベースへの書き込み処理を行なう際に、データの整合性を保つためにアクセスやデータの読み書きを一時的に制限することである。より具体的には1つの処理がデータXにアクセス中は他の処理がXへアクセスできないように排他制御を行う。1つの処理が2つ以上のSQL文で表される場合にトランザクションを利用する。
トランザクションは一連の処理(複数のSQLからなる照会クエリ)をまとめてコミット(確定)またはロールバック(取り消し)を行うことができる機能で、これを利用すれば1つのSQL文が失敗した場合、同じ処理の別のSQL文をすべて取り消すことができる。ロールバックはつまりトランザクションがコミット前に失敗した場合、データベースをトランザクション開始前の状態に戻す処理である。またデッドロックとは、2つのトランザクションの処理中にデータベース内の同じ部分に同時にアクセスすることで、互いの処理の進行を妨げる現象である。例えば、トランザクションAがデータXにアクセスし、トランザクションBがデータYにアクセスする場合、AがYにアクセスしようとし、BがXにアクセスしようとしたときデッドロックが発生する。この場合どちらのトランザクションも先に進めなくなる。このようなデッドロックを回避するには、両方のトランザクションをキャンセルし、ロールバックする。そして順序を変えて再実行し、デッドロックが再度発生しないようにする。
クライアント数の増加と処理するデータ量の増大に伴い、データベースへのアクセスをより効率化する技術が知られている。特許文献1には、複数のロック制御によって複数のトランザクションの並行的な実行を制御する場合に、連続してなされるロック要求を蓄積し、ロック要求でない要求が出されたとき、この要求を処理する前に、前述の蓄積されたロック要求を一括してデ−タベ−スサ−バヘ送信し、ロック処理することによって送信回数を減少させる技術が開示されている。すなわち複数のトランザクション内でのロック要求をまとめる技術である。
特許文献2には、入力された複数のトランザクションを別々に処理するのではなく、入力された複数のトランザクションが処理を行うデータ項目に対して、そのデータ項目を一度だけ検索し、検索したデータ項目に対して、複数のトランザクションの更新処理を順次メインメモリ内で行い、最後に更新した結果だけをデータベースに一度だけ書き込む手法を開示している。すなわち複数のトランザクションの更新をまとめる技術である。
上記従来の方法は複数のトランザクションを1つにまとめて集約してデータベースに問い合わせる方法を採っていない。その理由は、複数のトランザクション(照会クエリ)に存在するSQL文を集約する方法が難しいことと、またSQLの集約が可能になったとしても、データベースに集約照会をした時に、照会したデータを更新するトランザクションが1つでも発生した場合、必然的にデッドロックが発生するからである。なお本発明ではトランザクションの分離レベルを「再読み込み可能読み取り」(REPEATABLEREAD)とする。この分離レベルではトランザクションにおいて対象となるすべてのテーブルの対象データがトランザクション実行中に変更されないことが保証される。
特開1993−0108452 特開2009−0271665
本発明が解決しようとする課題は、データベース・クライアントがトランザクション処理をデータベースに要求する際に、一部の照会クエリを、その他のトランザクションの照会クエリと共に、別トランザクション(集約トランザクション)としてデータベースに要求する、集約トランザクションの処理方法、システムを提供することである。
さらに別の課題は、集約トランザクションの処理において、照会クエリを要求した全データベース・クライアントからのコミット要求を受信した時に前記集約トランザクションをコミットする方法、システムを提供することである。
さらに別の課題は、集約トランザクションを処理するにあたり、デッドロックの生じないデータ更新方法、システムを提供することである。
本発明は上記課題を解決するために、コンピュータの処理により、データベースにアクセスして、複数の照会クエリを含むトランザクションを集約する方法であって、前記コンピュータが前記データベースと接続され、複数クライアントから複数トランザクションを受信するステップと、前記複数トランザクション中の照会クエリを集約し、集約トランザクションとしてデータベースに送信するステップと、を有する。
また、前記照会クエリは複数のSQL文からなり、前記データベースに送信するステップが、前記コンピュータが前記トランザクション中の照会クエリを、集合演算子を用いて集約し、集約トランザクションとしてデータベースに送信するステップと、である。
また、前記送信するステップが、集約対象となる照会クエリのSQL文について前記照会クエリを発したクライアントのクライアントIDを対応付けるステップと、前記クライアントIDの型を含む、前記SQL文のデータ型を生成するステップと、複数クライアントからの全てのSQL文について異なるデータの型のみを追加して、集合したデータの型を生成するステップと、前記集合したデータの型の順番となるように各クライアントのSQL文を変換するステップと、前記変換後のSQL文のデータ型と変換前のSQL文のデータ型の対応関係を前記クライアントのクライアントID毎に記憶するステップと、全ての変換後のSQL文を集合演算子を用いて集約してデータベースに送信するステップである
さらに、前記方法が、前記データベースから前記集約トランザクションに対する結果を受信するステップとを有する。
さらに、前記方法が、前記結果を前記複数クライアントの各々トランザクションに対する照会結果に分割して送信するステップを有する。
また、前記分割して送信するステップが、データベースから送信された結果からクライアントIDを判断するステップと、前記記憶した前記変換後のSQLのデータ型と変換前のデータ型の対応関係に基づき、前記クライアントID毎に、変換前のSQL文に対する照会結果に変換するステップと、前記クライアントIDを有するクライアントに照会結果を送信するステップである。
そして、前記方法が、前記集約トランザクションで、クライアントが集約トランザクション経由で照会したデータを更新するステップであって、更新するデータが、集約トランザクションとして照会したかを前記コンピュータに問い合わせるステップと、集約トランザクションとして照会している場合、集約トランザクション経由で処理した照会クエリを、直接トランザクションとして、データベースに処理要求するステップと、前記クライアントからのコミット要求に応じて、更新するデータの更新クエリを直接トランザクションとして、データベースに処理要求するステップを有する。
別の態様として、本発明は、データベースにアクセスして、複数の照会クエリを含むトランザクションを集約するシステムであって、複数クライアントから複数トランザクションを受信する手段と、前記複数トランザクション中の照会クエリを集約し、集約トランザクションとしてデータベースに送信する手段を有する。
また、前記照会クエリは複数のSQL文からなり、前記データベースに送信する手段が、前記システムが前記トランザクション中の照会クエリを、集合演算子を用いて集約し、集約トランザクションとしてデータベースに送信する手段である。
また、前記送信する手段が、集約対象となる照会クエリのSQL文について前記照会クエリを発したクライアントのクライアントIDを対応付ける手段と、前記クライアントIDの型を含む、前記SQL文のデータ型を生成する手段と、複数クライアントからの全てのSQL文について異なるデータの型のみを追加して、集合したデータの型を生成する手段と、前記集合したデータの型の順番となるように各クライアントのSQL文を変換する手段と、前記変換後のSQL文のデータ型と変換前のSQL文のデータ型の対応関係を前記クライアントのクライアントID毎に記憶する手段と、全ての変換後のSQL文を集合演算子を用いて集約してデータベースに送信する手段である。
さらに、前記システムが、前記データベースから前記集約トランザクションに対する結果を受信する手段を有する。
さらに、前記システムが、前記結果を前記複数クライアントの各々トランザクションに対する照会結果に分割して送信する手段を有する。
また、前記分割して送信する手段が、データベースから送信された結果からクライアントIDを判断する手段と、前記記憶した前記変換後のSQLのデータ型と変換前のデータ型の対応関係に基づき、前記クライアントID毎に、変換前のSQL文に対する照会結果に変換する手段と、前記クライアントIDを有するクライアントに照会結果を送信する手段である。
そして、前記システムが、前記集約トランザクションで、クライアントが集約トランザクション経由で照会したデータを更新する手段であって、更新するデータが、集約トランザクションとして照会したかを判断する手段と、集約トランザクションとして照会している場合、集約トランザクション経由で処理した照会クエリを、直接トランザクションとして、データベースに処理要求する手段と、前記クライアントからのコミット要求に応じて、更新するデータの更新クエリを直接トランザクションとして、データベースに処理要求する手段を有する。
また別の態様として、上記何れか1つに記載の方法の各ステップを、コンピュータに実行させるためのプログラムを提供する。
本発明により、複数のトランザクションを1つにまとめて集約してデータベースに問い合わせることが可能となる。またデータベースに集約トランザクションを問い合わせた場合に、データを更新するトランザクションが発生てもデッドロックすることなく、パフォーマンスに優れたデータベースアクセスが可能となる。
本発明の全体のシステム構成を示す。 トランザクションをまとめてデータベース130へ送信する場合の図である。 集約トランザクションの問題点を示す図である。 本発明における集約トランザクションの処理例である。 クライアントとDB Proxy120の記憶構成ブロックを示す。 トランザクション開始時のクライアントの挙動を示す。 照会SQLを要求時のクライアントの挙動のフローチャートである。 更新SQLを要求時のクライアントの挙動のフローチャートである。 コミット要求時のクライアントの挙動のフローチャートである。 ロールバック要求時のクライアントの挙動のフローチャートである。 照会SQL要求受信時のDB Proxyの挙動のフローチャートである。 照会SQLのバッチ要求時の、DB Proxyの挙動のフローチャートである。 トランザクションのコミット要求時のDB Proxyの挙動のフローチャートである。 本発明における、クライアント、DB Proxy、データベースの例示的なハードウェア構成である。 SQL文例である。 別の SQL文例である。 SQLであるSELECT文の集約のフローチャートを示す。 データベース130から受信した結果を各クライアント用に分割するフローチャートを示す。 データベース130から受信した結果の例である。 データベース130から受信した結果を各クライアント用に分割する例1である。 データベース130から受信した結果を各クライアント用に分割する例2である。 データベース130から受信した結果を各クライアント用に分割する例3である。
図1に本発明の全体のシステム構成を示す。DB Proxy120は複数のクライアント110からトランザクションを集約してデータベース130に送信する。DB Proxy120は複数のクライアントに対して1つ存在する。
データベース130は、クライアント110、もしくは、DB Proxy120から受信する、複数のSQLを1つのトランザクションとして処理する。
DB Proxy120は、トランザクションの開始をデータベース130に通知し、要求するSQLを送信し、その結果を受信し、コミット要求をデータベースに送信することで行う。なお一般的には、SQLの送信、結果の受信は、複数回行われる。
なお本明細書の実施例において、クライアント110がトランザクションを開始する際の処理、照会SQLを要求する際の処理、更新SQLを要求する際の処理、コミット・ロールバックを要求する際の処理を詳細に説明する。また、DBProxy120が、上記のクライアント110の処理内で、クライアントから照会SQLを受信した際の処理、クライアントからコミット要求を受信した際の処理を詳細に説明する。
なお説明の簡素化のため、DB Proxy120、クライアント110は、同時に1つのトランザクションしか要求しないものと仮定する。また、クライアント110とDBProxy120は、N対1の関係がついているものとする。
図2に、トランザクションをまとめてデータベース130へ送信する場合を図示する。図2ではDBProxy120がクライアント1とクライアント2のトランザクション中の照会クエリをまとめてデータベースに要求することにより、データベースのスループットを向上させる。なお図中においてr は読み取り(Read)、wは書き込み(Write)を表し、その添え字の最初はクライアント番号、次の添え字は時系列順序を表している。
図2において、クライアント1およびクライアント2は、トランザクション中の照会クエリを、DBProxy120に転送する。DB Proxy120は、複数のクライアントから受信した照会クエリを1つのクエリにまとめ、照会トランザクションとしてデータベース130に処理要求する。照会クエリは通常SQL文であるので、同時系列順序で出されたクライアント1のレコードAを参照するSQLと、クライアント2のレコードBを照会するSQL2つのSQLは、DBProxy120で1つのSQLに集約されてデータベース130に送信されることになる。
図17に、SQLであるSELECT文の集約のフローチャートを示す。本発明ではSELECT文の集約に集合演算子であるUNIONALLを使用する。UNION 集合演算子とは複数の SELECT 文を1つに組み合わせる演算子である。しかし、複数の問い合わせを1つに結合することから、それぞれの問い合わせの抽出項目のリストは同数、かつ、同じグループのデータ型でなければ結合することができない。この方法により任意のSQLをまとめることが可能になる。
まず1710で連結対象となるSELECT文と、クライアントID (INT型) を対応付ける。例として以下の2つのSELCECT文を結合対象として説明する。
S1: SELECT C11, C12, C13 FROM T1 WHEREK1=? →クライアントIDを1とする
> C11: INT, C12: DOUBLE, C13: STRING
S2: SELECT C21, C22, C23 FROM T0 WHERE K2=? →クライアントIDを2とする
> C21: DOUBLE, C22:INT, C23: DATE
ステップ1720で、全てのSELECT文が返すデータ(カラム)の型を含む、データの型の集合を生成する。この時、同一グループのデータ型について型を増加させす1つにして異なるグループのデータ型は新しく付加する。すなわち型の集合を作成する時は異なる型のみを追加する。
例では、{INT, DOUBLE,STRING, DATE}となる。
ステップ1730で、ステップ1720で生成した型の集合に順序をつけ、先頭にINT型を追加する。
例では、INT, INT, DOUBLE,STRING, DATEの順となる。
ステップ1740で、各SELECT文に対し、ステップ1730でつけた順序で結果を返すように書き換える。もし、返す型が存在しない場合は、固定値を返すようにする。また、最初のINT型には、クライアントIDを固定値として返すようにする。
S1': SELECT 1, C11, C12, C13, NULL FROM T1 WHERE K1=?
S2': SELECT 2, C22, C21, ‘CONST', C23 FROM T2 WHERE K2=?
ステップ1750で、元のSELECT文のデータ型(カラム)順序と、書き換えたSELECT文のデータ型(カラム)順序の対応を記憶する。記憶した内容は後ほど結果を分割するために使用する。
S1とS1'の対応:{1→2, 2→3, 3→4} (1→2は、S1の1番目の項目がS1'の2番目の項目に対応することを意味する)
S2とS2'の対応:{1→3, 2→2, 3→5} (1→3は、S2の1番目の項目がS2'の3番目の項目に対応することを意味する)
ステップ1760で、書き換えたSELECT文をUNION ALLで連結する。そしてデータベース130に照会する。
SELECT 1, C11, C12, C13, NULL FROM T1 WHERE K1=? UNION ALL SELECT 2,C22, C21, ‘CONST', C23 FROM T2 WHERE K2=?
図18に、データベース130から受信した結果を各クライアント用に分割するフローチャートを示す。
図19に、データベース130から受信した結果の例を示す。表は左から、INT, INT, DOUBLE, STRING, DATEの順で構成されたデータが5行存在している。左端のINT型データはクライアントIDを示している。
図18のフローチャートに従い、ステップ1810で、データベース130から受信した結果から一行読み込む。すなわち1行目である、1, 1, 0.001, "AAAA"が読み込まれる。ステップ1820で、ステップ1810で読み込んだ行の、始めのINT型のデータからクライアントIDを取得する。この場合は1であるのでクライアント1であることがわかる。
ステップ1830で、ステップ1820で読み込んだ行を、ステップ1750で記憶したデータ型順序の対応から、各クライアントが要求したデータ型の値のみを、要求順に並び替え、そのクライアントIDのSELECT文に対する結果とする。
ここでクライアント1において、S1とS1'の対応関係は{1→2, 2→3, 3→4} であるので、1行目のデータは図20に示すように変換される。この処理を繰り返すことで、クライアント1のデータは図21に示すように、元の結果から分離され、変換されることになる。
3行目からはクライアント2の結果であるので、S2とS2'の対応関係{1→3, 2→2, 3→5} を参照しながら、図22に示すように、元の結果から分離され、変換される。
図18のフローチャートに従い、ステップ1840で、受信した結果が存在しない場合は処理を終了する。それ以外は、ステップ1810に戻る。
本発明の集約と分割の特徴はまとめると次のようになる。
・SELECT対象となるデータの型情報のみを利用して、UNION ALLのデータ型を決定すること
・UNION ALLのデータ(カラム)名とクライアントの要求したSELECT文のデータ(カラム)名の対応関係から、各クライアント用の結果を分割して生成すること。
・SELECT文のIDが結果に含まれない場合は、空の結果(ResultSet)を生成すること
これにより本発明は、DB Proxy120で、複数の照会SQLを集約してデータベースに処理要求し、その結果をそれぞれのクライアントに分割して返すことができる。
図2の集約クエリ送信後の問題点を図3で説明する。
1.クライアント1は、トランザクション中の照会クエリ(レコードAを照会r11)を、DB Proxy120に転送する。
2.クライアント2は、トランザクション中の照会クエリ(レコードBを照会r21)を、DB Proxy120に転送する。
3.DB Proxy120は、クライアント1とクライアント2から受信した照会クエリを1つのクエリにまとめ、集約トランザクション(レコードAとレコードBを同時照会r11+21)としてデータベース130に処理要求する。
4.ここでクライアント1が、同じトランザクション中の更新クエリを更新トランザクション(レコードAを更新w12)として、DB Proxy120経由で照会中の集約トランザクション(照会クエリ)とは別に、データベース130に要求する。
しかし、この更新トランザクションは集約トランザクションによりレコードAがロックされているため、レコードAのロックが開放されるまで待たねばならないが開放されることがない。
なぜなら、クライアント1の更新トランザクションは、DB Proxy120の照会トランザクションがコミットされないと、コミットできないからである。逆に、クライアント1の更新トランザクションよりコミットの通知を受けなくては、DBProxy120の照会トランザクションがコミットすることはないからである。すなわち、DB Proxy120に要求した照会クエリで照会したレコードAを、同じトランザクションで更新する場合、必ずデッドロックが発生することになる。
そこで本発明では図4の方法を採る。以下の手順により、集約トランザクションで照会したレコードを更新する場合でも、デッドロックが発生しない。クライアント1が集約トランザクション経由で照会したデータを更新する際に、
4.まずクライアント1は、更新するレコードAが、集約トランザクションとして照会したかをDBProxy120に問い合わせる。集約トランザクションとして照会している場合、クライアント1は、集約トランザクション経由で処理した照会クエリを、直接トランザクションとして、データベース130に処理要求する。
5.クライアント1は、DBProxy120にコミット要求を出す。
6.クライアント1はレコードAの更新クエリを直接トランザクションとして、データベース130に処理要求する
図5に、クライアントとDB Proxy120の記憶構成ブロックを示す。ここでDB Proxy120は説明のため1つのトランザクションのみを実行することを仮定する。
クライアントは、照会済SQL記憶部、更新済SQL記憶部、モード、トランザクション状態を管理する。照会済SQL記憶部は、現在実行中のトランザクション内で照会したSQLの履歴を保持する。更新済SQL記憶部は、現在実行中のトランザクション内で更新したSQLの履歴を保持する。
モードは、照会SQLの送信モードを意味し、Proxy時はDB Proxyを優先的に利用する、Direct時は直接利用することを意味する。なお、Null時はモードが決定されていないことを意味する。トランザクション状態は、クライアントが直接要求するトランザクションの状態を意味し、Active時はトランザクションを要求中、Inactiveはトランザクションを要求していないことを意味する。
DB Proxyは、開始待ちクライアント記憶部、開始済クライアント記憶部、コミット済クライアント記憶部、バッチ待ち照会SQL記憶部を管理する。
開始待ちクライアント記憶部は、DB Proxyが次のトランザクションでバッチ対象とするSQLを要求したクライアントの識別子のリストを保持する。開始済みクライアント記憶部は、DBProxyが現在バッチ対象とするSQLを要求したクライアントの識別子のリストを保持する。
コミット済みクライアント記憶部は、開始済みクライアント記憶部のうち、コミット要求を受信したクライアントの識別子のリストを保持する。バッチ待ち照会SQL記憶部は、開始済みクライアント記憶部のクライアントがDBProxyに要求し、DB Proxyがまだデータベースに要求していないSQLを保持する。
図6に、トランザクション開始時のクライアントの挙動を示す。
ステップ602で、照会SQLを要求する。ステップ604でモードをNullに遷移する。次にステップ606で照会済SQL記憶部をクリアする。そしてステップ608で更新済SQL記憶部をクリアし、最後にステップ610でトランザクション状態をInactiveにする。
図7に、照会SQLを要求時のクライアントの挙動のフローチャートを示す。
クライアントが照会SQLを要求する際は、ステップ704で、モードがDirectモードか否かを判断する。Nullモード、もしくは、Proxyモードの場合は、Proxy経由でSQLが処理可能かを判断するためにステップ706へ移る。
Proxy経由でSQLが処理可能かチェックするには、ステップ706でこれまでクライアントが同じトランザクション内で要求した更新データを、照会SQLが照会する可能性があるかを判断することで行う。
例えば、図15のSQL A(UPDATE)をすでに実行済みで、SQL B(SELECT)という照会SQLを要求する場合は、更新したデータを照会することはないので、Proxy経由で照会可能となる。
一方、SQL C(SELECT)という照会SQLを要求する場合は、更新データを照会する可能性があるため、Proxy経由で照会できない。また、SQLD(SELECT)のように、クエリからでは更新したデータを判定できない場合も、同様にProxy、経由で照会できないと判断する。
ステップ708で、Proxy経由で照会する場合は、DB Proxyに照会SQLを送信し、ステップ710で、DB Proxyから照会SQL結果を受信するまで待機する。ステップ712で、照会SQL結果を受信後は、照会SQLを照会済SQL記憶部に追加し、ステップ714でモードをProxyモードに遷移させる。
一方、Proxy経由で照会しない場合は、直接データベースに照会SQLを要求し、照会SQL結果を受信する。ステップ716で、もしトランザクションが開始されていない場合(トランザクション状態がInactiveの場合)は、ステップ718でトランザクション開始をデータベースに要求し、ステップ722でトランザクション状態をActiveにしてから、ステップ724で照会SQLを要求する。そしてステップ726でデータベース130から照会SQLの結果を受信する。
図8に、更新SQLを要求時のクライアントの挙動のフローチャートを示す。
ステップ802でクライアントが照会SQLを要求する際は、まず、ステップ804でモードがProxyモードか否かを判断する。
Proxyモードの場合は、ステップ706で照会SQLで照会したデータを、更新SQLが更新する可能性があるかを判断する。
更新SQLが更新する可能性があるかのチェックは、照会済SQL記憶部内の照会SQLと、その照会結果をチェックすることで判定する。
例えば、照会済SQL記憶部内に、図16のSQL D(SELECT)という照会SQLを要求する場合、SQL E(UPDATE)という更新の際は更新する可能性がなく、SQLF(UPDATE)の際は更新する可能性があると判断する。
ステップ806で、もし更新があると判断した場合は、これまでにProxy経由で照会したSQLを、再度直接データベースに要求し、照会結果を受信する。
ステップ808で、クライアントがトランザクションを直接要求していない場合(トランザクション状態がInactiveの場合)は、ステップ810でデータベースにトランザクションの開始要求を行ってから、ステップ812で照会SQLを送信する。
ステップ814で照会結果を受信後は、ステップ816でDirectモードに遷移し、ステップ818でDBProxyにコミット要求を送信する。そして処理はステップ820へ移る。
Proxyモードではない場合、もしくは、照会結果を受信した後は、データベースに更新SQLを要求し、更新結果を受信する。
ステップ820で、クライアントがトランザクションを直接要求していない場合(トランザクション状態がInactiveの場合)は、ステップ822でデータベースにトランザクションの開始要求を行い、ステップ824でトランザクション状態をActiveにしてから、ステップ826で更新SQLを送信する。ステップ828で更新結果を受信した後は、ステップ830で更新SQLを更新済みSQL記憶部に追加する。
図9に、コミット要求時のクライアントの挙動のフローチャートを示す。
ステップ902でコミット要求を出す際に、ステップ904でトランザクション状態がInactiveか判断する。Inactiveの場合はステップ906でデータベース130にコミット要求を出しステップ908へ移る。
ステップ904でトランザクション状態がAciveの場合はステップ908でDBProxyモードか判断する。DB Proxyモードの場合はステップ910でDB Proxy120にコミット要求を出しステップ912に進む。ステップ908でDB Proxyモードでない場合にはステップ912でトランザクション処理終了となる。
図10に、ロールバック要求時のクライアントの挙動のフローチャートを示す。
ステップ1002で、ロールバックを要求する際、ステップ1004でトランザクション状態がInactiveかどうか判断する。Inactiveの場合はステップ1006でデータベースにロールバック要求し、ステップ1008に進む。Activeの場合は、ステップ1008でDBProxyモードかどうかを判断する。DB Proxyモードの場合は、ステップ1010でDBProxyにコミット要求し、ステップ1012に進む、DB Proxyモードでない場合にはステップ1012でトランザクション処理を終了する。
図11に、照会SQL要求受信時のDB Proxyの挙動のフローチャートを示す。
ステップ1102で、クライアントから照会SQLを受信する際、ステップ1104で、開始済クライアント記憶部にクライアントが含まれるか判断する。含まれる場合には処理はステップ1110に進む。含まれない場合にはステップ1106で、クライアントを開始待ちクライアント記憶部に追加する。そしてステップ1108で、クライアントが開始済みクライアント記憶部に追加されるまで待機する。そしてステップ1110で、バッチ待ち照会SQL記憶部に照会SQLを追加する。
図12に、照会SQLのバッチ要求時の、DB Proxyの挙動のフローチャートを示す。
ステップ1202で、バッチ待ち照会SQL記憶部内に照会SQLが存在するようになる待機する。ステップ1204で、バッチ待ち照会SQL記憶部内の照会SQLの1つを選択する。
ステップ1206で、開始済クライアント記憶部内の他クライアントが、選択した照会SQLとバッチ可能なSQLを要求する可能性がないか判断する。可能性がある場合には処理はステップ1202に戻る。可能性がない場合にはステップ1208でバッチ待ち照会SQL記憶部から、照会SQLとバッチ可能な他クライアントの照会SQLを消去し、バッチ照会SQLとしてデータベースに要求する。次にステップ1210でデータベースから照会結果を受信し、バッチ照会SQLに含まれる照会SQLごとに、照会結果を分割し、要求したクライアントに送信する。
図13に、トランザクションのコミット要求時のDB Proxyの挙動のフローチャートを示す。
ステップ1302でクライアントからのコミット要求を待機する。ステップ1304で、コミット済クライアント記憶部にクライアントを追加する。
ステップ1306でコミット済クライアント記憶部と開始済クライアント記憶部が同じかどうか判断する、同じでない場合、処理はステップ1316へ進む。同じ場合はステップ1308でデータベースにコミット要求し、ステップ1310で、開始済クライアント記憶部の全クライアントに、コミット完了を通知する。
次にステップ1312で開始済みクライアント記憶部を消去する。そしてステップ1314で開始待ちクライアント記憶部にクライアントが存在するか判断する。存在しない場合には処理は1302に戻る。存在する場合にはステップ1316で、開始待ちクライアント記憶部の全クライアントを開始済クライアント記憶部に追加する。
以下、図面を参照して、本発明の実施例のシステム構成例を説明する。ここで説明する構成要素は必須の構成要件ではなく、一実施例として説明するものであり、本発明の技術的範囲をこの一実施例に限定して解釈されるものではないことに留意されたい。
図14を参照すると、本発明の一実施例に係る、クライアント、DBProxy、もしくはデータベースのシステム構成を実現するためのコンピュータ・ハードウェアのブロック図が示されている。
図14において、システム・バス1409には、CPU1410と、主記憶(RAM)1420と、ハードディスク・ドライブ(HDD)1430と、ネットワークコントローラ1440と、キーボード1450と、マウス1460と、ディスプレイ1470と、オーディオコントローラ1480が接続されている。
CPU1410は、好適には、32ビットまたは64ビットのアーキテクチャに基づくものであり、例えば、インテル社のPentium(商標)4、インテル社のCore(商標)2 DUO、AMD社のAthlon(商標)などを使用することができる。主記憶1420は、好適には、1GB以上の容量、より好ましくは、2GB以上の容量をもつものである。
ハードディスク・ドライブ1430には、オペレーティング・システムが、格納されている。オペレーティング・システムは、Linux(商標)、マイクロソフト社のWindows7、Windows XP(商標)、Windows(商標)2000、アップルコンピュータのMacOS(商標)などの、CPU1410に適合するオペレーティング・システムとして任意のものでよい。
ハードディスク・ドライブ1430には、好適にはORACLE(商標)、DB2(商標)、SQLSERVER(商標)、ACCESS(商標)などのリレーショナルデータベース・アプリケーションが格納される。これらのアプリケーション、ソフトウェアに限らずSQLを解釈できるものであれば任意に選択できる。そしてこれらのプログラムはオペレータのキーボードやマウス操作に応答して、メイン・メモリ1420にロードされて実行される。
キーボード1450及びマウス1460は、オペレーティング・システムが提供するグラフィック・ユーザ・インターフェースに従い、データベースアプリケーションを開始したり、照会クエリの入力、パラメータの指定を提供するために使用される。
ディスプレイ1470は、照会クエリの表示、照会結果の表示等、適宜表示するために使用される。また音声認識ソフトウェアを用いてオーディオコントローラ1480通じ、音声により照会クエリを入力するようにしてもよい。
ネットワークコントローラ1440はネットワークを通じて、クライアント、DBProxy、データベース間で通信を行う。本発明はクライアント、DB Proxy、が夫々別のハードウェアに存在する必要はない。例えば、DBProxy とデータベースを1つのコンピュータ・ハードウェア内に構成しても良い。さらにクライアント、DBProxy、データベースを1つのデータベースサーバ内に置く態様も可能である。
110 クライアント
120 DBProxy
130 データベース
1409 システム・バス
1410 CPU
1420 メイン・メモリ
1420 主記憶
1430 ハードディスク・ドライブ
1440 ネットワークコントローラ
1450 キーボード
1460 マウス
1470 ディスプレイ
1480 オーディオコントローラ
本発明はトランザクションの処理方法に関し、特に複数の照会クエリを含む集約トランザクションの処理方法、システムに関する。
通常、データベースにおけるトランザクション処理は、一貫した状態のデータベースを維持するよう設計されている。相互依存のある複数の操作が全て完了するか、全てキャンセルされることを保証している。そのために、ロック、ロールバック、デッドロックの回避の仕組みがある。
ロックとは、特定のデータに対するアクセスや更新を制御することである。特にデータベースへの書き込み処理を行なう際に、データの整合性を保つためにアクセスやデータの読み書きを一時的に制限することである。より具体的には1つの処理がデータXにアクセス中は他の処理がXへアクセスできないように排他制御を行う。1つの処理が2つ以上のSQL文で表される場合にトランザクションを利用する。
トランザクションは一連の処理(複数のSQLからなる更新・照会クエリ)をまとめてコミット(確定)またはロールバック(取り消し)を行うことができる機能で、これを利用すれば1つのSQL文が失敗した場合、同じ処理の別のSQL文をすべて取り消すことができる。ロールバックはつまりトランザクションがコミット前に失敗した場合、更新されたデータを、データベースをトランザクション開始前の状態に戻す処理である。またデッドロックとは、2つ以上のトランザクションの処理中にデータベース内の同じ部分に同時にアクセスすることで、互いの処理の進行を妨げる現象である。例えば、トランザクションAがデータXにアクセスし、トランザクションBがデータYにアクセスする場合、AがYにアクセスしようとし、BがXにアクセスしようとしたときデッドロックが発生する。この場合どちらのトランザクションも先に進めなくなる。このようなデッドロックを回避するには、両方のトランザクションをキャンセルし、ロールバックする。そして順序を変えて再実行し、デッドロックが再度発生しないようにする。
クライアント数の増加と処理するデータ量の増大に伴い、データベースへのアクセスをより効率化する技術が知られている。特許文献1には、複数のロック制御によって複数のトランザクションの並行的な実行を制御する場合に、連続してなされるロック要求を蓄積し、ロック要求でない要求が出されたとき、この要求を処理する前に、前述の蓄積されたロック要求を一括してデ−タベ−ス・サ−バヘ送信し、ロック処理することによって送信回数を減少させる技術が開示されている。すなわち複数のトランザクション内でのロック要求をまとめる技術である。
特許文献2には、入力された複数のトランザクションを別々に処理するのではなく、入力された複数のトランザクションが処理を行うデータ項目に対して、そのデータ項目を一度だけ検索し、検索したデータ項目に対して、複数のトランザクションの更新処理を順次メイン・メモリ内で行い、最後に更新した結果だけをデータベースに一度だけ書き込む手法を開示している。すなわち複数のトランザクションの更新をまとめる技術である。
上記従来の方法は複数のトランザクションを1つにまとめて集約してデータベースに問い合わせる方法を採っていない。その理由は、複数のトランザクション(照会クエリ)に存在するSQL文を集約する方法が難しいことと、またSQLの集約が可能になったとしても、データベースに集約照会をした時に、照会したデータを更新するトランザクションが1つでも発生した場合、必然的にデッドロックが発生するからである。なお本発明ではトランザクションの分離レベルを「再読み込み可能読み取り」(REPEATABLEREAD)とする。この分離レベルではトランザクションにおいて対象となるすべてのテーブルの対象データがトランザクション実行中に変更されないことが保証される。
特開1993−0108452 特開2009−0271665
本発明が解決しようとする課題は、データベース・クライアントがトランザクション処理をデータベースに要求する際に、一部の照会クエリを、その他のトランザクションの照会クエリと共に、別トランザクション(集約トランザクション)としてデータベースに要求する、集約トランザクションの処理方法、システムを提供することである。
さらに別の課題は、集約トランザクションの処理において、照会クエリを要求した全データベース・クライアントからのコミット要求を受信した時に前記集約トランザクションをコミットする方法、システムを提供することである。
さらに別の課題は、集約トランザクションを処理するにあたり、デッドロックの生じないデータ更新方法、システムを提供することである。
本発明は上記課題を解決するために、コンピュータの処理により、データベースにアクセスして、複数の照会クエリを含むトランザクションを集約する方法であって、前記コンピュータが前記データベースと接続され、複数クライアントから複数トランザクションを受信するステップと、前記複数トランザクション中の照会クエリを集約し、集約トランザクションとしてデータベースに送信するステップと、を有する。
また、前記照会クエリは複数のSQL文からなり、前記データベースに送信するステップが、前記コンピュータが前記トランザクション中の照会クエリを、集合演算子を用いて集約し、集約トランザクションとしてデータベースに送信するステップと、である。
また、前記送信するステップが、集約対象となる照会クエリのSQL文について前記照会クエリを発したクライアントのクライアントIDを対応付けるステップと、前記クライアントIDの型を含む、前記SQL文のデータ型を生成するステップと、複数クライアントからの全てのSQL文について異なるデータの型のみを追加して、集合したデータの型を生成するステップと、前記集合したデータの型の順番となるように各クライアントのSQL文を変換するステップと、前記変換後のSQL文のデータ型と変換前のSQL文のデータ型の対応関係を前記クライアントのクライアントID毎に記憶するステップと、全ての変換後のSQL文を集合演算子を用いて集約してデータベースに送信するステップである
さらに、前記方法が、前記データベースから前記集約トランザクションに対する変換したSQL文の結果を受信するステップとを有する。
さらに、前記方法が、前記結果を前記複数クライアントの各々トランザクションに対する照会結果に分割して送信するステップを有する。
また、前記分割して送信するステップが、データベースから送信された結果からクライアントIDを判断するステップと、前記記憶した前記変換後のSQLのデータ型と変換前のデータ型の対応関係に基づき、前記クライアントID毎に、変換前のSQL文に対する照会結果に変換するステップと、前記クライアントIDを有するクライアントに照会結果を送信するステップである。
そして、前記方法が、前記集約トランザクションで、クライアントが集約トランザクション経由で照会したデータを更新するステップであって、更新するデータが、集約トランザクションとして照会したかを前記コンピュータに問い合わせるステップと、集約トランザクションとして照会している場合、集約トランザクション経由で処理した照会クエリを、直接トランザクションとして、データベースに処理要求するステップと、前記クライアントからのコミット要求に応じて、更新するデータの更新クエリを直接トランザクションとして、データベースに処理要求するステップを有する。
別の態様として、本発明は、データベースにアクセスして、複数の照会クエリを含むトランザクションを集約するシステムであって、複数クライアントから複数トランザクションを受信する手段と、前記複数トランザクション中の照会クエリを集約し、集約トランザクションとしてデータベースに送信する手段を有する。
また、前記照会クエリは複数のSQL文からなり、前記データベースに送信する手段が、前記システムが前記トランザクション中の照会クエリを、集合演算子を用いて集約し、集約トランザクションとしてデータベースに送信する手段である。
また、前記送信する手段が、集約対象となる照会クエリのSQL文について前記照会クエリを発したクライアントのクライアントIDを対応付ける手段と、前記クライアントIDの型を含む、前記SQL文のデータ型を生成する手段と、複数クライアントからの全てのSQL文について異なるデータの型のみを追加して、集合したデータの型を生成する手段と、前記集合したデータの型の順番となるように各クライアントのSQL文を変換する手段と、前記変換後のSQL文のデータ型と変換前のSQL文のデータ型の対応関係を前記クライアントのクライアントID毎に記憶する手段と、全ての変換後のSQL文を集合演算子を用いて集約してデータベースに送信する手段である。
さらに、前記システムが、前記データベースから前記集約トランザクションに対する結果を受信する手段を有する。
さらに、前記システムが、前記結果を前記複数クライアントの各々トランザクションに対する照会結果に分割して送信する手段を有する。
また、前記分割して送信する手段が、データベースから送信された結果からクライアントIDを判断する手段と、前記記憶した前記変換後のSQLのデータ型と変換前のデータ型の対応関係に基づき、前記クライアントID毎に、変換前のSQL文に対する照会結果に変換する手段と、前記クライアントIDを有するクライアントに照会結果を送信する手段である。
そして、前記システムが、前記集約トランザクションで、クライアントが集約トランザクション経由で照会したデータを更新する手段であって、更新するデータが、集約トランザクションとして照会したかを判断する手段と、集約トランザクションとして照会している場合、集約トランザクション経由で処理した照会クエリを、直接トランザクションとして、データベースに処理要求する手段と、前記クライアントからのコミット要求に応じて、更新するデータの更新クエリを直接トランザクションとして、データベースに処理要求する手段を有する。
また別の態様として、上記何れか1つに記載の方法の各ステップを、コンピュータに実行させるためのプログラムを提供する。
本発明により、複数のトランザクションを1つにまとめて集約してデータベースに問い合わせることが可能となる。またデータベースに集約トランザクションを問い合わせた場合に、データを更新するトランザクションが発生てもデッドロックすることなく、パフォーマンスに優れたデータベースアクセスが可能となる。
本発明の全体のシステム構成を示す。 トランザクションをまとめてデータベース130へ送信する場合の図である。 集約トランザクションの問題点を示す図である。 本発明における集約トランザクションの処理例である。 クライアントとDB Proxy120の記憶構成ブロックを示す。 トランザクション開始時のクライアントの挙動を示す。 照会SQLを要求時のクライアントの挙動のフローチャートである。 更新SQLを要求時のクライアントの挙動のフローチャートである。 コミット要求時のクライアントの挙動のフローチャートである。 ロールバック要求時のクライアントの挙動のフローチャートである。 照会SQL要求受信時のDB Proxyの挙動のフローチャートである。 照会SQLのバッチ要求時の、DB Proxyの挙動のフローチャートである。 トランザクションのコミット要求時のDB Proxyの挙動のフローチャートである。 本発明における、クライアント、DB Proxy、データベースの例示的なハードウェア構成である。 SQL文例である。 別の SQL文例である。 SQLであるSELECT文の集約のフローチャートを示す。 データベース130から受信した結果を各クライアント用に分割するフローチャートを示す。 データベース130から受信した結果の例である。 データベース130から受信した結果を各クライアント用に分割する例1である。 データベース130から受信した結果を各クライアント用に分割する例2である。 データベース130から受信した結果を各クライアント用に分割する例3である。
図1に本発明の全体のシステム構成を示す。DB Proxy120は複数のクライアント110からトランザクションを集約してデータベース130に送信する。DB Proxy120は複数のクライアントに対して1つ存在する。
データベース130は、クライアント110、もしくは、DB Proxy120から受信する、複数のSQLを1つのトランザクションとして処理する。
DB Proxy120は、トランザクションの開始をデータベース130に通知し、要求するSQLを送信し、その結果を受信し、コミット要求をデータベースに送信することで行う。なお一般的には、SQLの送信、結果の受信は、複数回行われる。
なお本明細書の実施例において、クライアント110がトランザクションを開始する際の処理、照会SQLを要求する際の処理、更新SQLを要求する際の処理、コミット・ロールバックを要求する際の処理を詳細に説明する。また、DBProxy120が、上記のクライアント110の処理内で、クライアントから照会SQLを受信した際の処理、クライアントからコミット要求を受信した際の処理を詳細に説明する。
なお説明の簡素化のため、DB Proxy120、クライアント110は、同時に1つのトランザクションしか要求しないものと仮定する。また、クライアント110とDBProxy120は、N対1の関係がついているものとする。
図2に、トランザクションをまとめてデータベース130へ送信する場合を図示する。図2ではDBProxy120がクライアント1とクライアント2のトランザクション中の照会クエリをまとめてデータベースに要求することにより、データベースのスループットを向上させる。なお図中においてr は読み取り(Read)、wは書き込み(Write)を表し、その添え字の最初はクライアント番号、次の添え字は時系列順序を表している。
図2において、クライアント1およびクライアント2は、トランザクション中の照会クエリを、DBProxy120に転送する。DB Proxy120は、複数のクライアントから受信した照会クエリを1つのクエリにまとめ、照会トランザクションとしてデータベース130に処理要求する。照会クエリは通常SQL文であるので、同時系列順序で出されたクライアント1のレコードAを参照するSQLと、クライアント2のレコードBを照会するSQL2つのSQLは、DBProxy120で1つのSQLに集約されてデータベース130に送信されることになる。
図17に、SQLであるSELECT文の集約のフローチャートを示す。本発明ではSELECT文の集約に集合演算子であるUNIONALLを使用する。UNION 集合演算子とは複数の SELECT 文を1つに組み合わせる演算子である。しかし、複数の問い合わせを1つに結合することから、それぞれの問い合わせの抽出項目のリストは同数、かつ、同じグループのデータ型でなければ結合することができない。この方法により任意のSQLをまとめることが可能になる。
まず1710で連結対象となるSELECT文と、クライアントID (INT型) を対応付ける。例として以下の2つのSELCECT文を結合対象として説明する。
S1: SELECT C11, C12, C13 FROM T1 WHEREK1=? →クライアントIDを1とする
> C11: INT, C12: DOUBLE, C13: STRING
S2: SELECT C21, C22, C23 FROM T0 WHERE K2=? →クライアントIDを2とする
> C21: DOUBLE, C22:INT, C23: DATE
ステップ1720で、全てのSELECT文が返すデータ(カラム)の型を含む、データの型の集合を生成する。この時、同一グループのデータ型について型を増加させず、1つにして異なるグループのデータ型は新しく付加する。すなわち型の集合を作成する時は異なる型のみを追加する。
例では、{INT, DOUBLE,STRING, DATE}となる。
ステップ1730で、ステップ1720で生成した型の集合に順序をつけ、先頭にINT型を追加する。
例では、INT, INT, DOUBLE,STRING, DATEの順となる。
ステップ1740で、各SELECT文に対し、ステップ1730でつけた順序で結果を返すように書き換える。もし、返す型が存在しない場合は、固定値を返すようにする。また、最初のINT型には、クライアントIDを固定値として返すようにする。
S1': SELECT 1, C11, C12, C13, NULL FROM T1 WHERE K1=?
S2': SELECT 2, C22, C21, ‘CONST', C23 FROM T2 WHERE K2=?
ステップ1750で、元のSELECT文のデータ型(カラム)順序と、書き換えたSELECT文のデータ型(カラム)順序の対応を記憶する。記憶した内容は後ほど結果を分割するために使用する。
S1とS1'の対応:{1→2, 2→3, 3→4} (1→2は、S1の1番目の項目がS1'の2番目の項目に対応することを意味する)
S2とS2'の対応:{1→3, 2→2, 3→5} (1→3は、S2の1番目の項目がS2'の3番目の項目に対応することを意味する)
ステップ1760で、書き換えたSELECT文をUNION ALLで連結する。そしてデータベース130に照会する。
SELECT 1, C11, C12, C13, NULL FROM T1 WHERE K1=? UNION ALL SELECT 2,C22, C21, ‘CONST', C23 FROM T2 WHERE K2=?
図18に、データベース130から受信した結果を各クライアント用に分割するフローチャートを示す。
図19に、データベース130から受信した結果の例を示す。表は左から、INT, INT, DOUBLE, STRING, DATEの順で構成されたデータが5行存在している。左端のINT型データはクライアントIDを示している。
図18のフローチャートに従い、ステップ1810で、データベース130から受信した結果から一行読み込む。すなわち1行目である、1, 1, 0.001, "AAAA"が読み込まれる。ステップ1820で、ステップ1810で読み込んだ行の、始めのINT型のデータからクライアントIDを取得する。この場合は1であるのでクライアント1であることがわかる。
ステップ1830で、ステップ1820で読み込んだ行を、ステップ1750で記憶したデータ型順序の対応から、各クライアントが要求したデータ型の値のみを、要求順に並び替え、そのクライアントIDのSELECT文に対する結果とする。
ここでクライアント1において、S1とS1'の対応関係は{1→2, 2→3, 3→4} であるので、1行目のデータは図20に示すように変換される。この処理を繰り返すことで、クライアント1のデータは図21に示すように、元の結果から分離され、変換されることになる。
3行目からはクライアント2の結果であるので、S2とS2'の対応関係{1→3, 2→2, 3→5} を参照しながら、図22に示すように、元の結果から分離され、変換される。
図18のフローチャートに従い、ステップ1840で、受信した結果が存在しない場合は処理を終了する。それ以外は、ステップ1810に戻る。
本発明の集約と分割の特徴はまとめると次のようになる。
・SELECT対象となるデータの型情報のみを利用して、UNION ALLのデータ型を決定すること
・UNION ALLのデータ(カラム)名とクライアントの要求したSELECT文のデータ(カラム)名の対応関係から、各クライアント用の結果を分割して生成すること。
・SELECT文のIDが結果に含まれない場合は、空の結果(ResultSet)を生成すること
これにより本発明は、DB Proxy120で、複数の照会SQLを集約してデータベースに処理要求し、その結果をそれぞれのクライアントに分割して返すことができる。
図2の集約クエリ送信後の問題点を図3で説明する。
1.クライアント1は、トランザクション中の照会クエリ(レコードAを照会r11)を、DB Proxy120に転送する。
2.クライアント2は、トランザクション中の照会クエリ(レコードBを照会r21)を、DB Proxy120に転送する。
3.DB Proxy120は、クライアント1とクライアント2から受信した照会クエリを1つのクエリにまとめ、集約トランザクション(レコードAとレコードBを同時照会r11+21)としてデータベース130に処理要求する。
4.ここでクライアント1が、同じトランザクション中の更新クエリを更新トランザクション(レコードAを更新w12)として、DB Proxy120経由で照会中の集約トランザクション(照会クエリ)とは別に、データベース130に要求する。
しかし、この更新トランザクションは集約トランザクションによりレコードAがロックされているため、レコードAのロックが開放されるまで待たねばならないが開放されることがない。
なぜなら、クライアント1の更新トランザクションは、DB Proxy120の照会トランザクションがコミットされないと、コミットできないからである。逆に、クライアント1の更新トランザクションよりコミットの通知を受けなくては、DBProxy120の照会トランザクションがコミットすることはないからである。すなわち、DB Proxy120に要求した照会クエリで照会したレコードAを、同じトランザクションで更新する場合、必ずデッドロックが発生することになる。
そこで本発明では図4の方法を採る。以下の手順により、集約トランザクションで照会したレコードを更新する場合でも、デッドロックが発生しない。クライアント1が集約トランザクション経由で照会したデータを更新する際に、
4.まずクライアント1は、更新するレコードAが、集約トランザクションとして照会したかをDBProxy120に問い合わせる。集約トランザクションとして照会している場合、クライアント1は、集約トランザクション経由で処理した照会クエリを、直接トランザクションとして、データベース130に処理要求する。
5.クライアント1は、DBProxy120にコミット要求を出す。
6.クライアント1はレコードAの更新クエリを直接トランザクションとして、データベース130に処理要求する
図5に、クライアントとDB Proxy120の記憶構成ブロックを示す。ここでDB Proxy120は説明のため1つのトランザクションのみを実行することを仮定する。
クライアントは、照会済SQL記憶部、更新済SQL記憶部、モード、トランザクション状態を管理する。照会済SQL記憶部は、現在実行中のトランザクション内で照会したSQLの履歴を保持する。更新済SQL記憶部は、現在実行中のトランザクション内で更新したSQLの履歴を保持する。
モードは、照会SQLの送信モードを意味し、Proxy時はDB Proxyを優先的に利用する、Direct時は直接利用することを意味する。なお、Null時はモードが決定されていないことを意味する。トランザクション状態は、クライアントが直接要求するトランザクションの状態を意味し、Active時はトランザクションを要求中、Inactiveはトランザクションを要求していないことを意味する。
DB Proxyは、開始待ちクライアント記憶部、開始済クライアント記憶部、コミット済クライアント記憶部、バッチ待ち照会SQL記憶部を管理する。
開始待ちクライアント記憶部は、DB Proxyが次のトランザクションでバッチ対象とするSQLを要求したクライアントの識別子のリストを保持する。開始済みクライアント記憶部は、DBProxyが現在バッチ対象とするSQLを要求したクライアントの識別子のリストを保持する。
コミット済みクライアント記憶部は、開始済みクライアント記憶部のうち、コミット要求を受信したクライアントの識別子のリストを保持する。バッチ待ち照会SQL記憶部は、開始済みクライアント記憶部のクライアントがDBProxyに要求し、DB Proxyがまだデータベースに要求していないSQLを保持する。
図6に、トランザクション開始時のクライアントの挙動を示す。
ステップ602で、照会SQLを要求する。ステップ604でモードをNullに遷移する。次にステップ606で照会済SQL記憶部をクリアする。そしてステップ608で更新済SQL記憶部をクリアし、最後にステップ610でトランザクション状態をInactiveにする。
図7に、照会SQLを要求時のクライアントの挙動のフローチャートを示す。
クライアントが照会SQLを要求する際は、ステップ704で、モードがDirectモードか否かを判断する。Nullモード、もしくは、Proxyモードの場合は、Proxy経由でSQLが処理可能かを判断するためにステップ706へ移る。
Proxy経由でSQLが処理可能かチェックするには、ステップ706でこれまでクライアントが同じトランザクション内で要求した更新データを、照会SQLが照会する可能性があるかを判断することで行う。
例えば、図15のSQL A(UPDATE)をすでに実行済みで、SQL B(SELECT)という照会SQLを要求する場合は、更新したデータを照会することはないので、Proxy経由で照会可能となる。
一方、照会SQLを要求する場合は、更新データを照会する可能性があるため、Proxy経由で照会できない。この場合のSQLは以下の通りである。
SELECT * FROM TABLE1 WHERE ID=100
また、SQL C(SELECT)のように、クエリからでは更新したデータを判定できない場合も、同様にProxy、経由で照会できないと判断する。
ステップ708で、Proxy経由で照会する場合は、DB Proxyに照会SQLを送信し、ステップ710で、DB Proxyから照会SQL結果を受信するまで待機する。ステップ712で、照会SQL結果を受信後は、照会SQLを照会済SQL記憶部に追加し、ステップ714でモードをProxyモードに遷移させる。
一方、Proxy経由で照会しない場合は、直接データベースに照会SQLを要求し、照会SQL結果を受信する。ステップ716で、もしトランザクションが開始されていない場合(トランザクション状態がInactiveの場合)は、ステップ718でトランザクション開始をデータベースに要求し、ステップ722でトランザクション状態をActiveにしてから、ステップ724で照会SQLを要求する。そしてステップ726でデータベース130から照会SQLの結果を受信する。
図8に、更新SQLを要求時のクライアントの挙動のフローチャートを示す。
ステップ802でクライアントが更新SQLを要求する際は、まず、ステップ804でモードがProxyモードか否かを判断する。
Proxyモードの場合は、ステップ706で照会SQLで照会したデータを、更新SQLが更新する可能性があるかを判断する。
更新SQLが更新する可能性があるかのチェックは、照会済SQL記憶部内の照会SQLと、その照会結果をチェックすることで判定する。
例えば、照会済SQL記憶部内に、図16のSQL D(SELECT)という照会SQLを要求する場合、SQL E(UPDATE)という更新の際は更新する可能性がなく、SQLF(UPDATE)の際は更新する可能性があると判断する。
ステップ806で、もし更新があると判断した場合は、これまでにProxy経由で照会したSQLを、再度直接データベースに要求し、照会結果を受信する。
ステップ808で、クライアントがトランザクションを直接要求していない場合(トランザクション状態がInactiveの場合)は、ステップ810でデータベースにトランザクションの開始要求を行ってから、ステップ812で照会SQLを送信する。
ステップ814で照会結果を受信後は、ステップ816でDirectモードに遷移し、ステップ818でDBProxyにコミット要求を送信する。そして処理はステップ820へ移る。
Proxyモードではない場合、もしくは、照会結果を受信した後は、データベースに更新SQLを要求し、更新結果を受信する。
ステップ820で、クライアントがトランザクションを直接要求していない場合(トランザクション状態がInactiveの場合)は、ステップ822でデータベースにトランザクションの開始要求を行い、ステップ824でトランザクション状態をActiveにしてから、ステップ826で更新SQLを送信する。ステップ828で更新結果を受信した後は、ステップ830で更新SQLを更新済みSQL記憶部に追加する。
図9に、コミット要求時のクライアントの挙動のフローチャートを示す。
ステップ902でコミット要求を出す際に、ステップ904でトランザクション状態がInactiveか判断する。Inactiveの場合はステップ906でデータベース130にコミット要求を出しステップ908へ移る。
ステップ904でトランザクション状態がAciveの場合はステップ908でDBProxyモードか判断する。DB Proxyモードの場合はステップ910でDB Proxy120にコミット要求を出しステップ912に進む。ステップ908でDB Proxyモードでない場合にはステップ912でトランザクション処理終了となる。
図10に、ロールバック要求時のクライアントの挙動のフローチャートを示す。
ステップ1002で、ロールバックを要求する際、ステップ1004でトランザクション状態がInactiveかどうか判断する。Inactiveの場合はステップ1006でデータベースにロールバック要求し、ステップ1008に進む。Activeの場合は、ステップ1008でDBProxyモードかどうかを判断する。DB Proxyモードの場合は、ステップ1010でDBProxyにコミット要求し、ステップ1012に進む、DB Proxyモードでない場合にはステップ1012でトランザクション処理を終了する。
図11に、照会SQL要求受信時のDB Proxyの挙動のフローチャートを示す。
ステップ1102で、クライアントから照会SQLを受信する際、ステップ1104で、開始済クライアント記憶部にクライアントが含まれるか判断する。含まれる場合には処理はステップ1110に進む。含まれない場合にはステップ1106で、クライアントを開始待ちクライアント記憶部に追加する。そしてステップ1108で、クライアントが開始済みクライアント記憶部に追加されるまで待機する。そしてステップ1110で、バッチ待ち照会SQL記憶部に照会SQLを追加する。
図12に、照会SQLのバッチ要求時の、DB Proxyの挙動のフローチャートを示す。
ステップ1202で、バッチ待ち照会SQL記憶部内に照会SQLが存在するようになる待機する。ステップ1204で、バッチ待ち照会SQL記憶部内の照会SQLの1つを選択する。
ステップ1206で、開始済クライアント記憶部内の他クライアントが、選択した照会SQLとバッチ可能なSQLを要求する可能性がないか判断する。可能性がある場合には処理はステップ1202に戻る。可能性がない場合にはステップ1208でバッチ待ち照会SQL記憶部から、照会SQLとバッチ可能な他クライアントの照会SQLを消去し、バッチ照会SQLとしてデータベースに要求する。次にステップ1210でデータベースから照会結果を受信し、バッチ照会SQLに含まれる照会SQLごとに、照会結果を分割し、要求したクライアントに送信する。
図13に、トランザクションのコミット要求時のDB Proxyの挙動のフローチャートを示す。
ステップ1302でクライアントからのコミット要求を待機する。ステップ1304で、コミット済クライアント記憶部にクライアントを追加する。
ステップ1306でコミット済クライアント記憶部と開始済クライアント記憶部が同じかどうか判断する、同じでない場合、処理はステップ1316へ進む。同じ場合はステップ1308でデータベースにコミット要求し、ステップ1310で、開始済クライアント記憶部の全クライアントに、コミット完了を通知する。
次にステップ1312で開始済みクライアント記憶部を消去する。そしてステップ1314で開始待ちクライアント記憶部にクライアントが存在するか判断する。存在しない場合には処理は1302に戻る。存在する場合にはステップ1316で、開始待ちクライアント記憶部の全クライアントを開始済クライアント記憶部に追加する。
以下、図面を参照して、本発明の実施例のシステム構成例を説明する。ここで説明する構成要素は必須の構成要件ではなく、一実施例として説明するものであり、本発明の技術的範囲をこの一実施例に限定して解釈されるものではないことに留意されたい。
図14を参照すると、本発明の一実施例に係る、クライアント、DBProxy、もしくはデータベースのシステム構成を実現するためのコンピュータ・ハードウェアのブロック図が示されている。
図14において、システム・バス1409には、CPU1410と、主記憶(RAM)1420と、ハードディスク・ドライブ(HDD)1430と、ネットワークコントローラ1440と、キーボード1450と、マウス1460と、ディスプレイ1470と、オーディオコントローラ1480が接続されている。
CPU1410は、好適には、32ビットまたは64ビットのアーキテクチャに基づくものであり、例えば、インテル社のPentium(商標)4、インテル社のCore(商標)2 DUO、AMD社のAthlon(商標)などを使用することができる。主記憶1420は、好適には、1GB以上の容量、より好ましくは、2GB以上の容量をもつものである。
ハードディスク・ドライブ1430には、オペレーティング・システムが、格納されている。オペレーティング・システムは、Linux(商標)、マイクロソフト社のWindows7、Windows XP(商標)、Windows(商標)2000、アップルコンピュータのMacOS(商標)などの、CPU1410に適合するオペレーティング・システムとして任意のものでよい。
ハードディスク・ドライブ1430には、好適にはORACLE(商標)、DB2(商標)、SQLSERVER(商標)、ACCESS(商標)などのリレーショナルデータベース・アプリケーションが格納される。これらのアプリケーション、ソフトウェアに限らずSQLを解釈できるものであれば任意に選択できる。そしてこれらのプログラムはオペレータのキーボードやマウス操作に応答して、メイン・メモリ1420にロードされて実行される。
キーボード1450及びマウス1460は、オペレーティング・システムが提供するグラフィック・ユーザ・インターフェースに従い、データベースアプリケーションを開始したり、照会クエリの入力、パラメータの指定を提供するために使用される。
ディスプレイ1470は、照会クエリの表示、照会結果の表示等、適宜表示するために使用される。また音声認識ソフトウェアを用いてオーディオコントローラ1480通じ、音声により照会クエリを入力するようにしてもよい。
ネットワークコントローラ1440はネットワークを通じて、クライアント、DBProxy、データベース間で通信を行う。本発明はクライアント、DB Proxy、が夫々別のハードウェアに存在する必要はない。例えば、DBProxy とデータベースを1つのコンピュータ・ハードウェア内に構成しても良い。さらにクライアント、DBProxy、データベースを1つのデータベースサーバ内に置く態様も可能である。
110 クライアント
120 DBProxy
130 データベース
1409 システム・バス
1410 CPU
1420 メイン・メモリ
1420 主記憶
1430 ハードディスク・ドライブ
1440 ネットワークコントローラ
1450 キーボード
1460 マウス
1470 ディスプレイ
1480 オーディオコントローラ

Claims (15)

  1. コンピュータの処理により、データベースにアクセスして、複数の照会クエリを含むトランザクションを集約する方法であって、前記コンピュータが前記データベースと接続され、
    複数クライアントから複数トランザクションを受信するステップと、
    前記複数トランザクション中の照会クエリを集約し、集約トランザクションとしてデータベースに送信するステップ、
    を有する、方法。
  2. 前記照会クエリは複数のSQL文からなり、前記データベースに送信するステップが、
    前記コンピュータが前記トランザクション中の照会クエリを、集合演算子を用いて集約し、集約トランザクションとしてデータベースに送信するステップ、
    である、請求項1記載の方法。
  3. 前記送信するステップが、
    集約対象となる照会クエリのSQL文について前記照会クエリを発したクライアントのクライアントIDを対応付けるステップと、
    前記クライアントIDの型を含む、前記SQL文のデータ型を生成するステップと、
    複数クライアントからの全てのSQL文について異なるデータの型のみを追加して、集合したデータの型を生成するステップと、
    前記集合したデータの型の順番となるように各クライアントのSQL文を変換するステップと、
    前記変換後のSQL文のデータ型と変換前のSQL文のデータ型の対応関係を前記クライアントのクライアントID毎に記憶するステップと、
    全ての変換後のSQL文を集合演算子を用いて集約してデータベースに送信するステップ、
    である、請求項2の方法。
  4. 前記方法が、さらに
    前記データベースから前記集約トランザクションに対する結果を受信するステップと、
    を有する、請求項3記載の方法。
  5. 前記方法が、さらに
    前記結果を前記複数クライアントの各々トランザクションに対する照会結果に分割して送信するステップと、
    を有する、請求項4記載の方法。
  6. 前記分割して送信するステップが、
    データベースから送信された結果からクライアントIDを判断するステップと、
    前記記憶した前記変換後のSQLのデータ型と変換前のデータ型の対応関係に基づき、前記クライアントID毎に、変換前のSQL文に対する照会結果に変換するステップと、
    前記クライアントIDを有するクライアントに照会結果を送信するステップ、
    である、請求項5記載の方法。
  7. 前記方法が、
    前記集約トランザクションで、クライアントが集約トランザクション経由で照会したデータを更新するステップであって、
    更新するデータが、集約トランザクションとして照会したかを前記コンピュータに問い合わせるステップと、
    集約トランザクションとして照会している場合、集約トランザクション経由で処理した照会クエリを、直接トランザクションとして、データベースに処理要求するステップと、
    前記クライアントからのコミット要求に応じて、更新するデータの更新クエリを直接トランザクションとして、データベースに処理要求するステップ、
    を有する、請求項1記載の方法。
  8. データベースにアクセスして、複数の照会クエリを含むトランザクションを集約するシステムであって、
    複数クライアントから複数トランザクションを受信する手段と、
    前記複数トランザクション中の照会クエリを集約し、集約トランザクションとしてデータベースに送信する手段、
    を有する、システム。
  9. 前記照会クエリは複数のSQL文からなり、前記データベースに送信する手段が、
    前記システムが前記トランザクション中の照会クエリを、集合演算子を用いて集約し、集約トランザクションとしてデータベースに送信する手段、
    である、請求項8記載のシステム。
  10. 前記送信する手段が、
    集約対象となる照会クエリのSQL文について前記照会クエリを発したクライアントのクライアントIDを対応付ける手段と、
    前記クライアントIDの型を含む、前記SQL文のデータ型を生成する手段と、
    複数クライアントからの全てのSQL文について異なるデータの型のみを追加して、集合したデータの型を生成する手段と、
    前記集合したデータの型の順番となるように各クライアントのSQL文を変換する手段と、
    前記変換後のSQL文のデータ型と変換前のSQL文のデータ型の対応関係を前記クライアントのクライアントID毎に記憶する手段と、
    全ての変換後のSQL文を集合演算子を用いて集約してデータベースに送信する手段、
    である、請求項9のシステム。
  11. 前記システムが、さらに
    前記データベースから前記集約トランザクションに対する結果を受信する手段、
    を有する、請求項10記載のシステム。
  12. 前記システムが、さらに
    前記結果を前記複数クライアントの各々トランザクションに対する照会結果に分割して送信する手段、
    を有する、請求項11記載のシステム。
  13. 前記分割して送信する手段が、
    データベースから送信された結果からクライアントIDを判断する手段と、
    前記記憶した前記変換後のSQLのデータ型と変換前のデータ型の対応関係に基づき、前記クライアントID毎に、変換前のSQL文に対する照会結果に変換する手段と、
    前記クライアントIDを有するクライアントに照会結果を送信する手段、
    である、請求項12記載のシステム。
  14. 前記システムが、さらに、
    前記集約トランザクションで、クライアントが集約トランザクション経由で照会したデータを更新する手段であって、
    更新するデータが、集約トランザクションとして照会したかを判断する手段と、
    集約トランザクションとして照会している場合、集約トランザクション経由で処理した照会クエリを、直接トランザクションとして、データベースに処理要求する手段と、
    前記クライアントからのコミット要求に応じて、更新するデータの更新クエリを直接トランザクションとして、データベースに処理要求する手段、
    を有する、請求項8記載のシステム。
  15. 請求項1〜7記載の何れか1つに記載の方法の各ステップを、コンピュータに実行させるためのプログラム。
JP2010150989A 2010-07-01 2010-07-01 トランザクションを集約して処理する方法、システム、およびプログラム Expired - Fee Related JP5536568B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010150989A JP5536568B2 (ja) 2010-07-01 2010-07-01 トランザクションを集約して処理する方法、システム、およびプログラム
US13/172,142 US8527501B2 (en) 2010-07-01 2011-06-29 Method, system, and program for combining and processing transactions

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010150989A JP5536568B2 (ja) 2010-07-01 2010-07-01 トランザクションを集約して処理する方法、システム、およびプログラム

Publications (2)

Publication Number Publication Date
JP2012014502A true JP2012014502A (ja) 2012-01-19
JP5536568B2 JP5536568B2 (ja) 2014-07-02

Family

ID=45400504

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010150989A Expired - Fee Related JP5536568B2 (ja) 2010-07-01 2010-07-01 トランザクションを集約して処理する方法、システム、およびプログラム

Country Status (2)

Country Link
US (1) US8527501B2 (ja)
JP (1) JP5536568B2 (ja)

Cited By (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016511486A (ja) * 2013-03-15 2016-04-14 アマゾン・テクノロジーズ・インコーポレーテッド データベースエンジンを備えたデータベースシステム及び別個の分散型ストレージサービス
US9817710B2 (en) 2013-05-28 2017-11-14 Amazon Technologies, Inc. Self-describing data blocks stored with atomic write
JP2017535869A (ja) * 2014-11-14 2017-11-30 アビニシオ テクノロジー エルエルシー 和結合型操作を含むクエリの処理
US9880933B1 (en) 2013-11-20 2018-01-30 Amazon Technologies, Inc. Distributed in-memory buffer cache system using buffer cache nodes
US9946735B2 (en) 2013-09-20 2018-04-17 Amazon Technologies, Inc. Index structure navigation using page versions for read-only nodes
US10031813B2 (en) 2013-03-15 2018-07-24 Amazon Technologies, Inc. Log record management
US10180951B2 (en) 2013-03-15 2019-01-15 Amazon Technologies, Inc. Place snapshots
US10216949B1 (en) 2013-09-20 2019-02-26 Amazon Technologies, Inc. Dynamic quorum membership changes
US10223184B1 (en) 2013-09-25 2019-03-05 Amazon Technologies, Inc. Individual write quorums for a log-structured distributed storage system
US10303564B1 (en) 2013-05-23 2019-05-28 Amazon Technologies, Inc. Reduced transaction I/O for log-structured storage systems
US10331655B2 (en) 2013-03-15 2019-06-25 Amazon Technologies, Inc. System-wide checkpoint avoidance for distributed database systems
US10437721B2 (en) 2013-09-20 2019-10-08 Amazon Technologies, Inc. Efficient garbage collection for a log-structured data store
US10474547B2 (en) 2013-05-15 2019-11-12 Amazon Technologies, Inc. Managing contingency capacity of pooled resources in multiple availability zones
US10534768B2 (en) 2013-12-02 2020-01-14 Amazon Technologies, Inc. Optimized log storage for asynchronous log updates
US10747746B2 (en) 2013-04-30 2020-08-18 Amazon Technologies, Inc. Efficient read replicas
US10872076B2 (en) 2013-05-13 2020-12-22 Amazon Technologies, Inc. Transaction ordering
US11030055B2 (en) 2013-03-15 2021-06-08 Amazon Technologies, Inc. Fast crash recovery for distributed database systems
US11093223B2 (en) 2019-07-18 2021-08-17 Ab Initio Technology Llc Automatically converting a program written in a procedural programming language into a dataflow graph and related systems and methods
US11308161B2 (en) 2015-02-18 2022-04-19 Ab Initio Technology Llc Querying a data source on a network
US11341163B1 (en) 2020-03-30 2022-05-24 Amazon Technologies, Inc. Multi-level replication filtering for a distributed database
US11593369B2 (en) 2010-01-15 2023-02-28 Ab Initio Technology Llc Managing data queries
KR102518268B1 (ko) * 2022-04-13 2023-04-05 주식회사 비투엔 마이크로 서비스 아키텍처 기반의 트랜잭션 가상화 처리 장치 및 방법
US11914571B1 (en) 2017-11-22 2024-02-27 Amazon Technologies, Inc. Optimistic concurrency for a multi-writer database

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8818963B2 (en) 2010-10-29 2014-08-26 Microsoft Corporation Halloween protection in a multi-version database system
US9195712B2 (en) 2013-03-12 2015-11-24 Microsoft Technology Licensing, Llc Method of converting query plans to native code
US10474645B2 (en) * 2014-02-24 2019-11-12 Microsoft Technology Licensing, Llc Automatically retrying transactions with split procedure execution
US9779180B2 (en) * 2014-10-27 2017-10-03 Successfactors, Inc. Detection of the N-queries via unit test
US10108623B2 (en) 2014-12-12 2018-10-23 International Business Machines Corporation Merging database operations for serializable transaction execution
US9984142B2 (en) 2015-11-05 2018-05-29 Oracle International Corporation Single unit of work
US11586626B1 (en) * 2021-11-03 2023-02-21 International Business Machines Corporation Optimizing cloud query execution

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09305614A (ja) * 1996-03-13 1997-11-28 Hitachi Ltd データベースの検索処理方法
JPH11232302A (ja) * 1998-02-19 1999-08-27 Hitachi Ltd 予約型情報検索配信方法及びシステム

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05108452A (ja) 1991-10-15 1993-04-30 Oki Electric Ind Co Ltd データベース管理方式
US5280612A (en) 1991-11-26 1994-01-18 International Business Machines Corporation Multiple version database concurrency control system
US5932309A (en) * 1995-09-28 1999-08-03 Alliedsignal Inc. Colored articles and compositions and methods for their fabrication
JPH11161530A (ja) 1997-11-27 1999-06-18 Ntt Data Corp トランザクション処理システム
JP2957551B2 (ja) 1997-12-12 1999-10-04 株式会社リコー 分散型データベースシステムの一貫性管理方法およびコンピュータ読み取り可能な記録媒体
US20030055826A1 (en) * 2001-09-14 2003-03-20 Kevin Graham System and method for connecting to and controlling to disparate databases
US20030074342A1 (en) * 2001-10-11 2003-04-17 Curtis Donald S. Customer information management infrastructure and methods
WO2004072816A2 (en) * 2003-02-07 2004-08-26 Lammina Systems Corporation Method and apparatus for online transaction processing
JP3823169B1 (ja) 2005-12-06 2006-09-20 データアクセス株式会社 データ制御装置、システム、方法、及びプログラム
JP2007183728A (ja) 2006-01-05 2007-07-19 Nippon Telegr & Teleph Corp <Ntt> 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム
JP4261609B1 (ja) 2008-05-02 2009-04-30 透 降矢 トランザクションの同時実行制御を備えたマルチオペレーション・プロセッシングを用いたデータベースのトランザクション処理システム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09305614A (ja) * 1996-03-13 1997-11-28 Hitachi Ltd データベースの検索処理方法
JPH11232302A (ja) * 1998-02-19 1999-08-27 Hitachi Ltd 予約型情報検索配信方法及びシステム

Cited By (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11593369B2 (en) 2010-01-15 2023-02-28 Ab Initio Technology Llc Managing data queries
US10331655B2 (en) 2013-03-15 2019-06-25 Amazon Technologies, Inc. System-wide checkpoint avoidance for distributed database systems
US11500852B2 (en) 2013-03-15 2022-11-15 Amazon Technologies, Inc. Database system with database engine and separate distributed storage service
US11030055B2 (en) 2013-03-15 2021-06-08 Amazon Technologies, Inc. Fast crash recovery for distributed database systems
US10031813B2 (en) 2013-03-15 2018-07-24 Amazon Technologies, Inc. Log record management
KR101923334B1 (ko) * 2013-03-15 2018-11-28 아마존 테크놀로지스, 인크. 데이터베이스 엔진 및 개별 분산 저장 서비스를 갖는 데이터베이스 시스템
US10180951B2 (en) 2013-03-15 2019-01-15 Amazon Technologies, Inc. Place snapshots
US10698881B2 (en) 2013-03-15 2020-06-30 Amazon Technologies, Inc. Database system with database engine and separate distributed storage service
JP2016511486A (ja) * 2013-03-15 2016-04-14 アマゾン・テクノロジーズ・インコーポレーテッド データベースエンジンを備えたデータベースシステム及び別個の分散型ストレージサービス
US10747746B2 (en) 2013-04-30 2020-08-18 Amazon Technologies, Inc. Efficient read replicas
US10872076B2 (en) 2013-05-13 2020-12-22 Amazon Technologies, Inc. Transaction ordering
US10474547B2 (en) 2013-05-15 2019-11-12 Amazon Technologies, Inc. Managing contingency capacity of pooled resources in multiple availability zones
US10303564B1 (en) 2013-05-23 2019-05-28 Amazon Technologies, Inc. Reduced transaction I/O for log-structured storage systems
US9817710B2 (en) 2013-05-28 2017-11-14 Amazon Technologies, Inc. Self-describing data blocks stored with atomic write
US10437721B2 (en) 2013-09-20 2019-10-08 Amazon Technologies, Inc. Efficient garbage collection for a log-structured data store
US10216949B1 (en) 2013-09-20 2019-02-26 Amazon Technologies, Inc. Dynamic quorum membership changes
US9946735B2 (en) 2013-09-20 2018-04-17 Amazon Technologies, Inc. Index structure navigation using page versions for read-only nodes
US11120152B2 (en) 2013-09-20 2021-09-14 Amazon Technologies, Inc. Dynamic quorum membership changes
US10223184B1 (en) 2013-09-25 2019-03-05 Amazon Technologies, Inc. Individual write quorums for a log-structured distributed storage system
US10198356B2 (en) 2013-11-20 2019-02-05 Amazon Technologies, Inc. Distributed cache nodes to send redo log records and receive acknowledgments to satisfy a write quorum requirement
US9880933B1 (en) 2013-11-20 2018-01-30 Amazon Technologies, Inc. Distributed in-memory buffer cache system using buffer cache nodes
US10534768B2 (en) 2013-12-02 2020-01-14 Amazon Technologies, Inc. Optimized log storage for asynchronous log updates
JP2017535869A (ja) * 2014-11-14 2017-11-30 アビニシオ テクノロジー エルエルシー 和結合型操作を含むクエリの処理
US11308161B2 (en) 2015-02-18 2022-04-19 Ab Initio Technology Llc Querying a data source on a network
US11914571B1 (en) 2017-11-22 2024-02-27 Amazon Technologies, Inc. Optimistic concurrency for a multi-writer database
US11093223B2 (en) 2019-07-18 2021-08-17 Ab Initio Technology Llc Automatically converting a program written in a procedural programming language into a dataflow graph and related systems and methods
US11341163B1 (en) 2020-03-30 2022-05-24 Amazon Technologies, Inc. Multi-level replication filtering for a distributed database
KR102518268B1 (ko) * 2022-04-13 2023-04-05 주식회사 비투엔 마이크로 서비스 아키텍처 기반의 트랜잭션 가상화 처리 장치 및 방법

Also Published As

Publication number Publication date
US8527501B2 (en) 2013-09-03
US20120005196A1 (en) 2012-01-05
JP5536568B2 (ja) 2014-07-02

Similar Documents

Publication Publication Date Title
JP5536568B2 (ja) トランザクションを集約して処理する方法、システム、およびプログラム
JP4612715B2 (ja) 情報処理システム、データ更新方法およびデータ更新プログラム
US10853343B2 (en) Runtime data persistency for in-memory database systems
US11829349B2 (en) Direct-connect functionality in a distributed database grid
EP3058690B1 (en) System and method for creating a distributed transaction manager supporting repeatable read isolation level in a mpp database
US20160342647A1 (en) Parallel processing database system with a shared metadata store
US20150234884A1 (en) System and Method Involving Resource Description Framework Distributed Database Management System and/or Related Aspects
US9348641B2 (en) System and method for performing a transaction in a massively parallel processing database
US20080281846A1 (en) High performant row-level data manipulation using a data layer interface
WO2013046883A1 (ja) トランザクション処理システム、方法及びプログラム
JP2023546249A (ja) トランザクション処理方法、装置、コンピュータ機器及びコンピュータプログラム
US20120117027A1 (en) Methods and systems for hardware acceleration of database operations and queries for a versioned database based on multiple hardware accelerators
WO2017063520A1 (zh) 数据库的操作方法及装置
US20110161281A1 (en) Distributed Transaction Management in a Distributed Shared Disk Cluster Environment
US7958167B2 (en) Integration of unstructed data into a database
EP3688551B1 (en) Boomerang join: a network efficient, late-materialized, distributed join technique
US11537613B1 (en) Merge small file consolidation
Mühlbauer et al. Scyper: A hybrid oltp&olap distributed main memory database system for scalable real-time analytics
US10810116B2 (en) In-memory database with page size adaptation during loading
JP5181183B2 (ja) 変換装置、サーバシステム、変換方法およびプログラム
JP4676825B2 (ja) プログラム制御方法、計算機および計算機制御プログラム
WO2023134614A1 (zh) 事务的处理
US9619508B2 (en) Speculative begin transaction
US11169886B2 (en) Modification of temporary database pages
US7328207B2 (en) Extensions for query persistence across requests with dynamic update for writeback

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130304

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131217

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140307

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140408

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140424

R150 Certificate of patent or registration of utility model

Ref document number: 5536568

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees