IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ザダラ ストレージ インコーポレイテッドの特許一覧

特許7423534共有ジャーナルを含むキーバリューストア間のコンシステンシー
<>
  • 特許-共有ジャーナルを含むキーバリューストア間のコンシステンシー 図1
  • 特許-共有ジャーナルを含むキーバリューストア間のコンシステンシー 図2
  • 特許-共有ジャーナルを含むキーバリューストア間のコンシステンシー 図3
  • 特許-共有ジャーナルを含むキーバリューストア間のコンシステンシー 図4
  • 特許-共有ジャーナルを含むキーバリューストア間のコンシステンシー 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-19
(45)【発行日】2024-01-29
(54)【発明の名称】共有ジャーナルを含むキーバリューストア間のコンシステンシー
(51)【国際特許分類】
   G06F 16/23 20190101AFI20240122BHJP
   G06F 16/28 20190101ALI20240122BHJP
【FI】
G06F16/23
G06F16/28
【請求項の数】 12
(21)【出願番号】P 2020541339
(86)(22)【出願日】2018-09-25
(65)【公表番号】
(43)【公表日】2020-12-10
(86)【国際出願番号】 US2018052538
(87)【国際公開番号】W WO2019070447
(87)【国際公開日】2019-04-11
【審査請求日】2021-09-16
(31)【優先権主張番号】15/726,104
(32)【優先日】2017-10-05
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】520119699
【氏名又は名称】ザダラ ストレージ インコーポレイテッド
(74)【代理人】
【識別番号】100120891
【弁理士】
【氏名又は名称】林 一好
(74)【代理人】
【識別番号】100165157
【弁理士】
【氏名又は名称】芝 哲央
(74)【代理人】
【識別番号】100205659
【弁理士】
【氏名又は名称】齋藤 拓也
(74)【代理人】
【識別番号】100126000
【弁理士】
【氏名又は名称】岩池 満
(74)【代理人】
【識別番号】100185269
【弁理士】
【氏名又は名称】小菅 一弘
(72)【発明者】
【氏名】リャカス アレックス
(72)【発明者】
【氏名】カウシク ヴィー. シアム
【審査官】酒井 恭信
(56)【参考文献】
【文献】国際公開第2014/141343(WO,A1)
【文献】国際公開第2004/055674(WO,A1)
【文献】特開平09-319634(JP,A)
【文献】特表2015-526832(JP,A)
【文献】米国特許出願公開第2016/0321294(US,A1)
【文献】米国特許出願公開第2013/0218840(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00 - 16/958
(57)【特許請求の範囲】
【請求項1】
すべてをパーシスト(persist)するか、あるいは全くしないパーシステントKVストアへの変更のために、各々が独自の非パーシステントトランザクションを有する、複数のパーシステントキーバリュー(KV)間にコンシステンシー(consistency)を提供するためのデータベースシステムにおけるトランザクションマネージャによって実行される方法において、
第1のKVストアのトランザクションに参加するステップと、
第2のKVストアのトランザクションに参加するステップと、
すべてパーシストするか、あるいは全くしない、前記第1のKVストアへの第1の変更と前記第2のKVストアへの第2の変更を含む変更のセットに関して、
前記第1の変更を、前記第1のKVストアのトランザクションにインサートするステップと、
前記第2の変更を前記第2のKVストアのトランザクションにインサートするステップと、
前記第1の変更および前記第2の変更の記述をそれぞれ記録する第1のサブエントリおよび第2のサブエントリを備えた結合されたジャーナルエントリを作成し、作成した前記結合されたジャーナルエントリをパーシステントグローバルジャーナルに書き込むステップと、
前記結合されたジャーナルエントリの、前記パーシステントグローバルジャーナルへの書き込みの完了を待つステップと、
前記結合されたジャーナルエントリが、前記パーシステントグローバルジャーナルに書き込まれた後で、
前記第1のKVストアのトランザクションからデタッチして、当該デタッチの後の時点での当該トランザクションのコミットを可能にするステップと、
前記第2のKVストアのトランザクションからデタッチして、当該デタッチの後の時点での当該トランザクションのコミットを可能にするステップと、
を備えた、方法。
【請求項2】
ストレージシステムが、リスタートするのを検出した後で、
前記第1及び第2のKVストアの最後にコミットされたトランザクションを決定するステップと、
前記パーシステントグローバルジャーナル内の前記結合されたジャーナルエントリを調べて、対応するKVストアにコミットされなかった任意のサブエントリを決定するステップと、
対応するKVストアにコミットされなかった任意のサブエントリをリプレイするステップと、
をさらに備えた、請求項1に記載の方法。
【請求項3】
前記第1および第2のKVストアのトランザクションに参加する前に、アプリケーションから、変更のセットを受信するステップをさらに備えた、請求項1に記載の方法。
【請求項4】
前記第1および前記第2の変更がすべてコミットされたと決定した後で、前記結合されたジャーナルエントリを削除するステップをさらに備えた、請求項1に記載の方法。
【請求項5】
パーシステントである少なくとも2つのKVストアと、
前記少なくとも2つのKVストアのそれぞれを管理する少なくともつのキーバリュー(KV)ストアデータベースマネージメントシステム(DBMS)であって、前記少なくともつのKVストアDBMSのそれぞれは、対応するKVストアにパーシステントではない独自のトランザクションを提供する、前記少なくともつのKVストアDBMSと、
パーシステントであるグローバルジャーナルと、
すべてがパーシステントであるか、あるいは全くパーシステントでない少なくとも2つのKVストアへの変更に関する少なくとも2つのKVストア間のコンシステンシーを提供するトランザクションマネージャであって、
第1のKVストアのトランザクションに参加するように、
第2のKVストアのトランザクションに参加するように、
すべてがパーシステントであるか、あるいは全くパーシステントでない、前記第1のKVストアへの第1の変更と、前記第2のKVストアへの第2の変更を含む、変更のセットに関して、
前記第1の変更を前記第1のKVストアのトランザクションにインサートするように、
前記第2の変更を前記第2のKVストアのトランザクションにインサートするように、
前記第1および第2の変更の記述をそれぞれ記録する第1および第2のサブエントリを備えた、結合されたジャーナルエントリを作成し、該結合されたジャーナルエントリを前記グローバルジャーナルに書き込むように
前記結合されたジャーナルエントリの、前記グローバルジャーナルへの書き込みの完了を待つように、
前記結合されたジャーナルエントリが、前記グローバルジャーナルに書き込まれた後で、
前記第1のKVストアのトランザクションからデタッチし、デタッチの後の時点での当該トランザクションのコミットを可能にするように、
前記第2のKVストアのトランザクションからデタッチし、デタッチの後の時点での当該トランザクションのコミットを可能にするように、
構成される、前記トランザクションマネージャと、
を備えた、データベースシステム。
【請求項6】
前記トランザクションマネージャは、
ストレージシステムがリスタートするのを検出した後で、
前記第1及び第2のKVストアの最後にコミットされたトランザクションを決定するように、
前記グローバルジャーナル内の前記結合されたジャーナルエントリを調べて、対応するKVストアにコミットされなかった任意のサブエントリを決定するように、
対応するKVストアにコミットされなかった任意のサブエントリをリプレイするように、
さらに構成された、請求項5に記載のデータベースシステム。
【請求項7】
前記トランザクションマネージャは、前記変更のセットを発行したアプリケーション、及び前記少なくとも2つのKVストアDBMSとは異なる、請求項6に記載のデータベースシステム。
【請求項8】
前記トランザクションマネージャは、前記変更のセットを発行したアプリケーションの一部である、請求項6に記載のデータベースシステム。
【請求項9】
前記トランザクションマネージャは、前記第1および第2の変更がすべてコミットされたと決定した後で、前記結合されたジャーナルエントリを削除するようにさらに構成された、請求項5に記載のデータベースシステム。
【請求項10】
すべてがパーシステントであるか、あるいは全くそうでないパーシステントKVストアへの変更のために、各KVストアが独自の非パーシステントトランザクションを有する、データベースシステム内の複数のパーシステントキーバリュー(KV)ストア間に、コンシステンシーを提供するトランザクションマネージャをインプリメントするために、プロセッサにより実行可能なプログラムを格納する非一時的コンピュータ可読記録媒体において、前記プログラムを実行するとき、前記プロセッサは、
第1のKVストアのトランザクションに参加するステップと、
第2のKVストアのトランザクションに参加するステップと、
すべてがパーシステントであるか、または全くそうではない前記第1のKVストアに対する第1の変更と、前記第2のKVストアに対する第2の変更を含む変更のセットに関して、
前記第1の変更を前記第1のKVストアのトランザクションに挿入するステップと、
前記第2の変更を前記第2のKVストアのトランザクションに挿入するステップと、
前記第1および第2の変更の記述をそれぞれ記録する第1および第2のサブエントリを備える結合されたジャーナルエントリを作成し、該結合されたジャーナルエントリをパーシステントグローバルジャーナルに書き込むステップと、
前記結合されたジャーナルエントリの、前記パーシステントグローバルジャーナルへの書き込みの完了を待つステップと、
前記結合されたジャーナルエントリが、前記パーシステントグローバルジャーナルに書き込まれた後で、
前記第1のKVストアのトランザクションからデタッチして、当該デタッチの後の時点での当該トランザクションのコミットを可能にするステップと、
前記第2のKVストアのトランザクションからデタッチして、当該、デタッチの後の時点での当該トランザクションのコミットを可能にするステップと、
を実行する、非一時的コンピュータ可読記録媒体。
【請求項11】
前記プロセッサが前記プログラムを実行するとき、前記プロセッサは、
ストレージシステムがリスタートしたことを検出した後で、
前記第1および第2のKVストアの最後にコミットされたトランザクションを決定するステップと、
前記パーシステントグローバルジャーナル内の前記結合されたジャーナルエントリを調べて対応するKVストアにコミットしなかった任意のサブエントリを決定するステップと、
対応するKVストアにコミットされなかった任意のサブエントリをリプレイするステップと、
をさらに実行する、請求項10に記載の非一時的コンピュータ可読記録媒体。
【請求項12】
前記プロセッサが前記プログラムを実行するとき、前記プロセッサは、前記第1および第2の変更がコミットされたことを判断した後で、前記結合されたジャーナルエントリを削除するステップをさらに実行する、請求項11に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、キーバリューストアに関し、特に、キーバリューストアがシステムクラッシュまたはストレージの故障に耐えるためのジャーナリングに関する。
【背景技術】
【0002】
キーバリュー(KV)ストアは、単一のデータベースと見ることができる。データをテーブルおよびカラムに配列する構造化照会言語(SQL)と異なり、KVストアは単に、キーバリューペアの集合である。キーは、任意であり得、例えば、整数またはストリングであり得る。唯一の要件は、KVストアが、任意の2つのキーをどのように比較するかを知っていることである。バリューも任意であり得、KVストアは、それをバイナリ・ラージ・オブジェクト(BLOB)として扱う。唯一の要件は、KVストアがそれをディスク上に記憶することができるようにバリューサイズを知っていることである。
【0003】
典型的には、KVストアは、トランザクションにより動作する。新しいトランザクションは、アプリケーションが、例えば新しいキーを挿入するような、KVストア上で何等かの変更を実行したいときオープンされる。後で、このトランザクションのために、さらなる変更を行うことができる。いくつかのポイントで、KVストアは、現在実行しているトランザクションが、十分な変更を累積したと決定する。次に、KVストアは現在のトランザクションをコミットし、トランザクションのためのすべての変更がディスクに保持される。これで、新しい実行中のトランザクションを開くことができる。各トランザクションは、単調に増加する整数のような、ある種のトランザクションIDを有する。
【0004】
アプリケーションの観点から、典型的なフローは、以下の通りである。
1.KVストアトランザクションに参加する。
2.変更のセットを実行する。例えば、新しいキーバリューペアを挿入する、キーバリューペアを削除する、いくつかのキーを変更する、いくつかの値を変更する等である。
3.KVストアトランザクションをデタッチ(detach)する。
【0005】
それに参加するアプリケーションスレッドが依然としてある間、トランザクションはコミット(commit)することができない。一度だけ、すべてのアプリケーションスレッドがトランザクションからデタッチされると、トランザクションは、コミットを開始することができる。典型的には、アプリケーションスレッドは、KVストアに対するインメモリ変更(in-memory modifications)を実行するためにのみ、非常に短い時間、トランザクションにアタッチされる。
【0006】
このモデルは、変更のセット全体がディスクに保持されるか、まったく保持されないことを保証する。例えば、トランザクションがコミットする前に、システムがクラッシュした場合、このトランザクションがこれまで集めた、いかなる変更も保持されないであろう。しかしながら、トランザクションからデタッチした後、アプリケーションは、いつ変更のセットが保持されるかを正確に知らない。さらに、クラッシュまたはストレージの故障がある場合、変更のセットは、完全に失われるであろう。
【0007】
いくつかのアプリケーションの場合、一部のアプリケーションでは、一連の変更を時々失うことは、受け入れられない。このようなアプリケーションは、システムクラッシュやストレージ障害に耐えるために、ジャーナリング(journaling)を使用する必要がある。典型的に、ジャーナリングは、KVストア自体によりインプリメントされるので、任意のアプリケーションが、それを使用することができる。
【0008】
上記のステップ1で、アプリケーションがID=5で実行中のトランザクションに参加すると仮定する。これは、ID=4の従前のトランザクションが成功裏にコミットしたことを意味する。ステップ2で、アプリケーションは、新しいキーバリューペア[K1、V1]を挿入すると仮定する。これに応答してジャーナルエントリが作られる。
Insert [K1、V1]、Trans ID=5
【0009】
次に、このジャーナルエントリは、ディスクに書かれる。この時点で、アプリケーションは、トランザクションからデタッチすることができ、キーインサーションが失われないことが保証され得る。次に、トランザクション5がコミットする機会を得る前にシステムがクラッシュすると仮定する。システムがリスタートした後、システムは、最新のコミットされたトランザクションがID=4を有することを知る。従って、4より高いトランザクションIDsを保持するジャーナルエントリに対してスキャンされる。それゆえ、上記ジャーナルエントリは、関連があるとみなされる。従って、[K1、V1]ペアは、トランザクション5に再挿入され、従って失われない。このプロセスは、「ジャーナルのリプレイ」と呼ばれる。
【0010】
今、トランザクション5が成功裏に完了したと仮定する。この場合、システムがその後クラッシュした場合、上記ジャーナルエントリは、関連しているとは、みなされないであろう。これは、ジャーナルエントリが、既にコミットされているトランザクションに代わって、変更を記述しているためである。
【発明の概要】
【0011】
この開示の1つまたは複数の例において、ストレージシステムは、各々が独自のトランザクションを有するディスクリートKVストアを含む。ストレージシステムにおいて、単一の入出力(IO)パスフローは、1つまたは複数のKVストアに対して変更を行うことができる。
【0012】
IOパスフローをハンドリングすることに関して、異なるKVストアに対して一貫したシステムステートを持たせるために、以下を行うようにグローバルジャーナリングメカニズムが設けられる。個別のKVストアのトランザクションを結合する。これにより、KVストアがパーシステント媒体(persistent media)(ディスクなど)のメモリ内の変更をコミットできなくなる。結合したすべてのKVストアトランザクションに変更を挿入する。結合したジャーナルエントリをアロケートする。KVストア変更毎に、ジャーナル「サブエントリ」を結合したジャーナルエントリに追加する。ここで、ジャーナルサブエントリは、変更が印加されたKVストアのトランザクションIDを保持する。結合されたジャーナルエントリは、パーシステント媒体への単一のアトミックな書き込みで書き込まれる。ジャーナル書き込みが完了すると、KVストアからトランザクションをデタッチする。
【0013】
KVストアは、それ自体如何なるジャーナルも有さないことに留意する必要がある。各KVストアは、メモリ内の変更を維持し、それらをパーシステント媒体に定期的にコミットする。この時点で、対応するジャーナルサブエントリは、無効になる。対応するKVストアトランザクションのすべてのサブエントリの変更がコミットされると、結合されたジャーナルエントリを解放することができる。システムがクラッシュすると、ジャーナルの各サブエントリのトランザクションIDは、対応するKVストアにコミットされたかどうかが、チェックされる。
【図面の簡単な説明】
【0014】
図1】この開示のいくつかの例にけるストレージシステムである。
図2】この開示のいくつかの例において、第1の構成における、トランザクションマネージャ、キーバリュー(KV)データベースマネージメントシステム(DBMSs)、およびグローバルジャーナル間の相互作用を図示するブロック図である。
図3】この開示のいくつかの例における複数のKVストアにわたってコンシステンシーを提供するための、図1のシステムに関する方法のフローチャートであり、特に、図2の第1の構成におけるトランザクションマネージャである。
図4】この開示のいくつかの例において、システムクラッシュ、またはストレージ故障からのコミットされなかったトランザクションをリカバーするための、図1のトランザクションマネージャに関する方法のフローチャートである。
図5】この開示のいくつかの例において、トランザクションマネージャ、複数のKVストアのためのKV DBMSs、およびグローバルジャーナルとの間の相互作用を例示するブロック図である。
【発明を実施するための形態】
【0015】
異なる図面における同じ参照符号の使用は、類似または同一のエレメントを指す。いくつかのケースにおいて、1つのアプリケーションは、2以上のKVストアに対して作用する。アプリケーションが変更[K1、V1]をKVストア1に挿入し、変更[K2、V2]をKVストア2に挿入したいと仮定する。さらに、アプリケーションには、KVストア間のコンシステンシー(consistency)を必要とする。言い換えれば、上述した変更の両方が保持されるか、または両方とも保持されない。
【0016】
これを達成するための可能な例示フローは、以下の如くである。
1.KVストア1のトランザクションに参加する。
2.KVストア2のトランザクションに参加する。
3.変更[K1、V1」をKVストア1に挿入する。
4.変更[K2、V2]をKVストア1に挿入する。
5.KVストア1のトランザクションをデタッチする。
6.KVストア2のトランザクションをデタッチする。
【0017】
そのようなフローと上述したモデルの場合、KVストア間のコンシステンシーは、可能ではない。各KVストアは、別個のジャーナルを有する。2つの別個のジャーナルエントリは、2つの変更に関して作成されるであろう。ジャーナルエントリの1つは、ディスクに書き込むことはできるが、他のジャーナルエントリは、クラッシュにより書き込むことができないかもしれない。その場合、システムリスタート時に、ジャーナルエントリの1つのみがリプレイされるであろう。この結果は、コンシステンシーの無いKVストア間の状態であろう。
【0018】
この開示の例では、KVストア毎のジャーナルではなく、グローバルジャーナルが提供される。グローバルジャーナルは、以下に示すように、サブエントリからなる、結合されたジャーナルエントリを含む。新しいアプリケーションフローは、
1.KVストア1のトランザクションに参加する(このトランザクションのトランザクションIDをT1と仮定する)。
2.KVストア2のトランザクションに参加する(このトランザクションのトランザクションIDをT2と仮定する)。
3.変更[K1、V1]をKVストア1に挿入する。
4.変更[K2、V2]をKVストア2に挿入する。
5.両方の変更を記載する結合されたジャーナルエントリを作成する。
Insert into KV store 1:[K1, V1], Trans ID=T1;
Insert into KV store 2:[K2, V2], Trans ID=T2
6.結合されたジャーナルエントリをパーシステント媒体(例えば、ディスク)に書き込み、書き込みが完了するのを待つ。
7.KVストア1のトランザクションをデタッチする。
8.KVストア2のトランザクションをデタッチする。
【0019】
結合されたジャーナルエントリは、単一のアトミックな書き込み(例えば、1回のディスク書き込み動作)として書き込まれる。それゆえ、両方のサブエントリは、一緒に書き込まれる。両方のトランザクションからのデタッチは、結合されたジャーナルエントリがディスクに保持された後でのみ生じる。これは、関与するKVストアトランザクションのいずれも、結合されたジャーナルエントリがディスク上に保持されるまで、コミットすることは、できないことを保証する。結合されたジャーナルエントリが書き込まれる前にトランザクションの、いずれか、または両方が生じる場合、以下の例示フローが起こり得る。
-KVストア1は、結合されたジャーナルエントリが、ディスク上にある前に、そのトランザクションをコミットする可能性がある。
-結合されたジャーナルエントリが、ディスク上にある前に、クラッシュする可能性がある。
-システムがリスタートした後、KVストア1は、その関連する変更を、コミットしたトランザクションT1の一部として保持する。
しかしながら、KVストア2は、トランザクションT2をコミットしなかった。さらに、ディスク上には、結合されたジャーナルエントリは無く、それは、トランザクションT2において変更を再び印加するために使用された可能性がある。この結果、トランザクションT1における変更は、保持されるが、トランザクションT2における変更は、失われる。それゆえ、システムの状態は不一致となる。
【0020】
今、上述した8つのステップのすべてが実行されたと仮定する。今、結合されたジャーナルエントリは、ディスク上にあり、各KVストアは、いつでもトランザクションをコミットすることができる。今、以下の例示フローが起こり得ると仮定する。
9.KVストア1は、トランザクションT1をコミットする。
10.KVストア2が、トランザクションT2をコミットすることができる前に、システムがクラッシュする。
11.システムリスタート時に、ステップ6で書き込まれた結合されたジャーナルエントリが調べられる。
12.第1のサブエントリは、これ以上関連しないと決定される。なぜならば、KVストア1は、トランザクションT1が、すでにコミットされており、トランザクションT1を示す任意のサブエントリは、もはや関連しないことを認識しているからである。
13.第2のサブエントリは、依然として関連すると決定される。なぜなら、KVストア2は、トランザクションT2をコミットしていないことを認識しているからである。KVストア2は、最後にコミットしたトランザクションがT2-1(トランザクションT2の前のトランザクション)であったことを認識している。
14.第2のサブエントリのみがリプレイされ、変更[K2、V2]をKVストア2のトランザクションT2に再度インサートするか、またはディスク上のKVストア2に変更[K2、V2]を直接コミットする。
15.システムは整合状態に戻る。
【0021】
上記モデルは、2つのKVストアに限定されない。結合されたジャーナルエントリが単一の書き込み動作に書き込むことができる限り、任意の数のKVストアに対してコンシステンシーを達成することができる。
【0022】
図1は、この開示のいくつかの例におけるデータベースシステム100である。システム100は、プロセッサ102、メイン(非パーシステント)メモリ104、および第2の(パーシステント)メモリ106を含む。メインメモリ104(例えば、ランダムアクセスメモリ)は、トランザクションマネージャ、第1のKVストア120を管理するための固有のトランザクション(例えば、トランザクションID=T1を有する現在のトランザクション112)を管理するための固有のトランザクションを有する第1のKVデータベースマネージメントシステム(DBMS)110、第2のKVストア122を管理するための固有のトランザクション(例えば、トランザクションID=T2を有する現在のトランザクション)を有する第2のKV DBMS114に関するプログラム命令とデータを記憶する。「KV DBMS」と「KVストア」は、交換可能に使用され、しばしば一緒にして1つのエンティティとしてみなされる。オプションとして、メインメモリ104は、第1のKVストア120と第2のKVストア122をアクセスするアプリケーションに関するプログラム命令とデータを記憶する。代替アプリケーション118は、第1のKVストア120と第2のKVストア122にアクセスするために、ネットワークによってストレージシステム100に接続された、他のシステムに配置することができる。
【0023】
二次メモリ106(例えば、ディスク)は、第1のKVストア120、第2のKVストア122、およびグローバルジャーナル124を記憶する。代替的に、第1のKVストア120、第2のKVストア122、およびグローバルジャーナル124は、異なる第2のメモリに配置することができる。プロセッサ102,メインメモリ104、および第2のメモリ106は、単一のサーバであり得るか、または、プロセッサ102とメインメモリ104は、ストレージエリアネットワーク(SAN)またはネットワークを介してネットワークにアタッチしたストレージ(NAS)のような、ストレージシステムである、第2のメモリ106をアクセスするサーバであり得る。
【0024】
図2は、この開示のいくつかの例における構成200内のトランザクションマネージャ108、第1のKV DBMS110、第2のKV DBMS114、およびグローバルジャーナル124を図示するブロック図である。構成200において、アプリケーション118は、トランザクションマネージャ108に、変更のセット202を発行する。あるいは、トランザクションマネージャ108は、変更のセット202をインターセプト(intercept)することができる。説明のために、セット202は、第1のKVストア120に対する変更と、第2のKVストア122に対する変更[K2、V2]を含む。すべてを保持する必要がある、または全く保持する必要が無い、複数のKVストアへの変更のセットをハンドリングする際に、トランザクションマネージャ108は、KVストアのトランザクションに参加し、変更を対応するトランザクションに挿入し、変更および対応するトランザクションを記載するサブエントリを有する、結合されたジャーナルエントリを作成し、書き込み、KVストアのトランザクションからデタッチする。システムクラッシュの場合、トランザクションマネージャ108は、コミットされなかった任意のサブエントリをリプレイまたはコミットする。
【0025】
図3は、この開示のいくつかの例における複数のKVストア間にコンシステンシーを提供する、システム100(図1)、特に、構成200(図2)のトランザクションマネージャ108に関する方法300のフローチャートである。方法300は、およびここに記載された他の方法は、1つまたは複数のブロックにより説明される、1つまたは複数の動作、機能、または行動を含むことができる。ブロックは、シーケンシャルな順番に説明されるけれども、これらのブロックは、また、並列におよび/またはここに記載した順番とは異なる順番で実行することができる。また、種々のブロックは、より少ないブロックに結合したり、さらなるブロックに分割したり、および/または所望のインプリメンテーションに基づいて消去したりすることが可能である。方法300は、第1のKVストア120(図2)に対する変更[K1、V1]および第2のKVストア120に対する変更[K2、V2」のセット202(図2)を受信するか、またはインターセプトした後、ブロック302で開始することができる。
【0026】
ブロック302において、トランザクションマネージャ108は、第1のKVストア120のトランザクション112に参加する。トランザクションマネージャ108は、既存のトランザクションに参加することができ、あるいは、トランザクションが存在しないなら、コマンドを第1のKVDBMS110に発行して、新しいトランザクション112を作成することができる。これに応答して、トランザクションマネージャ108は、第1のKV DBMS110からトランザクション112のトランザクションID(T1)を受信することができ、あるいは、トランザクションIDに関して第1のKV DBMS 110にアクティブに問い合わせを行うことができる。ブロック302の次にブロック304が続く。ブロック304において、トランザクションマネージャ108は、ブロック302に記載したのと同様な方法で第2のKVストア122のトランザクション116に参加する。ブロック304の次にブロック306が続く。
【0027】
ブロック306において、トランザクションマネージャ108は、適切なインサートコマンドを、第1のKV DBMS110に挿入することにより、第1のKVストア120のトランザクション112に変更[K1、V1]を挿入する。それに応じて、第1のKV DBMS110は、変更をトランザクション112に追加する。いくつかのKV DBMSに関して、トランザクションマネージャ108は、1つのステップでブロック302と306を実行することができる。ブロック306の次に、ブロック308が続く。
【0028】
ブロック308において、トランザクションマネージャ108は、ブロック306に記載したのと同様の方法で、第2のKVストア122のトランザクション116に変更[K2、V2]を挿入する。いくつかのKV DBMSに関して、トランザクションマネージャ108は、1つのステップで、ブロック304と308を実行することができる。ブロック308の次にブロック310が続く。
【0029】
ブロック310において、トランザクションマネージャ108は、第1のKVストア120のトランザクションT1に挿入された変更[K1、V1]と、第2のKVストア122のトランザクションに挿入された変更[K2、V2]を記載する、結合されたジャーナルエントリ204を作成する。次に、トランザクションマネージャ108は、結合されたジャーナルエントリ204をグローバルジャーナル124(図2)に書き込む。ブロック310の次にブロック312が続く。
【0030】
ブロック312において、トランザクションマネージャ108は、結合されたジャーナルエントリ204の書き込みを待って、グローバルジャーナル124で完了する。結合されたジャーナルエントリ204の書き込みが完了した後で、トランザクションマネージャ108は、適切なデタッチコマンドを、第1のKV DBMS110に発行することにより第1のKVストア120のトランザクション112からデタッチする。これは、適切であるとみなすとき、例えば、トランザクション112が十分な変更を累積したとき、第1のKV DBMS110が、トランザクション112をコミットすることを可能にする。ブロック312の次にブロック314が続く。
【0031】
ブロック314では、トランザクションマネージャ108は、ブロック312に記載したのと同様の方法で第2のKVストア122のトランザクション116からデタッチする。この場合も、これは、適切とみなすとき、例えば、トランザクション116が十分な変更を累積したとき、トランザクション116をコミットすることを可能にする。
【0032】
図4は、この開示の例において、システムクラッシュ、またはストレージの故障によりコミットされなかったトランザクションをリカバーするために、システム100(図1)、特に、構成200(図2)のトランザクションマネージャ108の方法のフローチャートである。方法400を示すために、最初のKV DBMS110がトランザクション112(トランザクションID=T1)を最初のKVストア120にコミットし、2番目のKV DBMS 114がトランザクション116(トランザクションID=T2)を2番目のKVストア122にコミットする前に、システム100がクラッシュすると仮定する。方法400は、ブロック402において開始することができる。
【0033】
ブロック402において、システム100がリスタートしたことを検出すると、トランザクションマネージャ108は、グローバルジャーナル124(図2)内の結合されたジャーナルを調べる。ブロック402の次にブロック404が続く。
【0034】
ブロック404において、トランザクションマネージャ108は、対応するKVストアにコミットされなかった、結合されたジャーナルエントリ204内の任意のサブエントリを決定する。トランザクションマネージャ108は、適切なコマンドを、それぞれ第1のKV DBMS110と第2のKV DBMS114に適切な問い合わせコマンドを発行することにより、それぞれ、第1のKVストア120と第2のKVストア122に、最後にコミットされたトランザクションのIDsを決定する。各KVストアは、最後にコミットしたトランザクションのIDを記録する。
【0035】
次に、トランザクションマネージャ108は、結合されたジャーナルエントリ204のサブエントリに記録されたトランザクションに対して最後にコミットしたトランザクションのIDsを比較する。トランザクションマネージャ108は、トランザクションT1がすでにコミットされているので、第1のKVストア120に対する変更に関する第1のサブエントリは、関係ないと決定する(すなわち、第1のKVストア上のリターンした、最後にコミットした、トランザクションはT1またはそれより高次である)。トランザクションマネージャは、トランザクションT2がコミットされなかったので、第2のKVストア120への返納に関する第2のサブエントリは、関係があると決定する(例えば、第2のKVストア122上のリターンした、最後にコミットした、トランザクションは、T2未満である)。ブロック404の次にブロック406が続く。
【0036】
ブロック406において、トランザクションマネージャ108は、対応するKVストアにコミットされなかった、任意の関連するサブエントリをリプレイし、サブエントリ内の変更を、対応するKVストアに再度インサートする。結合されたジャーナルエントリ204内の第2のサブエントリは、関連するので、トランザクションマネージャ108は、第2のKVストア122のトランザクションに参加し、変更[K2、V2]をトランザクションにインサートし、トランザクションからデタッチすることにより、変更[K2、V2]を第2のKVストア122に、再度インサートする。結合されたジャーナルエントリ204は、グローバルジャーナル124に維持されるので、新しい結合されたジャーナルエントリは、作られない。
【0037】
この開示のいくつかの例において、トランザクションマネージャ108は、コミットされたトランザクションIDsを有する、すべてのサブエントリを有する、任意の結合されたジャーナルエントリを周期的に削除する。トランザクションマネージャ108は、最後にコミットしたトランザクションのIDsをKVストアに問い合わせ、それらをすべての結合したジャーナルエントリのサブエントリ内のIDsと比較する。
【0038】
図5は、この開示のいくつかの例における構成500において、トランザクションマネージャ108、第1のKV DBMS110、第2のKV DBMS114、およびグローバルジャーナル124との間の相互作用を説明するブロック図である。構成500において、トランザクションマネージャ108は、アプリケーション118と統合される。さもなければ、構成500は、構成200と類似の方法で動作する。開示された実施形態の特徴の種々の他の適応と組み合わせは、この発明の範囲内である。多くの実施形態が、以下の特許請求の範囲により包含される。

図1
図2
図3
図4
図5