JP5890071B2 - 分散キーバリューストア - Google Patents

分散キーバリューストア Download PDF

Info

Publication number
JP5890071B2
JP5890071B2 JP2015530155A JP2015530155A JP5890071B2 JP 5890071 B2 JP5890071 B2 JP 5890071B2 JP 2015530155 A JP2015530155 A JP 2015530155A JP 2015530155 A JP2015530155 A JP 2015530155A JP 5890071 B2 JP5890071 B2 JP 5890071B2
Authority
JP
Japan
Prior art keywords
transaction
key
data log
node
log file
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.)
Active
Application number
JP2015530155A
Other languages
English (en)
Other versions
JP2015526832A (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.)
VMware LLC
Original Assignee
VMware LLC
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 VMware LLC filed Critical VMware LLC
Publication of JP2015526832A publication Critical patent/JP2015526832A/ja
Application granted granted Critical
Publication of JP5890071B2 publication Critical patent/JP5890071B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/28Databases characterised by their database models, e.g. relational or object models
    • 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/2358Change logging, detection, and notification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/14Details of searching files based on file metadata
    • G06F16/148File search processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/174Redundancy elimination performed by the file system
    • G06F16/1748De-duplication implemented within the file system, e.g. based on file segments
    • G06F16/1756De-duplication implemented within the file system, e.g. based on file segments based on delta files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1865Transactional file systems
    • 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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2272Management thereof
    • 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/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/128Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/185Hierarchical storage management [HSM] systems, e.g. file migration or policies thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/84Using snapshots, i.e. a logical point-in-time copy of the data
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching

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)
  • Library & Information Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、分散キーバリューストアに関する。
キーバリューストア(key-value store)は、ユーザがキーバリューペア(key-value pairs)の形態でデータを保存、検索できるデータベースの1つである。キーバリューペアのキーは、それとペアになる値を一意的に特定する標識(例えば、番号、ストリング等)である。キーバリューペアの値は、どのような種類のデータオブジェクトまたはデータオブジェクトの集合であってもよい。一般的なキーバリューストアは、ユーザに対して、PUT、GET、DELELEという3つの操作を可能とさせる。PUT操作は1つまたは複数の指定されたキーバリューペアをキーバリューストアに保存し、GET操作は1つまたは複数の指定されたキーバリューの値をキーバリューストアから取得し、DELETE操作は1つまたは複数の指定されたキーによって特定されたキーバリューペアをキーバリューストアから削除する。
実際にはいくつかのキーバリューストアが分散され、換言すれば、これらによってユーザはPUT、GET、DELETE等のキーバリュー操作を、ノードと呼ばれる個々の(物理的または仮想)コンピュータの集合の何れからも起動させることができる。このような分散キーバリューストアは、非分散キーバリューストアより高い耐障害性とスケーラビリティを提供する。しかしながら、中央集中的でないその性質から、分散キーバリューストアはキーバリュー操作の実行に関するトランザクション保証(例えば、原子性、耐久性、分離性等の保証)を容易に提供することができない。
1つの実施形態において、分散トランザクション対応キーバリューストアを実装するシステムが提供される。このシステムはノードの集合を含み、各ノードは、データログファイルの集合を保存する1つまたは複数の記憶装置に通信可能に連結され、各データログファイルは1つのキー名前空間のためのキーバリューペアを含む。各ノードは、そのノードに固有のトランザクションログファイルを使って、データログファイルの集合の中のキーバリューペアを変更する、または取得するトランザクションを実行するように構成され、トランザクションログファイルはそのトランザクションの状態情報を含む。トランザクションは、各トランザクションの原子性および耐久性が確保される方法で実行される。
以下の詳細な説明と添付の図面により、特定の実施形態の性質と利点をよく理解できる。
1つの実施形態による分散トランザクション対応キーバリューストアのシステム実装を示す。 ある実施形態による変更(例えば、PUTとDELETE)トランザクションを実行するためのプロセスを示す。 ある実施形態による変更(例えば、PUTとDELETE)トランザクションを実行するためのプロセスを示す。 ある実施形態によるGETトランザクションを実行するためのプロセスを示す。 ある実施形態によるGETトランザクションを実行するためのプロセスを示す。 1つの実施形態による、キー名前空間での検索を実行するためのプロセスを示す。
下記において、説明を目的として、各種の実施形態を理解できるように様々な例と詳細が示されている。しかしながら、当業者にとっては、ある実施形態はこれらの詳細の一部がなくても実施でき、またはそれらの変形や同等物でも実施できることが明らかである。
特定の実施形態は、分散トランザクション対応キーバリューストア(distributed, transactional key-value store)、すなわち「DTKVストア」に関する。DTKVストアは、ノードの集合を含むことができ、各ノードで、ユーザがデータをキーバリューペアの形態で保存し、取得することができるようなキーバリュー操作(例えば、PUT、GET、DELETE等)を実行できる。従来の分散キーバリューストアとは異なり、DTKVストアはこれらの操作を、特定のトランザクション特性(例えば、原子性、耐久性、およびノード単位スナップショット分離性)が確実に満たされる方法で実行できる。
1つの実施形態において、DTKVストアは、データログファイルの集合とトランザクションログファイルの集合を含むデータ構成を利用できる。データログファイルの集合は、DTKVストアのノード間で共有可能であり(例えば、各ノードにより読出、書込み可能とすることができ)、DTKVストアによって保持される実際のキーバリューペアを保存できる。トランザクションログファイルの集合の中の各トランザクションログフファイルはDTKVストア内の特定のノードに固有とすることができ(例えば、そのノードによる読出、書込みは可能であるが、他のノードは読出しかできない)、そのノードにより実行されたトランザクションの状態の追跡を続けることができる。以下に詳しく説明するように、DTKVストアは、キーバリュー操作の実行時にこれらのデータログファイルおよびトランザクションログファイルとやり取りして、トランザクション保証を効率的でスケーラブルな方法で提供する。
他の実施形態において、DTKVストアは、ユーザがDTKVストアによって保持されているキーおよび/またはキーバリューペアを効率的に検索できるようにする。この実施形態において、DTKVストアはキーを1つまたは複数のキー名前空間に分割し、各キー名前空間のためのキーバリューペアを1つまたは複数の別々のデータログファイルに保存する。すると、DTKVストアにより、ユーザは(SEARCH操作を通じて)キー名前空間によりキーおよび/またはキーバリューペアを検索できる。ユーザが特定のキー名前空間に関してSEARCH操作を起動させると、DTKVストアはその検索をそのキー名前空間に関係付けられたデータログファイル(複数の場合もある)の内容に限定することができる(DTKVストア内のデータログファイルの全部を検索しなくてよい)。
I.システム実装
図1は、1つの実施形態によるDTKVストア100のシステム実装を示している。図のように、DTKVストア100は、相互に接続されたノードの集合102−1〜102−Nを含む。ノード102−1〜102−Nは、物理コンピュータ装置(例えば、サーバコンピュータシステム、パーソナル(例えば、デスクトップまたはラップトップ)コンピュータシステム等)でも、仮想マシン(VM)でも、物理および仮装装置の組み合わせでもよい。ノード102−1〜102−Nは、当業者の知るローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネットをはじめとする何れかのタイプのコンピュータネットワークを介して相互に接続されていてもよい。
I.A.DTKVサービス
DTKVストア100の中の各ノード102−1〜102−Nは、分散トランザクション対応キーバリューサービス、すなわち「DTKVサービス」(104−1〜104−N)を含む。DTKVサービス104−1〜104−Nはソフトウェアおよび/またはハードウェアベースのコンポーネントであり、DTKVストア100の主な処理タスクを実行する。例えば、各DTKVサービス104−1〜104−Nは、1人または複数のユーザ(例えば、人または自動化/プログラムエージェント)に対して、DTKVストア100の中のキーバリューペアの保存、取得、検索の操作を可能とさせる。特定の操作に対するユーザの起動を受けると、DTKVサービス104−1〜104−Nは、その操作を実行し、応答(該当する場合)をユーザに返すことができる。1つの実施形態において、DTKVサービス104−1〜104−Nは以下の操作を可能とさせる。
(1)PUT((key1,value1),(key2,value2),…):1つまたは複数の指定されたキーバリューベアを保存する。
(2)GET(key1,key2,…):1つまたは複数の指定されたキーに対応する1または複数のキーバリューペアを取得する。
(3)DELETE(key1,key2,…):1つまたは複数の指定されたキーに対応する1つまたは複数のキーバリューペアを削除する。
(4)SEARCH(namespace,search expression):指定されたキー名前空間の中で、指定された検索式(例えば、正規表現)を満たす、キーおよび/またはキーバリューペアを検索する。
一般に、各DTKVサービス104−1〜104−Nは、DTKVストア100の中の他のDTKVサービスとは独立して、およびこれらと同時に動作できる。例えば、ノード102−1のDTKVサービス104−1は、たとえば第一のユーザ集合から受け取った第一のPUT、GET、DELETおよび/またはSEARCH操作集合の起動を処理することができる。それと略同時に、ノード102−2のDTKVサービス104−2は、例えば第二のユーザ集合から受け取った第二のPUT、GET、DELETEおよび/またはSEARCH操作集合の起動を処理することができ、その際、DTKVサービス104−1が実行する処理には全く依存しない。この分散平行処理モデルによって、DTKVストア100を耐障害性とすることができ、すなわち、1つのノードおよび/またはDTKVサービスが利用できなくなっても、ユーザは依然として他の利用可能なノード/DTKVサービスの1つを介してDTKVストア100にアクセスできる。さらに、この分散平行処理モデルにより、DTKVストア100はスケーラブルとすることができ、これは、システム管理者が増大したユーザ負荷を扱う上での必要性に応じてDTKVストア100に新たなノード(各々が新たなDTKVサービスを実行する)を追加できるからである。
I.B.トランザクション特性
従来の分散キーバリューストアと異なり、DTKVストア100はトランザクション対応であり、換言すれば、DTKVストア100は、DTKVサービス104−1〜104−Nがキーバリュー操作を実行する時に特定のトランザクション特性が満たされることを確実にし/保証することができる。このようなトランザクション特性を満たす(または、満たすことが意図された)キーバリュー操作のインスタンスが、トランザクションと呼ばれる。特定の実施形態において、DTKVストア100は原子性、耐久性、ノード単位スナップショット分離性というトランザクション特性を保証できる。
原子性とは、1つの実施形態において、トランザクションの全要素が単独で不可分の群として成功に終わるか、失敗する(例えば、中断される)ことが求められるトランザクション特性である。これは、これはトランザクションを部分的に実行できないため、「オール・オア・ナッシング」特性として知られる。例えば、3つのキーバリューペア(K1、V1)、(K2、V2)、(K3、V3)を保存するPUT操作のインスタンスを考える。原子性の特性は、これらのキーバリューペアの3つ全部が一緒にコミットされる(例えば、ディスク上に書き込まれ)か、まったくコミットされないことを求める。
耐久性とは、1つの実施形態において、あるトランザクションの結果としてコミットされたすべての変化(例えば、変更、削除)が一貫していることを求めるトランザクション特性であり、換言すれば、コミットされた変化は、例えば電源停止、クラッシュ、またはその他のシステムエラーによって未完了となるべきではない。
ノード単位スナップショット分離性とは、1つの実施形態において、DTKVストア100上で実行される各トランザクションが同時に行われる他のトランザクションから分離されることを求めるトランザクション特性である。換言すれば、この特性を満たすトランザクションは、それがあたかも、他のどのユーザも同時にDTKVストア100の中のキーバリューペアにアクセスし、またはこれを変更していないかのように見える環境で操作する。それゆえ、DTKVストア100の内容は、トランザクションの開始時に「フリーズ」していると考えることができ、他のトランザクションによって行われる部分的な変化は見えるべきではない。
例えば、DTKVサービス104−1がキーバリューペア(K1、V1)と(K2、V2)を保存する第一のPUTトランザクションの実行を開始し、それと略同時にDTKVサービス104−2がキーバリューペア(K1、V3)と(K2、V4)を保存する第二のPUTトランザクションの実行を開始したとする。ノード単位スナップショット独立性の特性によれば、DTKVストア100はこれらのトランザクションの終了時に、(K1、V1)と(K2、V2)(これは、第二のPUTトランザクション→第一のPUTトランザクションという逐次的実行順序を示す)か、(K1、V3)と(K2、V4)(これは、第一のPUTトランザクション→第二のPUTトランザクションという逐次的実行順序を示す)のいずれかを含んでいるはずである。例えば(K1、V1)と(K2、V4)の最終状態が有効でなく、それは、この最終状態が第一のPUTトランザクションの部分的実行と第二のPUTトランザクションの部分的実行を表しているからである。
他の例として、DTKVサービス104−1が2つの新しいキーバリューペア(K1、V1)と(K2、V2)を挿入するPUTトランザクションの実行を開始し、それと略同時にDTKVサービス104−2がキーK1とK2の値を読み出すGET操作の実行を開始した場合を考える。(K1、V1)の挿入後で、かつ(K2、V2)の挿入開始の前には比較的長い休止があると仮定する。この場合の結果として、3つの可能性が考えられる。
1)DTKVサービス104−2がK1またはK2の何れについても値を発見しない。
2)DTKVサービス104−2がK1の値V1は発見するが、K2の値は発見しない。
3)DTKVサービス104−2がK1の値V1とK2の値V2を発見する。
これら3つの考えられる結果のうち、(1)と(3)だけがノード単位スナップショット分離性の特性を満たし、GETトランザクションの開始時にDTKVストア100はDTKVサービス104−2にとってフリーズしているように見える。
上記を実現するために、ノード単位スナップショット分離性は3つの部分要求事項を含むことができる。第一の部分要求事項は、同時に行われるトランザクションが同じデータ(例えば、同じキーバリューペア)を変更できないことを明示する。このような状況が発生すると、同時に実行されるトランザクションの1つは中断されなければならない。上記の、2つのPUTトランザクションの同時実行が関わる上記の例では、この部分要求事項によれば第一のPUTトランザクションまたは第二のPUTトランザクションの何れかが中断されることになり、それは、これらが両方とも同じキーK1とK2を変更しようとしているからである。これにより、DTKVストア100の、一方または両方のトランザクションの部分実行を表す最終状態が回避される。
第二の部分要求事項は、PUTトランザクションと同時に実行され、同じキー集合に対して操作するGETトランザクションが、PUTトランザクションの変更の全部を含むか、全く含まない値の集合を返すべきである、というものである。この要求事項は読出分離性と呼ばれる。
第三の部分要求事項は、DTKVストア100の中の各ノードがそのノードから発生する(すなわち、その上で実行される)すべてのトランザクションの固有の実行順序を保持することを求める。それゆえ、図1の実施形態では、この第三の部分要求事項は、ノード102−1がDTKVサービス104−1の実行するすべてのトランザクション(例えば、PUT、GET、DELETE等のインスタンス)についての固有の実行順序を保持すること、ノード102−2がそのDTKVサービス104−2の実行するすべてのトランザクションについての固有の実行順序を保持すること、等々を求める。これは、分散システム内のすべてのトランザクション(換言すれば、全ノードにわたるトランザクション)が全体として順序付けられる(すなわち、単独の固有のコミット順序に従って整理される)ことを求める「スナップショット」分離性の、より厳格なトランザクション特性とは異なる点に留意するべきである。
上記のトランザクション特性を確実に満たすことによって、DTKVストア100は、そのキーバリューペアレポジトリが、ノード102−1〜102−Nにまたがるキーバリュー操作の同時起動に関係なく、また機器の(例えば、ノードまたは記憶装置)の故障に関係なく、確実に一貫した方法で保持されるようにすることができる。これによって、ユーザは、競合状態、ダーティリード、部分書込み、およびトランザクション非対応の処理から生じうる他の既知の問題について心配することなく、DTKVストア100と信頼性の高いやり取りを行うことができる。
I.C.データ構成
特定の実施形態において、DTKVストア100は、2種類のファイル、すなわちデータログファイル(106−1〜106−M)とトランザクション(「txn」)ログファイル(108−1〜108−N)を含むデータ構成を利用できる。以下のセクションIIで説明するように、DTKVサービス104−1〜104−Nは、PUT、GET、DELETEトランザクションの実行時にこれらのデータログファイルおよびトランザクションログファイルを操作して、各トランザクションの原子性、耐久性、ノード単位スナップショット分離性を保証することができる。
図1の実施形態において、データログファイル106−1〜106−Mは、中央記憶装置110(例えば、専用のストレージサーバ上でホストされている)に保存されているように示され、トランザクションログファイル108−1〜108−Nは、それぞれノード102−1〜102−Nのローカル記憶装置112−1〜112−Nに保存されているように示されている。しかしながら、理解すべき点として、データログファイル106−1〜106−Mとトランザクションログファイル108−1〜108−Nは、ローカルまたはリモート接続を通じてノード102−1〜102−Nにアクセス可能などの記憶装置または記憶装置の組み合わせにも保存できる。
I.C.1.データログファイル
データログファイル106−1〜106−Mは、DTKVストア100によって保持される実際のキーバリューペアを保存する。各データログファイル106−1〜106−Mは、DTKVサービス104−1〜104−Nの間で共有可能であり、それによって各DTKVサービスによって読出可能、書込み可能である。いくつのかの実施形態において、各データログファイル106−106−Mは、所定のキー名前空間に関連付けることができる。1つの実施形態において、1つの特定のキー名前空間に属するキーバリューペアのすべてが1つのデータログファイル上に保存されるように、キー名前空間とデータログファイルとの間に1対1のマッピングがあってもよい。例えば、データログファイル106−1を営業部門の従業員の氏名を含む第一のキー名前空間に関連付けることができる、データログファイル106−2をマーケティング部門の従業員の氏名を含む第二のキー名前空間に関連付けることができる、等々である。他の実施形態では、キー名前空間とデータログファイルの間に1対多のマッピングがあってもよく、それによって特定のキー名前空間内のキーを複数のデータログファイルにまたがって保存できる。何れの場合も、各データログファイル106−1〜106−Mは一般に、そのデータログファイルに関連付けられたキー名前空間の範囲内にあるキーバリューペアだけを保存する。キー名前空間によるデータログファイルのこのような分割は、DTKVトア100内でのキーおよび/またはキーバリューペアの検索工程を容易にし、これについては以下のセクションIIIで説明する。
各データログファイル106−1〜106−Mは、データログエントリと呼ばれるエントリアレイまたはリストとして整理できる。DTKVサービス104−1〜104−Nは、それがDTKVストア100のキーバリューの内容を変更する「変更」トランザクション(すなわち、PUTおよびDELETEトランザクション)を実行する際に、これらのデータログエントリを作成する。データログエントリは2種類、すなわち、DTKVストア100内のキーバリューペアの保存を示すPUTデータログエントリと、DTKVストア100からのキーバリューペアの削除を示すDELETEデータログエントリのうちの一方とすることができる。各PUTデータログエントリは、保存されるキーと値を特定する「キー」と「値」のフィールドを含むことができ、その一方で、各DELETEデータログエントリは、削除されるキーバリューペアのキーを特定する単独の「キー」のフィールドを含むことができる。さらに、各データログエントリ(PUTまたはDELETEの各々)は、そのデータログエントリを作成したDTKVサービスのホストノード(例えば、102−1〜102−N)を特定する「ノード」のフィールドと、そのノードにデータログエントリを作成させたトランザクションを特定するトランザクション識別(「txnID」)フィールドを含むことができる。
例えば、データログエントリ“PUT key:K1 value:V1 node:N1 txnID:T1”を考える。このデータログエントリは、トランザクションIDがT1のPUTトランザクションがノードN1で実行され、このPUTトランザクションがキーバリューペア(K1、V1)を保存させたことを示す。他の例として、データログエントリ、“DELETE key:K1 node:N2 txnID:T2”を考える。このデータログエントリは、トランザクションIDがT2のDELETEトランザクションがノードN2で実行され、このDELETEトランザクションがキーK1により特定されるキーバリューペアを削除させたことを示す。
特定の実施形態において、DTKVサービス104−1〜104−Nは、これらが(例えば原子的な「付加」操作を通じて)新しいデータログエントリを各データログファイル106−1〜106−Mの末尾に付加だけするように構成され、すなわち、DTKVサービス104−1〜104−Nは新しいデータログエントリをデータログファイルの始めまたは途中に挿入したり、データログファイル内の既存のデータログエントリを変更したりできない。これらの実施形態において、各データログファイル106−1〜106−Mは同じキーについての複数のデータログエントリを含むことができ、データログファイル内のあるキーの最後の(すなわち、最も新しい)データログエントリが、そのキーの現在の値を決定する。例えば、以下の例示的なデータログファイルを考える。
PUT key:K1 value:V1 node:N1 txnID:T1
PUT key:K1 value:V2 node:N2 txnID:T2
DEL key:K1 node:N3 txnID:T4
PUT key:K1 value:V3 node:N1 txnID:T5
この例では、4つのデータログエントリのすべてがキーK1に関係する。しかしながら、データログエントリは(上記のような「付加」の制限により)上から下に時系列的に順序が付けられるため、最後のデータログエントリがキーK1の現在の値、すなわちV3を決定する。それより古いデータログエントリは、最後のデータログエントリによって上書きされた過去のエントリと考えることができる。
他の実施形態において、DTKVサービス104−1〜104−Nは、これらがファイルバージョンに関してデータログファイル106−1〜106−Mにアクセスし/これを変更するように構成される。換言すれば、各データログファイル106−1〜106−Mはバージョン番号に関連付けられ、DTKVサービス104−1〜104−Nは、データログファイルにアクセスする時にバージョン番号を指定するほか、データログファイルを変更する時にデータログファイルのバージョン番号を上げる。
I.C.2.トランザクションログファイル
トランザクションログファイル108−1〜108−Nは、DTKVサービス104−1〜104−Nにより実行されるトランザクションに関する状態情報を保存する。特定の実施形態において、各トランザクションログファイル108−1〜108−Nは、DTKVストア100内の特定のノード/DTKVサービスに固有のものとする(すなわちこれに関連付けられる)ことができる。例えば、トランザクションログファイル108−1はノード102−1/DTKVサービス104−1に特定とすることができる、トランザクションログファイル108−2はノード102−2/DTKVサービス104−2に特定とすることができる、等々である。これらの実施形態において、各トランザクションログファイル108−1〜108−Nには、それに関連するDTKVサービスしか書き込むことができず、そのDTKVサービスによって開始/実行されたトランザクションに関する状態情報だけが保存される。その他の、関連付けられていないDTKVサービスはそのトランザクションログファイルを読み出すことができる(ただし、書き込むことはできない)。
各トランザクションログファイル108−1〜108−Nは、トランザクションログエントリと呼ばれるエントリアレイまたはリストとして整理できる。あるトランザクションログファイルに関連付けられたDTKVサービスは、このDTKVサービスがDTKVストア100のキーバリューの内容を変更する変更トランザクションを実行する際にこれらのトランザクションログエントリを作成する。トランザクションログエントリは3種類、すなわち、変更トランザクションの開始を示すBEGINトランザクションログエントリ、変更トランザクション実行の成功を示すCOMMITトランザクションログエントリ、変更トランザクション実行の失敗を示すABORTトランザクションログエントリであるのうちの1つとすることができる。これらの3種類のトランザクションログエントリの各々は、そのトランザクションを開始した(それゆえ、そのトランザクションログエントリを作成した)DTKVサービスのホストノード(例えば、102−1〜102−N)を特定する「ノード」のフィールドと、あるノードに関連するトランザクションを一意的に特定するトランザクション識別(「txnID」)のフィールドを含むことができ、「ノード」のフィールドと「txnID」のフィールドとの組み合わせは、DTKVストア100の中の全ノードにわたって固有とすることができる。
1つの実施形態において、トランザクション識別フィールドはTKVストア100のすべてのノード102−1〜102−Nにわたって固有とすることができる。代替的な実施形態において、トランザクション識別フィールドは1つのノードに関連してのみ固有とすることができる。
データログファイル106−1〜106−Mと同様に、DTKVサービス104−1〜104−Nはこれらが(例えば原子的な「付加」操作を通じて)新しいトランザクションログエントリを各トランザクションログファイル108−1〜108−Nの末尾に付加だけするように構成でき、すなわち、DTKVサービス104−1〜104−Nは新しいトランザクションログエントリをトランザクションログファイルの始めまたは途中に挿入したり、あるトランザクションログファイル内の既存のトランザクションエントリを変更したりすることはできない。これらの実施形態において、トランザクションログファイルは、同じトランザクションIDについて最大で2つのトランザクションログエントリまで含むことができ(1つのBEGINトランザクションログエントリと1つのCOMMITまたはABORTトランザクションログエントリ)、特定のトランザクションIDに関する最後の(すなわち、最も新しい)トランザクションログエントリがそのトランザクションの現在の状態を決定する。例えば、以下の例示的なトランザクションログファイルを考える。
BEGIN txnID:T1 node:N1
BEGIN txnID:T2 node:N2
COMMIT txnID:T1 node:N1
この例において、トランザクションID T1により特定されるトランザクションについての2つのトランザクションログエントリがあり、トランザクションID T2により識別されるトランザクションについての1つのトランザクションログエントリがある。トランザクションT1に関する最後のトランザクションログエントリはCOMMITエントリであり、トランザクションT1の実行が成功したことを示す。これと反対に、トランザクションT2に関する最後のトランザクションログエントリはBEGINエントリであり、トランザクションT2が依然として進行中であることを示す。
さらに、データログファイル106−1〜106−Mと同様に、DTKVサービス104−1〜104−Nは、これらがファイルバージョンに関連してトランザクションログファイル108−1〜108−Nにアクセスし/これを変更するように構成される。換言すれば、各トランザクションログファイル108−1〜108−Nはバージョン番号に関連付けられ、DTKVサービス104−1〜104−Nは、トランザクションログファイルにアクセスする時にバージョン番号を指定するほか、トランザクションログファイルを変更する時にトランザクションログファイルのバージョン番号を上げる。
I.C.3 ログファイルの圧縮
データログエントリとトランザクションログエントリをそれぞれデータログファイル106−1〜106−Mとトランザクションログファイル108−1〜108−Nに付加することに関連する1つの考えられる問題は、これらのログファイルがサイズの点で無限に増大しうることである。これに対応するために、特定の実施形態において、「圧縮」プロセス(ノード102−1〜102−Nのうちの1つ、または図1に示されていない他の装置でホストされる)が各データログファイルおよびトランザクションログファイルを分析して、もはや不要となったログエントリを削除できる。例えば、上記のデータログファイルの例においては、圧縮プロセスは最初の3つのデータログエントリを安全に削除でき、それは、これらがもはやキーK1の現在の値に影響を与えなくなっているからである。さらに、上記のトランザクションログファイルの例において、圧縮プロセスは、トランザクションT1を参照する2つのトランザクションログエントリを安全に削除でき、それは、このトランザクションがすでにコミットされているからである。それゆえ、圧縮プロセスはデータログファイル106−1〜106−Mとトランザクションログファイル108−1〜108−Nが管理不能に大きくなるのを防止できる。1つの実施形態において、圧縮プロセスは、例えばDTKVストア100の管理者によって決定される所定の時間間隔で実行できる。他の実施形態において、圧縮プロセスはトリガイベント、例えば、特定のデータログファイルまたはトランザクションログファイルが所定のサイズ閾値を超えて大きくなったことに応答して実行することもできる。また別の施形態において、圧縮プロセスはノード102−1〜102−Nのランタイム中に優先順位の低い(すなわちバックグラウンド)プロセスとして徐々に実行することができる。この後者の場合、優先順位の低いログファイル圧縮は、例えばテータログファイルが比較的小さいサイズを超えて大きくなった時に開始することができる。
I.D.分散ファイルシステム
図1に示されるように、各ノード102−1〜102−Nは、DTKVサービス104−1〜104−Nに加えて、関連する分散ファイルシステム(「DFS」)コンポーネント114−1〜114−Nを含む。各DFSコンポーネント114−1〜114−Nは、それに関連するDTKVサービス104−1〜104−Nに、データログファイル106−1〜106−Mとトランザクションログファイル108−1〜108−Nへのアクセスおよびその変更を容易にするようなファイルシステムレベルの各種の機能を提供できる。
例えば、上のI.C.1とI.C.2に記したように、特定の実施形態において、DTKVサービス104−1〜104−Nは、(1)データ/トランザクションログファイルの異なるバージョンを作り/これにアクセスするファイルバージョニングと、(2)データ/トランザクションログエントリをデータ/トランザクションログファイルに付加するための原子的な「付加」操作に依存する。(1)と(2)をDTVKサービス104−1〜104−Nに直接実装するのではなく、DFSコンポーネント114−1〜114−Nはこれらの(およびその他の)機能をファイルシステムレベルで実装し、この機能を1つまたは複数のアプリケーションプログラミングインタフェース(「API」)を介して提供することができる。したがって、これらの実施形態において、DTKVサービス104−1〜104−Nは、DFSコンポーネント114−1〜114−Nによって提供されるAPIを起動するだけで、データログファイル106−1〜106−Mおよびトランザクションログファイル108−1〜108−Nと上述の方法でやり取りできる。
特定の実施形態において、各DFSコンポーネント114−1〜114−Nは以下のAPIを提供する。
(1)GetVersion(file):指定されたファイルの現在のバージョン番号を返す。
(2)Read/(file,outVersion.offset,length):指定されたオフセットと長さで始まる指定されたファイルに関するデータとそのファイルの現在のバージョン番号を返す。
(3)Append(file.inVersion):データを指定されたファイルの末尾に、そのファイルの現在のバージョン番号がパラメータinVersionの値と一致したとき、その場合に限って付加し、現在のバージョン番号がinVersionと一致しない場合は、エラーが返され、データは付加されない。これに加えて、付加操作は原子的であり、換言すれば、全部のデータが付加されるか、どのデータも付加されない。データが付加されると、これは耐久性がある(すなわち、不揮発性記憶装置に保存された)と考えることができる。
(4)Rename(file1,file2):1つの原子的操作の中でファイル1をファイル2に名称変更し、これはまた、そのファイルの現在のバージョン番号も変更する。
DTKVサービス104−1〜104−Nが上記のDFS APIを使ってデータログファイル106−1〜106−Mとトランザクションログファイル108−1〜108−Nを操作する方法を以下に説明する。
II.トランザクションアルゴリズム
DTKVストア100の上記のようなシステム実装を念頭に置き、以下のセクションでは、DTKVサービス104−1〜104−Nがキーバリュートランザクション(例えばPUT、GET、DELETE)をトランザクション上で一貫した方法で実行するように実装できる各種のアルゴリズムについて説明する。
II.A.変更トランザクション
図2は、DTKVストア100の何れかのDTKVサービス(以下、「DTKVサービス104−X」とする)が変更(PUTまたはDELETE)トランザクションを実行するために行うことのできる、1つの実施形態によるプロセス200を示している。このアルゴリズムにより、DTKVサービス104−Xは、その変更トランザクションについて、原子性、耐久性、ノード単位スナップショット分離性のトランザクション特性が確実に満たされるようにすることができる。
ブロック202で、DTKVサービス104−Xはその変更トランザクションのための、「データログスナップショット」と呼ばれるデータ構造を決定することができる。1つの実施形態において、データログスナップショットは、DTKVストア100内の、DTKVサービは104−Xがとトランザクションの結果としてアクセスする(例えば、読み出すか書き込む)すべてのデータログファイルへの参照を含むことができる。例えば、変更トランザクションが、キーバリューペア(K1、V1)と(K2、V2)を保存するためのPUTトランザクションT1であり、K1がデータログファイル106−1に保存され、K2がデータログ106−2に保存されると仮定する。この例において、データログスナップショットはデータログファイル106−1とデータログファイル106−2の両方への参照を含み、これは、DTKVサービス104−Xがトランザクションの実行の成功時に両方のファイルを変更するからである。データログファイルへの参照を含むことに加えて、データログスナップショットはまた、各データログファイルについて、変更トランザクション開始時のそのデータログファイルのバージョン番号およびサイズも含むことができる。
ブロック204で、DTKVサービス104−Xは変更トランザクションに関する1つまたは複数のキーバリューサブセットを決定することができる。1つの実施形態において、これらのキーバリューサブセットは、変更トランザクションにより特定され、データログファイルによって分割されたキーバリューペアの集合に対応することができる。それゆえ、トランザクションT1の例の場合、DTKVサービス104−Xは2つのキーバリューサブセット、すなわち、キーバリューペア(K1、V1)を含む第一のキーバリューサブセットと、キーバリューペア(K2、V2)を含む第二のキーバリューサブセットを決定できる。この例において、キーバリューペア(K1、V1)と(K2、V2)は、これらが別々のデータログファイル(それぞれ106−1と106−2)に存在するため、別のキーバリューサブセットに含められる。
ブロック206では、DTKVサービス104−Xが、変更トランザクションが開始されたことを示す第一のトランザクションログエントリを、それに関連付けられたトランザクションログファイル(例えば、トランザクションログファイル108−X)に書き込むことができる。特定の実施形態において、第一のトランザクションログエントリは、トランザクションID(例えばT1)によって変更トランザクションを識別するBEGINトランザクションログエントリと、そのトランザクションを開始したノード(例えば、DTKVサービス104−Xのホストノード、すなわちノード102−X)とすることができる。ブロック206の一部として、DTKVサービス104−Xは、その変更トランザクションについて、そのトランザクションがまだ持っていなければ、トランザクションIDを生成できる。特定の実施形態において、DTKVサービス104−Xは、第一のトランザクションログエントリを、このエントリをトランザクションログファイル108−Xに付加することによって書き込むことができる。DTKVサービス104−Xは、それに関連付けられたDFSコンポーネント(例えば、DFSコンポーネント114−X)により提供される原子的な「付加操作」を起動することによってこれを遂行できる。
DTKVサービス104−Xが第一のトランザクションログエントリを書き込むと、DTKVサービス104−Xは、ブロック204で決定された各キーバリューサブセットに関するループに入ることができる(ブロック208)。このループの中では、DTKVサービス104−Xはまず、DTKVサービス104−Xが(現在のキーバリューサブセットを考えて)現在のキーバリューサブセットに関連付けられたデータログファイルに追加する1つまたは複数のデータログエントリを決定することができる(ブロック210)。例えば、トランザクションT1の例に関して、現在のキーバリューサブセットがキーバリューペア(K1、V1)を含む場合、DTKVサービス104−Xは以下のデータログエントリ、“PUT key:K1 valu:V1 node:102−X txnID:T1”を決定できる。
DTKVサービス104−Xはすると、ブロック210で決定されたデータログエントリを現在のキーバリューサブセットに関連付けられたデータログファイルに書き込むことができる(ブロック212)。ブロック206で書き込まれた第一のトランザクションログエントリと同様に、DTKVサービス104−Xは、DFSコンポーネント114−Xによって提供される原子的な付加操作を起動することによって、これらのデータログエントリをデータログファイルに書き込むことができる。この起動の一環として、DTKVサービス104−Xは付加操作に、データログスナップショットに保存されていたデータログファイルのバージョン番号(これは、そのトランザクションの開始時のそのテータログファイルのバージョン番号に対応する)を渡すことができる。
ブロック214で、DTKVサービス104−Xは付加操作が成功したか否かを判断することができる。セクションI.D.で述べたように、DFSコンポーネント114−Xによって提供される付加操作は、その操作に渡されたバージョン番号が変更中のファイルの、その操作の起動時のバージョン番号と一致すれば成功するように設計される。反対に、付加操作はバージン番号が一致しなければ失敗するように設計される。それゆえ、DTKVサービス104−Xは、ブロック214で、付加操作が失敗したと判断すると、DTKVサービス104−Xは、データログファイルが変更トランザクションの開始以降に(例えば同時に実行された他のトランザクションによって)更新/変更されたと結論付けることができ、これは、そのデータログファイルの現在のバージョン番号がもはやデータログスナップショットから渡されたバージョン番号と一致しなくなっているからである。この場合、DTKVサービス104−Xはトランザクションログファイル18−Xに、(DFSコンポーネント114−Xによって提供された付加トランザクションを通じて)、変更トランザクションが中断されたことを示す第二のトランザクションログエントリ(例えば、ABORTトランザクションログエントリ)を書き込むことができ、プロセス200は終了できる。
これに対し、DTKVサービス104−Xがブロック214で付加操作が成功したと判断すると、DTKVサービス104−Xは、データログファイルがその変更トランザクションの開始以降に更新/変更されなかったと結論付けることができ、これは、そのデータログファイルの現在のバージョン番号がデータログスナップショットから渡されたバージョン番号と一致するからである。この場合、現在のループの繰り返しは終了でき(ブロック218)、プロセス200はブロック208に戻ることができ、DTKVサービス104−Xは別のキーバリューサブセットを処理できる。DTKVサービス104−Xがすべてのキーバリューサブセットの処理に成功すると(すなわち、すべてのキーバリューサブセットに関するデータログエントリのそれぞれに関連付けられたデータログファイルへの付加が成功すると)、DTKVサービス104−Xはブロック220で、トランザクションログファイル108−Xに、(DFSコンポーネント114−Xにより提供される付加操作を通じて)、変更されたトランザクションがコミットされたことを示す第二のトランザクションログエントリ(例えば、COMMITトランザクションログエントリ)を書き込むことができる。
図2のアルゴリズムは対象の変更トランザクションに関する原子性および耐久性を保証できるが、これは、DTKVサービス104−Xが、アルゴリズムの最後のステップ(ブロック216または220の何れか)において変更トランザクションをコミットまたは中断する。この最後のステップの一部として、DTKVサービス104−XはDFSコンポーネント114−Xにより提供された付加操作を起動して、COMMITまたはABORTトランザクションログエントリの何れかをトランザクションログファイル108−Xに書き込み、この付加操作はDFSコンポーネント114−Xによって、上のセクションI.D.で述べたように、その原子性および耐久性が保証される。それゆえ、トランザクション全体が原子性および耐久性を有することが保証される。
場合により、DTKVサービス104−X(またはノード102−X)は、それがCOMMITまたはABORTトランザクションログエントリをトランザクションログファイル108−Xに書き込む前であり、かつそれが1つまたは複数のデータログエントリを1つまたは複数のデータログファイルに書き込んだ後にクラッシュするかもしれない。しかしながら、以下のセクションII.B.で説明するように、DTKサービス104−1〜104−Nが取得し(すなわち、GET)トランザクションを実行するために行うアルゴリズムは、データログファイル106−1〜106−Mの中の、適当なトランザクションログファイルの中に対応するCOMMITトランザクションログエントリを持たないデータログエントリのすべてを無視することができる。それゆえ、このような場合でも、中断された変更トランザクションは原子的であると考えることができるが、これは、トランザクションログファイル108−Xの中にCOMMITトランザクションログエントリがなければ、データログファイルに書き込まれたどの変更もユーザにとって見えないからである。
さらに、図2のアルゴリズムは、同時に実行される他のトランザクションに関して、対象の変更トランザクションのノード単位スナップショット分離を確実に行うことができる。フロック212〜216に関して述べたように、変更トランザクションに関わったデータログファイルの何れかが(例えば、同時に実行される他のトランザクションによって)変更トランザクションの開始以降に変えられた場合、DTKVサービス104−Xがブロック212で起動する付加操作は失敗し、変更トランザクションは中断される。したがって、この結果は、同時に実行される2つのトランザクションは同じデータを変更できないという第一のノード単位スナップショット分離の要求事項を満たす。これに加えて、以下のセクションII.B.で説明するように、DTKVサービス104−1〜104−Nが取得(すなわち、GET)トランザクションを実行するために行うアルゴリズムは、データログファイル106−1〜106−Mの中の、適当なトランザクションログファイルに対応するCOMMITトランザクションログエンティティを持たないデータログエントリのすべてを無視することができ、それゆえ、DTKVストア100は、同時に実行される変更トランザクションの状態以前のように見える。この特性は、読出分離のノード単位スナップショット分離性という第二の要求事項を保証する。最後に、単独のトランザクションログファイルがDTKVストア100の中の各ノード102−1〜102−Nに関連付けられることに留意するべきであり、その単独のトランザクションログファイルはそれに関連付けられたノードから発生する(すなわち、その上で実行される)すべてのトランザクションについての固有のトランザクションログエントリのリストを含む。したがって、このデータ構成は、各ノードの固有のコミット順序という、ノード単位スナップショット分離性の第三の要求事項を満たす。
図2のアルゴリズムに関する1つの問題は、それがトランザクション上正しい結果を生むものの、変更トランザクションの特定の組み合わせの同時実行を不必要に阻止する可能性がある。例えば、キーバリューペアの互いに素な集合に作用する2つのPUTトランザクションT1とT2、例えばトランザクションT1がキーバリューペア(K1、V1)と(K2、V2)を保存するように構成され、トランザクションT2がキーバリューペア(K3、V3)と(K4、V4)を保存するように構成される場合を考える。キーK1がデータログファイルD1に保存され、キーK2とK3がデータログファイルD2に保存され、キーK4がデータログファイルD3に保存されると仮定する。それゆえ、これら2つのトランザクションのデータログスナップショットは、これらがどちらもデータログファイルD2を含むため、交差する。
この例において、トランザクションT1とT2が図2のプロセス200に従って同時に実行される場合、トランザクションのうちの一方は、データログファイルD2のバージョン番号が一方のトランザクションまたは他方の実行中に変化する(それゆえ、フロック212の付加操作が失敗する)ため、中断される。しかしながら、トランザクションの観点からはどちらのトランザクションも中断する必要がなく、それは、これらが異なるキーバリューペアを変更するため、T1が部分的にT2に上書きする、またはその逆が起きる虞がないからである。
この問題に対処するために、プロセス200を図3に示されるように改良できる。特に、図3は、DTKVサービス104−Xが図2のブロック214の後で、かつブロック216の前に実行できるサブプロセス300を示している。このサブプロセスにより、DTKVサービス104−Xは対象の変更トランザクションの中断を、その変更トランザクションと同時に実行される他の変更トランザクションの間でキーバリューペアが重複していない場合に回避できる。
サププロセス300は、DTKVサービス104−Xが、付加操作が現在のキーバリューサブセットについて失敗したと判断した時(例えば、図のブロック214)に始まる。ブロック302で、DTKVサービス104−Xは現在のキーバリューサブセットに関連付けられたデータログファイルの長さを取得することができる。図2のブロック202に関して述べたように、このデータログファイル長さはデータログスナップショットの中に保存され、変更トランザクションの開始時のデータログファイルの長さを表す。
ブロック304で、DTKVサービス104−Xは、ファイルの終わりからブロック302で取得された長さまで降順でデータログファイルを読み出すことができる。特定の実施形態において、DTKVサービス104−Xはこの読出を、DFSコンポーネント114−Xによって可能とされ、セクションI.D.で説明した読出操作を起動することによって実行できる。このようにしてファイルを読み出すことにより、DTKVサービス104−Xは変更トランザクションが始まった時から付加操作が失敗した時までの間にファイルに追加されたキーバリューペアを特定できる。
DTKVサービス104−Xが、ブロック304でデータログファイルから読み取られた何れかのキーと現在のキーバリューサブセットの中のキーとが一致していることを発見すると(ブロック306)、DTKVサービス104−Xは、変更トランザクションのキーバリューペアと同時に実行される他のトランザクションのキーバリューペアの間に重複があると判断できる。したがって、ブロック308で、DTKVサービス104−Xはトランザクションログファイル108−Xに、(DFSコンポーネント114−Xにより提供される付加操作を通じて)、変更トランザクションが中断されたことを示す第二のトランザクションログエントリ(例えば、ABORTトランザクションログエントリ)を書き込むことができる。
これに対して、DTKVサービス104−Xが、ブロック306で何れかの一致を発見しない場合、DTKVサービス104−Xは、変更トランザクションのキーバリューペアと同時に実行される他のトランザクションのキーバリューペアの間に重複がないと判断できる。この場合、DTKVサービス104−Xはデータログスナップショットを更新して、そのデータログファイルの現在のバージョン番号および現在の長さを含めることができる(ブロック310)。するとDTKVサービス104−Xは、サブプロセス300を図2のブロック212へと移行させることができる。ブロック212で、DTKVサービス104−Xは現在のバージョン番号を有するデータログファイルについての付加操作を再試行でき、プロセス200をその時点から前述のように実行できる。
図2または図3に示されていないが、いくつかの実施形態において、DTKVサービス104−Xは変更トランザクションをその中断後に自動的に再試行(すなわち、その実行を再開)できる。これは、変更トランザクションの実行が成功する可能性を高めることができる。特定の実施形態において、DTKVストア100の管理者はDTKVサービス104−Xがこのような再試行を行うべきか否かを示す1つ以上のパラメータと、行うべきであれば、トランザクション当たりの再試行の最大回数を決定できる。
II.B.GETトランザクション
図4は、DTKVサービス104−Xが取得(すなわち、GET)トランザクションを実行するために行うことのできる、1つの実施形態によるプロセス400を示す。
ブロック402で、DTKVサービス104−Xは、GETトランザクションのキーセット(すなわち、入力キーの集合)の各キーについてのループに入ることができる。このループの中で、DTKVサービス104−Xはまず、現在のキーを保存するデータログファイルを特定し、そのデータログファイルの長さを保存することができる(ブロック404)。
ブロック406で、DTKVサービス104−Xは、ブロック404で特定されたデータログファイルで現在のキーを参照する最後の(すなわち、最も新しい)データログエントリを検索することができる。セクションI.C.1.で述べたように、あるキーに関するデータログファイルの中の最後のデータログエントリは一般に、そのキーの現在の値を表す。特定の実施形態において、DTKVサービス104−Xはこの検索を、DFSコンポーネント114−Xにより可能とされ、セクションI.Dで説明した読出操作を使ってデータログファイルを(ブロック404の長さの値から)降順に読み出すことによって行うことができる。
DTKVサービス104−Xが現在のキーに関する最後のデータログエントリを発見すると、DTKVサービス104−Xは、そのデータログエントリの「ノード」と「txnID」フィールドを使って、データログエントリを作らせたソースノードおよびソーストランザクションを特定することができる(ブロック408)。するとDTKVサービス104−Xは、ソースノードに関連付けられたトランザクションログファイルを取得し、そのトランザクションログファイルで、そのソーストランザクションIDを参照する最後の(すなわち、最も新しい)トランザクションログエントリを検索できる(ブロック410と412)。このようにして、DTKVサービス104−Xは、ソーストランザクションの現在の状態を判断できる。
元のトランザクションの最後のトランザクションログエントリがCOMMITエントリであれば(ブロック414)、DTKVサービス104−Xは、ブロック406で判断された最後のデータログエントリが有効であると判断でき、それゆえ、最後のデータログエントリの中で特定された値を現在のキーの現在の値として返すことができる(ブロック416)。そこでプロセス400を終了できる。
これに対して、最後のトランザクションログエントリがCOMMITエントリでなければ、DTKVサービス104−Xはブロック406で判断された最後のデータログエントリが有効でないと判断でき、これは、最後のデータログエントリを作成したソーストランザクションがまだコミットされていないからである。したがって、DTKVサービス104−Xは、保存されていたそのデータログファイルの長さを調整して、最後のデータログエントリをスキップすることができる(ブック418)。すると、プロセス400の流れはブロック406に戻ることができ、DTKVサービス104−Xは、そのデータログファイルで現在のキーを参照する最後の(すなわち、最も新しい)データログエントリを再度検索する。この、後の検索では、DTKVサービス104−Xは以前に発見したデータログエントリに遭遇せず、これは、DTKVサービス104−Xが新たに保存された長さ(これは過去に発見されたデータログエントリをスキップする)から降順にファイルを読み出すからである。すると、プロセス400を上述のように進めることができる。
最終的に、DTKVサービス104−Xは現在のキーに関する有効なデータログエントリを発見し、ブロック416でそのデータログエントリからの値を返すことができる。するとループ402を進めて、DTKVサービス104−Xが各キーの値を返すまで、そのキーセットの残りのキーを処理することができる。
直感的に、図4のアルゴリズムは、DTKVストア100に値を追加した変更トランザクションが適当なトランザクションログファイルにコミットされたとしてマークされない限り、GETトランザクションが指定されたキーの値を確実に返さないようにする。それゆえ、このアルゴリズムは、変更トランザクションの原子性を、変更トランザクションが何らかの理由によってCOMMITトランザクションログエントリの作成前に中断されたか失敗した場合に、変更トランザクションが失敗の前に作成したトランザクションデータログエントリのすべてがユーザから見えないという点で、保証する。
しかしながら、図4のアルゴリズムは、変更トランザクションが同時に行われる場合に、GETトランザクションに関するノード単位スナップショット分離性を保証しない。例えば、キーバリューペア(K1、W1)と(K2、W2)を保存するためのPUTトランザクションT1が開始され、キーK1とK2の以前の値がそれぞれV1とV2であったとする。さらに、キーK1とK2の値を読み出すためのGETトランザクションT2が、トランザクションT1と略同時に開始され、以下のイベントシーケンスが起こるとする。
1.T1が開始される。
2.T1により、キーK1が値W1で更新される。
3.T1により、キーK2が値W2で更新される。
4.T2が開始される。
5.T2がキーK1のための最後のデータログエントリを検索し、値W1を発見するが、適当なトランザクションログファイルをチェックして、T1に関するCOMMITトランザクションログエントリを発見せず(T1がまだコミットされていないため)、その結果、T2が、キーK1に関する、それより前のデータログエントリを検索し、値V1を発見し、V1を返す。
6.T1がコミットされ、COMMITトランザクションログエントリが書き込まれる。
7.T2がキーK2に関する最後のデータログエントリを検索し、値W2を発見し、T1に関するCOMMITトランザクションログエントリを発見し、W2を返す。
このシーケンスの最後に、GETトランザクションT2はキーK1とK2それぞれのための値V1とW2を返し、これは、結果として得られた値がPUTトランザクションT1の部分的実行を示しているため、ノード単位スナップショット分離の特性に違反する。
この欠点に対処するために、特定の実施形態において、図4のプロセス400を図5に示されるように改良できる。特に、図5は、DTKVサービス104−Xが図4のブロック410と414の間で実行できるサブプロセス500を示している。このようなサブプロセス500により、DTKVサービス104−Xは、GETトランザクションが確実に、1つまたは複数の、同時に実行される変更トランザクションの部分的実行を示す結果を返さないようにすることができる。
このようなサブプロセス500は、DTKVサービス104−Xが現在のキーの最後のデータログエントリに関連付けられるソーストランザクションに関するトランザクションログファイルを取得した後(図4のブロック410)に始まる。ブロック502で、DTKVサービス104−Xは、「段階的トランザクションログスナップショット」(progressive transaction log snapshot)にアクセスでき、これは1つのGETトランザクションの実行中に訪問されたすべてのトランザクションログファイル(およびそのバージョン番号と長さ)を継続的に追跡するように意図されたデータ構造である。特にDTKVサービス104−Xは、この段階的トランザクションログスナップショットにアクセスし、現在のGETトランザクション中にブロック410で呼び出されたトランザクションログファイルをDTKVサービス104−Xが過去に訪問した(例えば、これを読み取った)ことがあるかを判断できる。
DTKVサービス104−Xが過去にそのトランザクションログファイルを訪問したことがないと判断すると(ブロック504)、DTKVサービス104−Xはトランザクションログファイルとその現在の長さ/バージョン番号を段階的トランザクションログスナップショットに追加できる(ブロック506)。これに対して、DTKVサービス104−Xが過去にそのトランザクションログファイルを訪問したことがあると判断すると、DTKVサービス104−Xは段階的トランザクションログスナップショットからトランザクションログファイルの長さを読み出すことができる(ブロック508)。すると、DTKVサービス104−Xはこのトランザクションログファイルで、ソーストランザクションIDを参照する最後のトランザクションログエントリを検索できる(ブロック510)。DTKVサービ104−Xはこの検索を、(ブロック506が実行された場合は)トランザクションログファイルの現在の長さから、または(ブロック508が実行された場合は)段階的トランザクションログスナップショットの長さからファイルを降順に読み出すことによって行うことができる。すると、サププロセス500は図4のブロック414に移行でき、プロセス400をその時点から前述のように進めることができる。
図5に示される方法で段階的トランザクションログスナップショットを利用することによって、DTKVサービス104−XはGETトランザクションの実行中にそれがアクセスするトランザクションログファイルの状態を有効に「フリーズ」させることができる。それゆえ、DTKVサービス104−Xは、GETトランザクションが、同時に実行される1つまたは複数の変更トランザクションにより、トランザクション上誤った結果(例えば、ノード単位スナップショット分離性を満たさない結果)を返すような状況を回避できる。例えば、サブプロセス500を前の例、すなわちPUTトランザクションT1がGETトランザクションT2と同時に実行される場合に適用すると、以下の代替的なイベントシーケンスが発生する。
1.T1が開始される。
2.T1により、キーK1が数値W1で更新される。
3.T1により、キーK2を数値W2で更新させる。
4.T2が開始される。
5.T2がキーK1に関する最後のデータログエントリを検索して、値W1を発見するが、適当なトランザクションログファイルを検索し、T1に関するCOMMITトランザクションログエントリを発見せず(T1がまだコミットされていないため)、その結果、T2がキーK1に関する、それより前のデータログエントリを検索し、値V1を発見し、V1を返す。
6.T2が、訪問されたトランザクションログファイルとその長さを段階的トランザクションログスナップショットに追加する。
7.T1がコミットされ、COMMITトランザクションログエントリが書き込まれる。
8.T2は、キーK2に関する最後のデータログエントリを検索し、値W2を発見し、適当なトランザクションログファイルが過去に訪問されたと判断し、それゆえ、段階的トランザクションログスナップショットに保存された長さからトランザクションログファイルを検索する。
9.T2はトランザクションログスナップショットの中でT1に関するCOMMITトランザクションログエントリを発見せず(ステップ(7)で書き込まれたCOMMITがスキップされるため)、キーK2に関するそれより前のデータログエントリを検索し、値V2を発見し、V2を返す。
このシーケンスの最後に、GETトランザクションT2はキーK1とK2に関する値、それぞれV1とV2を返し、これは、それがPUTトランザクションT1の部分的実行を表していないため、トランザクション上、正しい。
III.キー名前空間による検索
前述のように、特定の実施形態において、DTKVストア100は保存されたキーおよび/またはキーバリューペアの効率的な検索をサポートすることができる。特に、DTKVストア100は、キーを1つまたは複数のキー名前空間に分割して、各キー名前空間のためのキーバリューペアを1つまた複数の別々のデータログファイルに保存することができる。すると、DTKVサービス104−1〜104−Nにより、ユーザは(セクションI.A.で説明したSEARCH操作を通じて)キーおよび/またはキーバリューペアをキー名前空間により検索できる。ユーザが特定のキー名前空間に関連してSEARCH操作を起動させると、DTKVストアはその検索をそのキー名前空間に関連付けられたデータログファイル(複数の場合もある)の内容に限定することができる(DTKVストア100の中のデータログファイルの全部を検索しなくてもよい)。
図6は、SEARCH操作を実行するためにDTKVサービス104−Xが行うことのできる、1つの実施形態によるプロセス600を示す。ブロック602で、DTKVサービス104−XはSEARCH操作の起動を受けることができ、これは検索式および目標とするキー名前空間を含む。検索式は、例えば正規表現またはその他のあらゆる種類のクエリストリングとすることができる。
ブロック604で、DTKVサービス104−Xは、目標とするキー名前空間に関連付けられた1つ以上のデータログファイル(すなわち、目標とするキー名前空間のためのキーバリューペアを含む)を特定できる。
ブロック606で、DTKVサービス104−Xは、ブロック604で特定された1つまたは複数のデータログファイルで、検索式を満たすキーおよび/またはキーバリューペアを検索できる。するとDTKVサービス104−Xは、発見されたキーおよび/またはキーバリューペアを要求者に返すことができる。1つの実施形態において、DTKVサービス104−Xは、それに関連付けられたDFSコンポーネント114−Xにより提供され、セクションI.D.で説明した読出操作を起動させることによって、この検索を実行できる。代替的な実施形態において、この検索はどのような周知のテキスト検索アルゴリズムを使って実行してもよい。
本明細書で説明された各種の実施形態は、コンピュータシステムに保存されたデータに係る様々なコンピュータ実装操作を利用してもよい。例えば、これらの操作は、物理的数量の物理的操作を必要とする場合もあり、通常、必ずしもそうであるとは限らないが、これらの数量が電気または磁気信号の形態をとることもあり、この場合、これらまたはそれを表すものの保存、転送、合成、比較、またはその他の操作を行うことができる。さらに、このような操作はしばしば、生成、特定、決定、比較等の用語で呼ばれる。本明細書において説明された1つまたは複数の実施形態を形成する操作は何れも、有益な機械操作であってもよい。これに加えて、1つまたは複数の実施形態はまた、これらの操作を実行するための機器または装置に関係している。装置は、特定の必要な目的のために特に構成されていてもよく、またはコンピュータの中に保存されたコンピュータプログラムにより選択的に作動され、または構成される汎用コンピュータであってもよい。特に、各種の汎用マシンは、本明細書の教示に従って書かれたコンピュータプログラムと共に使用されてもよく、あるいはこれは必要な操作を実行するための、より専用化された装置を構成する上でより好都合である場合がある。本明細書で説明された各種の実施形態は、ハンドヘルド機器、マイクロプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な民生用電子機器、ミニコンピュータ、メインフレームコンピュータ等を含むその他のコンピュータシステム構成で実施してもよい。
1つまたは複数の実施形態は、1つまたは複数の非一時的コンピュータ読出可能記憶媒体の中に埋め込まれた1つまたは複数のコンピュータプログラム、または1つまたは複数のコンピュータプログラムモジュールとして実装されてもよい。非常一時的コンピュータ読取可能媒体という用語は、後にコンピュータシステムに入力可能なデータを保存できるあらゆるデータ記憶装置を指す。非一時的コンピュータ読取可能媒体は、コンピュータによる読取を可能にする方法でコンピュータプログラムを具現化するための、既存の、または今後開発されるどのような技術に基づいていてもよい。非一時的コンピュータ読取可能媒体の例としては、ハードドライブ、ネットワークアタッチトストレージ(NAS)、リードオンリメモリ、ランダムアクセスメモリ(例えば、フラッシュメモリ装置)、CD(コンパクトディスク)、例えばCD−ROM、CD−RまたはCD−RW、DVD(デジタルバーサタイルディスク)、磁気テープ、その他の光および光以外のデータ記憶装置がある。非一時的コンピュータ読取可能媒体はまた、ネットワーク接続されたコンピュータシステム上で分散させることができ、それによってコンピュータ読取可能コードを分散させて保存され、実行される。
さらに、本明細書に記載された各種のコンポーネント、操作、データストア間の境界はある程度任意であり、特定の操作は特定の例示的構成に関連して示されている。機能のその他の割当も考えられ、これらも本発明の範囲に含まれる。一般に、例示的な構成の中で別のコンポーネントとして説明されている構造や機能は、複合的な構造またはコンポーネントとして実装してもよい。同様に、1つのコンポーネントとして説明されている構造や機能は、別のコンポーネントとして実装してもよい。
上記の説明は、各種の実施形態を、特定の実施形態の態様の実施の仕方の例に関連して示している。上記の例と実施形態は、これらがすべての実施形態であるとみなすべきではなく、以下の特許請求の範囲により定義される特定の実施形態の柔軟性と利点を説明するために提示されている。上記の開示と以下の特許請求の範囲に基づき、他の配置、実施形態、実施例、均等物も、特許請求の範囲により定義されるその範囲から逸脱することなく、利用してよい。

Claims (20)

  1. 分散トランザクション対応キーバリューストアを実装するシステムであって、
    データログファイルの集合を保存する1つまたは複数の記憶装置に通信可能に各々連結されるノードの集合を備え、各データログファイルが1つのキー名前空間のためのキーバリューペアを含み、
    各ノードがそのノードに固有のトランザクションログファイルを用いて前記データログファイルの集合の中のキーバリューペアを変更または取得するトランザクションを実行するように構成され、前記トランザクションログファイルが前記トランザクションの状態情報を含み、
    前記トランザクションが、各トランザクションの原子性および耐久性が確保されるように実行される、システム。
  2. 各ノードに固有の前記トランザクションログファイルがそのノードのローカル記憶装置に保存される、請求項1に記載のシステム。
  3. 各ノードに固有の前記トランザクションログファイルが、各トランザクションがそのノードによって開始されたか、コミットされたか、または中断されたかを示す、請求項1に記載のシステム。
  4. 各ノードに固有の前記トランザクションログファイルは、そのノードにより読出し可能および書込み可能であるが、前記ノードの集合の中の他のノードは読出しかできない、請求項1に記載のシステム。
  5. 各ノードは、各トランザクションのノード単位スナップショット分離性がさらに確保されるように前記トランザクションを実行するように構成される、請求項1に記載のシステム。
  6. 各ノードがさらに、検索式および目標とするキー名前空間を含む検索操作に応答して前記データログファイルの集合を検索するように構成され、当該検索することが、
    前記目標とするキー名前空間のためのキーバリューペアを含むデータログファイルを前記データログファイルの集合の中から特定し、
    前記検索式を満たすキーバリューペアに関する前記データログファイルを検索する
    ことを含む、請求項1に記載のシステム。
  7. 各ノードが、前記データログファイルの集合の中の1つまたは複数のキーバリューペアを変更するトランザクションを、
    データログスナップショットを決定し、
    1つまたは複数のキーバリューサブセットを決定する
    ことによって実行するように構成され、
    前記データログスナップショットは、前記ノードが前記トランザクションのためにアクセスする1つまたは複数のデータログファイルを前記データログファイルの集合の中から特定するものであり、前記データログスナップショットが、前記1つまたは複数のデータログファイルについてバージョン番号およびサイズを含み、
    各キーバリューサブセットは、前記ノードが前記トランザクションのために変更しようとする、前記1つまたは複数のデータログファイルのうちの関連するデータログファイルからのキーバリューペアを含む、請求項1に記載のシステム。
  8. 前記ノードが、さらに、
    前記トランザクションのためのトランザクション識別子を決定し、
    前記トランザクション識別子を含み且つ前記変更されたトランザクションが開始されたことを示す第一のトランザクションログエントリを前記ノードに固有の前記トランザクションログファイルに書き込み、
    前記1つまたは複数のキーバリューサブセットの中の各キーバリューサブセットについて、1つまたは複数のデータログエントリを前記キーバリューサブセットに関連付けられたデータログファイルに付加するように試みる
    ことによって前記トランザクションを実行するように構成され、
    各データログエントリが、前記キーバリューサブセットに関連付けられたデータログファイルにおけるキーバリューペアへの変更を特定する、請求項7に記載のシステム。
  9. 前記1つまたは複数のデータログエントリを前記キーバリューサブセットに関連付けられたデータログファイルに付加するように試みることが、
    前記キーバリューサブセットに関連付けられたデータログファイルの前記バージョン番号を前記データログスナップショットから取得し、
    前記バージョン番号を入力パラメータとして取得する付加操作を起動する
    ことを含み、
    前記バージョン番号が前記キーバリューサブセットに関連付けられたデータログファイルの現在のバージョン番号と一致すれば前記付加操作は成功し、
    前記バージョン番号が前記現在のバージョン番号と一致しなければ前記付加操作は失敗する、請求項8に記載のシステム。
  10. 前記ノードが、さらに、
    前記1つまたは複数のキーバリューサブセットのうちの各キーバリューサブセットについての前記付加操作が成功した場合に、前記トランザクション識別子を含み且つ前記変更されたトランザクションがコミットされたことを示す第二のトランザクションログエントリを前記ノードに固有の前記トランザクションログファイルに書き込むことによって前記トランザクションを実行するように構成される、請求項9に記載のシステム。
  11. 前記ノードが、さらに、
    前記1つまたは複数のキーバリューサブセットのうちのいずれかのキーバリューサブセットについての前記付加操作が失敗した場合に、前記トランザクション識別子を含み且つ前記変更されたトランザクションが中断されたことを示す第二のトランザクションログエントリを前記ノードに固有の前記トランザクションログファイルに書き込むことによって前記トランザクションを実行するように構成される、請求項9に記載のシステム。
  12. 前記付加操作が、前記ノード上で実行される分散ファイルシステム(DFS)コンポーネントにより実装され、かつ、前記付加操作が、前記分散ファイルシステムによって原子的であることが保証される、請求項9に記載のシステム。
  13. 前記1つまたは複数のデータログエントリを前記キーバリューサブセットに関連付けられたデータログファイルに付加するように試みることが、
    前記付加操作が失敗した場合に、
    前記データログスナップショットから前記キーバリューサブセットに関連付けられたデータログファイルの長さを取得し、
    前記キーバリューサブセットに関連付けられたデータログファイルを、そのファイルの終わりから前記取得された長さまで降順に読み出し、
    前記キーバリューサブセットに関連付けられたデータログファイルが読み出されたときに、前記キーバリューサブセットに関連付けられたデータログファイルの中の何れかのキーが前記キーバリューサブセットの中のキーと一致するか否かを判断し、
    一致が発見された場合に前記トランザクションを中断すべきであると判断し、
    一致が発見されない場合に、
    前記データログスナップショットを更新して、前記キーバリューサブセットに関連付けられたデータログファイルの現在のバージョン番号および現在の長さを含めるとともに、
    前記現在のバージョン番号を有するデータログファイルについての前記付加操作を再起動する、
    ことを含む、請求項9に記載のシステム。
  14. 各ノードが、前記データログファイルの集合の中の1つまたは複数のキーバリューペアを取得するトランザクションを、
    前記1つまたは複数のキーバリューペアの各キーバリューペアについて、
    前記キーバリューペアを含むデータログファイルを前記データログファイルの集合の中から特定し、
    前記データログファイルの長さを保存し、
    前記データログファイルを処理する
    ことによって実行するように構成され、
    前記データログファイルを処理することが、
    前記保存されたデータログファイルの長さに基づいてデータログファイルを後ろから読み出すことで、前記キーバリューペアの最も新しい変更を表すデータログエントリを前記データログファイルの中から決定し、
    前記データログエントリに関連付けられたソースノードおよびソーストランザクションを特定し、
    前記ソースノードに固有のトランザクションログファイルを取得し、
    前記ソーストランザクションの現在の状態を表す前記ソースノードに固有のトランザクションログエントリを前記トランザクションログファイルの中から決定し、
    前記ソーストランザクションがコミットされたことを前記トランザクションログエントリが示す場合に、前記データログエントリの中で特定された前記キーバリューペアを返し、
    前記ソーストランザクションがコミットされたことを前記トランザクションログエントリが示さない場合に、
    前記データログエントリをスキップすることにより前記保存されたデータログファイルの長さを調整し、
    前記調整した後の前記保存された長さに基づいて前記データログファイルを再処理する、
    ことによって前記データログファイルを処理することを含む、請求項1に記載のシステム。
  15. 前記ノードが、さらに、
    前記トランザクションログエントリを決定する前に、前記トランザクションログファイルの長さを段階的トランザクションログスナップショットから取得することによって前記トランザクションを実行するように構成され、
    前記段階的トランザクションログスナップショットが、前記トランザクション中に前記ノードがアクセスするトランザクションログファイルと、そのアクセス時のトランザクションログファイルの対応する長さを特定するものであり、
    前記トランザクションログエントリの決定が、前記取得されたトランザクションログファイルの長さに基づいて行われる、請求項14に記載のシステム。
  16. 各データログファイルおよびトランザクションログファイルが、所定の時間間隔で、または所定のサイズに達した時点で圧縮される、請求項1に記載のシステム。
  17. ノードの集合の中の1つのノードにより実行される方法であって、前記ノードは、データログファイルの集合を保存する1つまたは複数の記憶装置に通信可能に連結され、各データログファイルがキー名前空間のためのキーバリューペアを含み、
    当該方法は、
    前記ノードがそのノードに固有のトランザクションログファイルを用いて前記データログファイルの集合の中のキーバリューペアを変更または取得するトランザクションを実行することを備え、前記トランザクションログファイルが前記トランザクションの状態情報を含み、
    前記トランザクションが、各トランザクションの原子性および耐久性を確保するように実行される方法。
  18. 前記トランザクションは、各トランザクションのノード単位スナップショット分離性がさらに確保されるように実行される、請求項17に記載の方法。
  19. コンピュータソフトウェアを具現化する非一時的コンピュータ読取可能媒体であって、前記コンピュータソフトウェアはノードの集合の中の1つのノードにより実行され、前記ノードは、データログファイルの集合を保存する1つまたは複数の記憶装置に通信可能に連結され、各データログファイルがキー名前空間のためのキーバリューペアを含み、前記コンピュータソフトウェアは、前記ノードに対して、
    前記ノードに固有のトランザクションログファイルを用いて前記データログファイルの集合の中のキーバリューペアを変更または取得するトランザクションを実行すること
    を含む方法を実行させるものであり、
    前記トランザクションログファイルが前記トランザクションの状態情報を含み、
    前記トランザクションが、各トランザクションの原子性および耐久性が確保されるように実行される、非一時的コンピュータ読取可能媒体。
  20. 前記トランザクションが、各トランザクションのノード単位スナップショット分離性がさらに確保されるように実行される、請求項19に記載の非一時的コンピュータ読取可能媒体。
JP2015530155A 2012-12-03 2013-09-05 分散キーバリューストア Active JP5890071B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/692,777 2012-12-03
US13/692,777 US9037556B2 (en) 2012-12-03 2012-12-03 Distributed, transactional key-value store
PCT/US2013/058181 WO2014088660A1 (en) 2012-12-03 2013-09-05 Distributed, transactional key-value store

Publications (2)

Publication Number Publication Date
JP2015526832A JP2015526832A (ja) 2015-09-10
JP5890071B2 true JP5890071B2 (ja) 2016-03-22

Family

ID=49237605

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015530155A Active JP5890071B2 (ja) 2012-12-03 2013-09-05 分散キーバリューストア

Country Status (5)

Country Link
US (3) US9037556B2 (ja)
EP (2) EP3346401B1 (ja)
JP (1) JP5890071B2 (ja)
AU (1) AU2013356667B2 (ja)
WO (1) WO2014088660A1 (ja)

Families Citing this family (71)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9037556B2 (en) 2012-12-03 2015-05-19 Vmware, Inc. Distributed, transactional key-value store
US9442938B1 (en) 2013-05-03 2016-09-13 Emc Corporation File system layer
US9336232B1 (en) 2013-05-03 2016-05-10 Emc Corporation Native file access
US9223517B1 (en) * 2013-05-03 2015-12-29 Emc Corporation Scalable index store
US9898501B2 (en) * 2013-09-12 2018-02-20 Neustar, Inc. Method and system for performing transactional updates in a key-value store
US10346381B2 (en) * 2013-11-14 2019-07-09 Facebook, Inc. Atomic update operations in a data storage system
US10078654B2 (en) * 2014-03-18 2018-09-18 Facebook, Inc. Data logging framework
US10127270B1 (en) * 2014-06-23 2018-11-13 Amazon Technologies, Inc. Transaction processing using a key-value store
US9613078B2 (en) 2014-06-26 2017-04-04 Amazon Technologies, Inc. Multi-database log with multi-item transaction support
US9720947B2 (en) 2014-08-04 2017-08-01 Cohesity, Inc. Backup operations in a tree-based distributed file system
US9720926B2 (en) * 2014-08-04 2017-08-01 Cohesity, Inc. Read operations in a tree-based distributed file system
US9792309B2 (en) 2014-08-04 2017-10-17 Cohesity, Inc. Write operations in a tree-based distributed file system
US10095812B2 (en) * 2014-10-28 2018-10-09 Brigham Young University Systems and methods for providing CAx data
WO2016122546A1 (en) 2015-01-29 2016-08-04 Hewlett Packard Enterprise Development Lp Transactional key-value store
US9904722B1 (en) 2015-03-13 2018-02-27 Amazon Technologies, Inc. Log-based distributed transaction management
US10963430B2 (en) 2015-04-01 2021-03-30 Dropbox, Inc. Shared workspaces with selective content item synchronization
US9922201B2 (en) 2015-04-01 2018-03-20 Dropbox, Inc. Nested namespaces for selective content sharing
US10212257B2 (en) 2015-05-14 2019-02-19 Deephaven Data Labs Llc Persistent query dispatch and execution architecture
US11301457B2 (en) * 2015-06-29 2022-04-12 Microsoft Technology Licensing, Llc Transactional database layer above a distributed key/value store
US11599520B1 (en) 2015-06-29 2023-03-07 Amazon Technologies, Inc. Consistency management using query restrictions in journal-based storage systems
US9407585B1 (en) 2015-08-07 2016-08-02 Machine Zone, Inc. Scalable, real-time messaging system
US9390154B1 (en) 2015-08-28 2016-07-12 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US10747753B2 (en) 2015-08-28 2020-08-18 Swirlds, Inc. Methods and apparatus for a distributed database within a network
KR102416004B1 (ko) 2015-09-02 2022-07-04 삼성전자주식회사 인터페이스 회로들, 메모리 모듈들 및 인터페이스 회로들과 메모리 모듈들을 연결하는 스위치 회로를 포함하는 서버 장치
US10613941B1 (en) * 2015-09-30 2020-04-07 EMC IP Holding Company LLC Hybrid NVRAM logging in filesystem namespace
US9479567B1 (en) * 2015-10-29 2016-10-25 Dropbox, Inc. Synchronization protocol for multi-premises hosting of digital content items
US10691718B2 (en) 2015-10-29 2020-06-23 Dropbox, Inc. Synchronization protocol for multi-premises hosting of digital content items
CN106776622B (zh) * 2015-11-20 2020-03-03 北京国双科技有限公司 访问日志的查询方法和装置
US9537952B1 (en) 2016-01-29 2017-01-03 Dropbox, Inc. Apparent cloud access for hosted content items
US11301422B2 (en) * 2016-02-23 2022-04-12 Samsung Electronics Co., Ltd. System and methods for providing fast cacheable access to a key-value device through a filesystem interface
US10303669B1 (en) * 2016-03-30 2019-05-28 Amazon Technologies, Inc. Simulating hierarchical structures in key value stores
US10460120B1 (en) 2016-03-30 2019-10-29 Amazon Technologies, Inc. Policy mediated hierarchical structures in key value stores
US9602450B1 (en) 2016-05-16 2017-03-21 Machine Zone, Inc. Maintaining persistence of a messaging system
KR102656175B1 (ko) 2016-05-25 2024-04-12 삼성전자주식회사 스토리지 장치 및 랜덤 액세스 메모리를 제어하는 방법 및 불휘발성 메모리 장치 및 버퍼 메모리를 제어하는 방법
US20170371896A1 (en) * 2016-06-23 2017-12-28 Ebay Inc. File system image processing system
US9608928B1 (en) 2016-07-06 2017-03-28 Machine Zone, Inc. Multiple-speed message channel of messaging system
CN107765992B (zh) * 2016-08-22 2021-01-15 华为技术有限公司 一种处理数据的方法和装置
US9667681B1 (en) 2016-09-23 2017-05-30 Machine Zone, Inc. Systems and methods for providing messages to multiple subscribers
EP3555757A4 (en) 2016-12-19 2020-06-17 Swirlds, Inc. METHOD AND DEVICE FOR A DISTRIBUTED DATABASE TO ENABLE THE DELETION OF EVENTS
US10447623B2 (en) * 2017-02-24 2019-10-15 Satori Worldwide, Llc Data storage systems and methods using a real-time messaging system
US10642792B2 (en) * 2017-03-24 2020-05-05 Vmware, Inc. Distributed transaction conflict resolution
US11068447B2 (en) * 2017-04-14 2021-07-20 Databricks Inc. Directory level atomic commit protocol
US11030155B2 (en) 2017-04-26 2021-06-08 Samsung Electronics Co., Ltd. Key value file system
US10275223B2 (en) * 2017-06-22 2019-04-30 International Business Machines Corporation Distributed key-value consistency and mapping
GB201711879D0 (en) * 2017-07-24 2017-09-06 Nchain Holdings Ltd Computer-implemented system and method
US10268779B2 (en) 2017-08-09 2019-04-23 International Business Machines Corporation Sharing server conversational context between multiple cognitive engines
US11188501B1 (en) * 2017-08-15 2021-11-30 Amazon Technologies, Inc. Transactional and batch-updated data store search
KR102405593B1 (ko) * 2017-08-23 2022-06-08 삼성전자 주식회사 전자 장치 및 그의 데이터 운용 방법
US10866943B1 (en) 2017-08-24 2020-12-15 Deephaven Data Labs Llc Keyed row selection
US11016932B2 (en) * 2017-09-21 2021-05-25 Alibaba Group Holding Limited Systems, methods, and apparatuses for simplifying filesystem operations utilizing a key-value storage system
US10754995B2 (en) * 2017-10-05 2020-08-25 Zadara Storage, Inc. Consistency across key value stores with shared journals
EP3712783A4 (en) * 2017-12-29 2020-12-30 Huawei Technologies Co., Ltd. METHOD AND DEVICE FOR PROCESSING A WRITE-AHEAD PROTOCOL
US10769130B1 (en) * 2018-05-23 2020-09-08 Databricks Inc. Update and query of a large collection of files that represent a single dataset stored on a blob store
US10824740B2 (en) * 2018-07-30 2020-11-03 EMC IP Holding Company LLC Decentralized policy publish and query system for multi-cloud computing environment
US10254996B1 (en) 2018-08-10 2019-04-09 Cohesity, Inc. Fast migration of metadata
US11178246B2 (en) * 2018-08-25 2021-11-16 Panzura, Llc Managing cloud-based storage using a time-series database
US11366801B1 (en) * 2018-12-11 2022-06-21 Amazon Technologies, Inc. Highly available storage using independent data stores
CN109710190B (zh) * 2018-12-26 2022-03-08 百度在线网络技术(北京)有限公司 一种数据存储方法、装置、设备及存储介质
US11210272B2 (en) * 2019-03-29 2021-12-28 Electronic Arts Inc. Low latency cache synchronization in distributed databases
US11507277B2 (en) * 2019-06-25 2022-11-22 Western Digital Technologies, Inc. Key value store using progress verification
CN110955687B (zh) * 2019-12-03 2023-03-21 中国银行股份有限公司 数据修改方法及装置
US11290531B2 (en) 2019-12-04 2022-03-29 Dropbox, Inc. Immediate cloud content item creation from local file system interface
KR20210092361A (ko) 2020-01-15 2021-07-26 삼성전자주식회사 스토리지 장치 및 그것의 동작 방법
EP3851950A1 (en) 2020-01-15 2021-07-21 Samsung Electronics Co., Ltd. Storage device and operation method thereof
US11468045B2 (en) * 2020-04-17 2022-10-11 Microsoft Technology Licensing, Llc Transactional support for non-relational database
US11747996B2 (en) * 2020-08-05 2023-09-05 Dropbox, Inc. System and methods for implementing a key-value data store
JP2022137795A (ja) * 2021-03-09 2022-09-22 キオクシア株式会社 ストレージ装置、ストレージクライアント装置および制御方法
CN113111086B (zh) * 2021-04-09 2022-06-24 杭州复杂美科技有限公司 数据存储和查询响应方法、区块执行方法
CN112988920A (zh) * 2021-05-20 2021-06-18 中国人民解放军国防科技大学 面向ai应用的数据版本管理方法、装置和计算机设备
US11709866B2 (en) * 2021-08-13 2023-07-25 Snowflake Inc. Scalable compaction in a concurrent transaction processing distributed database
CN114500582A (zh) * 2022-02-11 2022-05-13 浙江大华技术股份有限公司 日志的采集方法、装置、存储介质及电子装置

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6125368A (en) * 1997-02-28 2000-09-26 Oracle Corporation Fault-tolerant timestamp generation for multi-node parallel databases
US7672945B1 (en) * 2002-04-08 2010-03-02 Oracle International Corporation Mechanism for creating member private data in a global namespace
US7406489B2 (en) * 2005-01-28 2008-07-29 Solid Information Technology Oy Apparatus, system and method for persistently storing data in a data synchronization process
US9098290B2 (en) * 2008-01-30 2015-08-04 Intuit Inc. Method and apparatus for facilitating diagnostic logging for software components
US8229945B2 (en) * 2008-03-20 2012-07-24 Schooner Information Technology, Inc. Scalable database management software on a cluster of nodes using a shared-distributed flash memory
US8510263B2 (en) * 2009-06-15 2013-08-13 Verisign, Inc. Method and system for auditing transaction data from database operations
US8473582B2 (en) * 2009-12-16 2013-06-25 International Business Machines Corporation Disconnected file operations in a scalable multi-node file system cache for a remote cluster file system
US8700842B2 (en) * 2010-04-12 2014-04-15 Sandisk Enterprise Ip Llc Minimizing write operations to a flash memory-based object store
US10558705B2 (en) 2010-10-20 2020-02-11 Microsoft Technology Licensing, Llc Low RAM space, high-throughput persistent key-value store using secondary memory
WO2012081131A1 (ja) * 2010-12-16 2012-06-21 株式会社 東雲 キー・バリュー・インデックス・ストア方式のデータベース・システム
JP5721056B2 (ja) 2011-05-10 2015-05-20 日本電気株式会社 トランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラム
US20130110767A1 (en) * 2011-10-26 2013-05-02 Nec Laboratories America, Inc. Online Transaction Processing
US20130290243A1 (en) * 2012-04-26 2013-10-31 Cloudtree, Inc. Method and system for transaction representation in append-only datastores
US9037556B2 (en) * 2012-12-03 2015-05-19 Vmware, Inc. Distributed, transactional key-value store

Also Published As

Publication number Publication date
US9037556B2 (en) 2015-05-19
US20140156618A1 (en) 2014-06-05
US20150227573A1 (en) 2015-08-13
EP3346401B1 (en) 2020-07-08
US9189513B1 (en) 2015-11-17
US20150356133A1 (en) 2015-12-10
EP2870548B1 (en) 2018-03-07
EP3346401A1 (en) 2018-07-11
EP2870548A1 (en) 2015-05-13
US9135287B2 (en) 2015-09-15
AU2013356667B2 (en) 2015-09-17
JP2015526832A (ja) 2015-09-10
AU2013356667A1 (en) 2015-05-14
WO2014088660A1 (en) 2014-06-12

Similar Documents

Publication Publication Date Title
JP5890071B2 (ja) 分散キーバリューストア
US11132350B2 (en) Replicable differential store data structure
CN106991113B (zh) 数据库环境中的表格复制
US11841844B2 (en) Index update pipeline
US9665304B2 (en) Storage system with fast snapshot tree search
US20150363271A1 (en) Restoring data in a hierarchical storage management system
JP5387757B2 (ja) 並列データ処理システム、並列データ処理方法及びプログラム
Binnig et al. Distributed snapshot isolation: global transactions pay globally, local transactions pay locally
US11263236B2 (en) Real-time cross-system database replication for hybrid-cloud elastic scaling and high-performance data virtualization
KR20180021679A (ko) 일관된 데이터베이스 스냅샷들을 이용한 분산 데이터베이스에서의 백업 및 복원
US20180210914A1 (en) Consistent query of local indexes
US20120284244A1 (en) Transaction processing device, transaction processing method and transaction processing program
US20230342353A1 (en) Targeted sweep method for key-value data storage
US20220405239A1 (en) Storing a point in time coherently for a distributed storage system
CN112334891B (zh) 用于搜索服务器的集中式存储
WO2023129310A1 (en) Version control interface for accessing data lakes
WO2021135210A1 (en) Methods and apparatuses for generating redo records for cloud-based database
US20210405879A1 (en) Incremental replication between foreign system dataset stores
Wadkar et al. Hadoop concepts
WO2023249673A1 (en) Version control interface supporting time travel access of a data lake

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150226

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20150226

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20150714

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150929

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151218

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: 20160126

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160217

R150 Certificate of patent or registration of utility model

Ref document number: 5890071

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250