(57)【要約】【課題】ＫＶＳ型データベースにおいてスループットを低下させることなく信頼性を向上させる。【解決手段】取得部２１はバリューの書込み指示又は読出し指示に対応するアドレス情報を含む第１のリクエスト１０を取得する。変換部２２は第１のリクエスト１０を、アドレス情報とアドレス情報が示す位置を書込み位置とする書込み指示がある度に更新されるバージョン情報との組み合わせを含むキーを含む第２のリクエスト２０に変換する。制御部２３は第２のリクエスト２０に基づいて、それぞれマスタ又はスレーブに設定された複数のストレージを含むキーバリューストア型のデータベース１１にキーに対応するバリューを書き込むための書込み処理又はデータベース１１からキーに対応するバリューを読み出すための読出し処理を行う。【選択図】図１
2017173979.tif 000002
【特許請求の範囲】
【請求項１】
バリューの書込み指示又は読出し指示に対応するアドレス情報を含む第１のリクエストを取得する取得部と、
前記第１のリクエストを、前記アドレス情報と前記アドレス情報が示す位置を書込み位置とする前記書込み指示がある度に更新されるバージョン情報との組み合わせを含むキーを含む第２のリクエストに変換する変換部と、
前記第２のリクエストに基づいて、それぞれマスタ又はスレーブに設定された複数のストレージを含むキーバリューストア型のデータベースに前記キーに対応する前記バリューを書き込むための書込み処理又は前記データベースから前記キーに対応する前記バリューを読み出すための読出し処理を行う制御部と、
を備えるデータ管理装置。
【請求項２】
前記制御部は、
前記書込み処理を実行させる前記第２のリクエストを前記マスタ及び前記スレーブに送信し、
前記読出し処理を実行させる前記第２のリクエストを前記マスタにのみ送信する、
請求項１に記載のデータ管理装置。
【請求項３】
前記制御部は、
前記第２のリクエストに対する前記マスタからの応答に基づいて未達成の前記第２のリクエストを判定し、
前記マスタが変更された場合に、新たな前記マスタに未達成の前記第２のリクエストを再送信する、
請求項２に記載のデータ管理装置。
【請求項４】
前記制御部は、前記マスタに送信された前記第２のリクエストを保持し、前記マスタから正常な応答を受けた前記第２のリクエストが削除される情報に基づいて未達成の前記第２のリクエストを判定する、
請求項３に記載のデータ管理装置。
【請求項５】
前記データベースから過去の前記バージョン情報を含む前記キーに対応するデータを削除する削除部、
を更に備える請求項１〜４のいずれか１項に記載のデータ管理装置。
【請求項６】
バリューの書込み指示又は読出し指示に対応するアドレス情報を含む第１のリクエストを取得するステップと、
前記第１のリクエストを、前記アドレス情報と前記アドレス情報が示す位置を書込み位置とする前記書込み指示がある度に更新されるバージョン情報との組み合わせを含むキーを含む第２のリクエストに変換するステップと、
前記第２のリクエストに基づいて、それぞれマスタ又はスレーブに設定された複数のストレージを含むキーバリューストア型のデータベースに前記キーに対応する前記バリューを書き込むための書込み処理又は前記データベースから前記キーに対応する前記バリューを読み出すための読出し処理を行うステップと、
を含むデータ管理方法。
【請求項７】
コンピュータに、
バリューの書込み指示又は読出し指示に対応するアドレス情報を含む第１のリクエストを取得する処理と、
前記第１のリクエストを、前記アドレス情報と前記アドレス情報が示す位置を書込み位置とする前記書込み指示がある度に更新されるバージョン情報との組み合わせを含むキーを含む第２のリクエストに変換する処理と、
前記第２のリクエストに基づいて、それぞれマスタ又はスレーブに設定された複数のストレージを含むキーバリューストア型のデータベースに前記キーに対応する前記バリューを書き込むための書込み処理又は前記データベースから前記キーに対応する前記バリューを読み出すための読出し処理を行う処理と、
を実行させるデータ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データ管理装置、方法、及びプログラムに関する。
【背景技術】
【０００２】
データベースの構築に利用されるデータ管理方式として、ＫＶＳ（Key  Value  Store）方式が知られている。ＫＶＳ方式においては、識別情報であるキーと書込み、読出し等の対象であるバリューとのペアからなるデータがストレージに記憶される。ユーザはキーを指定することにより所望のバリューの書込み、読出し等を高速で行うことができる。
【０００３】
ＫＶＳ型のデータを複数のストレージ間でレプリケーションすることにより、冗長化され高い信頼性を有するストレージを構築することができる。このようなレプリケーションのための処理は通常、ユーザインターフェースとなるクライアントサーバ側ではなくストレージ側で行われる。例えば、ストレージサーバがホストストレージに記憶されたデータのスナップショットをスレーブストレージにコピーする方法がある。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Robustness  in  the  Salus  Scalable  Block  Store  [NSDI'13]
【発明の概要】
【発明が解決しようとする課題】
【０００５】
複数のストレージを含むＫＶＳ型データベースにおいては、複数のストレージ間で処理の一貫性を保証するために書込み順序の管理が必要となる。単純には、１つのタイミングで実行可能な書込み処理を１つに制限することにより一貫性を保証することができる。しかし、そのような手法によると、書込み等の処理をパイプラインにより処理することができず、スループットが低下する。
【０００６】
そこで、以下の実施形態では、ＫＶＳ型データベースにおいてスループットを低下させることなく信頼性を向上させることを目的とする。
【課題を解決するための手段】
【０００７】
実施形態のデータ管理措置は、取得部と、変換部と、制御部とを備える。取得部は、バリューの書込み指示又は読出し指示に対応するアドレス情報を含む第１のリクエストを取得する。変換部は、第１のリクエストを、アドレス情報とアドレス情報が示す位置を書込み位置とする書込み指示がある度に更新されるバージョン情報との組み合わせを含むキーを含む第２のリクエストに変換する。制御部は、第２のリクエストに基づいて、それぞれマスタ又はスレーブに設定された複数のストレージを含むキーバリューストア型のデータベースにキーに対応するバリューを書き込むための書込み処理又はデータベースからキーに対応するバリューを読み出すための読出し処理を行う。
【図面の簡単な説明】
【０００８】
【図１】第１の実施形態に係るデータ管理システムの基本的な機能的構成を例示する図。
【図２】第１の実施形態に係るデータ管理システムのハードウェア構成を例示する図。
【図３】第１の実施形態に係るデータ管理システムの具体的な機能的構成を例示する図。
【図４】第１の実施形態に係るデータ管理システムにおいて書込み指示が出された場合の状態を例示する図。
【図５】第１の実施形態に係るデータ管理システムにおいて書込み指示が達成された場合の状態を例示する図。
【図６】第１の実施形態に係るデータ管理システムにおいて読出し指示が出された場合の状態を例示する図。
【図７】第１の実施形態に係るデータ管理システムにおいて読出し指示が達成された場合の状態を例示する図。
【図８】第１の実施形態に係るデータ管理システムにおいて書込み指示及び読出し指示が出された場合の状態を例示する図。
【図９】第１の実施形態に係るデータ管理システムにおいてマスタに障害が発生した場合の状態を例示する図。
【図１０】第１の実施形態に係るデータ管理システムにおいてＫＶＳリクエストが再送信された場合の状態を例示する図。
【図１１】第１の実施形態に係るデータ管理システムにおいて再送信されたＫＶＳリクエストに対応する指示が達成された場合の状態を例示する図。
【図１２】第２の実施形態に係るデータ管理システムの機能的な構成を例示する図。
【図１３】第２の実施形態に係るデータ管理システムにおいて過去のバージョン情報に対応するデータが削除された状態を例示する図。
【発明を実施するための形態】
【０００９】
（第１の実施形態）
図１は、第１の実施形態に係るデータ管理システム１の基本的な機能的構成を例示する図である。データ管理システム１は、データベース１１、取得部２１、変換部２２、及び制御部２３を含む。
【００１０】
データベース１１は、ＫＶＳ型分散データベースであり、複数のＫＶＳ型データベース３１〜３３を含む。各ＫＶＳ型データベース３１〜３３は、識別情報であるキーと書込み、読出し等の対象であるバリューとのペアからなるデータを記憶している。
【００１１】
取得部２１は、データベース１１へのバリューの書込み、データベース１１からのバリューの読出し等を指示するユーザリクエスト１０（第１のリクエスト）を取得する。ユーザリクエスト１０は、書込み処理又は読出し処理に対応するアドレス情報を含む。アドレス情報は、例えばＬＢＡ（Logical  Block  Addressing）により割り当てられたセクタを特定する情報であり得る。アドレス情報はＬＢＡに基づく情報に限られるものではなく、例えばＫＶＳのキー等であってもよい。
【００１２】
変換部２２は、ユーザリクエスト１０をＫＶＳリクエスト２０（第２のリクエスト）に変換する。ＫＶＳリクエスト２０は、キーを含むＫＶＳコマンド等であり得る。本実施形態のＫＶＳリクエスト２０に含まれるキーは、アドレス情報とバージョン情報との組み合わせを含む。バージョン情報は、アドレス情報毎に割り当てられ、当該アドレス情報を書込み位置とする書込み指示がある度に更新される情報である。例えば、アドレス情報「０」を書込み位置とする１回目の書込み指示があった場合におけるバージョン情報が「０」であった場合、アドレス情報「０」を書込み位置とする２回目の書込み指示があった場合におけるバージョン情報は「１」に更新される（この更新例は単なる一例に過ぎない）。すなわち、変換部２２は、ユーザリクエスト１０に含まれるアドレス情報と、書込み指示がある度に更新されるバージョン情報との組み合わせを含む情報を生成することにより、ＫＶＳ型のデータベース１１を検索するためのキーを生成する。
【００１３】
制御部２３は、変換部２２により生成されたＫＶＳリクエスト２０に基づいて、データベース１１にバリューを書き込むための書込み処理、データベース１１からバリューを読み出すための読出し処理等を行う。制御部２３による書込み処理により、データベース１１内にはバージョン情報を含むキーにより区分されたキー・バリュー・ペアを含むデータが書き込まれる。バージョン情報は上述したように書込み指示がある度に更新される情報であるため、書込み順序の一貫性が保たれることになる。
【００１４】
図２は、第１の実施形態に係るデータ管理システム１のハードウェア構成を例示する図である。本例に係るデータ管理システム１は、データ管理装置１０１及びデータベースシステム２０１を含む。データ管理装置１０１は、ユーザインターフェースを構成する情報処理装置であり、クライアントサーバと称される場合がある。データ管理装置１０１は、ＣＰＵ（Central  Processing  Unit）１１１、ＲＡＭ（Random  Access  Memory）１１２、ＲＯＭ（Read  Only  Memory）１１３、入力デバイス１１４、出力デバイス１１５、通信Ｉ／Ｆ（Interface）１１６等を含む。
【００１５】
ＣＰＵ１１１は、ＲＯＭ１１３等に記憶された制御プログラムに従ってＲＡＭ１１２をワーキングエリアとして所定の演算処理を行う。入力デバイス１１４は、外部から情報を入力するためのデバイスであり、例えばキーボード、マウス、タッチパネル等である。出力デバイス１１５は、内部で生成した情報を外部に出力するためのデバイスであり、例えばディスプレイ、スピーカ等である。通信Ｉ／Ｆ１１６は、ネットワーク１２１を介して外部の装置との間で情報の送受信を可能にするデバイスである。データ管理装置１０１により、上記取得部２１、変換部２２、及び制御部２３の各機能の少なくとも一部が実現される。取得部２１、変換部２２、及び制御部２３は、プログラムに従って処理を行うＣＰＵ１１１、各種論理回路、又はこれらの協働により構成され得る。
【００１６】
データベースシステム２０１は、ストレージサーバ（ファイルサーバ）２１１及び分散ストレージ２１２を含む。ストレージサーバ２１１は、データ管理装置１０１と同様に、プログラムにより制御されるＣＰＵ、プログラムを記憶するＲＯＭ、ワーキングエリアとなるＲＡＭ等を含む情報処理装置である。分散ストレージ２１２は、複数のストレージを含み、各ストレージがＫＶＳ型データベースを構築する。各ストレージは、フラッシュメモリ記憶装置（ＳＳＤ（Solid  State  Drive））、磁気ディスク記憶装置（ＨＤＤ（Hard  Disc  Drive））等であり得る。ストレージサーバ２１１は、ＫＶＳプロトコルに基づいて、分散ストレージ２１２にバリューを書き込むための処理、分散ストレージ２１２からバリューを読み出すための処理、マスタストレージを設定する処理、スレーブストレージを設定する処理等を実行する。データベースシステム２０１により、上記データベース１１の機能が実現される。
【００１７】
なお、図２に示すハードウェア構成は一例であり、実施形態はこれに限定されるものではない。例えば、１つのデータベースシステム２０１に複数のデータ管理装置１０１が接続されてもよい。１つのデータ管理装置１０１に複数のデータベースシステム２０１が接続されてもよい。ストレージサーバ２１１は複数のストレージの各々に対応するように複数設けられてもよい。データ管理装置１０１とデータベースシステム２０１とが１つの情報処理装置により構成されてもよい。この場合、分散ストレージ２１２は情報処理装置内のストレージにより構築され、ストレージサーバ２１１の機能はＣＰＵ１１１により実現される。データ管理システム１のハードウェア構成は公知又は新規の技術を適宜利用し、図１に示す機能ブロックによる機能を実現できる範囲において自由に設計されるべきものである。
【００１８】
図３は、第１の実施形態に係るデータ管理システム１の具体的な機能的構成を例示する図である。本例に係るデータ管理システム１は、図２に示すハードウェア構成に対応するものであり、データ管理装置１０１及びデータベースシステム２０１を含む。
【００１９】
データ管理装置１０１は、アプリケーション３０１及びブロックストレージ部３０２を含む。
【００２０】
アプリケーション３０１は、図１に示す取得部２１の少なくとも一部に対応する。アプリケーション３０１は、ユーザインターフェースの機能を有し、ユーザによる操作の受け付け、各種データの出力等を実行する。ユーザは、アプリケーション３０１を介してバリューの書込み、読出し等を指示することができる。例えば、ユーザは、書込み指示として、書き込みたいバリューと書込み位置（保存場所）を示すアドレス情報とを入力したり、読出し指示として、バリューの書込み位置を示すアドレス情報を入力したりすることができる。
【００２１】
アプリケーション３０１は、ユーザの入力に基づいてユーザリクエスト１０を取得（生成）する。本例に係るユーザリクエスト１０は、指示内容情報、アドレス情報、バリュー等を含んでもよい。指示内容情報は、ユーザが求める指示の種類を特定する情報であり、例えば「書込み」、「読出し」等の指示の種類毎に割り当てられた文字列、記号、値等であってもよい。アドレス情報は、上述したように、書込み位置、読出し位置等を特定する情報であり、例えばＬＢＡ方式により割り当てられた値、ＫＶＳ方式におけるキー等であってもよい。バリューは、書込み対象となるデータであり、テキスト、イメージ等の各種ファイル等であってもよい。バリューは、指示の種類によっては（例えば読出し指示においては）ユーザリクエスト１０に含まれない場合がある。
【００２２】
ブロックストレージ部３０２は、ユーザリクエスト１０に基づいて、データベースシステム２０１にバリューを書き込むための処理、データベースシステム２０１からバリューを読み出すための処理等を実行する。ブロックストレージ部３０２は、例えばＬＢＡ方式等を利用することにより、バリューの書込み／読出し等が１つの記憶領域に対して行われているかのように各種処理を行う。ブロックストレージ部３０２は、変換部３１１、ストレージＩ／Ｆ３１２、及び記憶部３１３を含む。
【００２３】
変換部３１１は、図１に示す変換部２２の少なくとも一部に対応する。変換部３１１は、アプリケーション３０１から取得したユーザリクエスト１０をＫＶＳリクエスト２０に変換する。ＫＶＳリクエスト２０は、データベースシステム２０１を動作させる命令であり、例えばＫＶＳコマンド等であってもよい。ＫＶＳコマンドは、データベースシステム２０１のストレージサーバ２１１にインストールされているソフトウェアに応じて決定されるものであるが、例えば書込みを示す「ＳＥＴ」、読出しを示す「ＧＥＴ」等を含むコマンドであってもよい。ＳＥＴコマンドにはキー及びバリューのペアが含まれる。ＧＥＴコマンドにはキーが含まれ、バリューが含まれない場合がある。その他にも多くの種類のＫＶＳコマンドが知られているが、ここではそれらの説明を省略する。本実施形態はＳＥＴ及びＧＥＴ以外のコマンドの使用を制限するものではない。
【００２４】
変換部３１１は、上述したように、ユーザリクエスト１０に含まれるアドレス情報とバージョン情報とを組み合わせることにより、ＫＶＳコマンドに含まれるキーを生成する。変換部３１１は、記憶部３１３に記憶されているカウンタテーブル３２１を管理し、カウンタテーブル３２１に基づいてアドレス情報に対応するバージョン情報を設定する。
【００２５】
カウンタテーブル３２１は、アドレス情報３２２とカウンタ値３２３との対応関係を示している。カウンタ値３２３は、アドレス情報３２２毎に割り当てられている。変換部３１１は、各カウンタ値３２３を、各カウンタ値３２３に対応するアドレス情報３２２が示す位置を書込み位置とする書込み指示（ユーザリクエスト１０）がある度にインクリメントする。
【００２６】
ストレージＩ／Ｆ３１２は、図１に示す制御部２３の少なくとも一部に対応する。ストレージＩ／Ｆ３１２は、データ管理装置１０１とデータベースシステム２０１との間でのデータの送受信を制御する。ストレージＩ／Ｆ３１２は、変換部３１１により生成されたＫＶＳリクエスト２０をデータベースシステム２０１に送信し、データベースシステム２０１から取得したデータ（バリュー、応答信号等）を受信する。
【００２７】
ストレージＩ／Ｆ３１２は、記憶部３１３に記憶されたマスタ監視テーブル３３１及びリクエスト監視テーブル３４１を管理する。
【００２８】
マスタ監視テーブル３３１は、データベースシステム２０１に含まれる複数（本例では３つ）のストレージ２１１〜２１３について、どのストレージ２１１〜２１３がマスタであるか又はスレーブであるかを示している。図３に示すマスタ監視テーブル３３１は、第１のストレージ２１１（ＫＶＳ１）がマスタであり、第２のストレージ２１２（ＫＶＳ２）及び第３のストレージ２１３（ＫＶＳ３）がスレーブであることを示している。マスタ／スレーブの切り換えは、データベースシステム２０１内の処理だけで行われてもよいし、データ管理装置１０１からの指示に応じて行われてもよい。ストレージＩ／Ｆ３１２は、マスタの切り換えに応じてマスタ監視テーブル３３１を更新する。
【００２９】
ストレージＩ／Ｆ３１２は、書込み処理を実行させる（例えばＳＥＴコマンドを含む）ＫＶＳリクエスト２０をマスタ及びスレーブに送信し、読出し処理を実行させる（例えばＧＥＴコマンドを含む）ＫＶＳリクエスト２０をマスタにのみ送信する。通常の読出し処理はマスタのみを用いて行われ、書込み処理は冗長性を得るためにマスタだけでなくスレーブに対しても行われる。これにより、データベースシステム２０１側でホストのスナップショットを各スレーブにコピーするといった処理を行うことなく冗長化を実現することができる。
【００３０】
リクエスト監視テーブル３４１は、書込み処理を実行させるものであって未達成と判定されるＫＶＳリクエスト２０をリスト化したテーブルである。本例に係るストレージＩ／Ｆ３１２は、先ず、ストレージＩ／Ｆ３１２からデータベースシステム２０１のマスタに送信されたＫＶＳリクエスト２０をリクエスト監視テーブル３４１に追加し、その後、マスタから書込みが正常の行われたことを示す応答を受信した場合に、当該ＫＶＳリクエスト２０をリクエスト監視テーブル３４１から削除する。すなわち、リクエスト管理テーブル３４１に含まれているＫＶＳリクエスト２０は、送信後、処理の達成が確認されていないＫＶＳリクエスト２０である。
【００３１】
ストレージＩ／Ｆ３１２は、リクエスト監視テーブル３４１に含まれているＫＶＳリクエスト２０を所定の条件に基づいてマスタに再送信する。所定の条件は、例えばマスタが切り換わった場合、リクエスト監視テーブル３４１内に所定時間以上同一のＫＶＳリクエスト２０が残っている場合等であってもよい。再送信されるＫＶＳリクエスト２０のキーに含まれるバージョン情報は、それ以前に送信された同一のＫＶＳリクエスト２０のキーに含まれていたバージョン情報と一致する。これにより、再送信されるＫＶＳリクエスト２０が新たなＫＶＳリクエスト２０として扱われることを防止することができ、書込み処理の一貫性を確保することができる。
【００３２】
以下に、図４〜図１１を参照してデータ管理システム１における処理の流れを例示する。図４は、第１の実施形態に係るデータ管理システム１において書込み指示が出された場合の状態を例示する図である。本例は、アプリケーション３０１がユーザからアドレス情報「０」が示す領域に対象データ（バリュー）「ＤａｔａＡ」を書き込む指示を受け付けた場合を示している。アプリケーション３０１は、書込み指示を示す文字列「Ｗｒｉｔｅ」、アドレス情報「０」、及びバリュー「ＤａｔａＡ」を含むユーザリクエスト１０Ａを生成する。
【００３３】
変換部３１１は、ユーザリクエスト１０ＡをＫＶＳリクエスト２０Ａに変換する。ＫＶＳリクエスト２０Ａは、書込み指示を示すコマンド「ＳＥＴ」、キー「（０，１）」、及びバリュー「ＤａｔａＡ」を含む。
【００３４】
先ず、変換部３１１は、ユーザリクエスト１０Ａに「Ｗｒｉｔｅ」が含まれていることに対応してカウンタテーブル３２１を更新する。変換部３１１は、カウンタテーブル３２１のアドレス情報３２２：「０」に対応するカウンタ値３２３をインクリメントして「０」から「１」にする。その後、変換部３１１は、更新されたカウンタテーブル３２１に基づいてアドレス情報「０」とカウンタ値「１」とを組み合わせたキー「（０，１）」を生成し、キー「（０，１）」を含むＫＶＳリクエスト２０Ａを生成する。
【００３５】
ＫＶＳリクエスト２０Ａは書込み処理を実行させるものであるため、ストレージＩ／Ｆ３１２はＫＶＳリクエスト２０Ａをマスタ（第１のストレージ２１１）及びスレーブ（第２のストレージ２１２及び第３のストレージ２１３）に送信する。ストレージＩ／Ｆ３１２は、マスタに送信されたＫＶＳリクエスト２０Ａをリクエスト監視テーブル３４１に記載する。
【００３６】
図５は、第１の実施形態に係るデータ管理システム１において書込み指示が達成された場合の状態を例示する図である。ＫＶＳリクエスト２０Ａを受信した各ストレージ２１１〜２１３は、キー「（０，１）」とバリュー「ＤａｔａＡ」とのペアからなるデータを記憶する。マスタである第１のストレージ２１１は、書込み処理が正常に行われた場合には、書込み処理が正常に行われたことを示す応答信号３０をデータ管理装置１０１（ストレージＩ／Ｆ３１２）に送信する。ストレージＩ／Ｆ３１２は、応答信号３０を受信すると、リクエスト監視テーブル３４１から当該応答信号３０に対応するＫＶＳリクエスト２０Ａを削除する。
【００３７】
ストレージＩ／Ｆ３１２に受信された応答信号３０は、変換部３１１を介してアプリケーション３０１に送信される。ユーザはアプリケーション３０１を介して書込み指示が正常に行われたことを認識することができる。
【００３８】
図６は、第１の実施形態に係るデータ管理システム１において読出し指示が出された場合の状態を例示する図である。本例は、アプリケーション３０１がユーザからアドレス情報「０」に記憶されているデータを読み出す指示を受け付けた場合を示している。アプリケーション３０１は、読出し指示を示す文字列「Ｒｅａｄ」及びアドレス情報「０」を含むユーザリクエスト１０Ｂを生成する。
【００３９】
変換部３１１は、ユーザリクエスト１０ＢをＫＶＳリクエスト２０Ｂに変換する。ＫＶＳリクエスト２０Ｂは、読出し指示を示すコマンド「ＧＥＴ」及びキー「（０，１）」を含む。
【００４０】
ユーザリクエスト１０Ｂには「Ｗｒｉｔｅ」が含まれていないため、変換部３１１はカウンタテーブル３２１を更新しない。変換部３１１は、カウンタテーブル３２１のアドレス情報３２２：「０」に対応するカウンタ値３２３：「１」を取得し、アドレス情報「０」とカウンタ値「１」とを組み合わせてキー「（０，１）」を生成する。変換部３１１は、キー「（０，１）」を含むＫＶＳリクエスト２０Ｂを生成する。
【００４１】
ＫＶＳリクエスト２０Ｂは読込み処理を実行させるものであるため、ストレージＩ／Ｆ３１２はＫＶＳリクエスト２０Ｂをマスタ（第１のストレージ２１１）にのみ送信する。ストレージＩ／Ｆ３１２は、マスタに送信されたＫＶＳリクエスト２０Ｂをリクエスト監視テーブル３４１に記載する。
【００４２】
図７は、第１の実施形態に係るデータ管理システム１において読出し指示が達成された場合の状態を例示する図である。ＫＶＳリクエスト２０Ｂを受信した第１のストレージ２１１は、キー「（０，１）」に対応するバリュー４０「ＤａｔａＡ」を読出し、ストレージＩ／Ｆ３１２に送信する。ストレージＩ／Ｆ３１２は、バリュー４０「ＤａｔａＡ」を受信すると、リクエスト監視テーブル３４１からＫＶＳリクエスト２０Ｂを削除する。
【００４３】
ストレージＩ／Ｆ３１２に受信されたバリュー４０「ＤａｔａＡ」は変換部３１１を介してアプリケーション３０１に送信される。ユーザはアプリケーション３０１を介してバリュー４０「ＤａｔａＡ」を取得することができる。
【００４４】
図８は、第１の実施形態に係るデータ管理システム１において書込み指示及び読出し指示が出された場合の状態を例示する図である。本例は、アプリケーション３０１がユーザからアドレス情報「０」が示す領域にバリュー「ＤａｔａＢ」を書き込む指示、アドレス情報「０」に記憶されているデータを読み出す指示、及びアドレス情報「０」が示す領域にバリュー「ＤａｔａＣ」を書き込む指示を、この順番で受け付けた場合を示している。すなわち、同一のアドレス情報「０」に対して時間的に前後して２回の書込み指示が出され、当該２回の書込み指示の間に読出し指示が出されている。アプリケーション３０１は、上記各指示に対応するユーザリクエスト１０Ｃ「Ｗｒｉｔｅ／０／ＤａｔａＢ」、「Ｒｅａｄ／０」、及び「Ｗｒｉｔｅ／０／ＤａｔａＣ」を変換部３１１に送信する。
【００４５】
変換部３１１は、ユーザリクエスト１０ＣをＫＶＳリクエスト２０Ｃ「ＳＥＴ／（０，２）／ＤａｔａＢ」、「ＧＥＴ／（０，２）」、及び「ＳＥＴ／（０，３）／ＤａｔａＣ」に変換する。
【００４６】
先ず、変換部３１１は、最初のユーザリクエスト１０Ｃ「Ｗｒｉｔｅ／０／ＤａｔａＢ」に「Ｗｒｉｔｅ」が含まれていることに対応してカウンタテーブル３２１を更新し、アドレス情報３２２：「０」に対応するカウンタ値３２３：「１」（図７に示す状態）を「２」にインクリメントする。その後、変換部３１１は、更新されたカウンタテーブル３２１に基づいてアドレス情報「０」とカウンタ値「２」とを組み合わせたキー「（０，２）」を生成し、ユーザリクエスト１０Ｃ「Ｗｒｉｔｅ／０／ＤａｔａＢ」に対応するＫＶＳリクエスト２０Ｃ「ＳＥＴ／（０，２）／ＤａｔａＢ」を生成する。
【００４７】
次いで、変換部３１１は、２番目のユーザリクエスト１０Ｃ「Ｒｅａｄ／０」に対応するＫＶＳリクエスト２０Ｃ「ＧＥＴ／（０，２）」を生成する。このとき、ユーザリクエスト１０Ｃ「Ｒｅａｄ／０」には「Ｗｒｉｔｅ」が含まれていないため、変換部３１１はカウンタテーブル３２１を更新しない。変換部３１１は、現在のカウンタテーブル３２１に基づいてアドレス情報「０」とカウンタ値「２」とを組み合わせてキー「（０，２）」を生成し、ＫＶＳリクエスト２０Ｃ「ＧＥＴ／（０，２）」を生成する。
【００４８】
次いで、変換部３１１は、３番目のユーザリクエスト１０Ｃ「Ｗｒｉｔｅ／０／ＤａｔａＣ」に対応するＫＶＳリクエスト２０Ｃ「ＳＥＴ／（０，３）／ＤａｔａＣ」を生成する。このとき、変換部３１１は、ユーザリクエスト１０Ｃ「Ｗｒｉｔｅ／０／ＤａｔａＣ」に「Ｗｒｉｔｅ」が含まれていることに対応してカウンタテーブル３２１を更新し、アドレス情報３２２：「０」に対応するカウンタ値３２３「２」を「３」にインクリメントする。その後、変換部３１１は、更新されたカウンタテーブル３２１に基づいてアドレス情報「０」とカウンタ値「３」とを組み合わせたキー「（０，３）」を生成し、ユーザリクエスト１０Ｃ「Ｗｒｉｔｅ／０／ＤａｔａＣ」に対応するＫＶＳリクエスト２０Ｃ「ＳＥＴ／（０，３）／ＤａｔａＢ」を生成する。
【００４９】
ストレージＩ／Ｆ３１２は、マスタである第１のストレージ２１１には全てのＫＶＳリクエスト２０Ｃ「ＳＥＴ／（０，２）／ＤａｔａＢ」、「ＧＥＴ／（０，２）」、及び「ＳＥＴ／（０，３）／ＤａｔａＣ」を送信する。ストレージＩ／Ｆ３１２は、スレーブである第２のストレージ２１２及び第３のストレージ２１３には書込みを実行させるＫＶＳリクエスト２０Ｄ「ＳＥＴ／（０，２）／ＤａｔａＢ」及び「ＳＥＴ／（０，３）／ＤａｔａＣ」を送信する。ストレージＩ／Ｆ３１２は、マスタに送信されたＫＶＳリクエスト２０Ｃ「ＳＥＴ／（０，２）／ＤａｔａＢ」、「ＧＥＴ／（０，２）」、及び「ＳＥＴ／（０，３）／ＤａｔａＣ」をリクエスト監視テーブル３４１に記載する。
【００５０】
図９は、第１の実施形態に係るデータ管理システム１においてマスタに障害が発生した場合の状態を例示する図である。本例は、図８に示すＫＶＳリクエスト２０Ｃ「ＳＥＴ／（０，２）／ＤａｔａＢ」、「ＧＥＴ／（０，２）」、及び「ＳＥＴ／（０，３）／ＤａｔａＣ」の送信後、マスタである第１のストレージ２１１からの応答がない場合を示している。同図において、全てのストレージ２１１〜２１３にＫＶＳリクエスト２０Ｃ「ＳＥＴ／（０，２）／ＤａｔａＢ」及び「ＳＥＴ／（０，３）／ＤａｔａＣ」に対応するデータ「（０，２）  ＤａｔａＢ」及び「（０，３）  ＤａｔａＣ」が記憶され、リクエスト監視テーブル３４１にＫＶＳリクエスト２０Ｃ「ＳＥＴ／（０，２）／ＤａｔａＢ」、「ＧＥＴ／（０，２）」、及び「ＳＥＴ／（０，３）／ＤａｔａＣ」が残っている状態が示されている。これは、書込み処理が達成したにもかかわらずマスタから応答が送信されないため、ストレージＩ／Ｆ３１２がリクエスト監視テーブル３４１からＫＶＳリクエスト２０Ｃを削除できないためである。
【００５１】
図１０は、第１の実施形態に係るデータ管理システム１においてＫＶＳリクエスト２０Ｃが再送信された場合の状態を例示する図である。本例においては、図９に示す状態になった後、マスタは第１のストレージ２１１から第２のストレージ２１２に切り換えられている。
【００５２】
ストレージＩ／Ｆ３１２は、マスタの切り換えに応じてマスタ監視テーブル３３１を更新する。その後、ストレージＩ／Ｆ３１２は、新たなマスタである第２のストレージ２１２に、リクエスト監視テーブル３４１に残っているＫＶＳリクエスト２０Ｃを再送信する。
【００５３】
図１１は、第１の実施形態に係るデータ管理システム１において再送信されたＫＶＳリクエスト２０Ｃに対応する指示が達成された場合の状態を例示する図である。同図において、新たなマスタである第２のストレージ２１２から各ＫＶＳリクエスト２０Ｃに対する応答がストレージＩ／Ｆ３１２に送信されている状態が示されている。図中上部の応答信号３０「ＯＫ」はＫＶＳリクエスト２０Ｃ「ＳＥＴ／（０，２）／ＤａｔａＢ」に対する応答である。バリュー４０「ＤａｔａＢ」はＫＶＳリクエスト２０Ｃ「ＧＥＴ／（０，２）」に対する応答である。図中下部の応答信号３０「ＯＫ」はＫＶＳリクエスト２０Ｃ「ＳＥＴ／（０，３）／ＤａｔａＣ」に対する応答である。当該応答は、変換部３１１を介してアプリケーション３０１に送信され、ユーザにより確認される。ストレージＩ／Ｆ３１２は、当該応答の受信に応じてリクエスト監視テーブル３４１内のＫＶＳリクエスト２０Ｃを削除する。
【００５４】
上記のように、本実施形態によれば、再送信された読出し処理を実行するためのＫＶＳリクエスト２０Ｃ「ＧＥＴ／（０，２）」に対する応答はバリュー４０「ＤａｔａＢ」となる。この応答結果は、マスタの故障前（第１のストレージ２１１がマスタであったとき）に得られたであろう応答結果と一致する。故障前におけるＫＶＳリクエスト２０Ｃ「ＧＥＴ／（０，２）」（図８参照）と再送信されたＫＶＳリクエスト２０Ｃ「ＧＥＴ／（０，２）」（図１０参照）とが一致しているからである。
【００５５】
図８〜図１０に示す例においては、ユーザは、最初の指示においてアドレス情報「０」に対してバリュー「ＤａｔａＢ」を書き込む指示を出し、２番目の指示においてアドレス情報「０」に対応するバリューを読み出す指示を出し、３番目の指示においてアドレス情報「０」に対してバリュー「ＤａｔａＣ」を書き込む指示を出している。すなわち、２番目の読出し指示により、最初の書込み指示により書き込まれたバリュー「ＤａｔａＢ」が読み出されなければならない。しかし、従来のシステムにおいては、３番目の書込み指示に対応するＫＶＳリクエスト（「ＤａｔａＣ」を書き込むリクエスト）の送信後に、マスタの切り換え等に対応するために２番目の読出し指示に対応するＫＶＳリクエストを再送信する場合に、取得されるべきバリュー「ＤａｔａＢ」ではなく、後で書き込まれたバリュー「ＤａｔａＣ」が取得されてしまう可能性がある。
【００５６】
これに対し、本実施形態においては、ＫＶＳリクエスト２０のキーが、書込み指示がある度に更新されるバージョン情報を含んでいるため、ＫＶＳリクエスト２０が再送信された場合であっても、後の書込み処理の影響を受けることなく適切な読出し処理を実行することができる。また、同時に複数の書込み又は読出し処理を行うことができるので、スループットを低減させることはない。従って、本実施形態によれば、ＫＶＳ型データベースにおいてスループットを低下させることなく信頼性を向上させることが可能となる。
【００５７】
（第２の実施形態）
以下に、第２の実施形態について図面を参照して説明するが、第１の実施形態と同一又は同様の箇所については同一の符号を付してその説明を省略する場合がある。
【００５８】
図１２は、第２の実施形態に係るデータ管理システム５０１の機能的な構成を例示する図である。本実施形態に係るストレージＩ／Ｆ３１２は削除部６１５を含み、記憶部３１３はデータ削除監視テーブル６２１を記憶している。
【００５９】
削除部６１５は、各ストレージ２１１〜２１３に記憶されたデータから過去のバージョン情報に対応するデータを削除するための処理を行う。削除部６１５は、変換部３１１に対して所定のタイミングで（例えば一定期間毎に）要求信号５０を送信する。要求信号５０は、変換部３１１に対し各アドレス情報３２２に対応する現在のカウンタ値３２３の送信を要求する信号である。変換部３１１は、要求信号５０を受信すると、カウンタテーブル３２１に基づいてアドレス情報３２２と現在のカウンタ値３２３との対応関係を含むカウンタ情報６０を生成し、削除部６１５に送信する。削除部６１５は、カウンタ情報６０を受信すると、過去のバージョン情報（カウンタ値）を含むキーを含むデータを削除するための処理を実行させる削除リクエスト７０をデータベースシステム２０１に送信する。削除部６１５は、データの削除に応じてデータ削除監視テーブル６２１を更新する。データ削除監視テーブル６２１は、アドレス情報３２２と削除されたデータのバージョン情報を示す削除カウンタ値６２３との対応関係を示すテーブルである。
【００６０】
図１３は、第２の実施形態に係るデータ管理システム５０１において過去のバージョン情報に対応するデータが削除された状態を例示する図である。本例は、要求信号５０が変換部３１１に受信された後の状態を示している。変換部３１１は、要求信号５０の受信に応じて、カウンタ情報６０「（０，３）、（１，０）、（２，０）、及び（３，０）」を削除部６１５に送信する。カウンタ情報６０は、カウンタテーブル３２１の内容に対応している。
【００６１】
削除部６１５は、カウンタ情報６０に基づいて削除リクエスト７０「ＤＥＬＥＴＥ／（０，１）及びＤＥＬＥＴＥ／（０，２）」を生成し、データベースシステム２０１に送信する。削除リクエスト７０「ＤＥＬＥＴＥ／（０，１）」はキー（０，１）を含むデータを削除させるＫＶＳコマンドであり、削除リクエスト７０「ＤＥＬＥＴＥ／（０，２）」はキー（０，２）を含むデータを削除させるＫＶＳコマンドである。本例に係る削除部６１５は、既に削除された削除カウンタ値６２３をＡ、現在のカウンタ値３２３をＢとするとき、Ａから（Ｂ−１）までのカウンタ値に対応するデータを削除する。本例においては、アドレス情報３２２「０」に対応する既に削除された削除カウンタ値６２３（Ａ）は「０」であり（図１２参照）、アドレス情報３２２「０」に対応する現在のカウンタ値３２３（Ｂ）は「３」である。従って、削除されるデータは、アドレス情報「０」とカウンタ値「０」〜「２」のいずれか１つとを含むキーを含むデータ「（０，１）  ＤａｔａＡ」及び「（０，２）  ＤａｔａＢ」となる。ストレージＩ／Ｆ３１２は、実行されたデータの削除に応じてデータ削除監視テーブル６２１の削除カウンタ値６２３を更新する。
【００６２】
上記のように、第２の実施形態によれば、第１の実施形態による効果に加え、各ストレージ２１１〜２１３から過去のバージョンに対応するデータを削除することができる。これにより、各ストレージ２１１〜２１３の記憶容量の損失を抑制することができる。
【００６３】
上記データ管理システム１，５０１（データ管理装置１０１）の各種機能を実現させるプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録されて提供することができる。また、プログラムは、ネットワークに接続された所定の記憶装置から所定の情報処理装置にダウンロードすることにより提供されてもよいし、予めＲＯＭ等に組み込まれて所定の情報処理装置に提供されてもよい。また、プログラムは、上記各種機能を実現する複数のモジュールから構成されてもよい。
【００６４】
以上、本発明の実施形態を説明したが、この実施形態は例として提示したものであり、発明の範囲を限定することを意図するものではない。この新規な実施形態はその他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。この実施形態及びその変形は発明の範囲及び要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６５】
１，５０１  データ管理システム
１０，１０Ａ〜１０Ｃ  ユーザリクエスト（第１のリクエスト）
１１  データベース
２０，２０Ａ〜２０Ｃ  ＫＶＳリクエスト（第２のリクエスト）
２１  取得部
２２，３１１  変換部
２３  制御部
３０  応答信号
４０  バリュー
１０１  データ管理装置
１１１  ＣＰＵ
１１２  ＲＡＭ
１１３  ＲＯＭ
１１４  入力デバイス
１１５  出力デバイス
１１６  通信Ｉ／Ｆ
１２１  ネットワーク
２０１  データベースシステム
２１１  ストレージサーバ
２１２  分散ストレージ
３０１  アプリケーション
３０２  ブロックストレージ部
３１２  ストレージＩ／Ｆ
３１３  記憶部
３２１  カウンタテーブル
３２２  アドレス情報
３２３  カウンタ値
３３１  マスタ監視テーブル
３４１  リクエスト監視テーブル
６１５  削除部
６２１  データ削除監視テーブル
６２３  削除カウンタ値
【図１】
2017173979.tif 000003
【図２】
2017173979.tif 000004
【図３】
2017173979.tif 000005
【図４】
2017173979.tif 000006
【図５】
2017173979.tif 000007
【図６】
2017173979.tif 000008
【図７】
2017173979.tif 000009
【図８】
2017173979.tif 000010
【図９】
2017173979.tif 000011
【図１０】
2017173979.tif 000012
【図１１】
2017173979.tif 000013
【図１２】
2017173979.tif 000014
【図１３】
2017173979.tif 000015