Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP5321682B2 - ストレージシステムとストレージアクセス方法とプログラム - Google Patents
[go: Go Back, main page]

JP5321682B2 - ストレージシステムとストレージアクセス方法とプログラム - Google Patents

ストレージシステムとストレージアクセス方法とプログラム Download PDF

Info

Publication number
JP5321682B2
JP5321682B2 JP2011507250A JP2011507250A JP5321682B2 JP 5321682 B2 JP5321682 B2 JP 5321682B2 JP 2011507250 A JP2011507250 A JP 2011507250A JP 2011507250 A JP2011507250 A JP 2011507250A JP 5321682 B2 JP5321682 B2 JP 5321682B2
Authority
JP
Japan
Prior art keywords
value
key
pair
storage device
hash
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
JP2011507250A
Other languages
English (en)
Other versions
JPWO2010114006A1 (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
Priority to JP2011507250A priority Critical patent/JP5321682B2/ja
Publication of JPWO2010114006A1 publication Critical patent/JPWO2010114006A1/ja
Application granted granted Critical
Publication of JP5321682B2 publication Critical patent/JP5321682B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90339Query processing by using parallel associative memories or content-addressable memories

Landscapes

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

Description

[関連出願についての記載]
本発明は、日本国特許出願:特願2009−086634号(2009年 3月31日出願)の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、ストレージシステムと方法とプログラムに関し、特に、キー・バリュー型ストレージに適用して好適なストレージシステムと方法とプログラムに関する。
ストレージシステムは、様々なタイプのストレージデバイスから構成されている。その理由は、ストレージデバイスはそれぞれ固有の特徴を有しており、システム全体として性能・信頼性を高めるためには各ストレージデバイスの特徴を組み合わせることが有効であるためである。
一般的に高速なストレージは小容量で、大容量なストレージは低速であるという特徴がある。これを如何に組み合わせて、大容量で高速且つ高信頼なストレージにするかはストレージシステムの大きなテーマである。
高速小容量のストレージとして、例えばRAM(ランダムアクセスメモリ)等の半導体メモリがあげられる。低速大容量のストレージとして、例えばハードディスク(HDD)があげられる。一般に、データはハードディスクに保存される。メモリ(RAM)は、ディスクに対してはるかに記憶容量が小さいということと、揮発性(電源が切れるとデータも消える)であることにより、キャッシュ(ディスクキャッシュ)として用いられている。データは、ハードディスクに存在し、ハードディスク上のアドレス(ブロックアドレス)が指定されてREAD/WRITEアクセスが行われる。ハードディスクの入出力アクセスはメモリに比べて低速であるため、アクセス毎、毎回、ハードディスクにアクセスする場合、処理が遅くなる。そこで、メモリ(ディスクキャッシュ)を間に挟み、一度アクセスしたデータはメモリ上にも置く。これにより、再度、同じアドレスへのアクセスが行われたときには、ハードディスクにはアクセスせず、メモリ(キャッシュ)上のデータを返すことで、高速化を可能としている。これが、キャッシュの原理である。
さらに、データの先読みやWRITE時にシーケンシャルログにするなど、ハードディスクの特性を考慮してなるべくデータアクセスを高速化するような工夫が従来から多く研究され、実用化されている。
このように、メモリの容量がハードディスクの容量に比べてはるかに少なく、処理に必要なデータがメモリに対して大きいという前提でストレージシステムは構築されてきた。
しかし、昨今、メモリの大容量化により、この前提が変わってきている。例えば、最新の製品では、コモディティなサーバでも、1台当り100GB以上のメモリ(DRAM(ダイナミックランダムアクセスメモリ)等)を積めるようになっている。
さらに、分散共有メモリ技術により、複数のサーバのメモリをクラスタ間で共有できれば、TB(テラバイト)オーダーのメモリ容量となり、たいていの処理に対しては十分な容量が確保できる。この状況に呼応し、メモリだけで完結する製品も出てきている。メモリのみで完結するストレージ製品として、例えばOracle社のインメモリ製品「Oracle Coherence」(オラクルコヒーレンス)、あるいは、オープンソースの「memcached」(例えば、大手website(ウエッブサイト)で分散メモリキャッシュシステムに使われている)が知られており、更新、検索中にディスクアクセスを行わず高速データ処理を可能とするOn−memory DB(メモリDB)も着目されている。これらの製品は、処理に必要なデータは全てメモリ上にあるという前提で、データ処理の高速化を実現している。
一方、近時、キー・バリュー型(Key−Value)データストアが着目されている(Amazon社の「Amazon Dynamo」、あるいは「memcached」等)。キー・バリュー型分散データストアは、メモリマップは共有ではなく、バリューは可変長であり、クライアントサーバモデルが適用可能、分散の仕方はクライアント側で決定する等の特徴をもち、ストレージサーバ間の連携が不要であり、スケーラブルな拡張が容易である等の利点を有する(キー・バリュー型(Key−Value)データストアについては、本発明の実施形態に関連して後述される)。
以下に発明による分析を与える。
前述したように、メモリの大容量化に伴い、メモリだけでストレージを作ることも可能になってくる。しかし、DRAM等のメモリは高速アクセスが可能であるが、電源が切れると保持データが失われる揮発性のストレージである。よって、メモリにのみデータを保存しておくのでは、ストレージとして不十分である。
永続化を確定するためには、電源が切れてもデータを保持する不揮発ストレージ、例えばハードディスク(HDD)にも格納しておく必要がある。しかし、メモリに書き込まれたデータをそのつどハードディスクに保存するとなると、応答時間(アクセス時間)が長時間となる。したがって、メモリだけでストレージを構成し、処理を高速化しようとしても、実はハードディスクにデータを保存するというのでは、メモリだけでストレージを構成したことのメリットがなくなってしまうことになる。
そこで、ハードディスクに保存するデータ量を削減するとともに、信頼性を高めることが課題となる。
この課題は、ストレージシステムに共通する課題であり、既存のファイルシステムやデータベースの中にも、この課題に取り組んでいるものもある。しかしながら、これらのファイルシステムやデータベースは、前提として、データはハードディスク上にあり、メモリはキャッシュとして位置付けている。このため、ハードディスク上でのデータ配置に工夫を要することになる。また、メモリはキャッシュ(ディスクキャッシュ)として構成されているため、必要に応じて、オンデマンドで、ディスク・アクセスが行われる(例えばキャッシュミスヒット時におけるディスクデータの読み出し、あるいは、データ更新時のライトバック又はライトスルー等)。これらのファイルシステムやデータベースを分散ストレージサーバに適用することを考えた場合、サーバ間での連携等が必要となり、高速化、信頼性を実現しながら、スケーラブルに拡張可能とするシステムの実現は困難である。
したがって、本発明の目的は、高速性、信頼性の向上を実現可能とし、スケーラブルに拡張可能な分散ストレージに適用して好適とされるシステム、方法、プログラムを提供することにある
本発明によれば、キーとバリューを対応させて格納し、キーを検索してバリューを得るキー・バリュー型データストア構成のストレージシステムであって、
キーとバリューの対の書き込み要求に対して、
前記バリューのハッシュ値を計算し、
前記キーと、前記バリューのハッシュ値をそれぞれキー、バリューとする第1の対と、
前記バリューのハッシュ値と、前記バリューをそれぞれキー、バリューとする第2の対と、
をそれぞれ記憶装置に格納し、
読み出し要求に対して、
前記読み出し要求で指定されたキーで前記記憶装置を検索して、前記キーと前記第1の対をなすバリューのハッシュ値を取得し、
取得した前記バリューのハッシュ値で前記記憶装置を検索して、前記バリューのハッシュ値と前記第2の対をなすバリューを取得し、その際、前記バリューのハッシュ値で前記記憶装置を検索した結果、前記バリューのハッシュ値と前記第2の対をなすバリューが前記記憶装置に存在しない場合、前記第1の対が前記記憶装置に正常に保存されなかったものと判断する手段を備えた、ストレージシステムが提供される。
本発明によれば、キーとバリューを対応させて格納し、キーを検索してバリューを得るキー・バリュー型データストア構成のストレージシステムにおいて、
キーとバリューの対の書き込み要求に対して、
前記バリューのハッシュ値を計算し、
前記キーと、前記バリューのハッシュ値をそれぞれキー、バリューとする第1の対と、
前記バリューのハッシュ値と、前記バリューをそれぞれキー、バリューとする第2の対と、
をそれぞれ記憶装置に格納し、
読み出し要求に対して、
前記読み出し要求で指定されたキーで前記記憶装置を検索して、前記キーと前記第1の対をなすバリューのハッシュ値を取得し、
取得した前記バリューのハッシュ値で前記記憶装置を検索して、前記バリューのハッシュ値と前記第2の対をなすバリューを取得し、その際、前記バリューのハッシュ値で前記記憶装置を検索した結果、前記バリューのハッシュ値と前記第2の対をなすバリューが前記記憶装置に存在しない場合、前記第1の対が前記記憶装置に正常に保存されなかったものと判断する方法が提供される。
本発明によれば、キーとバリューを対応させて格納し、キーを検索してバリューを得るキー・バリュー型データストア構成のストレージシステムを構成するコンピュータに、
キーとバリューの対の書き込み要求に対して、
前記バリューのハッシュ値を計算し、
前記キーと、前記バリューのハッシュ値をそれぞれキー、バリューとする第1の対と、
前記バリューのハッシュ値と、前記バリューをそれぞれキー、バリューとする第2の対と、
をそれぞれ記憶装置に格納し、
読み出し要求に対して、
前記読み出し要求で指定されたキーで前記記憶装置を検索して、前記キーと前記第1の対をなすバリューのハッシュ値を取得し、
取得した前記バリューのハッシュ値で前記記憶装置を検索して、前記バリューのハッシュ値と前記第2の対をなすバリューを取得し、その際、前記バリューのハッシュ値で前記記憶装置を検索した結果、前記バリューのハッシュ値と前記第2の対をなすバリューが前記記憶装置に存在しない場合、前記第1の対が前記記憶装置に正常に保存されなかったものと判断する処理を実行させるプログラムが提供される。
本発明によれば、高速性、信頼性の向上を実現し、スケーラブルに拡張可能な分散ストレージに適用して好適とされる。
本発明の一実施形態のシステム構成を示す図である。 キー・バリュー型ストレージを説明する図である。 キー・バリュー型ストレージの分散形態を説明する図である。 本発明の一実施形態におけるキー・バリュー型ストレージを説明する図である。 本発明の一実施形態における書き込みPUT(K、V)の処理手順を示す流れ図である。 本発明の一実施形態における読み出しGET(K)の処理手順を示す流れ図である。 本発明の別の実施形態におけるキー・バリュー型ストレージを説明する図である。 本発明の一実施形態におけるキー・バリュー型ストレージの分散形態を説明する図である。 本発明の一実施例の分散ストレージシステムでの書き込みPUT(K、V)を説明する図である。 本発明の一実施例の分散ストレージシステムでの読み出しGET(K)を説明する図である。
以下では、本発明の基本原理を説明したのち、実施形態について説明する。本発明においては、データはメモリに格納されていることを前提とする。また本発明において、前述したように、電源オフ時のメモリデータ保持のために、例えば該データをハードディスク(以下、単に、「ディスク」と略記される)に格納しておくが、アクセスに応じて、オンデマンドで、ディスクを読みに行くことはない。本発明に係るストレージシステムは、起動したときに、ディスクから、保存されているデータを読み込み、RAM等のメモリに展開する。このように、本発明に係るストレージシステムは、既存のファイルシステムやデータベースとは基本動作が相違している。
また、本発明においては、信頼性を高める方法も既存システムとは相違している。この課題を考える際に、重要な要素となるのがデータモデルである。
本発明においては、メモリにデータが残ることを前提としている。そのため、単一ノードだけでは、メモリ容量が十分とはいえないことから、クラスタ化して、分散共有メモリを構成する。このため、本発明において、データモデルは、分散共有メモリに適したデータモデルである必要がある。
分散共有メモリは、従来より、各種開発されており、例えば、
・アドレスマップを共有する方法や、
・MPI(Message Passing Interface)で通信する方法、
等が知られている。しかし、これらの方法は、ノードが増えていくと性能が飽和する。
これに対して、近年、キー(Key)とバリュー(Value)の組を元に、分散共有メモリを実現する方式であるキー・バリュー型(Key−Value)ストレージが注目されている。Key−Valueストレージは連想配列とも言われるデータモデルである。Key−Valueストレージは、各アイテム(KeyとValueのセット)の関係が独立であるため、分散に適し、ノードが増えても、性能がスケーラブルに拡張し易いというメリットがある。
本発明においては、Key−Valueストレージをデータモデルとして採用し、性能と信頼性の両立を解決する。具体的には、如何にして、メモリ上のデータのうちディスクに同期保存するデータ量を減らすかという課題を解決する。
本発明においては、Key−Valueストレージを、多段の間接参照とし、1段目のバリュー(=2段目のキーに相当)を、実バリュー(=2段目のバリュー)のハッシュ値とする。
本発明においては、キーとバリューの対の書き込み要求に対して、バリューのハッシュ値を計算し、キーとバリューのハッシュ値をそれぞれキー、バリューとする第1の対と、バリューのハッシュ値と、バリュー(実バリュー)をそれぞれキー、バリューとする第2の対と、をそれぞれ記憶装置に格納する。読み出し要求に対して、指定されたキーで前記記憶装置を検索して、前記キーと前記第1の対をなすバリューのハッシュ値を取得し、取得した前記バリューのハッシュ値で前記記憶装置を検索して、前記バリューのハッシュ値と前記第2の対をなすバリュー(実バリュー)を取得する。その際、前記バリューのハッシュ値で前記記憶装置を検索した結果、前記バリューのハッシュ値と前記第2の対をなすバリューが前記記憶装置に存在しない場合、前記第1の対が前記記憶装置に正常に保存されなかったものと判断する。
本発明において、分散ストレージシステムは、書き込み時、キーとバリューを対応させて格納し、読み出し時、キーで検索してバリューを得る複数のキー・バリュー型(Key−Value)ストレージサーバと、キー・バリュー型(Key−Value)ストレージクライアントを備えている。Key−Valueストレージクライアントは、キーとバリューの対の書き込み要求を受け、前記バリューのハッシュ値を計算し、前記キーと前記バリューのハッシュ値をそれぞれキーとバリューとする第1の対と、前記バリューのハッシュ値と前記バリューをそれぞれキーとバリューとする第2の対と、を生成する。Key−Valueストレージクライアントは、前記第1の対のキーとバリューを対応させて第1のKey−Valueストレージサーバに保存し、前記第2の対のキーとバリューを対応させて第2のKey−Valueストレージサーバに保存する。
Key−Valueストレージクライアントは、キーからバリューを得る読み出し要求を受けると、前記第1のKey−Valueストレージサーバを前記キーで検索して、前記キーと前記第1の対をなす前記バリューのハッシュ値を取得し、取得したバリューのハッシュ値をキーとして、前記第2のKey−Valueストレージサーバを検索して、前記バリューのハッシュ値と前記第2の対をなす前記バリューを取得する。前記検索処理において、前記バリューのハッシュ値と前記バリューの前記第2の対が存在しないときには、前記第1の対が前記第1のKey−Valueストレージサーバに正常に格納されなかったものと判断する。
本発明において、Key−Valueストレージクライアントは、前記第1、第2の対のキーのハッシュ値に基づき、前記第1、第2の対のキーとバリューを保存する第1、第2のKey−Valueストレージサーバを決定する。
本発明において、前記第1のKey−Valueストレージサーバは、第1の揮発性記憶装置(例えばDRAM等の半導体メモリ)と第1の不揮発性の記憶装置(例えばハードディスク)を備えている。前記第2のKey−Valueストレージサーバは、第2の揮発性記憶装置(例えばDRAM等の半導体メモリ)と第2の不揮発性の記憶装置(例えばハードディスク)を備えている。前記第1、第2のKey−Valueストレージサーバは、前記第1、第2の対のキーとバリューを前記第1、第2の揮発性記憶装置にそれぞれ保存する。前記第1のKey−Valueストレージサーバは、書き込み要求に対する応答を返す前に、前記第1のキーとバリューを前記第1の不揮発性の記憶装置に保存する。前記第2のKey−Valueストレージサーバは、前記第2の対のキーとバリューを任意のタイミングで前記第2の不揮発性の記憶装置に保存する。
本発明において、Key−Valueストレージクライアントは、キーとバリューの対の書き込み要求を受けて、キーとバリューの対をキャッシュメモリに格納し、キーからバリューを得る読み出し要求に対して、前記キャッシュメモリに前記キーと、前記キーに対応するバリューが格納されている場合(キャッシュヒット時)、前記キャッシュメモリから前記キーに対応するバリューを読み出して応答として返し、キャッシュミスヒット時に、第1、第2のKey−Valueストレージサーバからの読み出し(KeyによるHash(Value)の読み出しと、該読み出したHash(Value)によるValueの読み出し)を行う構成としてもよい。
<実施形態1>
図1は、本発明の一実施形態のシステム構成を示す図である。図1において、ノード1は、ストレージとして、メモリ2(例えばRAM)と、ハードディスク(「ディスク」と略記される)3を有する。メモリ2において指定された容量(あるいは領域)が、Key−Valueストレージ用に確保されている。メモリ2において指定された容量(あるいは領域)を、「キー・バリュー型(Key−Value)ストレージ用メモリ4」と呼ぶ。Key−Valueストレージ用メモリ4は、Key−Valueストレージサーバ機能5で管理する。なお、Key−Valueストレージ用メモリ4を、メモリ2内の設けずに、別構成の半導体メモリで構成してもよいことは勿論である。
Key−Valueストレージ用メモリ4にアクセスするアプリケーション6は、Key−Valueストレージクライアント機能7を経由してアクセスを行う。アプリケーション6は、メモリ2のKey−Valueストレージ用メモリ4以外の領域にアクセスする場合、Key−Valueストレージクライアント機能7を介さずに、直接、メモリ2にアクセスし、ディスク3へも直接アクセスする。
ノード1が複数ある場合、Key−Valueストレージ用メモリ4は、複数ノード1間を相互接続するネットワーク8を介して、複数ノード1間で共有される。
具体的には、Key−Valueストレージクライアント機能7が、キーとバリューの対<Key、Value>のKeyのハッシュ値に基づいて、ターゲットノード1を特定し、ターゲットノード1のKey−Valueストレージサーバ機能5にネットワーク8を経由してアクセスすることで、分散ストレージが実現される。
Keyのハッシュ値からノードを特定するアルゴリズムは、ネットワーク8に接続された全てのノード1のKey−Valueストレージクライアント機能7により共有される。ただし、共有の仕方は任意である。
次に、本実施形態におけるKey−Valueストレージについて、図2を参照して説明する。Key−Valueストレージとは、プログラミング言語では連想配列(Assosiative Array)と言われるものである。
図2(A)において、Key10には、任意の文字列が指定可能であり、Value11に値(文字列とは限定されない)が格納される。
Key10とValue11の対をアイテム12と呼び、<K、V>と表記する。Key−Valueにおけるデータ処理命令は、Get(読み出し)とPut(書き込み)がある。
Getは、Key10をもとにValue11を得る命令(読み出し命令)である。
Putは、アイテム12(=<K、V>)を格納する命令(書き込み命令)である。すなわち、
Get(K)=V
Put(<K、V>)
と表記できる。
図2(B)にKey−Valueの例を示す。<Red、Apple>、<Yellow、Orange>、<Pink、Peach>の3つのアイテム12が格納されている。このとき、
Get(Red)=Apple、
Get(Yellow)=Orange、
Get(Pink)=Peach
となる。
Key−Valueストレージのメリットは、分散したときに性能がスケーラブルに拡張できることである。Key−Valueストレージにおいては、アイテム12は互いに独立である。すなわち、あるアイテム12を変更する際に、別のアイテム12を変更する必要はない。よって、分散したノード1間でデータをやりとりすることは基本的にはない(だだし、ノード障害が起きた場合やノード追加をする場合にはやりとりが発生する)。
分散のアルゴリズムは、Key10のハッシュ値を用いるため、複数ノード1間で調整する必要はない。例えば、表形式と比較する。表を列あるいは行により分割して、ノード1に分散配置する。表中のあるセル(カラムとローで特定される)の値を変更するだけであれば、そのデータを持つノード1だけで、処理が閉じる。
しかし、表自体の行を増やす場合、あるいは、列により分散配置している場合には、列のノード1に対して処理をする必要がある。n行×m列の表に対して、m列に対応するn個のノードを分散配置している場合、(n+1)行とした場合、m列のノードはそれぞれ1行増加した分の処理が必要となる。
また、現在のリレーショナルデータベース(RDB)では、大きな表を小さな表に分割し(正規化という)、インデックスを作成し、クエリー(Query)に対して、効率的に応答できるようにしている。インデックスで分割された小さな表を検索し、小さな表を検索する。このため、一つのデータが複数の表にまたがって存在する。こうなると、RDBでは、分散配置しても、なかなかスケーラビリティを出すことは難しい。
図3は、本実施形態におけるKey−Valueストレージにおける分散の例として、Key−Valueストレージサーバ機能5A〜5Dの計4つのノードに対して分散している例を示している。
Key−Valueストレージクライアント機能7は、Key10のハッシュ値の範囲により、どのKey−Valueストレージサーバ機能5がアイテム12(KeyとValueのセット)を持っているかを特定し、ターゲットとして特定されたKey−Valueストレージサーバ機能5に対して、Get/Putを行う。図3に示す例では、Keyのハッシュ関数Hash(Key)が0<Hash(Key)≦Aであれば、アイテム12(KeyとValueのセット)は、Key−Valueストレージサーバ機能5A(サーバA)、A<Hash(Key)≦Bであれば、アイテム12(KeyとValueのセット)はKey−Valueストレージサーバ機能5B(サーバB)、B<Hash(Key)≦Cであれば、アイテム12(KeyとValueのセット)は、Key−Valueストレージサーバ機能5C(サーバC)、C<Hash(Key)≦Dであれば、アイテム12(KeyとValueのセット)はKey−Valueストレージサーバ機能5D(サーバD)に保持されていることになる。
Key−Valueストレージクライアント機能7が複数存在する場合でも、Key10から対応するKey−Valueストレージサーバ機能5を特定するハッシュ関数が共有されていればよい。このように、Key−Valueストレージサーバ機能5は独立しており、互いにデータをやりとりすることはないため、ノード1を増やしていけば性能がスケーラブルに向上する。
前述したように、メモリ2に保存するだけでは信頼性のあるストレージとはいえない。そこで、メモリ2だけでなく、ディスク3にもデータを保存することになる。普通にやるとアイテム12が変更されるごとに、ディスク3に書き込み、書き込みが確認できてから応答を返す(同期型)。
しかし、これでは、ライトスルー(Write−through)キャッシュ(CPUがメモリに書き込むと同時にキャッシュに書き込み方式)と同じであり、メモリ2を使うメリットが無くなる。
そこで、本実施形態では、図4に模式的に示すように、Key−Valueストレージを2段階の間接参照構成としている。
1段階目のアイテム12Aは、Key10とValue11のハッシュ値(=Hash(Value)13と表記する)である(アイテム12A=<Key,Hash(Value)>)。
2段階目のアイテム12Bは、Hash(Value)13とValue11である(アイテム12B=<Hash(Value),V>)。Hash(Value)13は長くても数十バイトの固定長となる。つまり、まとめると以下のようになる。
1段目:<Key、Hash(Value)>
2段目:<Hash(Value)、Value>
これにより、1段階目のアイテム12Aのサイズを小さくすることができる。例えば代表的なハッシュアルゴリズムであるSHA(Secure Hash Algorithm)−1は20バイト長である。多くのストレージではブロックサイズを4Kバイトとしているため、SHA−1にすると、約20分の1のサイズになる。
図8は、図4に模式的に示したKey−Valueストレージにおける2段階の間接参照を、分散ストレージシステムのKey−Valueストレージサーバと関連させて模式的に示す図である。Key−ValueストレージサーバAは、ハッシュ値Hash(Key)によって選択され、1段目:<Key、Hash(Value)>を格納する。この場合、<Key、Hash(Value)>は、Key−Valueストレージ用メモリ4(図1参照)への書き込みに同期して、ディスク3に書き込む(同期レプリケーション)。Key−ValueストレージサーバBは、Hash(Value)13の値によって選択され、2段目:<Hash(Value)、Value>をKey−Valueストレージ用メモリ4への書き込み、ディスク3へは非同期で書き込む(非同期レプリケーション)。
次に、本実施形態における、Key−Valueストレージの2段階間接参照におけるREAD/WRITEのフローを説明する。図5は、本実施形態におけるWRITEの処理フローを示す流れ図である。
ディスクに格納されるキーKとバリューVの対であるアイテム<K,V>が与えられる、すなわち、PUT(K,V)命令を受信すると(ステップS1)、まず、Vからハッシュ計算を行い、Hash(V)を求める(ステップS2)。
そして、PUT(K,Hash(V))、PUT(Hash(V)、V)、すなわちアイテム12A(<K、Hash(V)>)と、アイテム12B(<Hash(V)、V>)をPutする(ステップS3)。アイテム12A(<K、Hash(V)>)と、アイテム12B(<Hash(V)、V>を、Key−Valueストレージサーバ機能5(図1参照)のそれぞれのKey−Valueストレージ用メモリ4へ書き込む。この2つのアイテム12のKey−Valueストレージ用メモリ4への格納は並列で行うことができる。アイテム12A(<K、Hash(V)>)は同期方式でディスク3に格納する。
アイテム12A(<K、Hash(V)>)のPut応答が返ってきた時点で、書き込み完了応答を返す(ステップS4)。アイテム12Bは、ディスク3に非同期に格納する。
図6は、本実施形態におけるREADの処理フローを示す流れ図である。
GET(K)命令を受信する(ステップS11)、GET(K)命令を実行し、戻り値をHash(V)とする(ステップS12)。すなわち読み出し時には、Key10からアイテム12A(<K、Hash(V)>)がGetされる。
アイテム12A(<K、Hash(V)>)が見つかった場合、次にHash(V)からアイテム12B(<Hash(V)、V>)をGetし(Get(Hash(V))を実行)(ステップS14)、戻り値をVとする(ステップS14)。
アイテム12A(<K、Hash(V)>)が見つからなかったときには、1段目のアイテム12AのKeyに対応するHash(V)が存在しないことを意味するため、「Not Found」を返す(ステップS15)。
アイテム12Aが見つかり、アイテム12B(<Hash(V),V>)が見つかったときは(ステップS16のY分岐)、Vを返す。
アイテム12Aが見つかったが、アイテム12B(<Hash(V),V>)が見つからなかったときは(ステップS16のN分岐)、WRITEの途中段階であるか、なんらかのエラーが発生したことを意味するので、エラーを返す(ステップS18)。
つまり、アイテム12B(<Hash(V)、V>)の格納に失敗した場合、またはアイテム12Bが格納されるより前にシステム障害が起きた場合には、読み出し時にアイテム12BがGetできないので、データの書き込みに失敗したことがわかる。
高信頼なストレージにおいて、最も信頼度の高いストレージは、書き込み要求に対して、応答が返ってきた書き込みは、必ず、ストレージの内容に反映されている、というものである。ただし、この確実な反映を、ディスクへの保存によって行った場合、結局は、ディスクの応答時間に制限されることになり、メモリを利用する効果が無くなってしまう。
そこで、メモリ上のデータのディスクへの保存については非同期で行う方法が考えられる。しかし、メモリ上のデータのディスクへの保存を非同期で行うと、ディスクに保存される前に障害が起きた場合に、データがディスクに書き込まれない状態になる。
さらに問題なのは、この状態において、メモリ上のデータのうち、どのデータがディスクに書き込まれなかったのかが判断できない、ということである。つまり、どのデータが正しいのかがわからないということになり、データ全体が信用できないということになる。
これに対して、本実施形態によれば、メモリ上のデータのディスクへの書き込みが正常に行われたか否かを検出することができる。つまり、どのデータが正しいかがわかる。このように、データ本体よりも、はるかにデータ量の小さいハッシュ値をディスクに保存しておくだけで、データの信頼性を高めることができる。
上記した実施形態の具体例を説明する。図9は、本発明の一実施形態のPut(K、V)命令(上記PUT(K,V)と等価)を説明する図である。図10は、本発明の一実施形態のGet(K)命令(上記GET(K))と等価)を説明する図である。Key−Valueストレージクライアント機能7は、キャッシュ管理部71と、キャッシュメモリ72と、Hash計算部73と、サーバインタフェース(I/F)部74と、サーバ検索部75を備えている。Key−Valueストレージサーバ機能5A、5Bは、サーバ管理部51と、メモリ4と、ハードディスク3を備えている。なお、図9、図10において、○で囲んだ数字は、以下の処理番号に対応する。
はじめに、Put命令について説明する。図9を参照すると、
(1)アプリケーション6からPut(K,V)命令がKey−Valueストレージクライアント機能7に発行される。
(2)キャッシュ管理部71は、アプリケーション6からのPut(K,V)命令を受け取り、キーとバリューの対(アイテム)<K,V>をキャッシュメモリ72に格納する。
(3)Hash計算部73は、バリューVのハッシュ値Hash(V)を計算し、キャッシュ管理部71に与える。
(4)キャッシュ管理部71は、Hash計算部73からバリューVのハッシュ値Hash(V)を受け取ると、サーバインタフェース部74に対して格納指示を出す。キャッシュ管理部71は、キーとバリューのハッシュ値の対<K,Hash(V)>は、同期型のPut命令であるPutsync(K,Hash(V))、バリューのハッシュ値とバリューの対<Hash(V)、V>は、非同期型のPut命令であるPutasync(Hash(V)、V)の格納命令を発行する。サーバ検索部75は、<K,Hash(V)>、<Hash(V),V>を格納するサーバを検索する。前述したとおり、サーバ検索部75は、アイテム<K,V>を保存するサーバを、ハッシュ値Hash(K)で特定する。図9の例では、<K,Hash(V)>、<Hash(V),V>を保存するサーバは、Key−Valueストレージサーバ機能5A、5Bとなる。
(5)サーバインタフェース部74は、Putsync(K,Hash(V))を、Key−Valueストレージサーバ機能5Aに出力する。また、サーバインタフェース部74は、Putasync(Hash(V),V)を、Key−Valueストレージサーバ機能5Bに出力する。
(6)同期書き込み命令であるPutsync(K,Hash(V))命令を受けたKey−Valueストレージサーバ機能5Aのサーバ管理部51は、Key−Valueストレージ用メモリ4と、ディスク3に、<K,Hash(V)>を格納する(6−1)。非同期書き込み命令であるPutasync(Hash(V),V)命令を受けたKey−Valueストレージサーバ機能5Bのサーバ管理部51は、まず、Key−Valueストレージ用メモリ4に<Hash(V)、V>を格納する(6−2)。ディスク3へは、Key−Valueストレージ用メモリ4に格納した<Hash(V)、V>を非同期で書き込む(非同期レプリケーション)。
(7)Key−Valueストレージ機能5Aのサーバ管理部51は、Key−Valueストレージ用メモリ4とディスク3への、<K,Hash(V)>の格納が完了すると、Key−Valueストレージクライアント機能7のサーバインタフェース部74に対して、完了応答を返す(7−1)。Key−Valueストレージサーバ機能5Bのサーバ管理部51は、Key−Valueストレージ用メモリ4への、<K,Hash(V)>の格納が完了すると、Key−Valueストレージクライアント機能7のサーバインタフェース部74に、完了応答を返す(7−2)。
(8)Key−Valueストレージクライアント機能7のサーバインタフェース部74は、Key−Valueストレージサーバ機能5A、5Bから完了応答を受け取ると、キャッシュ管理部71に格納完了を返す。
(9)サーバインタフェース部74から格納完了を受けとったキャッシュ管理部71は、アプリケーション6に格納完了を返す。
次に、Get(K)命令について説明する。図10を参照すると、
(1)アプリケーション6からGet(K)命令がKey−Valueストレージクライアント機能7に発行される。
(2)キャッシュ管理部71は、アプリケーション6からのGet(K)命令を受け取り、キャッシュメモリ72をキーKで検索する。キャッシュメモリ72に、キーとバリューの対(アイテム)<K,V>が存在していれば(キャッシュヒット時)、キャッシュメモリ72から読み出したバリューVを応答としてアプリケーション6に返す(Key−Valueストレージ機能5へのアクセスは行われない)。
(3)キャッシュメモリ72にキーとバリューの対<K,V>が存在しない場合(キャッシュミスヒット時)、キャッシュ管理部71は、サーバインタフェース部74に対して検索指示Get(K)を出す。サーバ検索部75は、キーKのハッシュ値を計算し、<K,V>を保持するサーバを、Key−Valueストレージサーバ機能5Aと判断し、サーバインタフェース部74に伝える。
(4)サーバインタフェース部74は、Get(K)を、Key−Valueストレージサーバ機能5Aに発行する。
(5)Key−Valueストレージサーバ機能5Aのサーバ管理部51は、Key−Valueストレージ用メモリ4をキーKで検索し、<K,Hash(V)>のHash(V)を取得する。
(6)Key−Valueストレージサーバ機能5Aのサーバ管理部51は応答<K,Hash(V)>をKey−Valueストレージクライアント機能7に応答として返す。
(7)Key−Valueストレージクライアント機能7のサーバインタフェース部74は、Key−Valueストレージサーバ機能5Aのサーバ管理部51から応答<K,Hash(V)>を受け取る。サーバ検索部75は、Hash(V)をキーとして、そのハッシュ値Hash(Hash(V))から、<Hash(V)、V>を保存するサーバをKey−Valueストレージサーバ機能5Bと特定し、サーバインタフェース部74に伝える。サーバインタフェース部74は、Key−Valueストレージサーバ機能5Bのサーバ管理部51に対して、Get(Hash(V))命令を発行する。
(8)Key−Valueストレージサーバ機能5Bのサーバ管理部51は、Key−Valueストレージ用メモリ4をキーHash(V)で検索し、<Hash(V)、V>のVを取得する。
(9)Key−Valueストレージサーバ機能5Bのサーバ管理部51は、応答として<Hash(V)、V>をKey−Valueストレージクライアント機能7に返す。
(10)Key−Valueストレージクライアント機能7のサーバインタフェース部74は、Key−Valueストレージサーバ機能5Bのサーバ管理部51から応答<Hash(V)、V>を受け取ると、キャッシュ管理部71に応答Vを返す。
(11)Key−Valueストレージクライアント機能7のキャッシュ管理部71は、サーバインタフェース部74から応答Vを受け取ると、アプリケーション6にGet(K)に対する応答Vを返す。キャッシュ管理部71はキャッシュメモリ72に、キーKと取得したバリューVの対<K、V>を格納するようにしてもよい。
<実施形態2>
本実施形態では、コンテンツアドレスストレージ(Contents Address Storage:CAS)を利用する。コンテンツアドレスストレージは、コンテンツアウェアトレージ、コンテンツアーカイブストレージとも呼ばれ、データを、コンテンツ(バイトストリーム)とメタデータからなるオブジェクトとして保存する。その際、オブジェクトを識別するオブジェクトID(「コンテンツアドレス」という)を生成し、要求元(ユーザ、アプリケーション)に返す。ユーザは、オブジェクトIDを使用してオブジェクトの読み出しを行う。特に制限されないが、オブジェクトIDはハッシュアルゴリズム(SHA−1、SHA−256)等が用いられる。メタデータは例えばコンテンツの属性情報(例えば生成時刻、保持期間、コンテンツサイズ、コメント等)からなる。
CASの場合、コンテンツアドレス(CA)がハッシュ値の代わりになる。つまり、バリューVのコンテンツアドレスをCA(V)とすると、
1段目が<K、CA(V)>、
2段目が<CA(V)、V>
となる。2段目はCASそのものである。
しかし、この構成は問題がある。CAはハッシュ値も含むことが多いが、それ以外のフィールドも含んでおり、CASにデータを格納すると、CAが返ってくるようになっている。つまり、CASの応答が返ってくるまでは、1段目の<K、CA(V)>がPutできないことになる。CASは、一般的には、応答時間の早いストレージではない。
そこで、本実施形態では、間接参照をもう1段増やして以下のような構成とする。
1段目:<K、Hash(V)>
2段目:<Hash(V)、CA(V)>
3段目:<CA(V)、V> = CAS
図7は、本実施形態のアイテム12の関連を示す図である。図7において、
1段目(<Key,Hash(Value)>)がアイテム12A、
2段目(<Hash(Value),CA(Value)>)がアイテム12B、
3段目(<CA(Value),Value>)がアイテム12C
となる。アイテム12Cは、CASである。
書き込み時には、1段目のアイテム12A(<K、Hash(V)>)を格納した時点で応答を返すことができるため、高速な応答が可能である。
前記第1の実施形態と同様、2段目と3段目は非同期で格納するが、これらの格納が終わる前に、ディスク等に障害が起きた場合、1段目で得たHash(V)13をKeyにしてGetすると、2段目、もしくは3段目を得ることができないので、データが信頼できないことを検出できる。
CAS構成において、ストレージ内の同じファイルの複数のコピーは保存されない、すなわち、重複保存は行われず保存データ量が削減可能である。
本発明によれば、スケーラブルに拡張可能な分散ストレージにおいて、メモリの高速性を維持しつつ、信頼性を向上させることができる。
本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
特に制限されないが、上記本発明、実施形態の全て又は一部は以下のように付記される。
(付記1)
キーとバリューを対応させて格納し、キーを検索してバリューを得るキー・バリュー型データストア構成のストレージシステムであって、
キーとバリューの対の書き込み要求に対して、
前記バリューのハッシュ値を計算し、
前記キーと、前記バリューのハッシュ値をそれぞれキーとバリューとする第1の対と、
前記バリューのハッシュ値と、前記バリューをそれぞれキーとバリューとする第2の対と、
をそれぞれ記憶装置に格納し、
読み出し要求に対して、
前記読み出し要求で指定されたキーで前記記憶装置を検索して、前記キーと前記第1の対をなすバリューのハッシュ値を取得し、
取得した前記バリューのハッシュ値で前記記憶装置を検索して、前記バリューのハッシュ値と前記第2の対をなすバリューを取得し、その際、前記バリューのハッシュ値で前記記憶装置を検索した結果、前記バリューのハッシュ値と前記第2の対をなすバリューが前記記憶装置に存在しない場合、前記第1の対が前記記憶装置に正常に保存されなかったものと判断する手段を備えた、ストレージシステム。
(付記2)
キーとバリューの対の書き込み要求に対して、
前記第1の対と前記第2の対を、揮発性の記憶装置にそれぞれ保存し、
前記第1の対は、前記揮発性の記憶装置への保存とともに又はその後、前記書き込み要求の応答を要求元に返す前に、不揮発性の記憶装置に保存し、
前記第2の対は、前記揮発性の記憶装置への保存とともに又はその後の任意のタイミングで不揮発性の記憶装置に保存する、付記1記載のストレージシステム。
(付記3)
読み出し時、
前記キーによる検索の結果、前記キーと前記第1の対をなすバリューのハッシュ値が見つかった場合、次に、前記バリューのハッシュ値をキーとして前記記憶装置を検索して前記第2の対のバリューを取得し、
前記キーと前記第1の対をなすバリューのハッシュ値が見つかり、前記バリューのハッシュ値と前記第2の対をなすバリューが見つかった場合、前記バリューを読み出し結果として返し、
前記キーと前記第1の対をなすバリューのハッシュ値が見つからなかったときには、前記キーに対するバリューが存在しないことを示す情報を返し、
前前記キーと前記第1の対をなすバリューのハッシュ値が見つかり、且つ、前記バリューのハッシュ値と前記第2の対をなすバリューが見つからなかったときは、エラーを返す、付記1又は2記載のストレージシステム。
(付記4)
キーとバリューを対にして格納し、キーからバリューを得ることができるデータ構成を持ち、
キーとバリューの書き込み時、前記キーと前記バリューのハッシュ値の第1の対と、前記バリューのハッシュ値と前記バリューの第2の対を、揮発性の記憶装置にそれぞれ格納しておき、
前記第1の対は応答を返す前に、不揮発性の記憶装置に保存し、
前記第2の対は、揮発性の記憶装置に保存しておき、任意のタイミングで不揮発性の記憶装置に保存する手段と、
キーからバリューを得る読み出し時に、前記第1の対からバリューのハッシュ値を得て前記第2の対を読み出す処理において、前記第2の対が存在しないときには、データが正常に格納されなかったと判断する手段を備えた、ストレージシステム。
(付記5)
データ及びメタデータをオブジェクトとして保存するとオブジェクト識別子を生成し該オブジェクト識別子であるコンテンツアドレスを返し、該コンテンツアドレスを用いてオブジェクトにアクセスするコンテンツアドレスストレージ(CAS)を備え、
第1の対をキーとバリューのハッシュ値の対とし、
第2の対を、前記バリューのハッシュ値とバリューの対のかわりに、前記バリューのハッシュ値をキー、前記バリューのコンテンツアドレスをバリューとする対とし、
前記バリューを、前記コンテンツアドレスストレージに保存する、付記1乃至4のいずれか1に記載のストレージシステム。
(付記6)
ネットワーク接続される複数ノードがそれぞれ、付記1乃至5のいずれか1に記載のストレージシステムを備えた分散ストレージシステム。
(付記7)
書き込み時、キーとバリューを対応させて格納し、読み出し時、キーで検索してバリューを得る複数のキー・バリュー型ストレージサーバと、
キーとバリューの対の書き込み要求を受け、
前記バリューのハッシュ値を計算し、
前記キーと前記バリューのハッシュ値をそれぞれキーとバリューとする第1の対と、
前記バリューのハッシュ値と前記バリューをそれぞれキーとバリューとする第2の対と、
を生成し、
前記第1の対のキーとバリューを対応させて第1のキー・バリュー型ストレージサーバに保存し、
前記第2の対のキーとバリューを対応させて第2のキー・バリュー型ストレージサーバに保存するストレージクライアントと、
を備えた、分散ストレージシステム。
(付記8)
前記ストレージクライアントは、キーからバリューを得る読み出し要求を受けると、
前記第1のキー・バリュー型ストレージサーバに対して前記キーで検索して、前記キーと前記第1の対をなす前記バリューのハッシュ値を取得し、
前記第2のキー・バリュー型ストレージサーバに対して前記バリューのハッシュ値で検索して、前記バリューのハッシュ値と前記第2の対をなす前記バリューを取得し、前記検索処理において、前記バリューのハッシュ値と前記バリューの前記第2の対が存在しないときには、前記第1の対が前記第1のキー・バリュー型ストレージサーバに正常に保存されなかったものと判断する、付記7記載の分散ストレージシステム。
(付記9)
前記ストレージクライアントは、前記第1、第2の対のキーのハッシュ値に基づき、前記第1、第2の対のキーとバリューを保存する第1、第2のキー・バリュー型ストレージサーバを決定する、付記7又は8記載の分散ストレージシステム。
(付記10)
前記第1のキー・バリュー型ストレージサーバが、第1の揮発性の記憶装置と第1の不揮発性の記憶装置を備え、
前記第2のキー・バリュー型ストレージサーバが、第2の揮発性の記憶装置と第2の不揮発性の記憶装置を備え、
前記第1のキー・バリュー型ストレージサーバは、前記第1の対のキーとバリューを前記第1の揮発性の記憶装置に保存し、
前記第2のキー・バリュー型ストレージサーバは、前記第2の対のキーとバリューを前記第2の揮発性の記憶装置に保存し、
前記第1のキー・バリュー型ストレージサーバは、書き込み要求に対する応答を返す前に、前記第1の対のキーとバリューを前記第1の不揮発性の記憶装置に保存し、
前記第2のキー・バリュー型ストレージサーバは、前記第2の対のキーとバリューを任意のタイミングで、前記第2の不揮発性の記憶装置に保存する、付記7乃至9のいずれか一に記載の分散ストレージシステム。
(付記11)
前記ストレージクライアントは、キーとバリューの対の書き込み要求を受けて、キーとバリューの対をキャッシュメモリに格納し、
キーからバリューを得る読み出し要求に対して、前記キャッシュメモリに前記キーと、前記キーに対応するバリューが格納されている場合、前記キャッシュメモリから前記キーに対応するバリューを読み出して応答として返す、付記7乃至9のいずれか一に記載の分散ストレージシステム。
(付記12)
キーとバリューを対応させて格納し、キーを検索してバリューを得るキー・バリュー型ストレージのアクセス方法であって、
キーとバリューの対の書き込み要求に対して、
前記バリューのハッシュ値を計算し、
前記キーと、前記バリューのハッシュ値をそれぞれキー、バリューとする第1の対と、
前記バリューのハッシュ値と、前記バリューをそれぞれキー、バリューとする第2の対と、
をそれぞれ記憶装置に格納し、
読み出し要求に対して、
前記読み出し要求で指定されたキーで前記記憶装置を検索して、前記キーと前記第1の対をなすバリューのハッシュ値を取得し、
取得した前記バリューのハッシュ値で前記記憶装置を検索して、前記バリューのハッシュ値と前記第2の対をなすバリューを取得し、その際、前記バリューのハッシュ値で前記記憶装置を検索した結果、前記バリューのハッシュ値と前記第2の対をなすバリューが前記記憶装置に存在しない場合、前記第1の対が前記記憶装置に正常に保存されなかったものと判断する、ストレージアクセス方法。
(付記13)
キーとバリューの対の書き込み要求に対して、
前記第1の対と前記第2の対を、揮発性の記憶装置にそれぞれ保存し、
前記第1の対は、前記揮発性の記憶装置への保存とともに又はその後、前記書き込み要求の応答を要求元に返す前に、不揮発性の記憶装置に保存し、
前記第2の対は、前記揮発性の記憶装置への保存とともに又はその後の任意のタイミングで不揮発性の記憶装置に保存する、付記12記載のストレージアクセス方法。
(付記14)
読み出し時、前記キーによる検索の結果、前記キーと前記第1の対をなすバリューのハッシュ値が見つかった場合、次に、前記バリューのハッシュ値をキーとして前記記憶装置を検索して前記第2の対のバリューを取得し、
前記キーと前記第1の対をなすバリューのハッシュ値が見つかり、前記バリューのハッシュ値と前記第2の対をなすバリューが見つかった場合、前記バリューを読み出し結果として返し、
前記キーと前記第1の対をなすバリューのハッシュ値が見つからなかったときには、前記キーに対するバリューが存在しないことを示す情報を返し、
前前記キーと前記第1の対をなすバリューのハッシュ値が見つかり、且つ、前記バリューのハッシュ値と前記第2の対をなすバリューが見つからなかったときは、エラーを返す、付記12又は13記載のストレージアクセス方法。
(付記15)
キーとバリューを対にして格納し、キーからバリューを得ることができるデータ構成を持ち、
キーとバリューの書き込み時、前記キーと前記バリューのハッシュ値の第1の対と、前記バリューのハッシュ値と前記バリューの第2の対を揮発性の記憶装置にそれぞれ格納しておき、
前記第1の対は、応答を返す前に、不揮発性の記憶装置に保存し、
前記第2の対は、揮発性の記憶装置に保存しておき、任意のタイミングで不揮発性の記憶装置に保存し、
キーからバリューを得る読み出し処理時に、前記第1の対からバリューのハッシュ値を得て前記第2の対を読み出す処理において、前記第2の対が存在しないときには、データが正常に格納されなかったと判断する、ストレージアクセス方法。
(付記16)
データ及びメタデータをオブジェクトとして保存するとオブジェクト識別子を生成し該オブジェクト識別子であるコンテンツアドレスを返し、該コンテンツアドレスを用いてオブジェクトにアクセスするコンテンツアドレスストレージ(CAS)に、キーとバリューの対の前記バリューを保存し、
第1の対をキーとバリューのハッシュ値の対とし、
第2の対を、前記バリューのハッシュ値とバリューの対のかわりに、前記バリューのハッシュ値をキー、前記バリューのコンテンツアドレスをバリューとする対とする、付記12乃至15のいずれか一に記載のストレージアクセス方法。
(付記17)
アプリケーションからキーとバリューの対の書き込み要求を受けたストレージクライアントは、
前記バリューのハッシュ値を計算し、
前記キーと前記バリューのハッシュ値をそれぞれキーとバリューとする第1の対と、
前記バリューのハッシュ値と前記バリューをそれぞれキーとバリューとする第2の対と、
を生成し、
前記第1の対のキーとバリューを対応させて第1のキー・バリュー型ストレージサーバに保存し、
前記第2の対のキーとバリューを対応させて第2のキー・バリュー型ストレージサーバに保存する、分散ストレージアクセス方法。
(付記18)
前記ストレージクライアントは、アプリケーションからキーを指定した読み出し要求を受けると、
前記第1のキー・バリュー型ストレージサーバに対して前記キーによる検索を行い、前記キーと前記第1の対をなす前記バリューのハッシュ値を取得し、
前記第2のキー・バリュー型ストレージサーバに対して前記バリューのハッシュ値による検索を行い、前記バリューのハッシュ値と前記第2の対をなす前記バリューを取得する処理を実行し、その際、前記検索処理において、前記バリューのハッシュ値と前記バリューの前記第2の対が存在しないときには、前記第1の対が前記第1のキー・バリュー型ストレージサーバに正常に保存されなかったものと判断する、付記17記載の分散ストレージアクセス方法。
(付記19)
前記ストレージクライアントは、前記第1、第2の対のキーのハッシュ値に基づき、前記第1、第2の対のキーとバリューを保存する第1、第2のキー・バリュー型ストレージサーバを決定する、付記17又は18記載の分散ストレージアクセス方法。
(付記20)
前記第1のキー・バリュー型ストレージサーバが、第1の揮発性の記憶装置と第1の不揮発性の記憶装置を備え、
前記第2のキー・バリュー型ストレージサーバが、第2の揮発性の記憶装置と第2の不揮発性の記憶装置を備え、
前記第1、第2のキー・バリュー型ストレージサーバは、
前記第1の対のキーとバリューを前記第1の揮発性の記憶装置に、
前記第2の対のキーとバリューを前記第2の揮発性の記憶装置に、それぞれ保存し、
前記第1のキー・バリュー型ストレージサーバは、書き込み要求に対する応答を返す前に、前記第1の対のキーとバリューを前記第1の不揮発性の記憶装置に保存し、
前記第2のキー・バリュー型ストレージサーバは、前記第2の対のキーとバリューを任意のタイミングで前記第2の不揮発性の記憶装置に保存する、付記17乃至19のいずれか一に記載の分散ストレージアクセス方法。
(付記21)
キーとバリューを対応させて格納し、キーを検索してバリューを得るキー・バリュー型データストア構成のストレージシステムを構成するコンピュータに、
キーとバリューの対の書き込み要求に対して、
前記バリューのハッシュ値を計算する処理と、
前記キーと、前記バリューのハッシュ値をそれぞれキー、バリューとする第1の対と、
前記バリューのハッシュ値と、前記バリューをそれぞれキー、バリューとする第2の対と、
をそれぞれ記憶装置に格納する処理と、
読み出し要求に対して、
前記読み出し要求で指定されたキーで前記記憶装置を検索して、前記キーと前記第1の対をなすバリューのハッシュ値を取得する処理と、
取得した前記バリューのハッシュ値で前記記憶装置を検索して、前記バリューのハッシュ値と前記第2の対をなすバリューを取得し、その際、前記バリューのハッシュ値で前記記憶装置を検索した結果、前記バリューのハッシュ値と前記第2の対をなすバリューが前記記憶装置に存在しない場合、前記第1の対が前記記憶装置に正常に保存されなかったものと判断する、処理と、
を実行させるプログラム。
(付記22)
キーとバリューの対の書き込み要求に対して、
前記第1の対と前記第2の対を、揮発性の記憶装置にそれぞれ保存する処理と、
前記第1の対は、前記揮発性の記憶装置への保存とともに又はその後、前記書き込み要求の応答を要求元に返す前に、不揮発性の記憶装置に保存する処理と、
前記第2の対は、前記揮発性の記憶装置への保存とともに又はその後の任意のタイミングで不揮発性の記憶装置に保存するする処理と、
を前記コンピュータに実行させる付記21記載のプログラム。
(付記23)
読み出し時、
前記キーによる検索の結果、前記キーと前記第1の対をなすバリューのハッシュ値が見つかった場合、次に、前記バリューのハッシュ値をキーとして前記記憶装置を検索して前記第2の対のバリューを取得する処理と、
前記キーと前記第1の対をなすバリューのハッシュ値が見つかり、前記バリューのハッシュ値と前記第2の対をなすバリューが見つかった場合、前記バリューを読み出し結果として返す処理と、
前記キーと前記第1の対をなすバリューのハッシュ値が見つからなかったときには、前記キーに対するバリューが存在しないことを示す情報を返す処理と、
前前記キーと前記第1の対をなすバリューのハッシュ値が見つかり、且つ、前記バリューのハッシュ値と前記第2の対をなすバリューが見つからなかったときは、エラーを返す処理と、
を前記コンピュータに実行させる付記21又は22記載のプログラム。
(付記24)
キーとバリューを対にして格納し、キーからバリューを得ることができるデータ構成を備えたストレージシステムを構成するコンピュータに、
キーとバリューのハッシュ値の第1の対と、
バリューのハッシュ値とバリューの第2の対を格納しておき、
前記第1の対は応答を返す前に、不揮発性の第1の記憶装置に保存し、
前記第2の対は、揮発性の第2の記憶装置に保存しておき、任意のタイミングで前記第1の記憶装置に保存し、
キーからバリューを得る読み出し処理時に、前記第1の対からバリューのハッシュ値を得て前記第2の対を読み出す処理において、前記第2の対が存在しないときには、データが前記第1の記憶装置に正常に格納されなかったと判断する処理を実行させるプログラム。
(付記25)
データ及びメタデータをオブジェクトとして保存するとオブジェクト識別子を生成し該オブジェクト識別子であるコンテンツアドレスを返し、該コンテンツアドレスを用いてオブジェクトにアクセスするコンテンツアドレスストレージ(CAS)に、キーとバリューの対の前記バリューを保存し、
第1の対をキーとバリューのハッシュ値の対とし、
第2の対を、前記バリューのハッシュ値とバリューの対のかわりに、前記バリューのハッシュ値をキー、前記バリューのコンテンツアドレスをバリューとする対とする処理を前記コンピュータに実行させる付記21乃至24のいずれか一に記載のプログラム。
1 ノード
2 メモリ
3 ハードディスク(ディスク)
4 Key−Valueストレージ用メモリ
5、5A、5B、5C、5D Key−Valueストレージサーバ機能
6 アプリケーション
7 Key−Valueストレージクライアント機能
8 ネットワーク
10 Key
11 Value
12 アイテム
12A アイテム
12B アイテム
12C アイテム
13 Hash(Value)
14 CA(Value)
51 サーバ管理部
71 キャッシュ管理部
72 キャッシュメモリ
73 Hash計算部
74 サーバインタフェース部
75 サーバ検索部

Claims (15)

  1. キーとバリューを対応させて格納し、キーを検索してバリューを得るキー・バリュー型データストア構成のストレージシステムであって、
    キーとバリューの対の書き込み要求に対して、
    前記バリューのハッシュ値を計算し、
    前記キーと、前記バリューのハッシュ値をそれぞれキーとバリューとする第1の対と、
    前記バリューのハッシュ値と、前記バリューをそれぞれキーとバリューとする第2の対と、
    をそれぞれ記憶装置に格納し、
    読み出し要求に対して、
    前記読み出し要求で指定されたキーで前記記憶装置を検索して、前記キーと前記第1の対をなすバリューのハッシュ値を取得し、
    取得した前記バリューのハッシュ値で前記記憶装置を検索して、前記バリューのハッシュ値と前記第2の対をなすバリューを取得し、その際、前記バリューのハッシュ値で前記記憶装置を検索した結果、前記バリューのハッシュ値と前記第2の対をなすバリューが前記記憶装置に存在しない場合、前記第1の対が前記記憶装置に正常に保存されなかったものと判断する手段を備えた、ストレージシステム。
  2. キーとバリューの対の書き込み要求に対して、
    前記第1の対と前記第2の対を、揮発性の記憶装置にそれぞれ保存し、
    前記第1の対は、前記揮発性の記憶装置への保存とともに又はその後、前記書き込み要求の応答を要求元に返す前に、不揮発性の記憶装置に保存し、
    前記第2の対は、前記揮発性の記憶装置への保存とともに又はその後の任意のタイミングで不揮発性の記憶装置に保存する、請求項1記載のストレージシステム。
  3. 読み出し時、
    前記キーによる検索の結果、前記キーと前記第1の対をなすバリューのハッシュ値が見つかった場合、次に、前記バリューのハッシュ値をキーとして前記記憶装置を検索して前記第2の対のバリューを取得し、
    前記キーと前記第1の対をなすバリューのハッシュ値が見つかり、前記バリューのハッシュ値と前記第2の対をなすバリューが見つかった場合、前記バリューを読み出し結果として返し、
    前記キーと前記第1の対をなすバリューのハッシュ値が見つからなかったときには、前記キーに対するバリューが存在しないことを示す情報を返し、
    前前記キーと前記第1の対をなすバリューのハッシュ値が見つかり、且つ、前記バリューのハッシュ値と前記第2の対をなすバリューが見つからなかったときは、エラーを返す、請求項1又は2記載のストレージシステム。
  4. キーとバリューの書き込み時、前記キーと前記バリューのハッシュ値の前記第1の対と、前記バリューのハッシュ値と前記バリューの前記第2の対を、揮発性の記憶装置にそれぞれ格納しておき、
    前記第1の対は応答を返す前に、不揮発性の記憶装置に保存し、
    前記第2の対は、揮発性の記憶装置に保存しておき、任意のタイミングで不揮発性の記憶装置に保存する手段と、
    キーからバリューを得る読み出し時に、前記第1の対からバリューのハッシュ値を得て前記第2の対を読み出す処理において、前記第2の対が存在しないときには、データが正常に格納されなかったと判断する手段を備えた、請求項1記載のストレージシステム。
  5. データ及びメタデータをオブジェクトとして保存するとオブジェクト識別子を生成し該オブジェクト識別子であるコンテンツアドレスを返し、該コンテンツアドレスを用いてオブジェクトにアクセスするコンテンツアドレスストレージ(CAS)を備え、
    第1の対をキーとバリューのハッシュ値の対とし、
    第2の対を、前記バリューのハッシュ値とバリューの対のかわりに、前記バリューのハッシュ値をキー、前記バリューのコンテンツアドレスをバリューとする対とし、
    前記バリューを、前記コンテンツアドレスストレージに保存する、請求項1乃至3のいずれか1項に記載のストレージシステム。
  6. ネットワークに接続され、請求項1乃至5のいずれか1項記載のストレージシステムを備えたノードを複数有する分散ストレージシステム。
  7. 前記ノードが、書き込み時、キーとバリューを対応させて格納し、読み出し時、キーで検索してバリューを得る複数のキー・バリュー型ストレージサーバと、
    キーとバリューの対の書き込み要求を受け、
    前記バリューのハッシュ値を計算し、
    前記キーと前記バリューのハッシュ値をそれぞれキーとバリューとする第1の対と、
    前記バリューのハッシュ値と前記バリューをそれぞれキーとバリューとする第2の対と、
    を生成し、
    前記第1の対のキーとバリューを対応させて第1のキー・バリュー型ストレージサーバに保存し、
    前記第2の対のキーとバリューを対応させて第2のキー・バリュー型ストレージサーバに保存するストレージクライアントと、
    を備えた、請求項6記載の分散ストレージシステム。
  8. 前記ストレージクライアントは、キーからバリューを得る読み出し要求を受けると、
    前記第1のキー・バリュー型ストレージサーバに対して前記キーで検索して、前記キーと前記第1の対をなす前記バリューのハッシュ値を取得し、
    前記第2のキー・バリュー型ストレージサーバに対して前記バリューのハッシュ値で検索して、前記バリューのハッシュ値と前記第2の対をなす前記バリューを取得し、前記検索処理において、前記バリューのハッシュ値と前記バリューの前記第2の対が存在しないときには、前記第1の対が前記第1のキー・バリュー型ストレージサーバに正常に保存されなかったものと判断する、請求項7記載の分散ストレージシステム。
  9. 前記ストレージクライアントは、前記第1、第2の対のキーのハッシュ値に基づき、前記第1、第2の対のキーとバリューを保存する第1、第2のキー・バリュー型ストレージサーバを決定する、請求項7又は8記載の分散ストレージシステム。
  10. 前記第1のキー・バリュー型ストレージサーバが、第1の揮発性の記憶装置と第1の不揮発性の記憶装置を備え、
    前記第2のキー・バリュー型ストレージサーバが、第2の揮発性の記憶装置と第2の不揮発性の記憶装置を備え、
    前記第1のキー・バリュー型ストレージサーバは、前記第1の対のキーとバリューを前記第1の揮発性の記憶装置に保存し、
    前記第2のキー・バリュー型ストレージサーバは、前記第2の対のキーとバリューを前記第2の揮発性の記憶装置に保存し、
    前記第1のキー・バリュー型ストレージサーバは、書き込み要求に対する応答を返す前に、前記第1の対のキーとバリューを前記第1の不揮発性の記憶装置に保存し、
    前記第2のキー・バリュー型ストレージサーバは、前記第2の対のキーとバリューを任意のタイミングで、前記第2の不揮発性の記憶装置に保存する、請求項7乃至9のいずれか1項に記載の分散ストレージシステム。
  11. 前記ストレージクライアントは、キーとバリューの対の書き込み要求を受けて、キーとバリューの対をキャッシュメモリに格納し、
    キーからバリューを得る読み出し要求に対して、前記キャッシュメモリに前記キーと、前記キーに対応するバリューが格納されている場合、前記キャッシュメモリから前記キーに対応するバリューを読み出して応答として返す、請求項7乃至9のいずれか1項に記載の分散ストレージシステム。
  12. キーとバリューを対応させて格納し、キーを検索してバリューを得るキー・バリュー型ストレージのアクセス方法であって、
    キーとバリューの対の書き込み要求に対して、
    前記バリューのハッシュ値を計算し、
    前記キーと、前記バリューのハッシュ値をそれぞれキー、バリューとする第1の対と、
    前記バリューのハッシュ値と、前記バリューをそれぞれキー、バリューとする第2の対と、
    をそれぞれ記憶装置に格納し、
    読み出し要求に対して、
    前記読み出し要求で指定されたキーで前記記憶装置を検索して、前記キーと前記第1の対をなすバリューのハッシュ値を取得し、
    取得した前記バリューのハッシュ値で前記記憶装置を検索して、前記バリューのハッシュ値と前記第2の対をなすバリューを取得し、その際、前記バリューのハッシュ値で前記記憶装置を検索した結果、前記バリューのハッシュ値と前記第2の対をなすバリューが前記記憶装置に存在しない場合、前記第1の対が前記記憶装置に正常に保存されなかったものと判断する、ストレージアクセス方法。
  13. キーとバリューの対の書き込み要求に対して、
    前記第1の対と前記第2の対を、揮発性の記憶装置にそれぞれ保存し、
    前記第1の対は、前記揮発性の記憶装置への保存とともに又はその後、前記書き込み要求の応答を要求元に返す前に、不揮発性の記憶装置に保存し、
    前記第2の対は、前記揮発性の記憶装置への保存とともに又はその後の任意のタイミングで不揮発性の記憶装置に保存する、請求項12記載のストレージアクセス方法。
  14. キーとバリューを対応させて格納し、キーを検索してバリューを得るキー・バリュー型データストア構成のストレージシステムを構成するコンピュータに、
    キーとバリューの対の書き込み要求に対して、
    前記バリューのハッシュ値を計算する処理と、
    前記キーと、前記バリューのハッシュ値をそれぞれキー、バリューとする第1の対と、
    前記バリューのハッシュ値と、前記バリューをそれぞれキー、バリューとする第2の対と、
    をそれぞれ記憶装置に格納する処理と、
    読み出し要求に対して、
    前記読み出し要求で指定されたキーで前記記憶装置を検索して、前記キーと前記第1の対をなすバリューのハッシュ値を取得する処理と、
    取得した前記バリューのハッシュ値で前記記憶装置を検索して、前記バリューのハッシュ値と前記第2の対をなすバリューを取得し、その際、前記バリューのハッシュ値で前記記憶装置を検索した結果、前記バリューのハッシュ値と前記第2の対をなすバリューが前記記憶装置に存在しない場合、前記第1の対が前記記憶装置に正常に保存されなかったものと判断する、処理と、
    を実行させるプログラム。
  15. キーとバリューの対の書き込み要求に対して、
    前記第1の対と前記第2の対を、揮発性の記憶装置にそれぞれ保存する処理と、
    前記第1の対は、前記揮発性の記憶装置への保存とともに又はその後、前記書き込み要求の応答を要求元に返す前に、不揮発性の記憶装置に保存する処理と、
    前記第2の対は、前記揮発性の記憶装置への保存とともに又はその後の任意のタイミングで不揮発性の記憶装置に保存するする処理と、
    を前記コンピュータに実行させる請求項14記載のプログラム。
JP2011507250A 2009-03-31 2010-03-31 ストレージシステムとストレージアクセス方法とプログラム Active JP5321682B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011507250A JP5321682B2 (ja) 2009-03-31 2010-03-31 ストレージシステムとストレージアクセス方法とプログラム

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2009086634 2009-03-31
JP2009086634 2009-03-31
PCT/JP2010/055817 WO2010114006A1 (ja) 2009-03-31 2010-03-31 ストレージシステムとストレージアクセス方法とプログラム
JP2011507250A JP5321682B2 (ja) 2009-03-31 2010-03-31 ストレージシステムとストレージアクセス方法とプログラム

Publications (2)

Publication Number Publication Date
JPWO2010114006A1 JPWO2010114006A1 (ja) 2012-10-11
JP5321682B2 true JP5321682B2 (ja) 2013-10-23

Family

ID=42828295

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011507250A Active JP5321682B2 (ja) 2009-03-31 2010-03-31 ストレージシステムとストレージアクセス方法とプログラム

Country Status (3)

Country Link
US (1) US8635402B2 (ja)
JP (1) JP5321682B2 (ja)
WO (1) WO2010114006A1 (ja)

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011072178A1 (en) * 2009-12-09 2011-06-16 Bizanga Ltd. Probabilistic offload engine for distributed hierarchical object storage devices
JP5591406B2 (ja) * 2010-09-02 2014-09-17 エヌイーシー ラボラトリーズ アメリカ インク ロー・レイテンシ内容アドレス記憶装置
WO2012141115A1 (ja) * 2011-04-11 2012-10-18 Quadrac株式会社 データベース装置、データベースシステム
JP2013004067A (ja) * 2011-06-22 2013-01-07 Nippon Telegr & Teleph Corp <Ntt> ストレージシステム、ストレージ制御方法、プログラム
JP5524144B2 (ja) 2011-08-08 2014-06-18 株式会社東芝 key−valueストア方式を有するメモリシステム
JP5762878B2 (ja) * 2011-08-08 2015-08-12 株式会社東芝 key−valueストアを有するメモリシステム
WO2013061680A1 (ja) * 2011-10-26 2013-05-02 インターナショナル・ビジネス・マシーンズ・コーポレーション 情報処理装置、データ・アクセス方法およびプログラム
US9286241B2 (en) * 2012-02-21 2016-03-15 Microchip Technology Incorporated Cryptographic transmission system
US10157051B2 (en) * 2012-03-02 2018-12-18 International Business Machines Corporation Upgrading devices in a dispersed storage network
US8370567B1 (en) * 2012-03-23 2013-02-05 DSSD, Inc. Storage system with self describing data
JP5597666B2 (ja) * 2012-03-26 2014-10-01 株式会社東芝 半導体記憶装置、情報処理システムおよび制御方法
US9674296B2 (en) * 2012-07-09 2017-06-06 University Of Southern California Preventing race condition from causing stale data items in cache
US9336334B2 (en) * 2013-05-17 2016-05-10 Bigobject, Inc. Key-value pairs data processing apparatus and method
US9684672B2 (en) * 2013-07-01 2017-06-20 Empire Technology Development Llc System and method for data storage
JP6281225B2 (ja) * 2013-09-30 2018-02-21 日本電気株式会社 情報処理装置
JP6160958B2 (ja) * 2013-10-02 2017-07-12 Necソリューションイノベータ株式会社 負荷分散システム、負荷分散方法および負荷分散プログラム
JP5628397B2 (ja) * 2013-10-29 2014-11-19 株式会社東芝 ストレージ装置
JP6034512B2 (ja) * 2013-12-25 2016-11-30 株式会社日立製作所 計算機システム及びデータ管理方法
JP5646775B2 (ja) * 2014-01-15 2014-12-24 株式会社東芝 key−valueストア方式を有するメモリシステム
JP5832592B1 (ja) * 2014-06-02 2015-12-16 三菱電機株式会社 データ管理装置
JP6519111B2 (ja) 2014-07-18 2019-05-29 富士通株式会社 データ処理制御方法、データ処理制御プログラムおよびデータ処理制御装置
US9823841B2 (en) 2014-09-15 2017-11-21 Seagate Technology Llc Associating keys with data and compute objects in a storage compute device
KR20160056380A (ko) * 2014-11-10 2016-05-20 삼성전자주식회사 스토리지 장치 및 스토리지 장치의 동작 방법
JP2016206757A (ja) * 2015-04-16 2016-12-08 富士通株式会社 分散処理プログラム、分散処理方法および情報処理装置
US10891264B2 (en) * 2015-04-30 2021-01-12 Vmware, Inc. Distributed, scalable key-value store
JP6238931B2 (ja) * 2015-05-14 2017-11-29 ヤフー株式会社 情報処理装置、プログラム、情報処理システム及びデータ管理方法
CN106484691B (zh) 2015-08-24 2019-12-10 阿里巴巴集团控股有限公司 移动终端的数据存储方法和装置
CN105306457B (zh) * 2015-09-30 2018-11-20 努比亚技术有限公司 数据缓存装置及方法
JP6034467B2 (ja) * 2015-10-23 2016-11-30 株式会社東芝 システム
US10437802B2 (en) * 2016-03-07 2019-10-08 Western Digital Technologies, Inc. Single IO operation integer-value database
JP6542152B2 (ja) 2016-03-29 2019-07-10 東芝メモリ株式会社 オブジェクトストレージ、コントローラおよびプログラム
US11481126B2 (en) * 2016-05-24 2022-10-25 Micron Technology, Inc. Memory device error based adaptive refresh rate systems and methods
CN108460049B (zh) * 2017-02-21 2021-10-19 阿里巴巴集团控股有限公司 一种确定信息类别的方法和系统
US10754995B2 (en) * 2017-10-05 2020-08-25 Zadara Storage, Inc. Consistency across key value stores with shared journals
KR102545167B1 (ko) 2017-11-23 2023-06-19 삼성전자주식회사 키-밸류 스토리지 장치 및 상기 키-밸류 스토리지 장치의 동작 방법
CN110275838B (zh) * 2018-03-16 2021-08-10 北京忆芯科技有限公司 Kv存储设备的地址转换及其加速器
US11019060B2 (en) 2018-11-01 2021-05-25 Giocasters, Llc Methods and systems for providing a customized network
US10936501B2 (en) 2019-02-01 2021-03-02 Kinaxis Inc. Cache management for search optimization
US11556470B2 (en) 2021-02-02 2023-01-17 Kinaxis Inc. Cache management for search optimization
US11775433B2 (en) 2019-02-01 2023-10-03 Kinaxis Inc. Cache management for search optimization
EP3669281B1 (en) * 2019-07-11 2024-04-03 Advanced New Technologies Co., Ltd. Shared blockchain data storage
WO2019179539A2 (en) 2019-07-11 2019-09-26 Alibaba Group Holding Limited Shared blockchain data storage
WO2019179540A2 (en) 2019-07-11 2019-09-26 Alibaba Group Holding Limited Shared blockchain data storage
CN110650182B (zh) * 2019-08-30 2023-03-07 深圳壹账通智能科技有限公司 网络缓存方法、装置、计算机设备及存储介质
WO2021070234A1 (ja) * 2019-10-08 2021-04-15 日本電信電話株式会社 データアクセス方法、データ記憶システム、サーバ装置、クライアント装置、およびプログラム
US11283621B1 (en) * 2019-11-13 2022-03-22 Worldpay, Llc Methods and systems for enhanced endpoint identity validation in electronic transactions
CN110968267B (zh) * 2019-11-15 2024-05-31 北京乐我无限科技有限责任公司 数据管理方法、装置、服务器及系统
US20220358096A1 (en) * 2021-05-06 2022-11-10 Nutanix, Inc. Management of consistent indexes without transactions
KR102660101B1 (ko) * 2021-07-08 2024-04-23 단국대학교 산학협력단 키-값 스토리지에서의 키-값 쌍 그룹화 장치 및 방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007063945A1 (ja) * 2005-12-02 2007-06-07 International Business Machines Corporation データベースに対するアクセスを効率化するシステム、および、その方法
JP2009020757A (ja) * 2007-07-12 2009-01-29 Toshiba Corp データ登録装置、データ登録方法及びプログラム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8397051B2 (en) * 2009-02-23 2013-03-12 Autonomy, Inc. Hybrid hash tables
US8037076B2 (en) * 2009-05-11 2011-10-11 Red Hat, Inc. Federated indexing from hashed primary key slices
US8161244B2 (en) * 2009-05-13 2012-04-17 Microsoft Corporation Multiple cache directories

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007063945A1 (ja) * 2005-12-02 2007-06-07 International Business Machines Corporation データベースに対するアクセスを効率化するシステム、および、その方法
JP2009020757A (ja) * 2007-07-12 2009-01-29 Toshiba Corp データ登録装置、データ登録方法及びプログラム

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
CSND200800724007; 正野 勇嗣: '第1章 memcached入門 しくみと導入方法を学ぶ' WEB+DB PRESS 第47巻, 20081201, P. 60-64, (株)技術評論社 *
CSND200900318003; '"汎用から専用へ"' 日経コンピュータ 第726号, 20090318, P. 40-47, 日経BP社 *
JPN6013029157; 正野 勇嗣: '第1章 memcached入門 しくみと導入方法を学ぶ' WEB+DB PRESS 第47巻, 20081201, P. 60-64, (株)技術評論社 *
JPN6013029158; '"汎用から専用へ"' 日経コンピュータ 第726号, 20090318, P. 40-47, 日経BP社 *

Also Published As

Publication number Publication date
US8635402B2 (en) 2014-01-21
US20120036317A1 (en) 2012-02-09
JPWO2010114006A1 (ja) 2012-10-11
WO2010114006A1 (ja) 2010-10-07

Similar Documents

Publication Publication Date Title
JP5321682B2 (ja) ストレージシステムとストレージアクセス方法とプログラム
US9262458B2 (en) Method and system for dynamically partitioning very large database indices on write-once tables
CN103345472B (zh) 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法
US9305040B2 (en) Efficient B-tree data serialization
US10769075B2 (en) Storage of database dictionary structures in non-volatile memory
CN109977111A (zh) 采用基于散列和基于树的键-值数据结构的数据管理系统
CN103530387A (zh) 一种hdfs针对小文件的改进方法
JP2023504174A (ja) データベーススキーマのハッシュツリーの生成
WO2025236959A1 (zh) 分布式数据库的数据备份、恢复、查询方法及装置
CN113535670B (zh) 一种虚拟化资源镜像存储系统及其实现方法
CN102682110A (zh) 面向大规模空间信息的高性能缓存设计方法
WO2018205151A1 (zh) 数据更新方法和存储装置
US9336135B1 (en) Systems and methods for performing search and complex pattern matching in a solid state drive
WO2022048356A1 (zh) 一种云平台的数据处理方法、系统、电子设备及存储介质
CN103473337A (zh) 一种分布式存储系统中处理面向海量目录和文件的方法
US10642745B2 (en) Key invalidation in cache systems
WO2023093091A1 (zh) 数据存储系统、智能网卡及计算节点
CN109407985B (zh) 一种数据管理的方法以及相关装置
CN111352589A (zh) 一种分布式存储的方法、装置、设备及可读介质
WO2024255357A1 (zh) 数据写入方法、装置、计算机设备及存储介质
US10417215B2 (en) Data storage over immutable and mutable data stages
US20220004664A1 (en) Data integrity procedure
CN106547484B (zh) 一种基于raid5的实现内存数据可靠性方法及系统
CN114207602B (zh) 使用概率数据结构减少请求
CN112364061A (zh) 一种基于mysql高并发访问数据库的方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130206

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130701

R150 Certificate of patent or registration of utility model

Ref document number: 5321682

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

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

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

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