JP6172294B2 - トランザクション分散処理装置、方法、システム、および、記憶媒体 - Google Patents

トランザクション分散処理装置、方法、システム、および、記憶媒体 Download PDF

Info

Publication number
JP6172294B2
JP6172294B2 JP2015554517A JP2015554517A JP6172294B2 JP 6172294 B2 JP6172294 B2 JP 6172294B2 JP 2015554517 A JP2015554517 A JP 2015554517A JP 2015554517 A JP2015554517 A JP 2015554517A JP 6172294 B2 JP6172294 B2 JP 6172294B2
Authority
JP
Japan
Prior art keywords
transaction
management data
processing
data
key
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2015554517A
Other languages
English (en)
Other versions
JPWO2015097991A1 (ja
Inventor
剛 宮田
剛 宮田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Publication of JPWO2015097991A1 publication Critical patent/JPWO2015097991A1/ja
Application granted granted Critical
Publication of JP6172294B2 publication Critical patent/JP6172294B2/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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、データに対するトランザクションを分散処理する分散処理システムに関する。
データに対するトランザクションを複数の処理単位に分散させて並列に処理する分散処理システムが知られている。
例えば、このような分散処理システムとして、キーバリューストア(KVS:Key Value Store)と呼ばれるデータ管理技術を用いるものが知られている。KVSは、保存対象のデータ(value)に対して対応する一意のキー(key)を設定する。そして、KVSは、キーおよびバリューの組を書き込み、キーを指定することでバリューを読み出す。KVSは、スケーラビリティに優れ、分散処理に適しているという特徴がある。
例えば、特許文献1には、分散KVSに関する関連技術が記載されている。この関連技術は、トランザクションを分散して処理する各サーバに、管理用マップを用意する。管理用マップは、トランザクションIDをキーとし、トランザクションの状態および終了待ちのトランザクションIDをバリューとして保持する。そしてこの関連技術は、管理用マップを用いることにより、トランザクション間のロックの依存関係を管理し、ロールバックを不必要に発生させることなく、トランザクションの分散処理を実現している。
また、このような分散処理システムは、トランザクションを分散処理する各処理単位でトランザクションログ(WAL:Write Ahead Logging)を先行して記録する。分散処理システムは、トランザクションログの先行記録により、トランザクション処理を完了する。そして、分散処理システムは、その後、実際のデータに対する反映を、トランザクション処理とは非同期に行う。これにより、このような分散処理システムは、トランザクション処理の高速化を実現している。
特開2013−033345号公報
しかしながら、上述のような、トランザクションログの先行記録およびデータ反映を非同期に行う分散処理システムでは、一意性を有するキーに対する制約違反発生の検出は、データ反映の際に行われていた。一意性を有するキーとは、主キーやユニークキー等である。これは、異なる処理単位で実行されるトランザクション間では、一意性の制約を有するデータが集約・反映される時点まで待たないと、キーの重複を検出できないためである。しかし、この場合、制約違反が検出された時点で、トランザクション自体はトランザクションログの先行書き込みとして完了している。そのため、一意性に関する制約違反の検出策としては不完全であった。
ここで、上述のような分散処理システムにおいて、一意性制約のあるキーを集中管理し、トランザクション開始時点で一意性に関する制約違反をチェックする手法も考えられる。しかしながら、その場合、一意性に関する制約違反のチェックが一ヶ所に集中するため、その設計思想に反して、分散処理システムのスケーラビリティが損なわれるという問題があった。
また、特許文献1に記載された関連技術では、トランザクション間のロックの依存関係を考慮して処理を行うことができるが、一意性に関する制約違反の検出については記載がない。
本発明は、上述の課題を解決するためになされたものである。すなわち、本発明は、トランザクションログの先行記録と実際のデータ反映とを非同期に行う分散処理システムにおいて、トランザクションを複数の処理単位で分散処理する際に、スケーラビリティ低下を抑制しつつ、処理単位を跨る一意性制約違反をより確実に検出可能な技術を提供することを目的とする。
上記目的を達成するために、本発明のトランザクション分散処理装置は、トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、前記トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間、前記違反検出キーに対応付けて保持する管理データ分散保持手段と、自装置(トランザクション分散処理装置)に処理が振り分けられたトランザクションを処理する際に、該トランザクションにおける前記違反検出キーに基づき特定される前記管理データの振分先となる自装置または他の前記トランザクション分散処理装置の前記管理データ分散保持手段に、該違反検出キーに対応付けられた他の管理データが保持されていない場合に、該トランザクションに関する前記管理データを、該振分先の前記管理データ分散保持手段に該違反検出キーに対応付けて保持させてから、該トランザクションの処理内容を表すトランザクションログをトランザクションログ保持手段に先行記録することにより、トランザクション処理を完了するトランザクション処理手段と、前記トランザクション処理手段による処理とは非同期に、前記トランザクションログ保持手段に保持されたトランザクションログを、前記処理対象データに対して反映させる遅延反映手段と、を備える。
また、本発明のアプリケーション装置は、処理対象データに対するトランザクションを生成するアプリケーション手段と、上述のトランザクション分散処理装置のうち、前記トランザクションの振分先となるトランザクション分散処理装置を特定するためのトランザクション振分情報を記憶しておき、前記アプリケーション手段によって生成されたトランザクションの処理を、前記トランザクション振分情報に基づいて特定されるトランザクション分散処理装置に要求するトランザクション振分手段と、前記トランザクション分散処理装置のうち、前記管理データの振分先となる前記トランザクション分散処理装置を特定するための管理データ振分情報を記憶しておき、前記管理データ振分情報に基づいて特定されるトランザクション分散処理装置を、前記トランザクションの振分先となるトランザクション分散処理装置に対して通知する管理データ振分手段と、を備える。
また、本発明のデータ保持装置は、前記処理対象データを保持するデータ保持手段と、上述のトランザクション分散処理装置に保持される前記トランザクションログを、前記データ保持手段に対して反映させるデータ反映手段と、を備える。
また、本発明の構成管理装置は、上述のトランザクション分散処理装置の構成変更に応じて、上述のアプリケーション装置に保持される前記トランザクション振分情報および前記管理データ振分情報を更新する振分情報更新手段を備える。
また、本発明の分散処理システムは、上述のトランザクション分散処理装置と、前記トランザクション分散処理装置に対してトランザクションの処理を要求する上述のアプリケーション装置と、前記アプリケーション装置によって生成されるトランザクションの対象となる処理対象データを保持する上述のデータ保持装置と、前記トランザクション分散処理装置、前記アプリケーション装置、および、前記データ保持装置の構成を管理する上述の構成管理装置と、を備える。
また、本発明の分散処理方法は、処理対象データに対するトランザクションを1つ以上のトランザクション分散処理装置に分散処理させる際に、トランザクション間で一意性制約違反が発生し得る違反検出キーに対応付けた管理データを、前記違反検出キーに基づいて特定される前記トランザクション分散処理装置に振り分け、前記管理データの振分先の前記トランザクション分散処理装置に、前記違反検出キーに対応付けられた他のトランザクションに基づく前記管理データが保持されていない場合に、前記処理対象データが前記トランザクションログの反映待ちである間、前記違反検出キーに対応付けて前記管理データを保持させてから、前記トランザクションの振分先のトランザクション分散処理装置において前記トランザクションログを先行記録することによりトランザクション処理を完了し、前記トランザクション処理とは非同期に、前記トランザクションログを前記処理対象データへ反映させる。
また、本発明のトランザクション分散処理方法は、トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、前記トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間、前記違反検出キーに対応付けて保持する管理データ分散保持手段を用いて、自装置に処理が振り分けられたトランザクションを処理する際に、該トランザクションにおける前記違反検出キーに基づき特定される前記管理データの振分先となる自装置または他装置の前記管理データ分散保持手段に、該違反検出キーに対応付けられた他の管理データが保持されていない場合に、該トランザクションに関する前記管理データを、該振分先の前記管理データ分散保持手段に該違反検出キーに対応付けて保持させてから、該トランザクションの処理内容を表すトランザクションログを先行記録することにより、トランザクション処理を完了し、前記トランザクション処理とは非同期に、前記トランザクションログを、前記処理対象データに対して反映させる。
また、本発明の記憶媒体は、トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、前記トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間、前記違反検出キーに対応付けて保持する管理データ分散保持手段を用いて、自装置に処理が振り分けられたトランザクションを処理する際に、該トランザクションにおける前記違反検出キーに基づき特定される前記管理データの振分先となる自装置または他装置の前記管理データ分散保持手段に、該違反検出キーに対応付けられた他の管理データが保持されていない場合に、該トランザクションに関する前記管理データを、該振分先の前記管理データ分散保持手段に該違反検出キーに対応付けて保持させてから、該トランザクションの処理内容を表すトランザクションログをトランザクションログ保持手段に先行記録することにより、トランザクション処理を完了するトランザクション処理ステップと、前記トランザクション処理とは非同期に、前記トランザクションログ保持手段に保持されたトランザクションログを、前記処理対象データに対して反映させる遅延反映ステップと、をコンピュータ装置に実行させるトランザクション分散処理プログラムを記憶する。
また、本発明のトランザクション振分方法は、上述のトランザクション分散処理方法を実行するトランザクション分散処理装置のうち、前記トランザクションの振分先となるトランザクション分散処理装置を特定するためのトランザクション振分情報と、前記トランザクション分散処理装置のうち、前記管理データの振分先となる前記トランザクション分散処理装置を特定するための管理データ振分情報とを用いて、処理対象データに対するトランザクションを生成し、生成したトランザクションの処理を、前記トランザクション振分情報に基づいて特定されるトランザクション分散処理装置に対して要求し、前記管理データ振分情報に基づいて特定されるトランザクション分散処理装置を、前記トランザクションの振分先となるトランザクション分散処理装置に対して通知する。
また、本発明の記憶媒体は、上述の記憶媒体に記憶されたトランザクション分散処理プログラムを実行するトランザクション分散処理装置のうち、前記トランザクションの振分先となるトランザクション分散処理装置を特定するためのトランザクション振分情報と、前記トランザクション分散処理装置のうち、前記管理データの振分先となる前記トランザクション分散処理装置を特定するための管理データ振分情報とを用いて、前記処理対象データに対するトランザクションを生成するトランザクション生成ステップと、前記トランザクション生成ステップにおいて生成されたトランザクションの処理を、前記トランザクション振分情報に基づいて特定されるトランザクション分散処理装置に対して要求するトランザクション振分ステップと、前記管理データ振分情報に基づいて特定されるトランザクション分散処理装置を、前記トランザクションの振分先となるトランザクション分散処理装置に対して通知する管理データ振分ステップと、をコンピュータ装置に実行させるトランザクション振分プログラムを記憶する。
また、本発明のデータ保持方法は、上述のトランザクション分散処理方法を実行するトランザクション分散処理装置によって先行記録されるトランザクションログを反映させる処理対象データを保持する。
また、本発明の記憶媒体は、データ保持手段に保持される処理対象データに対して、上述の記憶媒体に記憶されたトランザクション分散処理プログラムを実行するトランザクション分散処理装置によって先行記録されるトランザクションログを反映させる反映ステップを、コンピュータ装置に実行させるデータ保持プログラムを記憶する。
また、本発明の構成管理方法は、上述のトランザクション分散処理方法を実行するトランザクション分散処理装置の構成変更に応じて、上述のトランザクション振分方法において用いられる前記トランザクション振分情報および前記管理データ振分情報を更新する。
また、本発明の記憶媒体は、上述の記憶媒体に記憶されたトランザクション分散処理プログラムを実行するトランザクション分散処理装置の構成変更に応じて、上述の記憶媒体に記憶されたトランザクション振分プログラムによって用いられる前記トランザクション振分情報および前記管理データ振分情報を更新する振分情報更新ステップを、コンピュータ装置に実行させる構成管理プログラムを記憶する。
本発明は、トランザクションログの先行記録と実際のデータ反映とを非同期に行う分散処理システムにおいて、トランザクションを複数の処理単位で分散処理する際に、スケーラビリティ低下を抑制しつつ、処理単位を跨る一意性制約違反をより確実に検出可能な技術を提供することができる。
本発明の実施の形態としての分散処理システムの構成を示すブロック図である。 本発明の実施の形態としての分散処理システムのハードウェア構成図である。 本発明の実施の形態としての分散処理システムの機能ブロック図である。 本発明の実施の形態としての分散処理システムのトランザクション振分動作を説明するフローチャートである。 本発明の実施の形態としての分散処理システムのトランザクション処理を説明するフローチャートである。 本発明の実施の形態としての分散処理システムのトランザクションログの反映動作を説明するフローチャートである。 本発明の実施の形態としての分散処理システムのデータ反映動作を説明するフローチャートである。 本発明の実施の形態としての分散処理システムの管理データ削除動作を説明するフローチャートである。 本発明の実施の形態としての分散処理システムの構成管理動作を説明するフローチャートである。 本発明の実施の形態としての分散処理システムの具体例の構成を示す模式図である。 本発明の実施の形態の具体例における処理対象データを説明する図である。 本発明の実施の形態の具体例において分散保持される処理対象データを説明する図である。 本発明の実施の形態の具体例における主キーの管理データを説明する図である。 本発明の実施の形態の具体例において分散保持される主キーの管理データを説明する図である。 本発明の実施の形態の具体例において更新される前後の主キーの管理データ振分情報を説明する図である。 本発明の実施の形態としての分散処理システムの他の具体例の構成を示す模式図である。 本発明の実施の形態の他の具体例における処理対象データを説明する図である。 本発明の実施の形態の他の具体例における処理対象データの実体としてのKVSを説明する図である。 本発明の実施の形態の他の具体例におけるユニークキーの管理データを説明する図である。
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
(構成の説明)
本発明の実施の形態としての分散処理システム1の構成を図1に示す。
図1において、分散処理システム1は、データ保持装置10と、アプリケーション装置20と、トランザクション分散処理装置30と、構成管理装置40とを備える。また、各装置は、ネットワークを介して互いに通信可能に接続されている。ここで、図1には、複数のデータ保持装置10と、1つのアプリケーション装置20と、複数のトランザクション分散処理装置30と、1つの構成管理装置40とを示しているが、本発明の分散処理システムが備える各装置の数を限定するものではない。
データ保持装置10は、処理対象データを保持する装置である。本実施の形態では、処理対象データは、仮想的な表(仮想表)を表し、仮想表の識別情報および仮想表における主キーの値からなる情報をキーとしてデータが対応付けられたキーバリューストア(KVS:Key Value Store)であるものとする。また、本実施の形態では、データ保持装置10は、処理対象データを、他のデータ保持装置10との間で分散保持するものとする。
アプリケーション装置20は、処理対象データに対するトランザクションを生成する装置である。本実施の形態では、アプリケーション装置20は、仮想表を表す上述のKVSに対するトランザクションを生成するものとする。
トランザクション分散処理装置30は、アプリケーション装置20によって生成されるトランザクションを、他のトランザクション分散処理装置30との間で分散処理する装置である。
構成管理装置40は、分散処理システム1の構成を管理する装置である。
次に、分散処理システム1を構成する各装置のハードウェア構成を図2に示す。図2において、データ保持装置10は、CPU(Central Processing Unit)1001と、RAM(Random Access Memory)1002と、ROM(Read Only Memory)1003と、ハードディスク等の記憶装置1004と、ネットワークインタフェース1005とを備えたコンピュータ装置によって構成可能である。また、アプリケーション装置20は、CPU2001と、RAM2002と、ROM2003と、ハードディスク等の記憶装置2004と、ネットワークインタフェース2005とを備えたコンピュータ装置によって構成可能である。また、トランザクション分散処理装置30は、CPU3001と、RAM3002と、ROM3003と、ハードディスク等の記憶装置3004と、ネットワークインタフェース3005とを備えたコンピュータ装置によって構成可能である。また、構成管理装置40は、CPU4001と、RAM4002と、ROM4003と、ハードディスク等の記憶装置4004と、ネットワークインタフェース4005とを備えたコンピュータ装置によって構成可能である。なお、分散処理システム1を構成する各装置のハードウェア構成は、上述の構成に限定されない。
次に、分散処理システム1を構成する各装置の機能ブロック構成を図3に示す。
まず、トランザクション分散処理装置30の機能ブロック構成について説明する。
図3において、トランザクション分散処理装置30は、管理データ分散保持部31と、トランザクション処理部32と、トランザクションログ保持部33と、遅延反映部34とを有する。ここで、トランザクション分散処理装置30が図2に示したハードウェア要素を備えるコンピュータ装置によって構成される場合、管理データ分散保持部31およびトランザクションログ保持部33は、RAM3002および記憶装置3004によって構成される。また、トランザクション処理部32および遅延反映部34は、ネットワークインタフェース3005と、ROM3003または記憶装置3004に記憶されたコンピュータ・プログラムおよび各種データをRAM3002に読み込んで実行するCPU3001とによって構成される。なお、トランザクション分散処理装置30を構成する各機能ブロックのハードウェア構成は、上述の構成に限定されない。
管理データ分散保持部31は、違反検出キーに基づいて自装置に振り分けられた管理データを、違反検出キーに対応付けて保持する。ここで、違反検出キーとは、処理対象データにおいて一意性制約を有するキーのうち、トランザクション間で一意性制約違反が発生し得るキーである。また、管理データとは、トランザクションが対象とする処理対象データがトランザクションログの反映待ちであることを表す情報である。また、管理データ分散保持部31は、そのような管理データを、該当する処理対象データがトランザクションログの反映待ちである間、保持する。
ここで、処理対象データが仮想表を表すKVSである場合、トランザクション間で、ある仮想表の主キーについて一意性制約違反が発生し得るとする。この場合、違反検出キーは、仮想表の識別情報および仮想表における主キーの値からなる情報となる。また、トランザクション間で、ある仮想表のユニークキーについて一意性制約違反が発生し得るとする。この場合、違反検出キーは、仮想表の識別情報および仮想表におけるユニークキーの値からなる情報となる。また、管理データは、違反検出キーに対して後述のトランザクションキーを含む情報が対応付けられたKVSであってもよい。
なお、管理データ分散保持部31は、違反検出キーの値毎に1つの管理データを記憶し、同一の値の違反検出キーについて同時に複数の管理データを保持できないものとする。どのような値の違反検出キーについての管理データがどのトランザクション分散処理装置30の管理データ分散保持部31に振り分けられるかについては、後述のアプリケーション装置20により、違反検出キーに基づき一意に特定されるよう定められている。
トランザクション処理部32は、アプリケーション装置20から要求されたトランザクションを処理する際に、そのトランザクションにおける違反検出キーを、その違反検出キーについての管理データの振分先であるトランザクション分散処理装置30の管理データ分散保持部31に保持させることを試みる。もし、そのトランザクションにおいて一意性制約違反が発生し得る複数の違反検出キーがあれば、トランザクション処理部32は、各違反検出キーについてその振分先への保持を試みればよい。ここで、各管理データの振分先は、アプリケーション装置20から通知されるものとする。なお、アプリケーション装置20からの振分先の通知の詳細については後述する。
前述のように、管理データ分散保持部31は、同一の値の違反検出キーについて1つの管理データを保持し、同一の値の違反検出キーについて複数の管理データを保持しないように構成される。ここで、振分先の管理データ分散保持部31において、該当する違反検出キーについて既に他のトランザクションに基づく他の管理データが保持されている場合がある。この場合、トランザクション処理部32は、振分先への管理データの保持に失敗する。一方、振分先の管理データ分散保持部31において、該当する違反検出キーについて他の管理データが保持されていない場合がある。この場合、トランザクション処理部32は、振分先への管理データの保持に成功する。
また、トランザクション処理部32は、要求されたトランザクションに関わる各管理データについて、その振分先への保持に成功すると、次のように動作するよう構成される。この場合、トランザクション処理部32は、そのトランザクションの処理内容を表すトランザクションログを、トランザクションログ保持部33に先行記録する。そして、トランザクション処理部32は、トランザクション処理の完了を、アプリケーション装置20に対して通知する。
また、トランザクション処理部32は、要求されたトランザクションに関わる各管理データの少なくともいずれかについて振分先への保持に失敗すると、次のように動作するよう構成される。この場合、トランザクション処理部32は、このトランザクションの処理を開始する前の状態に戻り、アプリケーション装置20に対してエラーを通知する。前の状態に戻るとは、例えば、要求されたトランザクションに関わる管理データのうち、いったん振分先での保持に成功した管理データを、振分先から削除する処理を行うことなどである。
なお、トランザクション処理部32は、各管理データの振分先への保持に成功した後、トランザクションログを先行記録する前に、確認処理を行ってもよい。確認処理とは、その違反検出キーに関わる処理対象データの振分先となるデータ保持装置10に対して、該当する違反検出キーに関する処理対象データが保持されていないことを確認する処理である。そのような確認先のデータ保持装置10は、次に説明するデータ振分情報を参照することにより特定可能である。これにより、トランザクション処理部32は、該当するトランザクションにより、一意性制約違反が発生しないことをさらに確実にできる。
トランザクションログ保持部33は、トランザクション処理部32によって先行記録されるトランザクションログを保持する。
遅延反映部34は、トランザクション処理部32によるトランザクション処理とは非同期に、トランザクションログ保持部33に保持されたトランザクションログを、データ保持装置10の処理対象データに反映させる。
具体的には、遅延反映部34は、トランザクションログの対象となる処理対象データの振分先となるデータ保持装置10を特定する。このために、遅延反映部34は、例えば、データ振分情報をあらかじめ記憶していてもよい。データ振分情報は、データ保持装置10のうち、各処理対象データの振分先となるデータ保持装置10を特定するための情報である。例えば、データ振分情報は、仮想表を識別する情報および主キーの値からなる情報から算出されるハッシュ値の範囲に対して、その振分先となるデータ保持装置10が定められた情報であってもよい。
この場合、遅延反映部34は、トランザクションログの示す仮想表を識別する情報および主キーの値からなる情報に対してハッシュ関数を適用してハッシュ値を算出する。そして、遅延反映部34は、算出したハッシュ値を含む範囲に対して対応付けられたデータ保持装置10を、その処理対象データの振分先として特定すればよい。
そして、遅延反映部34は、データ振分情報に基づいて特定されるデータ保持装置10に対して、トランザクションログ保持部33に保持されたトランザクションログを処理対象データに反映させるための反映情報を送信する。なお、遅延反映部34は、反映情報の反映が完了したトランザクションログを、トランザクションログ保持部33から削除する。
次に、アプリケーション装置20の機能ブロック構成について説明する。
図3において、アプリケーション装置20は、アプリケーション部21と、トランザクション振分部22と、管理データ振分部23とを有する。ここで、アプリケーション装置20が図2に示したハードウェア要素を備えるコンピュータ装置によって構成される場合、アプリケーション部21は、ROM2003または記憶装置2004に記憶されたコンピュータ・プログラムおよび各種データをRAM2002に読み込んで実行するCPU2001によって構成される。また、トランザクション振分部22および管理データ振分部23は、ネットワークインタフェース2005と、ROM2003または記憶装置2004に記憶されたコンピュータ・プログラムおよび各種データをRAM2002に読み込んで実行するCPU2001とによって構成される。なお、アプリケーション装置20を構成する各機能ブロックのハードウェア構成は、上述の構成に限定されない。
アプリケーション部21は、処理対象データに対するトランザクションを生成する。前述のように、本実施の形態では、アプリケーション部21は、仮想表を表すKVSに対するトランザクションを生成する。また、各トランザクションには、そのトランザクションを識別するトランザクションキーが設定される。例えば、2つの仮想表に同一の項目「A」を表す列がそれぞれ含まれ、各仮想表において「A」列に同一の値を指定する2つの関連する処理が1つのトランザクションクラスとして定義される場合を考える。この場合、トランザクションキーは、項目「A」に指定される値であってもよい。
また、アプリケーション部21は、生成するトランザクションの定義情報に基づいて、そのトランザクションが他のトランザクションとの間で一意性制約違反を発生し得る違反検出キーを特定可能である。例えば、トランザクション間で、ある仮想表の主キーについて一意性制約違反が発生し得ることを想定する。この場合、アプリケーション部21は、その仮想表の識別情報およびその仮想表における主キーの値からなる情報を、このトランザクションにおける違反検出キーとして特定する。また、例えば、トランザクション間で、ある仮想表のユニークキーについて一意性制約違反が発生し得ることを想定する。この場合、アプリケーション部21は、その仮想表の識別情報およびその仮想表におけるユニークキーの値からなる情報を、このトランザクションにおける違反検出キーとして特定する。また、アプリケーション部21は、トランザクション間で一意性制約違反が発生し得る複数の違反検出キーを特定してもよい。特定された違反検出キーは、後述の管理データ振分部23によって用いられる。
トランザクション振分部22は、トランザクション振分情報をあらかじめ記憶している。ここで、トランザクション振分情報は、トランザクション分散処理装置30のうち、各トランザクションの振分先となるトランザクション分散処理装置30を特定するための情報である。例えば、トランザクション振分情報は、トランザクションキーから算出されるハッシュ値の範囲に対して、振分先となるトランザクション分散処理装置30が定められた情報であってもよい。
また、トランザクション振分部22は、アプリケーション部21によって生成されたトランザクションについて、トランザクション振分情報に基づいてその振分先のトランザクション分散処理装置30を特定する。そして、トランザクション振分部22は、振分先のトランザクション分散処理装置30に対して、そのトランザクションの処理を要求する。
例えば、トランザクション振分情報が、ハッシュ値の範囲に対して、振分先のトランザクション分散処理装置30が対応付けられた情報である場合を考える。この場合、トランザクション振分部22は、トランザクションキーに対してハッシュ関数を適用してハッシュ値を算出する。そして、トランザクション振分部22は、算出したハッシュ値を含む範囲に対して対応付けられたトランザクション分散処理装置30を、振分先として特定すればよい。
管理データ振分部23は、管理データ振分情報をあらかじめ記憶している。ここで、管理データ振分情報は、トランザクション分散処理装置30のうち、違反検出キーに基づき管理データの振分先となるトランザクション分散処理装置30を特定するための情報である。例えば、管理データ振分情報は、違反検出キーから算出されるハッシュ値の範囲に対して、振分先となるトランザクション分散処理装置30が定められた情報であってもよい。
また、管理データ振分部23は、トランザクションの振分先となるトランザクション分散処理装置30に対して、そのトランザクションにおける各違反検出キーについて、管理データの振分先を通知する。
例えば、管理データ振分情報が、ハッシュ値の範囲に対して、振分先のトランザクション分散処理装置30が対応付けられた情報である場合を考える。この場合、管理データ振分部23は、トランザクションにおける各違反検出キーに対してハッシュ関数を適用してハッシュ値を算出する。そして、管理データ振分部23は、算出したハッシュ値を含む範囲に対して対応付けられたトランザクション分散処理装置30を、振分先として特定すればよい。
また、管理データ振分部23は、データ保持装置10からの照会に応じて、反映が完了した処理対象データにおける違反検出キーに対応付けられた管理データの振分先を通知してもよい。この照会は、振分先のトランザクション分散処理装置30において、該当する管理データを削除するよう、データ保持装置10から要求するために行われる。
次に、データ保持装置10の機能ブロック構成について説明する。
図3において、データ保持装置10は、データ保持部11と、データ反映部12とを有する。ここで、データ保持装置10が図2に示したハードウェア要素を備えるコンピュータ装置によって構成される場合、データ保持部11は、記憶装置1004によって構成される。また、データ反映部12は、ネットワークインタフェース1005と、ROM1003または記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001とによって構成される。なお、データ保持装置10を構成する各機能ブロックのハードウェア構成は、上述の構成に限定されない。
データ保持部11は、処理対象データを保持する。前述のように、本実施の形態では、処理対象データは、複数のデータ保持装置10に分散保持される。したがって、データ保持部11は、自装置に振り分けられた処理対象データを保持している。また、本実施の形態では、処理対象データは、仮想表の識別情報および仮想表における主キーの値からなる情報をキーとするKVSである。前述のように、どの処理対象データがどのデータ保持装置10に保持されるかについては、トランザクション分散処理装置30に保持されるデータ振分情報により、キーに基づいて一意に特定されるよう定められている。
データ反映部12は、トランザクション分散処理装置30から送信されるトランザクションログの反映情報を、データ保持部11に反映させる。
また、データ反映部12は、反映の対象となった処理対象データにおける違反検出キーに対応付けられた管理データの振分先となっているトランザクション分散処理装置30に対して、その管理データの削除を要求する。前述のように、データ反映部12は、アプリケーション装置20に照会することにより、該当する管理データの振分先となっているトランザクション分散処理装置30を特定可能である。もし、分散処理システム1に複数のアプリケーション装置20が含まれる場合、データ反映部12は、いずれかのアプリケーション装置20に対して照会を行えばよい。なお、データ反映部12は、後述の構成管理装置40に問い合わせることにより、照会可能な1つ以上のアプリケーション装置20を表す情報を得ることができる。また、データ反映部12は、複数のアプリケーション装置20のうち、所定のルールにしたがって照会先を選択してもよい。例えば、所定のルールとして、直近の照会先を記憶しておき、ラウンドロビンで照会先を変更するルールを適用してもよい。このように構成することにより、特定のアプリケーション装置20へデータ保持装置10からの照会が集中することを防止できる。
次に、構成管理装置40の機能ブロック構成について説明する。
図3において、構成管理装置40は、振分情報更新部41を有する。ここで、構成管理装置40が図2に示したハードウェア要素を備えるコンピュータ装置によって構成される場合、振分情報更新部41は、ネットワークインタフェース4005と、ROM4003または記憶装置4004に記憶されたコンピュータ・プログラムおよび各種データをRAM4002に読み込んで実行するCPU4001とによって構成される。なお、振分情報更新部41を構成する各機能ブロックのハードウェア構成は、上述の構成に限定されない。
振分情報更新部41は、分散処理システム1におけるトランザクション分散処理装置30の構成変更に応じて、アプリケーション装置20におけるトランザクション振分情報および管理データ振分情報を更新する。トランザクション分散処理装置30の構成変更とは、例えば、新たなトランザクション分散処理装置30の追加、または、既存のトランザクション分散処理装置30の削除などを言う。その他、構成変更とは、このような追加または削除に限らず、各トランザクション分散処理装置30の負荷状況の変化などであってもよい。その場合、振分情報更新部41は、それぞれの負荷状況の変化に応じて、トランザクション振分情報や管理データ振分情報における各装置の担当範囲を変更してもよい。
また、振分情報更新部41は、更新される管理データ振分情報に基づいて管理データが格納されるように、既に格納済みの管理データのトランザクション分散処理装置30間での移動を制御する。例えば、振分情報更新部41は、管理データ振分情報の更新内容を決定した後、トランザクション分散処理装置30間での管理データ移動を制御し、移動が完了すると、管理データ振分情報を更新するようにしてもよい。
また、振分情報更新部41は、分散処理システム1におけるデータ保持装置10の構成変更に応じて、トランザクション分散処理装置30におけるデータ振分情報を更新する。データ保持装置10の構成変更とは、例えば、新たなデータ保持装置10の追加、または、既存のデータ保持装置10の削除などを言う。その他、構成変更とは、このような追加または削除に限らず、各データ保持装置10の負荷状況の変化などであってもよい。その場合、振分情報更新部41は、それぞれの負荷状況の変化に応じて、データ振分情報における各装置の担当範囲を変更してもよい。
また、振分情報更新部41は、更新されるデータ振分情報に基づいて処理対象データが格納されるように、既に格納済みの処理対象データの各データ保持装置10間での移動を制御する。例えば、振分情報更新部41は、データ振分情報の更新内容を決定した後、データ保持装置10間での処理対象データの移動を制御し、移動が完了すると、データ振分情報を更新するようにしてもよい。
なお、例えば、振分情報更新部41は、分散処理システム1における各装置の構成に関する構成情報を保持しておき、その追加や削除を検出することにより、上述の各振分情報の更新処理を行ってもよい。
(動作の説明)
以上のように構成された分散処理システム1の動作について、図面を参照して説明する。
まず、アプリケーション装置20のトランザクション振分動作を図4に示す。
図4では、まず、アプリケーション部21は、処理対象データに対するトランザクションを生成する(ステップS1)。前述のように、生成されたトランザクションには、トランザクションキーが設定される。
次に、トランザクション振分部22は、ステップS1で生成されたトランザクションの振分先となるトランザクション分散処理装置30を特定する(ステップS2)。前述のように、トランザクション振分部22は、トランザクション振分情報を参照することにより振分先の特定を行う。
次に、管理データ振分部23は、ステップS1で生成されたトランザクションにおいて一意性制約違反を発生し得る各違反検出キーに基づいて、管理データの振分先となるトランザクション分散処理装置30を特定する(ステップS3)。前述のように、管理データ振分部23は、管理データ振分情報を参照することにより振分先の特定を行う。
次に、トランザクション振分部22は、ステップS2で特定されたトランザクションの振分先のトランザクション分散処理装置30に対して、ステップS1で生成されたトランザクションの処理を要求する。また、管理データ振分部23は、トランザクションの振分先のトランザクション分散処理装置30に対して、ステップS3で特定された各違反検出キーについての管理データの振分先を通知する(ステップS4)。
次に、トランザクション振分部22は、ステップS2で特定されたトランザクションの振分先のトランザクション分散処理装置30から、トランザクション処理の完了またはエラーを表す情報を受信する(ステップS5)。
以上で、アプリケーション装置20は、トランザクション振分動作を終了する。
次に、トランザクション分散処理装置30のトランザクション処理を図5に示す。
図5では、まず、トランザクション処理部32は、アプリケーション装置20から、トランザクションの処理の要求を受信する。あわせて、トランザクション処理部32は、このトランザクションにおける各違反検出キーについて、その管理データの振分先となるトランザクション分散処理装置30を表す情報を受信する(ステップS11)。
次に、トランザクション処理部32は、このトランザクションにおける各違反検出キーについて、以下のステップS12〜S13を繰り返す。
ここでは、トランザクション処理部32は、該当する違反検出キーの振分先の管理データ分散保持部31に、該当する違反検出キーに対応付けられた他の管理データが保持されているか否かを判断する(ステップS12)。
ここで、該当する違反検出キーに対応付けられた他の管理データが保持されていない場合、トランザクション処理部32は、振分先の管理データ分散保持部31に、該当する違反検出キーに対応付けて管理データを保持させる(ステップS13)。
そして、トランザクション処理部32は、他の違反検出キーがあれば(ステップS14でYes)、その違反検出キーについてステップS12からの処理を繰り返す。なお、前述のように、トランザクション処理部32は、ステップS13を実行後、該当する違反検出キーに関わる処理対象データに関する確認処理を、その振分先のデータ保持装置10に対して行ってもよい。そして、その場合、トランザクション処理部32は、確認処理を行ってから、次の違反検出キーについての処理を繰り返すようにしてもよい。
そして、全ての違反検出キーについてその振分先での管理データの保持に成功した場合、トランザクション処理部32は、トランザクションログの先行記録を行う。詳細には、トランザクション処理部32は、このトランザクションの処理内容を表すトランザクションログを、トランザクションログ保持部33に先行記録する(ステップS15)。
次に、トランザクション処理部32は、トランザクション処理の完了を、アプリケーション装置20に通知する(ステップS16)。
一方、ステップS12で、いずれかの違反検出キーに対応付けられた管理データがその振分先に保持されていた場合、トランザクション処理部32は、ステップS11以前の状態に戻る(ステップS17)。具体的には、トランザクション処理部32は、それまでのステップS13の実行により振分先への保持に一旦成功した管理データを削除する処理等を行えばよい。
次に、トランザクション処理部32は、アプリケーション装置20に対して、エラーを通知する(ステップS18)。
以上で、トランザクション分散処理装置30は、トランザクション処理を終了する。
次に、トランザクション分散処理装置30の遅延反映動作を図6に示す。
図6では、まず、遅延反映部34は、トランザクションログ保持部33に保持されたトランザクションログについて、その処理対象データの振分先となるデータ保持装置10を特定する(ステップS31)。前述のように、遅延反映部34は、データ振分情報を参照することにより振分先の特定を行う。
次に、遅延反映部34は、ステップS31で特定されたデータ保持装置10に対して、トランザクションログを処理対象データに反映させるための反映情報を送信する(ステップS32)。
以上で、トランザクション分散処理装置30は、遅延反映動作を終了する。
次に、データ保持装置10におけるデータ反映動作を図7に示す。
図7では、まず、データ反映部12は、トランザクション分散処理装置30から、トランザクションログを処理対象データに反映させるための反映情報を受信する(ステップS41)。
次に、データ反映部12は、受信した反映情報を、データ保持部11に反映させる(ステップS42)。
次に、データ反映部12は、反映の対象となった処理対象データにおける違反検出キーに基づいて、その管理データの振分先となっているトランザクション分散処理装置30を特定する(ステップS43)。前述のように、振分先のトランザクション分散処理装置30は、アプリケーション装置20に照会することにより特定可能である。
次に、データ反映部12は、ステップS43で特定されたトランザクション分散処理装置30に対して、該当する違反検出キーに対応付けられた管理データを削除するよう要求する(ステップS44)。
以上で、データ保持装置10は、データ反映動作を終了する。
次に、上述のステップS44で管理データの削除を要求されたトランザクション分散処理装置30の管理データ削除動作を図8に示す。
図8では、まず、トランザクション分散処理装置30は、データ保持装置10から、管理データの削除要求を受信する(ステップS51)。
次に、管理データ分散保持部31は、該当する違反検出キーに対応付けられた管理データを削除する(ステップS52)。
以上で、トランザクション分散処理装置30は、管理データ削除動作を終了する。
次に、構成管理装置40が、分散処理システム1の構成を管理する動作を図9に示す。
図9において、まず、データ保持装置10の構成変更があった場合について説明する(ステップS61で「データ保持装置」)。この場合、振分情報更新部41は、各トランザクション分散処理装置30におけるデータ振分情報の更新内容を決定する(ステップS62)。
次に、振分情報更新部41は、ステップS62で決定された更新内容に基づいて、既に格納されている処理対象データの移動を行うよう、各データ保持装置10を制御する(ステップS63)。
次に、振分情報更新部41は、各トランザクション分散処理装置30におけるデータ振分情報を更新する(ステップS64)。
なお、振分情報更新部41は、ステップS63およびS64の処理を、不可分な処理として実行する。例えば、ステップS63またはS64の処理中にデータ振分情報に対する参照を行う他の処理は、ステップS63およびS64の完了を待ち合わせるようにする。
また、トランザクション分散処理装置30の構成変更があった場合について説明する(ステップS61で「トランザクション分散処理装置」)。この場合、振分情報更新部41は、アプリケーション装置20におけるトランザクション振分情報および管理データ振分情報の更新内容を決定する(ステップS65)。
次に、振分情報更新部41は、ステップS65で決定された管理データ振分情報の更新内容に基づいて、既に格納されている管理データの移動を行うよう、各トランザクション分散処理装置30を制御する(ステップS66)。
次に、振分情報更新部41は、アプリケーション装置20のトランザクション振分情報および管理データ振分情報を更新する(ステップS67)。
なお、振分情報更新部41は、ステップS66およびS67の処理を、不可分な処理として実行する。例えば、ステップS66またはS67の処理中にトランザクション振分情報または管理データ振分情報に対する参照を行う他の処理は、ステップS66およびS67の完了を待ち合わせるようにする。
以上で、構成管理装置40は、構成管理動作を終了する。
(本発明の実施の形態の具体例1)
次に、本実施の形態について1つ目の具体例(具体例1)を示す。なお、この具体例1では、データ保持装置10を、S層に配置されたコンピュータまたはノードSと呼ぶものとする。また、アプリケーション装置20を、P層に配置されたコンピュータまたはノードPと呼ぶものとする。また、トランザクション分散処理装置30を、T層に配置されたコンピュータまたはノードTと呼ぶものとする。図10は、具体例1の構成を模式的に示す図である。図10において、この分散処理システム1は、P層に1つのノードP1と、T層に3つのノードT1〜T3と、S層に2つのノードS1〜S2とを備える。なお、構成管理装置40については、図示を省略している。
また、この具体例1では、トランザクション間で一意性制約違反が発生し得る違反検出キーとして、仮想表の主キーが適用される例について説明する。この場合、ノードP1の管理データ振分情報は、仮想表の主キーに基づく管理データ振分情報となる。また、ノードT1〜T3の管理データ分散保持部31は、仮想表の主キーについての管理データを保持することになる。
また、この具体例1では、処理対象データは、商品の注文および請求に関わる仮想表Aおよび仮想表Bを表すKVSであることを想定する。図11に、仮想表Aおよび仮想表B、ならびに、その実体としてのKVSを示す。仮想表Aでは、主キーとして“請求書番号”の列が設定されている。また、仮想表Bでは、主キーとして“注文番号”が設定されている。なお、図11のKVSでは、仮想表Bに対応するKVペアに、主キーではない“請求書番号”の指定によりアクセスできるよう、“索引_表B_”から始まるキーに対応付けて、該当するKVペアへのインデックスが保持されている。また、これらの処理対象データ(KVS)の各KVペアは、図12に示すように、キーによって一意に特定されるノードS1またはS2に分散保持される。
また、この具体例1では、トランザクション処理の単位が、「各仮想表において“請求書番号”列が同じ値毎」と規定されているとする。この場合、“請求書番号”列が、トランザクションキーとなる。以降、“請求書番号”で識別されるトランザクション処理単位を、“トランザクションクラス1”と呼ぶとする。このとき、“トランザクションクラス1”が、P層において以下のように定義されていることを想定する。
・「トランザクションクラス1」は、仮想表Aの“請求書番号”列から生成される。
・「トランザクションクラス1」は、仮想表Bの“請求書番号”列から生成される。
ここで、トランザクションキーを請求書番号“10008”とする以下2つのトランザクションが、同時に実行されようとしている場合を考える。
<トランザクション1>
・仮想表Aに、「請求書番号:10008、請求先:佐藤、請求日:2013/07/01」を挿入
・仮想表Bに、「注文番号:00010、品名:炊飯器、請求書番号:10008」を挿入
<トランザクション2>
・仮想表Aに、「請求書番号:10008、請求先:田中、請求日:2013/07/01」を挿入
・仮想表Bに、「注文番号:00010、品名:ラジオ、請求書番号:10008」を挿入
この場合、ノードP1のトランザクション振分部22は、トランザクション振分情報として、トランザクションキーから算出されるハッシュ値の範囲に、その振分先となるノードTが対応付けられた情報を保持する。
また、ノードTの遅延反映部34は、データ振分情報として、「仮想表名+主キーの値」から算出されるハッシュ値の範囲に、その振分先となるノードSが対応付けられた情報を保持する。なお、ここでは、ノードT1〜T3には、同一のデータ振分情報が保持されるものとする。また、「X+Y」とは、XおよびYからなる情報を表すものとする。
このとき、T層における各トランザクションの振分先は、ノードP1におけるトランザクション振分情報に基づいて、トランザクションキーである請求書番号“10008”から一意に決定される。また、処理対象データとしてのKVペアのS層における振分先は、ノードTにおけるデータ振分情報に基づいて、「仮想表名+主キーの値」から一意に決定される。
また、このとき、トランザクションの振分先となったT層のノードは、各トランザクションについてトランザクションログを先行記録(WAL:Write Ahead Logging)することによりトランザクション処理を完了する。以下、先行記録されたトランザクションログも、WALとも記載する。また、処理対象データの振分先となったS層のノードは、トランザクション処理とは非同期に、処理対象データにWALを反映することになる。そのため、トランザクション1およびトランザクション2が実行されることにより、仮想表Aにおいて主キー制約違反(“請求書番号”の重複)が発生する可能性がある。また、仮想表Bにおいて主キー制約違反(“注文番号”の重複)が発生する可能性がある。
そこで、この具体例1では、一意性制約違反が発生し得る「仮想表A+主キーの値」と、「仮想表B+主キーの値」とが違反検出キーとなる。そこで、ノードP1の管理データ振分部23は、主キーに関わる管理データ振分情報を記憶しておく。具体的には、主キーに関わる管理データ振分情報は、「仮想表名+主キーの値」から算出されるハッシュ値の範囲に、その振分先のノードTが対応付けられた情報となる。これにより、管理データの振分先となるノードTは、ノードP1の管理データ振分情報に基づいて、一意に決定される。
また、この具体例1において生成される主キーについての管理データを、図13に示す。なお、図13の左図は、主キーについての管理データを模式的に表形式で示しているが、右図のように、その実体は、KVSである。図13の左図において、各行が示す管理データは、「仮想表名」および「主キーの値」に対して、「トランザクションキー」が対応付けられた情報となっている。また、図13の右図において、各行が示す管理データのKVペアは、「仮想表名+主キーの値」をキーとして、「仮想表名、主キー、トランザクションキー」を含むデータが対応付けられた情報となっている。この場合、「仮想表名+主キーの値」をキーとする管理データのKVペアは、その「仮想表名+主キーの値」をキーとする処理対象データのKVペアが、ノードSへの格納待ちとなっていることを表していると言える。
また、これらの主キーについての管理データは、この具体例において、図14に示すように、ノードT1〜T3に分散されて保持される。どの管理データがどのノードTに保持されるかについては、前述のように、ノードP1の管理データ振分情報に基づいて決定される。
以上のように構成された具体例1における分散処理システム1の動作について説明する。
まず、ノードP1において、アプリケーション部21は、上述のトランザクション1を生成する(図4のステップS1)。
このとき、このトランザクション1のトランザクションキーは、請求書番号“10008”である。そこで、トランザクション振分部22は、このトランザクション1の振分先を、トランザクション振分情報を参照することにより特定する(ステップS2)。具体的には、トランザクション振分部22は、請求書番号“10008”のハッシュ値を算出し、トランザクション振分情報において、算出したハッシュ値を含む範囲に対応付けられたノードTを特定すればよい。ここでは、ノードT1が特定されたとする。
また、トランザクション1における1つ目の仮想表Aへの挿入処理で一意性制約違反が発生し得る違反検出キーは、仮想表Aにおける請求項番号、すなわち、“表A_10008”である。また、2つ目の仮想表Bへの挿入処理で一意性制約違反が発生し得る違反検出キーは、仮想表Bにおける注文番号、すなわち、“表B_00010”である。
そこで、管理データ振分部23は、違反検出キー“表A_10008”に関わる管理データの振分先を、管理データ振分情報を参照することにより特定する。具体的には、管理データ振分部23は、“表A_10008”のハッシュ値を算出し、管理データ振分情報において、算出したハッシュ値を含む範囲に対応付けられたノードTを特定すればよい。ここでは、ノードT2が特定されたとする。同様に、管理データ振分部23は、違反検出キー“表B_00010”に対応する管理データの振分先を、管理データ振分情報を参照することにより特定する。ここでは、ノードT3であったとする(ステップS3)。
次に、トランザクション振分部22は、このトランザクション1の振分先のノードT1に対して、トランザクション1の処理を要求する。また、管理データ振分部23は、ノードT1に対して、違反検出キー“表A_10008”についての管理データの振分先としてノードT2を通知する。また、管理データ振分部23は、ノードT1に対して、違反検出キー“表B_00010”についての管理データの振分先としてノードT3を通知する(ステップS4)。
次に、トランザクション1の処理を要求されたノードT1は、次のように動作する。ノードT1のトランザクション処理部32は、1つ目の違反検出キー“表A_10008”についての管理データを、その振分先として通知されたノードT2の管理データ分散保持部31に保持させることを試みる。
ここでは、ノードT2の管理データ分散保持部31に、“表A_10008”をキーとする他の管理データ(KVペア)が保持されていなかったとする(図5のステップS12でNo)。
この場合、ノードT1のトランザクション処理部32は、ノードT2の管理データ分散保持部31に、“表A_10008”をキーとして、トランザクションキー“10008”を含むデータを対応付けたKVペアを保持させる(ステップS13)。
ここで、“表A_10008”をキーとする管理データ(KVペア)のT層での保持に成功することは、次のことを示している。すなわち、この保持の成功は、“表A_10008”をキーとする処理対象データ(KVペア)がS層のデータ保持部11(KVS)への格納待ちとなったことを、後続のトランザクションに対して示している。また、この保持の成功は、直前までに、S層のデータ保持部11(KVS)への格納を待つ“表A_10008”をキーとする他の処理対象データ(KVペア)が存在しなかったことを示している。
次に、ノードT1のトランザクション処理部32は、S層に、更新反映済の“表A_10008”をキーとする処理対象データ(KVペア)が存在しないことを確認してもよい。これにより、ノードT1のトランザクション処理部32は、一意性制約違反(主キーの重複)が発生しないことを確実にする。なお、この確認処理において、S層のどのノードが“表A_10008”をキーとする処理対象データを保持しているかは、データ振分情報を参照することにより特定可能である。
次に、ノードT1のトランザクション処理部32は、2つ目の違反検出キー“表B_00010”についても、上述と同様にステップS12〜S13を実行する。
すなわち、トランザクション処理部32は、2つ目の違反検出キー“表B_00010”についての管理データを、その振分先として通知されたノードT3に保持させることを試みる。
ここでは、ノードT3の管理データ分散保持部31に、“表B_00010”をキーとする他の管理データ(KVペア)が保持されていなかったとする(ステップS12でNo)。
この場合、ノードT1のトランザクション処理部32は、ノードT3の管理データ分散保持部31に、“表B_00010”をキーとして、トランザクションキー“10008”を含むデータを対応付けたKVペアを保持させる(ステップS13)。
前述のように、“表B_00010”をキーとする管理データ(KVペア)のT層での保持に成功することは、次のことを示している。すなわち、この保持の成功は、“表B_00010”をキーとする処理対象データ(KVペア)がS層のデータ保持部11(KVS)への格納待ちとなったことを、後続のトランザクションに対して示している。また、この保持の成功は、直前までに、S層のデータ保持部11(KVS)への格納を待つ“表B_00010”をキーとする他の処理対象データ(KVペア)が存在しなかったことを示している。
次に、ノードT1のトランザクション処理部32は、S層に、更新反映済の“表B_00010”をキーとする処理対象データ(KVペア)が存在しないことを確認してもよい。これにより、トランザクション処理部32は、一意性制約違反(主キーの重複)が発生しないことを確実にする。なお、この確認処理において、S層のどのノードが“表B_00010”をキーとする処理対象データを保持しているかは、データ振分情報を参照することにより特定可能である。
このようにして、ノードT1は、トランザクション1において一意性制約違反が発生し得る違反検出キー“表A_10008”および“表B_00010”について、T層での管理データの保持に成功した。これにより、トランザクション1によって主キーの重複が発生しないことが確認されたことになる。
そこで、ノードT1のトランザクション処理部32は、トランザクション1のWALを、自装置のトランザクションログ保持部33に先行記録する(ステップS15)。
そして、トランザクション処理部32は、トランザクション1の完了を、ノードP1に通知する(ステップS16)。
以上で、トランザクション1の処理が完了する。なお、トランザクション処理部32は、トランザクションにおける各違反検出キーについての管理データの保持を確認する順序について、あらかじめ定められた所定のルールにしたがって行えばよい。例えば、トランザクション処理部32は、違反検出キーを文字列として評価し、その昇順で管理データの保持の確認処理を行ってもよい。
上記のトランザクション1の処理とは非同期に、ノードT1の遅延反映部34は、次のように、トランザクションログ保持部33に記録されたトランザクション1のWALの反映を行う。
まず、遅延反映部34は、トランザクション1のWALが示す1つ目の処理における違反検出キー“表A_10008”に基づいて、処理対象データの振分先のノードSを、データ振分情報を参照することにより特定する(図6のステップS31)。具体的には、遅延反映部34は、“表A_10008”のハッシュ値を算出する。そして、遅延反映部34は、データ振分情報において、算出したハッシュ値を含む範囲に対応付けられたノードSを特定すればよい。ここでは、ノードS2であったとする。
次に、遅延反映部34は、ノードS2に対して、仮想表Aへの挿入処理の反映情報を送信する(ステップS32)。
次に、ノードS2のデータ反映部12は、反映情報に基づいて、データ保持部11に、“表A_10008”をキーとする処理対象データ(KVペア)を挿入する(図7のステップS42)。
次に、データ反映部12は、反映した処理対象データにおける違反検出キー“表A_10008”についての管理データの振分先を、ノードP1に照会することにより特定する(ステップS43)。ここでは、ノードT2が特定される。
次に、データ反映部12は、ノードT2に対して、違反検出キー“表A_10008”に対応付けられた管理データの削除を要求する(ステップS44)。
これにより、ノードT2の管理データ分散保持部31は、違反検出キー“表A_10008”をキーとする管理データ(KVペア)を削除する。
同様に、ノードT1の遅延反映部34は、トランザクション1のWALが示す2つ目の挿入処理についても、その処理対象データの振分先として、例えばノードS1を特定し、反映情報を送信する。そして、反映情報を受信したノードS1は、上記と略同様に動作して、データ保持部11に、“表B_00010”をキーとする処理対象データを挿入する。そして、ノードS1からの要求により、ノードT3は、管理データ分散保持部31から、違反検出キー“表B_00010”をキーとする管理データ(KVペア)を削除する。
以上で、トランザクション1のWALのS層への反映が終了する。
ここで、ノードT1におけるトランザクション1の処理に並行して、ノードP1がトランザクション2を生成し、ノードT2に対してその処理を要求したことを想定する。トランザクション2において、一意性違反が発生し得る違反検出キーは、トランザクション1と同様に、“表A_10008”および“表B_00010”である。上述と同様に、違反検出キー“表A_10008”の管理データの振分先はノードT2となり、違反検出キー“表B_00010”の管理データの振分先はノードT3となる。
この場合、ノードT2の管理データ分散保持部31には、上述のトランザクション1の処理により既に違反検出キー“表A_10008”をキーする管理データ(KVペア)が保持されている。したがって、ノードT2のトランザクション処理部32は、違反検出キー“表A_10008”をキーとする管理データ(KVペア)のT層での保持に失敗する。
あるいは、トランザクション2の処理中に、上述のトランザクション1のWALの反映が非同期に進行しているとする。そのため、ノードT2の管理データ分散保持部31から、トランザクション1による“表A_10008”をキーとする管理データ(KVペア)が既に削除されていることも考えられる。この場合、ノードT2のトランザクション処理部32は、違反検出キー“表A_10008”をキーとする管理データ(KVペア)のT層での保持に成功する。
しかしながら、トランザクション1のWALの反映がまだ完了していないとする。そのため、ノードT3の管理データ分散保持部31には、トランザクション1に基づく“表B_00010”をキーとする管理データ(KVペア)が、依然として保持されていたとする。この場合、ノードT2のトランザクション処理部32は、違反検出キー“表B_00010”をキーとする管理データ(KVペア)のT層での保持に失敗する。
このように、トランザクション2の処理を要求されたノードT2では、トランザクション処理部32は、違反検出キーの管理データのT層での保持に失敗したとする(ステップS12でYes)。詳細には、トランザクション処理部32は、違反検出キー“表A_10008”の管理データおよび違反検出キー“表B_00010”の管理データの少なくともいずれかについて、T層での保持に失敗している。
この場合、ノードT2のトランザクション処理部32は、トランザクション2の処理を開始する前の状態に戻した上で(ステップS17)、ノードP1に対してトランザクション2のエラーを通知する(ステップS18)。例えば、“表A_10008”の管理データの保持には成功したが、“表B_00010”の管理データの保持に失敗した場合について説明する。この場合、ノードT2のトランザクション処理部32は、“表A_10008”の管理データの保持を取り消すことにより、元の状態に戻せばよい。
以上で、トランザクション2の処理の説明を終了する。
次に、この具体例1において、T層にノードT4が追加された場合の構成管理装置40の動作について説明する。
ここで、ノードT4が追加される前において、ノードP1の管理データ振分部23に保持される管理データ振分情報(KVS)の一例を、図15の表aに示す。
まず、構成管理装置40の振分情報更新部41は、ノードT4が新たに追加されたので、ノードP1のトランザクション振分情報および管理データ振分情報の更新内容を決定する(ステップS65)。
ここでは、管理データ振分情報については、図15の表aに示した管理データ振分情報(KVS)が、図15の表bに示すように更新されることが決定されたものとする。具体的には、既存のノードT1〜T3に振り分けられていたハッシュレンジの一部が、新たなノードT4に振り分けられることが決定されている。
そこで、振分情報更新部41は、既存のノードT1〜T3に対して、それぞれの管理データ分散保持部31における管理データの移動を制御する(ステップS66)。詳細には、ノードT1〜T3は、振分情報更新部41の制御の下、各管理データ分散保持部31において、新たにノードT4に振り分けられることになったハッシュレンジに含まれるキーのKVペア(管理データ)をノードT4に移動する。
移動が完了すると、振分情報更新部41は、ノードP1の管理データ振分情報を、図15の表bに示すように更新する。また、振分情報更新部41は、ノードP1のトランザクション振分情報を更新する(ステップS67)。なお、前述したように、振分情報更新部41は、ステップS66およびS67を不可分な処理として実行する。
以上で、構成管理装置40は、構成管理動作を終了する。
(本発明の実施の形態の具体例2)
次に、本実施の形態について2つ目の具体例(具体例2)を示す。この具体例2では、トランザクション間で一意性制約違反が発生し得る違反検出キーとして、仮想表における主キーに加えて、仮想表におけるユニークキーが適用される例について説明する。具体例2の構成を模式的に図16に示す。図16において、この分散処理システム1は、上述の具体例1と同様に、P層に1つのノードP1と、T層に3つのノードT1〜T3と、S層に2つのノードS1〜S2と、構成管理装置40とを備える。なお、図16では、構成管理装置40の図示を省略している。
ノードP1の管理データ振分情報は、前述の具体例1における「仮想表の主キーに関する管理データ振分情報」に加えて、「仮想表のユニークキーに関する管理データ振分情報」を記憶する。
ノードT1〜T3の管理データ分散保持部31は、前述の具体例1における「仮想表の主キーに関わる管理データ」に加えて、「仮想表のユニークキーに関わる管理データ」を記憶する。
また、この具体例2では、処理対象データは、施設の予約に関する仮想表C、仮想表Dおよび仮想表Eを表すKVSであることを想定する。図17に、仮想表C、仮想表Dおよび仮想表Eを示す。また、図18に、これらの仮想表の実体としてのKVSを示す。仮想表Cでは、主キーとして“予約番号”の列が設定されている。また、仮想表Dでは、主キーとして“利用者コード”が設定されている。また、仮想表Eでは、主キーとして“施設コード”が設定されている。ここで、「利用者毎に一度だけ、他人と異なる施設を予約できる」と規定されるとき、仮想表Dの「施設コード」はユニーク制約を受ける。
なお、図18のKVSでは、仮想表Cに対応するKVペアに、主キーではない“施設コード”の指定によりアクセスできるよう、“索引_表C_”から始まるキーに対応付けて、該当するKVペアへのインデックスが保持されている。同様に、仮想表Dに対応するKVペアに、主キーではない“施設コード”の指定によりアクセスできるよう、“索引_表D_”から始まるキーに対応付けて、該当するKVペアへのインデックスが保持されている。
また、図18に示した処理対象データ(KVS)の各KVペアは、具体例1の場合と同様に、キーによって一意に特定されるノードS1またはS2に分散保持される。
また、この具体例2では、トランザクション処理の単位が、「各仮想表において“施設コード”列が同じ値毎」と規定されているとする。この場合、“施設コード”列が、トランザクションキーとなる。以降、“施設コード”で識別されるトランザクション処理単位を、“トランザクションクラス2”と呼ぶとする。このとき、“トランザクションクラス2”が、P層において以下のように定義されているものとする。
・「トランザクションクラス2」は、仮想表Cの“施設コード”列から生成される。
・「トランザクションクラス2」は、仮想表Dの“施設コード”列から生成される。
ここで、トランザクションキーを施設コード“S2004”とする以下2つのトランザクションが、同時に実行されようとしている場合を考える。
<トランザクション3>
・仮想表Dの「利用者コード:00003、利用者名:田中」の行の施設コードをS2004に更新
・仮想表Cに、「予約番号:0619093001、予約日:2013/06/19、施設コード:S2004」を挿入
<トランザクション4>
・仮想表Dの「利用者コード:00007、利用者名:山崎」の行の施設コードをS2004に更新
・仮想表Cに、「予約番号:0619093001、予約日:2013/06/19、施設コード:S2004」を挿入
この場合、ノードP1のトランザクション振分部22は、トランザクション振分情報として、トランザクションキーから算出されるハッシュ値の範囲に、その振分先のノードTが対応付けられた情報を保持する。
また、前述の具体例1と同様に、ノードTの遅延反映部34は、「仮想表名+主キーの値」から算出されるハッシュ値の範囲に、その振分先となるノードSが対応付けられた情報を保持する。なお、ここでは、ノードT1〜T3には、同一のデータ振分情報が保持されるものとする。
このとき、T層における各トランザクションの振分先は、ノードP1における「トランザクション振分情報に基づいて、トランザクションキーである施設コード“S2004”から一意に決定される。また、処理対象データとしてのKVSの各行(KVペア)のS層における振分先は、ノードTにおけるデータ振分情報に基づいて、「仮想表名+主キー」から一意に決定される。
また、このとき、前述の具体例1と同様に、T層におけるトランザクション処理(WALの記録)と、S層におけるWALの反映とは、非同期に行われる。そのため、トランザクション3およびトランザクション4が実行されることにより、仮想表Dにおいてユニークキー制約違反(“施設コード”の重複)が発生する可能性がある。また、仮想表Cにおいて主キー制約違反(“予約番号”の重複)が発生する可能性がある。
そこで、この具体例2では、「仮想表C+主キーの値」と、「仮想表D+ユニークキーの値」とが、一意性制約違反の発生し得る違反検出キーとなる。そこで、ノードP1の管理データ振分部23は、主キーに関わる管理データ振分情報と、ユニークキーに関わる管理データ振分情報とを記憶しておく。主キーに関わる管理データ振分情報は、「仮想表名+主キーの値」から算出されるハッシュ値の範囲に、管理データの振分先となるノードTが対応付けられた情報となる。また、ユニークキーに関わる管理データ振分情報は、「仮想表名+ユニークキーの値」から算出されるハッシュ値の範囲に、管理データの振分先となるノードTが対応付けられた情報となる。これにより、主キーに関する管理データおよびユニークキーに関する管理データのそれぞれの振分先となるノードTは、ノードP1におけるそれぞれの管理データ振分情報に基づいて、一意に決定される。
また、この具体例2において、ノードTの管理データ分散保持部31に分散保持される管理データのうち、ユニークキーに関する管理データを、図19に示す。なお、図19の左図は、管理データ分散保持部31に保持される情報を表形式で示しているが、右図のように、その実体は、KVSである。図19の左図において、各行が示す管理データは、「仮想表名」および「ユニークキーの値」に対して、「トランザクションキー」が対応付けられた情報となっている。つまり、図19の右図において、各行が示す管理データのKVペアは、「仮想表名+ユニークキーの値」をキーとして、「仮想表名、ユニークキー、トランザクションキー」を表すデータが対応付けられた情報である。この場合、「仮想表名+ユニークキーの値」をキーとする管理データのKVペアは、その「仮想表名+ユニークキーの値」から特定される処理対象データのKVペアが、ノードSへの格納待ちとなっていることを表している。
以上のように構成された具体例2における分散処理システム1の動作について説明する。
まず、ノードP1において、アプリケーション部21は、上述のトランザクション3を生成する(図4のステップS1)。
このとき、このトランザクション3のトランザクションキーは、施設コード“S2004”である。そこで、トランザクション振分部22は、このトランザクション3の振分先を、トランザクション振分情報を参照することにより特定する(ステップS2)。具体的には、トランザクション振分部22は、施設コード“S2004”のハッシュ値を算出する。そして、トランザクション振分部22は、トランザクション振分情報において、算出したハッシュ値を含む範囲に対応付けられたノードTを特定すればよい。ここでは、ノードT1が特定されたとする。
また、トランザクション3における1つ目の仮想表Dの更新処理で一意性制約違反が発生し得る違反検出キーは、仮想表Dにおける施設コード、すなわち、“表D_S2004”である。また、2つ目の仮想表Cへの挿入処理で一意性制約違反が発生し得る違反検出キーは、仮想表Cにおける予約番号、すなわち、“表C_0619093001”である。
そこで、管理データ振分部23は、ユニークキーを含む違反検出キーである“表D_S2004”に関わる管理データの振分先を、ユニークキーに関わる管理データ振分情報を参照することにより特定する。具体的には、管理データ振分部23は、“表D_S2004”のハッシュ値を算出する。そして、管理データ振分部23は、ユニークキーに関わる管理データ振分情報において、算出したハッシュ値を含む範囲に対応付けられたノードTを特定すればよい。ここでは、ノードT2が特定されたとする。同様に、管理データ振分部23は、主キーを含む違反検出キー“表C_0619093001”に関わる管理データの振分先を、主キーに関わる管理データ振分情報を参照することにより特定する。具体的には、管理データ振分部23は、“表C_0619093001”のハッシュ値を算出する。そして、管理データ振分部23は、主キーに関わる管理データ振分情報において、算出したハッシュ値を含む範囲に対応付けられたノードTを特定すればよい。ここでは、ノードT3が特定されたとする(ステップS3)。
次に、トランザクション振分部22は、このトランザクション3の振分先のノードT1に対して、トランザクション3の処理を要求する。また、管理データ振分部23は、ノードT1に対して、ユニークキーを含む違反検出キー“表D_S2004”についての管理データの振分先としてノードT2を通知する。また、管理データ振分部23は、ノードT1に対して、主キーを含む違反検出キー“表C_0619093001”についての管理データの振分先としてノードT3を通知する(ステップS4)。
次に、トランザクション3の処理を要求されたノードT1は、次のように動作する。ノードT1のトランザクション処理部32は、1つ目の、ユニークキーを含む違反検出キー“表D_S2004”についての管理データを、その振分先として通知されたノードT2の管理データ分散保持部31に保持させることを試みる。
ここでは、ノードT2の管理データ分散保持部31に、“表D_S2004”をキーとする他の管理データ(KVペア)が保持されていなかったとする(図5のステップS12でNo)。
この場合、ノードT1のトランザクション処理部32は、ノードT2の管理データ分散保持部31に、“表D_S2004”をキーとして、トランザクションキー“S2004”を含むデータを対応付けたKVペアを保持させる(ステップS13)。
ここで、“表D_S2004”をキーとする管理データ(KVペア)のT層での保持に成功することは、次のことを示している。すなわち、この保持の成功は、“表D_S2004”に関わる処理対象データがS層のデータ保持部11(KVS)への格納待ちとなったことを、後続のトランザクションに対して示している。また、この保持の成功は、直前までに、S層のデータ保持部11(KVS)への格納を待つ“表D_S2004”に関わる処理対象データが存在しなかったことを示している。
次に、ノードT1のトランザクション処理部32は、S層に、更新反映済の“表D_S2004”に関わる処理対象データ(KVペア)が存在しないことを確認してもよい。これにより、トランザクション処理部32は、一意性制約違反(ユニークキーの重複)が発生しないことを確実にする。なお、この確認処理において、S層のどのノードが“表D_S2004”に関わる処理対象データを保持しているかは、データ振分情報を参照することにより特定可能である。
次に、トランザクション処理部32は、2つ目の、主キーを含む違反検出キー“表C_061909300”についても、上述と同様にステップS12〜S13を実行する。
すなわち、トランザクション処理部32は、2つ目の、主キーを含む違反検出キー“表C_061909300”についての管理データを、その振分先として通知されたノードT3に保持させることを試みる。
ここでは、ノードT3の管理データ分散保持部31に、“表C_061909300”をキーとする他の管理データ(KVペア)が保持されていなかったとする(ステップS12でNo)。
この場合、ノードT1のトランザクション処理部32は、ノードT3の管理データ分散保持部31に、“表C_061909300”をキーとして、トランザクションキー“S2004”を含むデータを対応付けたKVペアを保持させる(ステップS13)。
前述のように、“表C_061909300”をキーとする管理データ(KVペア)のT層での保持に成功することは、次のことを示している。すなわち、この保持の成功は、“表C_061909300”をキーとする処理対象データ(KVペア)がS層のデータ保持部11(KVS)への格納待ちとなったことを、後続のトランザクションに対して示している。また、この保持の成功は、直前までに、S層のデータ保持部11(KVS)への格納を待つ“表C_061909300”をキーとする処理対象データ(KVペア)が存在しなかったことを示している。
次に、ノードT1のトランザクション処理部32は、S層に、更新反映済の“表C_061909300”をキーとする処理対象データ(KVペア)が存在しないことを確認してもよい。これにより、トランザクション処理部32は、一意性制約違反(主キーの重複)が発生していないことを確実にする。なお、この確認処理において、S層のどのノードが“表C_061909300”をキーとする処理対象データを保持しているかは、データ振分情報を参照することにより特定可能である。
このようにして、ノードT1は、トランザクション3において、ユニークキーを含む違反検出キー“表D_S2004”および主キーを含む違反検出キー“表C_061909300”について、T層での管理データの保持に成功した。これにより、トランザクション3によってユニークキーの重複および主キーの重複が発生しないことが確認されたことになる。
そこで、ノードT1のトランザクション処理部32は、トランザクション3のWALを、自装置のトランザクションログ保持部33に記録する(ステップS15)。
そして、トランザクション処理部32は、トランザクション3の完了を、ノードP1に通知する。
以上で、トランザクション3の処理が完了する。
また、上記のトランザクション3の処理とは非同期に、ノードT1の遅延反映部34は、次のように、トランザクションログ保持部33に記録されたトランザクション3のWALの反映を行う。
まず、遅延反映部34は、トランザクション3のWALが示す1つ目の処理における違反検出キー“表D_S2004”に基づいて、処理対象データの振分先を特定する(図6のステップS31)。詳細には、遅延反映部34は、データ振分情報を参照することにより、“索引_表D_施設コード_S2004”に対応するノードSを特定する。ここでは、ノードS2であったとする。
次に、遅延反映部34は、ノードS2に対して、1つ目の仮想表Dの更新処理の反映情報を送信する(ステップS32)。
次に、ノードS2のデータ反映部12は、反映情報に基づいて、データ保持部11において、“索引_表D_施設コード_S2004”をキーとする索引情報のKVペアと、“表D_0003”をキーとするKVペアとを更新する(図7のステップS42)。
次に、データ反映部12は、反映した処理対象データにおけるユニークキーを含む違反検出キー“表D_S2004”について、その管理データの振分先のノードTを、ノードP1に照会することにより特定する(ステップS43)。ここでは、ノードT2が特定される。
次に、データ反映部12は、ノードT2に対して、違反検出キー“表D_S2004”についての管理データの削除を要求する(ステップS44)。
これにより、ノードT2の管理データ分散保持部31は、“表D_S2004”をキーとする管理データ(KVペア)を削除する。
同様に、ノードT1の遅延反映部34は、トランザクション3のWALが示す2つ目の挿入処理についても、その処理対象データの振分先として、例えばノードS1を特定し、挿入処理の反映情報を送信する。そして、反映情報を受信したノードS1は、上記と略同様に動作して、データ保持部11に、“表C_061909300”をキーとする処理対象データを挿入する。そして、ノードS1からの要求により、ノードT3は、管理データ分散保持部31から、違反検出キー“表C_061909300”をキーとする管理データ(KVペア)を削除する。
以上で、トランザクション3のWALのS層への反映が終了する。
ここで、ノードT1におけるトランザクション処理に並行して、ノードP1がトランザクション4を生成し、ノードT2に対してその処理を要求したことを想定する。トランザクション4において、一意性違反が発生し得る違反検出キーは、トランザクション3と同様に、ユニークキーを含む“表D_S2004”および主キーを含む“表C_061909300”となる。上述と同様に、ユニークキーを含む“表D_S2004”の管理データの振分先はT2となり、主キーを含む“表C_061909300”の管理データの振分先はノードT3となる。
この場合、ノードT2の管理データ分散保持部31には、上述のトランザクション3の処理により既に“表D_S2004”をキーとする管理データ(KVペア)が保持されている。したがって、ノードT2のトランザクション処理部32は、“表D_S2004”をキーとする管理データ(KVペア)のT層での保持に失敗する。
あるいは、トランザクション4の処理中に、上述のトランザクション3のWALの反映が非同期に進行しているとする。そして、ノードT2の管理データ分散保持部31から、トランザクション3による“表D_S2004”をキーとする管理データ(KVペア)が既に削除されていることも考えられる。この場合、ノードT2のトランザクション処理部32は、“表D_S2004”をキーとする管理データ(KVペア)のT層での保持に成功する。
しかしながら、トランザクション3のWALの反映が完了していないとする。そして、ノードT3の管理データ分散保持部31には、トランザクション3による“表C_061909300”をキーとする管理データ(KVペア)が依然として保持されていたとする。この場合、ノードT2のトランザクション処理部32は、“表C_061909300”をキーとする管理データ(KVペア)のT層での保持に失敗する。
このように、トランザクション4の処理を要求されたノードT2のトランザクション処理部32は、違反検出キーの管理データのT層での保持に失敗したとする(ステップS12でYes)。詳細には、トランザクション処理部32は、違反検出キー“表D_S2004”の管理データおよび違反検出キー“表C_061909300”の管理データの少なくともいずれかの保持に失敗している。
この場合、ノードT2のトランザクション処理部32は、トランザクション4の処理を開始する前の状態に戻した上で(ステップS17)、ノードP1に対してトランザクション4のエラーを通知する(ステップS18)。例えば、“表D_S2004”の管理データの保持には成功したが、“表C_061909300”の管理データの保持には失敗した場合について説明する。この場合、ノードT2のトランザクション処理部32は、“表D_S2004”の管理データの保持を取り消すことにより、元の状態に戻せばよい。
以上で、ノードT2によるトランザクション4の処理の説明を終了する。
なお、ノードT4追加時の構成管理装置40の動作については、前述の具体例1と略同様である。ただし、ステップS65において、振分情報更新部41は、トランザクション振分情報および主キーに基づく管理データ振分情報の更新内容に加えて、ユニークキーに基づく管理データ振分情報の更新内容を決定する。また、ステップS66において、振分情報更新部41は、ノードT1〜T3間における主キーに関する管理データの移動の制御に加えて、ユニークキーに関する管理データの移動を制御する。また、ステップS67において、振分情報更新部41は、ノードP1のトランザクション振分情報および主キーに基づく管理データ振分情報の更新に加えて、ユニークキーに基づく管理データ振分情報を更新する。
以上で、具体例2の説明を終了する。
次に、本発明の実施の形態の効果について述べる。
本発明の実施の形態としての分散処理システムは、トランザクションログの記録と実際のデータ反映とが非同期に行われる分散処理システムにおいて、次の効果を奏する。すなわち、本発明の実施の形態としての分散処理システムは、トランザクションを複数の処理単位で分散実行する際に、スケーラビリティ低下を抑制しつつ、処理単位を跨る一意性に関する制約違反をより確実に検出することができる。
その理由は、トランザクション分散処理装置の各装置が、次のように動作するよう構成されるからである。すなわち、管理データ分散保持部が、トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、違反検出キーに対応付けて保持する。また、管理データ分散保持部が、このような管理データを、トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間保持する。そして、トランザクション処理部が、要求されたトランザクションを処理する際に、そのトランザクションにおける違反検出キーについて、その管理データの振分先への保持を試みる。そして、トランザクション処理部が、その管理データが振分先のトランザクション分散処理装置の管理データ分散保持部に保持されていない場合に、これを保持させる。そして、管理データの振分先への保持が成功した場合に、トランザクション処理部が、トランザクションログを記録することによりトランザクション処理を完了する。そして、遅延反映部が、トランザクション処理とは非同期に、トランザクションログをデータ保持装置の処理対象データに反映させる。
これにより、本実施の形態は、トランザクション処理に遅延して非同期に処理対象データへの反映が行われる場合であっても、処理対象データへの反映を待たずに、トランザクション処理時点で、一意性制約違反を確実に検出することができる。また、本実施の形態は、そのような一意性制約違反を確実に検出するための管理データを、トランザクションの定義情報に基づいて生成し、処理対象データの永続化時点で削除する。このため、本実施の形態は、特別なユーザ操作を必要としない。また、本実施の形態は、そのような一意性制約違反を確実に検出するための管理データを1つ以上のトランザクション分散処理装置に分散保持する。このため、本実施の形態は、1つの装置がそのような一意性制約違反を集中管理する場合に比べて、負荷が一装置に集中せず、分散処理システムのスケーラビリティを損なわない。また、本実施の形態は、分散処理システムを構成する各装置の追加または削除などの構成変更に応じて、そのような一意性制約違反を確実に検出するための管理データの分散保持先を更新する。このため、本実施の形態は、スケールアウトが容易である。
なお、本実施の形態において、トランザクション振分情報、管理データ振分情報、および、データ振分情報は、キーの値から算出されるハッシュ値の範囲に対して振分先の装置が定められた情報であるものとして説明した。この他、各振分情報は、キーの値に基づいて振分先が一意に特定可能なものであれば、その他の情報であってもよい。
また、本実施の形態において、アプリケーション装置が、トランザクションの振分先のトランザクション分散処理装置に対して、管理データの振分先を通知する例について説明した。この他、トランザクション処理が振り分けられたトランザクション分散処理装置が、アプリケーション装置に照会することにより該当する管理データの振分先を得るように構成してもよい。
また、本実施の形態において、トランザクションログの反映を行ったデータ保持装置が、アプリケーション装置に照会することにより該当する管理データの振分先を得る例について説明した。この他、トランザクションログの反映を要求したトランザクション分散処理装置が、反映の振分先のデータ保持装置に対して、該当する管理データが振り分けられている装置を通知するように構成してもよい。この場合、データ保持装置は、トランザクションログの反映を要求したトランザクション分散処理装置との通信コネクションを、データ反映が終了するまで維持しておけばよい。これにより、データ保持装置は、データ反映後に管理データの振分先を特定する必要がなくなり、通信コストが低減される。
また、本実施の形態において、処理対象データが、複数のデータ保持装置に分散保持される例を中心に説明したが、本発明における処理対象データは、かならずしも複数の装置に分散保持されるものでなくてもよい。その場合、本実施の形態におけるトランザクション分散処理装置の遅延反映部は、必ずしもデータ振分情報を記憶していなくてもよい。
また、本実施の形態において、処理対象データが仮想表を表すKVSである例を中心に説明したが、本発明は、処理対象データに対するトランザクションを分散処理する各種のシステムに適用可能である。
その他、本発明は、上述した実施の形態に限定されず、トランザクション処理と処理対象データへの反映とを非同期に行う各種の分散処理システムに適用可能である。
また、上述した本発明の各実施の形態において、データ保持装置、トランザクション分散処理装置、アプリケーション装置、および、構成管理装置の各機能ブロックが、記憶装置またはROMに記憶されたコンピュータ・プログラムを実行するCPUによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
また、上述した本発明の各実施の形態において、各装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した各装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置(記憶媒体)に格納しておいてもよい。そして、係るコンピュータ・プログラムを当該CPUが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
以上、上述した実施の形態を模範的な例として本発明を説明した。しかしながら、本発明は、上述した実施の形態には限定されない。即ち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
この出願は、2013年12月24日に出願された日本出願特願2013−265516を基礎とする優先権を主張し、その開示の全てをここに取り込む。
1 分散処理システム
10 データ保持装置
11 データ保持部
12 データ反映部
20 アプリケーション装置
21 アプリケーション部
22 トランザクション振分部
23 管理データ振分部
30 トランザクション分散処理装置
31 管理データ分散保持部
32 トランザクション処理部
33 トランザクションログ保持部
34 遅延反映部
40 構成管理装置
41 振分情報更新部
1001、2001、3001、4001 CPU
1002、2002、3002、4002 RAM
1003、2003、3003、4003 ROM
1004、2004、3004、4004 記憶装置
1005、2005、3005、4005 ネットワークインタフェース

Claims (10)

  1. トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、前記トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間、前記違反検出キーに対応付けて保持する管理データ分散保持手段と、
    自装置(トランザクション分散処理装置)に処理が振り分けられたトランザクションを処理する際に、該トランザクションにおける前記違反検出キーに基づき特定される前記管理データの振分先となる自装置または他の前記トランザクション分散処理装置の前記管理データ分散保持手段に、該違反検出キーに対応付けられた他の管理データが保持されていない場合に、該トランザクションに関する前記管理データを、該振分先の前記管理データ分散保持手段に該違反検出キーに対応付けて保持させてから、該トランザクションの処理内容を表すトランザクションログをトランザクションログ保持手段に先行記録することにより、トランザクション処理を完了するトランザクション処理手段と、
    前記トランザクション処理手段による処理とは非同期に、前記トランザクションログ保持手段に保持されたトランザクションログを、前記処理対象データに対して反映させる遅延反映手段と、
    を備えたトランザクション分散処理装置。
  2. 前記処理対象データが、仮想的な表(仮想表)の識別情報および前記仮想表における主キーの値からなる情報をキーとして該キーに対してデータが対応付けられた形式で表され、前記トランザクション間で前記仮想表における主キーまたはユニークキーについて一意性制約違反が発生し得るとき、
    前記管理データ分散保持手段は、前記仮想表の識別情報と前記主キーの値または前記ユニークキーの値とからなる情報に対応付けて、前記管理データを保持することを特徴とする請求項1に記載のトランザクション分散処理装置。
  3. 処理対象データに対するトランザクションを生成するアプリケーション手段と、
    請求項1または請求項2に記載のトランザクション分散処理装置のうち、前記トランザクションの振分先となるトランザクション分散処理装置を特定するためのトランザクション振分情報を記憶しておき、前記アプリケーション手段によって生成されたトランザクションの処理を、前記トランザクション振分情報に基づいて特定されるトランザクション分散処理装置に要求するトランザクション振分手段と、
    前記トランザクション分散処理装置のうち、前記管理データの振分先となる前記トランザクション分散処理装置を特定するための管理データ振分情報を記憶しておき、前記管理データ振分情報に基づいて特定されるトランザクション分散処理装置を、前記トランザクションの振分先となるトランザクション分散処理装置に対して通知する管理データ振分手段と、
    を備えたアプリケーション装置。
  4. 前記アプリケーション手段は、仮想的な表(仮想表)の識別情報および前記仮想表における主キーの値からなる情報をキーとして該キーに対してデータが対応付けられた形式で表された前記処理対象データに対して、前記トランザクションを生成し、
    前記管理データ振分手段は、前記トランザクション間で前記仮想表における主キーまたはユニークキーについて一意性制約違反が発生し得るとき、前記仮想表の識別情報と前記主キーの値または前記ユニークキーの値とからなる情報に基づいて前記管理データの振分先となる前記トランザクション分散処理装置を特定するための前記管理データ振分情報を記憶しておくことを特徴とする請求項3に記載のアプリケーション装置。
  5. 前記処理対象データを保持するデータ保持手段と、
    請求項1又は請求項2に記載のトランザクション分散処理装置に保持される前記トランザクションログを、前記データ保持手段に対して反映させるデータ反映手段と、
    を備えたデータ保持装置。
  6. 前記データ保持手段は、仮想的な表(仮想表)の識別情報および前記仮想表における主キーの値からなる情報をキーとして該キーに対するデータの形式で、前記処理対象データを保持することを特徴とする請求項5に記載のデータ保持装置。
  7. 請求項1または請求項2に記載のトランザクション分散処理装置の構成変更に応じて、請求項3または請求項4に記載のアプリケーション装置に保持される前記トランザクション振分情報および前記管理データ振分情報を更新する振分情報更新手段を備えた構成管理装置。
  8. 請求項1または請求項2に記載のトランザクション分散処理装置と、
    前記トランザクション分散処理装置に対してトランザクションの処理を要求する請求項3または請求項4に記載のアプリケーション装置と、
    前記アプリケーション装置によって生成されるトランザクションの対象となる処理対象データを保持する請求項5または請求項6に記載のデータ保持装置と、
    前記トランザクション分散処理装置、前記アプリケーション装置、および、前記データ保持装置の構成を管理する請求項7に記載の構成管理装置と、
    を備えた分散処理システム。
  9. 処理対象データに対するトランザクションを1つ以上のトランザクション分散処理装置に分散処理させる際に、
    トランザクション間で一意性制約違反が発生し得る違反検出キーに対応付けた管理データを、前記違反検出キーに基づいて特定される前記トランザクション分散処理装置に振り分け、
    前記管理データの振分先の前記トランザクション分散処理装置に、前記違反検出キーに対応付けられた他のトランザクションに基づく前記管理データが保持されていない場合に、前記処理対象データが前記トランザクションログの反映待ちである間、前記違反検出キーに対応付けて前記管理データを保持させてから、
    前記トランザクションの振分先のトランザクション分散処理装置において前記トランザクションログを先行記録することによりトランザクション処理を完了し、
    前記トランザクション処理とは非同期に、前記トランザクションログを前記処理対象データへ反映させる、分散処理方法。
  10. トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、前記トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間、前記違反検出キーに対応付けて保持する管理データ分散保持手段を用いて、
    自装置に処理が振り分けられたトランザクションを処理する際に、該トランザクションにおける前記違反検出キーに基づき特定される前記管理データの振分先となる自装置または他装置の前記管理データ分散保持手段に、該違反検出キーに対応付けられた他の管理データが保持されていない場合に、該トランザクションに関する前記管理データを、該振分先の前記管理データ分散保持手段に該違反検出キーに対応付けて保持させてから、該トランザクションの処理内容を表すトランザクションログをトランザクションログ保持手段に先行記録することにより、トランザクション処理を完了するトランザクション処理ステップと、
    前記トランザクション処理とは非同期に、前記トランザクションログ保持手段に保持されたトランザクションログを、前記処理対象データに対して反映させる遅延反映ステップと、
    をコンピュータ装置に実行させるコンピュータ・プログラム
JP2015554517A 2013-12-24 2014-12-02 トランザクション分散処理装置、方法、システム、および、記憶媒体 Expired - Fee Related JP6172294B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2013265516 2013-12-24
JP2013265516 2013-12-24
PCT/JP2014/006020 WO2015097991A1 (ja) 2013-12-24 2014-12-02 トランザクション分散処理装置、方法、システム、および、記憶媒体

Publications (2)

Publication Number Publication Date
JPWO2015097991A1 JPWO2015097991A1 (ja) 2017-03-23
JP6172294B2 true JP6172294B2 (ja) 2017-08-02

Family

ID=53477903

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015554517A Expired - Fee Related JP6172294B2 (ja) 2013-12-24 2014-12-02 トランザクション分散処理装置、方法、システム、および、記憶媒体

Country Status (2)

Country Link
JP (1) JP6172294B2 (ja)
WO (1) WO2015097991A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107797850B (zh) * 2016-08-30 2021-09-21 阿里巴巴集团控股有限公司 分布式事务处理的方法、装置与系统

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5806074A (en) * 1996-03-19 1998-09-08 Oracle Corporation Configurable conflict resolution in a computer implemented distributed database
JP5109676B2 (ja) * 2008-01-22 2012-12-26 富士通株式会社 データ整合性を確保するためのプログラム、方法及びコンピュータ・システム
JP2013033345A (ja) * 2011-08-01 2013-02-14 Internatl Business Mach Corp <Ibm> トランザクション処理システム、方法及びプログラム
WO2013046883A1 (ja) * 2011-09-30 2013-04-04 インターナショナル・ビジネス・マシーンズ・コーポレーション トランザクション処理システム、方法及びプログラム

Also Published As

Publication number Publication date
JPWO2015097991A1 (ja) 2017-03-23
WO2015097991A1 (ja) 2015-07-02

Similar Documents

Publication Publication Date Title
CN114341792B (zh) 存储集群之间的数据分区切换
US9411685B2 (en) Parity chunk operating method and data server apparatus for supporting the same in distributed raid system
JP4317876B2 (ja) データストレージシステムにおける冗長データ割り当て
JP5081631B2 (ja) データの削除を管理するための方法および装置
CN106104502B (zh) 用于存储系统事务的系统、方法和介质
CN104765661B (zh) 一种云存储服务中元数据服务节点的多节点热备方法
JP2008527571A5 (ja)
JP4988370B2 (ja) 結合セッション環境におけるセッションのクラスタのためのセッション情報の統合方法、システム、およびプログラム
JP5686034B2 (ja) クラスタシステム、同期制御方法、サーバ装置および同期制御プログラム
US10031682B1 (en) Methods for improved data store migrations and devices thereof
CN103312624A (zh) 一种消息队列服务系统和方法
CN103186554A (zh) 分布式数据镜像方法及存储数据节点
CN112764968A (zh) 数据处理方法、装置、设备及存储介质
CN106605217B (zh) 用于将应用从一个站点移动到另一站点的方法和系统
CN109407975B (zh) 写数据方法与计算节点以及分布式存储系统
KR100977159B1 (ko) 데이터 서버 주소의 변경과 디스크 이동에 투명한 파일메타데이터 관리 방법 및 시스템
JP2023541298A (ja) トランザクション処理方法、システム、装置、機器、及びプログラム
CN110555317B (zh) 一种应用文件更改处理方法、装置及系统
CN100550894C (zh) 对n路共享存储系统中快闪副本的高效锁管理
WO2016101759A1 (zh) 一种数据路由方法、数据管理装置和分布式存储系统
US11429311B1 (en) Method and system for managing requests in a distributed system
WO2014102997A1 (ja) 計算機、計算機システムの制御装置及び記録媒体
JP6172294B2 (ja) トランザクション分散処理装置、方法、システム、および、記憶媒体
CN110659303A (zh) 一种数据库节点的读写控制方法及装置
CN108351801A (zh) 多版本移除管理器

Legal Events

Date Code Title Description
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: 20170606

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170619

R150 Certificate of patent or registration of utility model

Ref document number: 6172294

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees