JP6299307B2 - ストレージシステム、ストレージ方法、及び、プログラム - Google Patents

ストレージシステム、ストレージ方法、及び、プログラム Download PDF

Info

Publication number
JP6299307B2
JP6299307B2 JP2014056622A JP2014056622A JP6299307B2 JP 6299307 B2 JP6299307 B2 JP 6299307B2 JP 2014056622 A JP2014056622 A JP 2014056622A JP 2014056622 A JP2014056622 A JP 2014056622A JP 6299307 B2 JP6299307 B2 JP 6299307B2
Authority
JP
Japan
Prior art keywords
data
value
key
node
data set
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
JP2014056622A
Other languages
English (en)
Other versions
JP2015179410A (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 JP2014056622A priority Critical patent/JP6299307B2/ja
Priority to US14/657,348 priority patent/US10083121B2/en
Publication of JP2015179410A publication Critical patent/JP2015179410A/ja
Application granted granted Critical
Publication of JP6299307B2 publication Critical patent/JP6299307B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0617Improving the reliability of storage systems in relation to availability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device

Description

本発明は、ストレージシステム、ストレージ方法、及び、プログラムに関し、特に、複数のデータセットを分散して記憶する、ストレージシステム、ストレージ方法、及び、プログラムに関する。
コンピュータのハードウェア、ソフトウェア、及び、ネットワークの高性能化に伴い、複数のコンピュータをネットワークで接続して、分散処理を行うことにより、高い処理性能を得る技術が開発されている。
特に、近年では、分散処理技術の発展に伴い、大量データの高速分析が可能な分散並列処理基盤が提供され、大量データに対する傾向や知見の導出に適用されている。例えば、分散並列処理基盤としてよく知られているHadoopは、顧客情報や行動履歴のマイニング、大量ログ情報からの傾向分析などに適用されている。Hadoopでは、大量データに対応する分散ファイルシステムとして、HDFS(Hadoop Distributed File System)が用いられている。また、HDFS上で構築される、スケーラブルで高パフォーマンスな分散ストレージとして、非特許文献1に記載されているHBaseが知られている。
HBaseは、KVS(Key-Value Store)形式の分散ストレージであり、テーブル状のデータ構造において、RowKeyと呼ぼれるKeyにより、当該RowKeyに対応づけられたデータセットのValueを一意に取得できる。また、HBaseの場合、RowKeyのあるまとまりでデータセットが複数のファイルに分割されて、複数ノードに保存される。また、HBaseでは、データセットがRowKeyの値の辞書順(例えば、自然順序)でソートされ、保存されている。このため、Keyによる範囲検索が高速に行われる。
また、このような分散ストレージでは、高可用性を実現するために、一般的に、データセットのコピー(レプリカ)が、複数ノードに保存される。これにより、一つのノードで障害が発生した場合でも、レプリカがあるノードが処理を引き継ぐことにより、耐障害性が高められる。
"Apache Hbase"、The Apache Software Foundation、[online]、[平成26年3月5日検索]、インターネット〈URL:http://hbase.apache.org/〉
しかしながら、上述の非特許文献に記載されているような、KVS形式の分散ストレージでは、データセットを取得するために、上述のRowKey等、特定のKeyを指定する必要がある。このため、Valueに含まれるデータ要素を指定して、データセットを取得することができない。
Valueに含まれるデータ要素を指定してデータセットを取得するためには、例えば、当該データ要素をKeyとして、新たなテーブル状のデータ構造を構築する必要がある。この場合、レプリカも含めて、同じデータ構造を2重に持つことになり、効率が悪い。
本発明の目的は、上述の課題を解決し、ストレージシステムにおいて、異なるKeyによるアクセスを効率的に実現する、ストレージシステム、ストレージ方法、及び、プログラムを提供することである。
本発明のストレージシステムは、複数のデータノードを備えたストレージシステムであって、前記複数のデータノードの各々は、データセットの複数のデータ要素の内の異なる第1、及び、第2のデータ要素の値をキーとして、それぞれ、複数のデータセットを格納する、第1、及び、第2のテーブルの各々の、当該データノードに割り当てられた部分を記憶する、データ記憶手段と、前記第1、及び、第2のデータ要素の内の一方のデータ要素の値が入力された場合に、一方のデータ要素に係るテーブルの当該データノードに割り当てられた部分から、当該一方のデータ要素の値をキーとして、当該一方のデータ要素の値を含むデータセットを取得、または、他方のデータ要素に係るテーブルの当該データノードに割り当てられた部分から、当該一方のデータ要素の値に対応する当該他方のデータ要素の値をキーとして、当該一方のデータ要素の値を含むデータセットを取得し、出力する、データ取得手段と、を含む。
本発明のストレージ方法は、複数のデータノードを含むストレージシステムのストレージ方法であって、前記複数のデータノードの各々において、データセットの複数のデータ要素の内の異なる第1、及び、第2のデータ要素の値をキーとして、それぞれ、複数のデータセットを格納する、第1、及び、第2のテーブルの各々の、当該データノードに割り当てられた部分を記憶し、前記第1、及び、第2のデータ要素の内の一方のデータ要素の値が入力された場合に、一方のデータ要素に係るテーブルの当該データノードに割り当てられた部分から、当該一方のデータ要素の値をキーとして、当該一方のデータ要素の値を含むデータセットを取得、または、他方のデータ要素に係るテーブルの当該データノードに割り当てられた部分から、当該一方のデータ要素の値に対応する当該他方のデータ要素の値をキーとして、当該一方のデータ要素の値を含むデータセットを取得し、出力する。
本発明のプログラムは、複数のデータノードを含むストレージシステムのプログラムであって、前記複数のデータノードのコンピュータの各々に、データセットの複数のデータ要素の内の異なる第1、及び、第2のデータ要素の値をキーとして、それぞれ、複数のデータセットを格納する、第1、及び、第2のテーブルの各々の、当該データノードに割り当てられた部分を記憶し、前記第1、及び、第2のデータ要素の内の一方のデータ要素の値が入力された場合に、一方のデータ要素に係るテーブルの当該データノードに割り当てられた部分から、当該一方のデータ要素の値をキーとして、当該一方のデータ要素の値を含むデータセットを取得、または、他方のデータ要素に係るテーブルの当該データノードに割り当てられた部分から、当該一方のデータ要素の値に対応する当該他方のデータ要素の値をキーとして、当該一方のデータ要素の値を含むデータセットを取得し、出力する、処理を行わせる。
本発明の効果は、ストレージシステムにおいて、異なるKeyによるアクセスを効率的に実現できることである。
本発明の第1の実施の形態の特徴的な構成を示すブロック図である。 本発明の第1の実施の形態の構成を示すブロック図である。 本発明の第1の実施の形態における、サブテーブル生成処理を示すフローチャートである。 本発明の第1の実施の形態における、データ読み出し処理を示すフローチャートである。 本発明の第1の実施の形態における、テーブルの例を示す図である。 本発明の第1の実施の形態における、Key情報221、222の例を示す図である。 本発明の第1の実施の形態における、テーブルの他の例を示す図である。 本発明の第1の実施の形態における、Key情報221、222の他の例を示す図である。 本発明の第1の実施の形態における、テーブルの他の例を示す図である。 本発明の第1の実施の形態における、Key情報221、222の他の例を示す図である。 本発明の第2の実施の形態における、テーブルの例を示す図である。 本発明の第2の実施の形態における、Key情報221、222の例を示す図である。 本発明の第2の実施の形態における、テーブルの他の例を示す図である。 本発明の第2の実施の形態における、Key情報221、222の他の例を示す図である。 本発明の第2の実施の形態における、テーブルの他の例を示す図である。 本発明の第2の実施の形態における、Key情報221、222の他の例を示す図である。 本発明の第3の実施の形態の構成を示すブロック図である。 本発明の第3の実施の形態における、データ読み出し処理を示すフローチャートである。 本発明の第3の実施の形態における、テーブルの例を示す図である。 本発明の第3の実施の形態における、Key情報221、222の例を示す図である。 本発明の第3の実施の形態における、テーブルの例を示す図である。 本発明の第3の実施の形態における、Key情報221、222の例を示す図である。 本発明の第3の実施の形態における、ソーティングバッファの例を示す図である。
(第1の実施の形態)
本発明の第1の実施の形態について説明する。
はじめに、本発明の第1の実施の形態の構成について説明する。図2は、本発明の第1の実施の形態の構成を示すブロック図である。
図2を参照すると、ストレージシステム100は、制御ノード200、及び、複数のデータノード300を含む。ストレージシステム100は、ネットワーク等により、クライアント装置500と接続される。
なお、以下の説明において、引用番号に続く「」内の符号は、識別子を示す。例えば、データノード300「N1」は、識別子「N1」のデータノード300を示す。図2の例では、ストレージシステム100は、データノード300「N1」、「N2」、「N3」、…を含む。
本発明の第1の実施の形態では、ストレージシステム100に記憶されるデータセットは、複数のデータ要素を含む。ストレージシステム100では、複数のデータセットを格納するテーブルが生成される。テーブルでは、データセットの複数のデータ要素の内、一つのデータ要素がKeyとして用いられる。ストレージシステム100には、クライアント装置500からKeyの値が入力され、当該Keyの値を含むデータセットが、テーブルから取得、出力される。
本発明の第1の実施の形態では、テーブルとして、複数のデータ要素の内の第1の要素をKeyとして用いる、メインテーブル(第1のテーブル)が予め生成される。メインテーブルでは、データセットがメインテーブルのKeyの値でソーティングされる(Keyの値の順番で並べられる)。そして、メインテーブルは、各々が1以上のデータセットを含む複数の部分に分割され、それぞれ、複数のデータノード300に割り当てられる。
また、第1の要素をKeyとして用いるテーブルであって、メインテーブルの各データセットを、Key単位で、メインテーブルとは異なるデータノード300に格納した、メインレプリカテーブル(第3のテーブル)も予め生成される。
図5は、本発明の第1の実施の形態における、テーブルの例を示す図である。図5の例では、データセットが、データ要素として、ID(Identifier)、名前、及び、住所を含む。メインテーブル、及び、メインレプリカテーブルは、IDをKeyとして用いるテーブルである。メインテーブルは、3つの部分に分割され、データノード300「N1」、「N2」、及び、「N3」に格納されている。そして、例えば、Key:ID「1」に対するデータセットが、<Key:ID「1」、Value:名前「AC」、住所「東京」>の形式で、データノード300「N1」に格納されている。また、メインレプリカテーブルでは、Key:ID「1」に対するデータセットが、データノード300「N2」に格納されている。
さらに、第1の要素とは異なる第2の要素をKeyとして用いる、サブテーブル(第2のテーブル)が生成される。サブテーブルでも、メインテーブルと同様に、データセットがサブテーブルのKeyの値でソーティングされる。そして、サブテーブルも、各々が1以上のデータセットを含む複数の部分に分割され、それぞれ、複数のデータノード300に割り当てられる。
図7、図9は、本発明の第1の実施の形態における、テーブルの他の例を示す図である。図7、図9の例では、図5のメインテーブル、及び、メインレプリカテーブルに加えて、名前をKeyとして用いるサブテーブルが追加されている。サブテーブルも、3つの部分に分割され、データノード300「N1」、「N2」、及び、「N3」に格納されている。そして、例えば、サブテーブルでは、Key:名前「AC」に対するデータセットが、<Key:名前「AC」、Value:ID「1」、住所「東京」>の形式で、データノード300「N1」に格納されている。
なお、本発明の実施の形態では、あるテーブルであるデータノード300に格納されているデータセットと同じデータセットが他のテーブルで他のデータノード300に格納されている場合、一方のデータセットを他方のデータセットのレプリカと呼ぶ。
例えば、図7において、メインレプリカテーブルでデータノード300「N2」に格納されているKey:ID「1」のデータセットは、メインテーブルでデータノード300「N1」に格納されているKey:ID「1」のデータセットのレプリカである。また、図7において、サブテーブルでデータノード300「N1」に格納されているKey:名前「AA」のデータセットは、メインテーブルでデータノード300「N3」に格納されているKey:ID「301」のデータセットのレプリカである。
あるデータノード300に障害が発生した場合は、当該データノード300が格納するデータセットのレプリカを格納するデータノード300から、当該データセットのレプリカを取得することができる。
制御ノード200は、制御部210、及び、Key情報記憶部220を含む。
制御部210は、各データノード300に対して、サブテーブルにおける、当該データノード300に割り当てられた部分の生成を指示する。また、制御部210は、死活監視等により、各データノード300の状態を監視する。
Key情報記憶部220は、Key情報221、222を記憶する。Key情報221、222は、それぞれ、メインテーブル、サブテーブルのKeyの各値を含むデータセットが格納されるデータノード300を示す。
図6、図8、及び、図10は、本発明の第1の実施の形態における、Key情報221、222の例を示す図である。図6のKey情報221は、図5のテーブルに対応する。図8、図10のKey情報221、222は、それぞれ、図7、図9のテーブルに対応する。
Key情報221における、「メイン」、「メインレプリカ」、「サブ」欄は、それぞれ、メインテーブル、メインレプリカテーブル、サブテーブルで、「Key:ID」欄のKeyの値のデータセットを格納しているデータノード300の識別子を示す。
Key情報222における、「サブ」、「メイン」、「メインレプリカ」欄は、それぞれ、サブテーブル、メインテーブル、メインレプリカテーブルで、「Key:名前」欄のKeyの値のデータセットを格納しているデータノード300の識別子を示す。「Key:ID」欄は、「Key:名前」欄のKeyの値のデータセットに含まれるIDの値(サブテーブルのKeyの値に対するメインテーブルのKeyの値のマッピング)を示す。
複数のデータノード300の各々は、テーブル生成部310、Key情報記憶部320、データ取得部330、及び、データ記憶部340を含む。
テーブル生成部310は、制御ノード200からの指示に従って、サブテーブルにおける当該データノード300に割り当てられた部分を、データ記憶部340に生成する。テーブル生成部310は、サブテーブルにおいて割り当てられた部分の各データセットを、サブテーブルにおいてソーティングされた順番で、データ記憶部340に格納する。
Key情報記憶部320は、制御ノード200と同じ、Key情報221、222を記憶する。Key情報記憶部320のKey情報221、222は、制御部210によって、Key情報記憶部220と同期される。
データ取得部330は、クライアント装置500からのデータ取得要求に応じて、各テーブルにおける、当該データノード300に割り当てられた部分から、Keyの値を含むデータセットを取得し、クライアント装置500へ返却する。
データ記憶部340は、各テーブルにおける、当該データノード300に割り当てられた部分を記憶する。データ記憶部340は、非特許文献1に記載されているような、HBaseに従った分散ストレージにおける、ストレージデバイスでもよい。データ記憶部340は、記憶媒体として、HDD(Hard Disk Drive)を用いてもよいし、SSD(Solid state drive)や、フラッシュメモリ、RAM(Random Access Memory)を用いていてもよい。
クライアント装置500は、アプリケーション510、及び、ライブラリ520を含む。
アプリケーション510は、ライブラリ520を用いて、ストレージシステム100にアクセスする。
ライブラリ520は、ストレージシステム100にアクセスし、データセットの読み出し、及び、書き込みを行う。
なお、制御ノード200、データノード300、及び、クライアント装置500は、それぞれ、CPU(Central Processing Unit)とプログラムを記憶した記憶媒体を含み、プログラムに基づく制御によって動作するコンピュータであってもよい。
この場合、制御ノード200のCPUは、制御部210の機能を実現するためのコンピュータプログラムを実行する。また、データノード300のCPUは、テーブル生成部310、及び、データ取得部330の機能を実現するためのコンピュータプログラムを実行する。クライアント装置500のCPUは、アプリケーション510、及び、ライブラリ520の機能を実現するためのコンピュータプログラムを実行する。また、制御ノード200の記憶媒体は、Key情報記憶部220の情報を記憶する。データノード300の記憶媒体は、Key情報記憶部320、及び、データ記憶部340の情報を記憶する。
次に、本発明の第1の実施の形態の動作について説明する。
<サブテーブル生成処理>
はじめに、本発明の第1の実施の形態における、サブテーブル生成処理について説明する。
ここでは、各データノード300のデータ記憶部340に、図5のように、IDをKeyとしたメインテーブル、及び、メインレプリカテーブルが記憶されていると仮定する。また、これらのテーブルに対して、図6のようなKey情報221が、Key情報記憶部220に記憶されていると仮定する。
図3は、本発明の第1の実施の形態における、サブテーブル生成処理を示すフローチャートである。
クライアント装置500のアプリケーション510は、ライブラリ520を通して、サブテーブルの生成を、ストレージシステム100の制御ノード200に指示する(ステップA101)。
例えば、アプリケーション510は、名前をKeyとしたサブテーブルの生成を指示する。
制御ノード200の制御部210は、Key情報222において、サブテーブルのKeyの値、及び、当該値に対するメインテーブルのKeyの値の対応関係(マッピング)を設定する(ステップB101)。ここで、制御部210は、Key情報221から、メインテーブルのKeyの各値を取得し、当該Keyの値が格納されているデータノード300から、当該Keyの値に対するデータセットを取得する。そして、制御部210は、取得したデータセットから、サブテーブルのKeyの値を抽出する。制御部210は、抽出したサブテーブルのKeyの値でソートしながら、サブテーブルのKeyの各値に対して、メインテーブルのKeyの値を設定する。
例えば、制御部210は、図6のKey情報221をもとに、図8のKey情報222のように、Key:名前の各値に対するKey:IDの値のマッピングを設定する。
制御部210は、Key情報222において、サブテーブルのKeyの各値をデータノード300に割り当てる(ステップB102)。ここで、制御部210は、Key情報222における、先頭のKyeの値から順番に、データノード300ごとに予め決められた数のKeyの値を、各データノード300に割り当てる。
例えば、制御部210は、図8のKey情報222で、Key:名前「AA」〜「AC」をデータノード300「N1」、Key:名前「BB」、「CC」をデータノード300「N2」、Key:名前「DD」〜「ZZ」をデータノード300「N3」に割り当てる。制御部210は、割り当て結果を、図8のように、Key情報222に設定する。
制御部210は、Key情報222において、サブテーブルのKeyの各値について、当該値を含むデータセットをメインテーブルやメインレプリカテーブルで格納しているデータノード300を設定する(ステップB103)。ここで、制御部210は、Key情報222から、サブテーブルのKeyの各値に対するメインテーブルのKeyの値を抽出する。そして、制御部210は、Key情報221から、当該メインテーブルのKeyの値をメインテーブルやメインレプリカテーブルで格納しているデータノード300の識別子を抽出する。
例えば、制御部210は、図6のKey情報221をもとに、図8のKey情報222のように、メインテーブルやメインレプリカテーブルで、Key:名前の各値を格納しているデータノード300の識別子を設定する。
制御部210は、各データノード300に対して、サブテーブルの内の当該データノード300に割り当てられたKeyに対する部分の生成を指示する(ステップB104)。
各データノード300のテーブル生成部310は、サブテーブルの内の割り当てられたKeyに対する部分を、データ記憶部340に生成する(ステップC101)。ここで、各データノード300のテーブル生成部310は、Key情報222における、割り当てられたサブテーブルのKeyの値を順番に抽出する。そして、テーブル生成部310は、当該Keyの値に対するデータセットを、自データノード300、または、他データノード300のメインテーブルやメインレプリカテーブルから取得し、データ記憶部340におけるサブテーブルに、順番に格納する。
例えば、データノード300「N1」のテーブル生成部310は、図8のKey情報222における、Key:名前「AA」に対するデータセットを、データノード300「N2」のメインレプリカテーブルから取得する。テーブル生成部310は、メインレプリカテーブルから取得したデータセット<Key:ID「301」、Value:名前「AA」、住所「富山」>を、<Key:名前「AA」、Value:ID「301」、住所「富山」>に変換する。テーブル生成部310は、変換したデータセットを、図7のようにデータ記憶部340におけるサブテーブルに格納する。同様に、テーブル生成部310は、Key:名前「AB」に対するデータセットを、データ記憶部340において、Key:名前「AA」のデータセットの次に格納する。さらに、テーブル生成部310は、Key:名前「AC」に対するデータセットを、データ記憶部340において、Key:名前「AB」のデータセットの次に格納する。データノード300「N2」、「N3」も同様に、サブテーブルにおける割り当てられた部分を、データ記憶部340に格納する。この結果、データノード300「N1」、「N2」、「N3」には、図7のように、サブテーブルが生成、格納される。
制御部210は、Key情報221において、メインテーブルのKeyの各値について、当該値を含むデータセットをサブテーブルで格納しているデータノード300を設定する(ステップB105)。ここで、制御部210は、Key情報222から、メインテーブルのKeyの各値に対するサブテーブルのKeyの値を抽出する。そして、制御部210は、Key情報222から、当該サブテーブルのKeyの値をサブテーブルで格納しているデータノード300の識別子を抽出する。
例えば、制御部210は、図8のKey情報222をもとに、図8のKey情報221のように、サブテーブルで、Key:IDの各値を格納しているデータノード300の識別子を設定する。
制御部210は、Key情報221、222において、メインレプリカテーブルにおける冗長なデータセットに係るデータノード300の割り当てを削除する(ステップB106)。ここで、冗長なデータセットとは、メインレプリカテーブルに格納されるデータセットの内で、メインテーブルとサブテーブルとで異なるデータノード300に格納されているデータセットである。この場合、サブテーブルにおける当該データセットは、メインテーブルにおけるデータセットのレプリカとして用いることができる。したがって、メインレプリカテーブルのデータセットは削除できる。
例えば、図8のKey情報221において、Key:ID「2」(Key:名前「ZZ」)に対するデータセットは、メインテーブルではデータノード300「N1」、サブテーブルではデータノード300「N3」に格納されている。したがって、メインレプリカテーブルで、データノード300「N3」が格納しているKey:ID「2」のデータセットは冗長である。
制御部210は、図10のように、Key情報221、222から、メインレプリカテーブルにおける、冗長なデータセットに係るデータノード300の割り当てを削除する。
制御部210は、各データノード300に対して、メインレプリカテーブルからの冗長なデータセットの削除を指示する(ステップB107)。
各データノード300のテーブル生成部310は、ステップB106で更新されたKey情報221、222に従って、メインレプリカテーブルにおける割り当てられた部分から、冗長なデータセットを削除する(ステップC102)。
例えば、各データノード300のテーブル生成部310は、図9のように、メインレプリカテーブルから冗長なデータセットを削除する。
<データ読み出し処理>
次に、本発明の第1の実施の形態における、データ読み出し処理について説明する。
ここでは、クライアント装置500のアプリケーション510が、ストレージシステム100に対して、Keyの特定の範囲の値に対するデータセットの取得(範囲検索)を行う場合を例に、動作を説明する。
図4は、本発明の第1の実施の形態における、データ読み出し処理を示すフローチャートである。
クライアント装置500のアプリケーション510は、ライブラリ520に、検索対象テーブル(メインテーブル/サブテーブル)(以下、対象テーブル)と検索対象のKey(以下、対象Key)の値を指定して、範囲検索を指示する(ステップA201)。ライブラリ520は、制御ノード200に、対象テーブルと対象Keyの値を指定して、データノード問い合わせを送信する(ステップA202)。
例えば、アプリケーション510が、メインテーブルにおけるKey:ID「1」〜「102」の範囲検索を指示した場合、ライブラリ520は、対象テーブル:メインテーブル、対象Key:ID「1」〜「102」としてデータノード問い合わせを送信する。
制御ノード200の制御部210は、対象Keyに係るKey情報221、222を参照し、対象テーブルにおいて、対象Keyの値に対するデータセットを格納するデータノード300の識別子を抽出する(ステップB201)。
例えば、制御部210は、図10のKey情報221を参照し、メインテーブルにおいて、Key:ID「1」〜「102」に対するデータセットを格納するデータノード300の識別子「N1」を抽出する。
制御部210は、抽出したデータノード300が正常かどうかを判断する(ステップB202)。
ステップB202で、データノード300が正常な場合(ステップB202/Y)、制御部210は、抽出したデータノード300の識別子をクライアント装置500へ返却する(ステップB204)。
例えば、データノード300「N1」が正常な場合、制御部210は、Key:ID「1」〜「102」に対して、データノード300の識別子「N1」を返却する。
クライアント装置500のライブラリ520は、受信した識別子のデータノード300へ、対象テーブル(メインテーブル/サブテーブル)と対象Keyの値を指定して、データ取得要求を送信する(ステップA203)。
例えば、ライブラリ520は、データノード300「N1」に、対象テーブル:メインテーブル、対象Key:ID「1」〜「102」として、データ取得要求を送信する。
データノード300のデータ取得部330は、対象Keyに係るKey情報221、222を参照し、自データノード300が、対象テーブルにおいて、対象Keyの値に対するデータセットを格納しているかを判定する(ステップC201)。
ステップC201で、対象テーブルにおいて、対象Keyの値に対するデータセットを格納している場合(ステップC201/Y)、データ取得部330は、対象Keyの値に対するデータセットを取得する(ステップC202)。ここで、データ取得部330は、データ記憶部340に格納された対象テーブルから、データセットを取得する。
例えば、図10のKey情報221を参照すると、データノード300「N1」は、メインテーブルで、Key:ID「1」〜「102」に対するデータセットを格納している。データノード300「N1」のデータ取得部330は、図9におけるメインテーブルから、Key:ID「1」に対するデータセット<Key:ID「1」、Value:名前「AC」、住所「東京」>を取得する。同様に、データ取得部330は、Key:ID「2」〜「102」に対するデータセットを取得する。
データ取得部330は、取得したデータセットを、クライアント装置500へ返却する(ステップC209)。
例えば、データ取得部330は、Key:ID「1」〜「102」に対するデータセットを、クライアント装置500へ返却する。
ライブラリ520は、取得したデータセットをアプリケーション510に転送する(ステップA204)。
例えば、ライブラリ520は、データノード300「N1」から取得したKey:ID「2」〜「102」に対するデータセットを、アプリケーション510に転送する。
なお、ライブラリ520は、範囲検索に対して、複数の異なるデータノード300からデータセットを取得した場合、これらをまとめて、アプリケーション510に転送してもよい。
また、他の例として、アプリケーション510が、サブテーブルにおけるKey:名前「AA」〜「AC」の範囲検索を指示したと仮定する。この場合、ライブラリ520は、対象テーブル:サブテーブル、対象Key:名前「AA」〜「AC」として、データノード問い合わせを、制御ノード200へ送信する。
制御部210は、図10のKey情報222を参照し、サブテーブルにおいて、Key:名前「AA」〜「AC」に対するデータセットを格納するデータノード300の識別子「N1」を抽出する。
データノード300「N1」が正常であった場合、制御部210は、Key:名前「AA」〜「AC」に対して、データノード300の識別子「N1」を、クライアント装置500へ返却する。
ライブラリ520は、データノード300「N1」に、対象テーブル:サブテーブル、対象Key:名前「AA」〜「AC」として、データ取得要求を送信する。
データノード300「N1」のデータ取得部330は、図9におけるサブテーブルから、Key:名前「AA」に対するデータセット<Key:名前「AA」、Value:ID「301」、「富山」を取得する。同様に、データ取得部330は、Key名前「AB」、「AC」に対するデータセットを取得する。
データ取得部330は、Key:名前「AA」〜「AC」に対するデータセットを、クライアント装置500へ返却する。
一方、ステップB202で、障害が発生している場合(ステップB202/N)、制御部210は、対象Keyに係るKey情報221、222を参照し、対象Keyの値に対するレプリカを格納するデータノード300の識別子を抽出する(ステップB203)。
例えば、上述の対象テーブル:メインテーブル、対象Key:ID「1」〜「102」の範囲検索時に、データノード300「N1」に障害が発生していたと仮定する。この場合、制御部210は、図10のKey情報221を参照し、メインレプリカテーブルかサブテーブルで、Key:ID「1」、「102」に対するデータセット(レプリカ)を格納するデータノード300の識別子「N2」を抽出する。同様に、制御部210は、サブテーブルで、Key:ID「2」、「3」に対するデータセットを格納するデータノード300の識別子「N3」を抽出する。
制御部210は、Key:ID「1」、「102」に対してデータノード300の識別子「N2」、Key:ID「2」、「3」に対してデータノード300の識別子「N3」を返却する。
ライブラリ520は、データノード300「N2」に、対象テーブル:メインテーブル、対象Key:ID「1」、「102」を指定して、データ取得要求を送信する。また、ライブラリ520は、同時に、データノード300「N3」に、対象テーブル:メインテーブル、対象Key:ID「2」、「3」を指定して、データ取得要求を送信する。
ステップC201で、対象テーブルにおいて、対象Keyの値に対するデータセットを格納していない場合(ステップC201/N)、データ取得部330は、対象Keyの値に対するレプリカを格納している他のテーブルを特定する(ステップC203)。ここで、データ取得部330は、対象Keyに係るKey情報221、222を参照し、自データノード300において、対象Keyの値に対するデータセットのレプリカを格納しているテーブルを特定する
例えば、図10のKey情報221を参照すると、データノード300「N2」は、メインテーブルで、Key:ID「1」、「102」に対するデータセットを格納していない。データノード300「N2」のデータ取得部330は、図10のKey情報221を参照し、Key:ID「1」、「102」に対するデータセットのレプリカを格納しているテーブルとして、それぞれ、メインレプリカテーブル、サブテーブルを特定する。
対象Keyと特定されたテーブルのKeyが同じ場合(ステップC204/Y)、データ取得部330は、対象Keyの値を用いて、特定されたテーブルから、データセットを取得する(ステップC205)。
例えば、データノード300「N2」のデータ取得部330は、図9におけるメインレプリカテーブルから、Key:ID「1」に対するデータセット<Key:ID「1」、Value:名前「AC」、住所「東京」>を取得する。
一方、対象Keyと特定されたテーブルのKeyが異なる場合(ステップC204/N)、データ取得部330は、Key情報222を参照して、対象Keyの値に対する特定されたテーブルのKeyの値を特定する(ステップC206)。そして、データ取得部330は、特定したKeyの値を用いて、特定されたテーブルからデータセットを取得する(ステップC207)。さらに、データ取得部330は、取得したデータセットを、対象Keyに対するデータセットの形式に変換する(ステップC208)。
例えば、データノード300「N2」のデータ取得部330は、図10のKey情報222を参照し、対象Key:ID「102」に対するKey:名前「BB」を特定する。データ取得部330は、図9におけるサブテーブルから、Key:名前「BB」に対するデータセット<Key:名前「BB」、Value:ID「102」、住所「沖縄」>を取得する。データ取得部330は、当該データセットを、データセット<Key:ID「102」、Value:名前「BB」、住所「沖縄」>へ変換する。データ取得部330は、Key:ID「1」、「102」に対するデータセットを、クライアント装置500へ返却する。
同様に、データノード300「N3」のデータ取得部330も、サブテーブルを用いて、データセット<Key:ID「2」、Value:名前「ZZ」、住所「ロシア」>、<Key:ID「3」、Value:名前「UU」、住所「アメリカ」>を取得する。データ取得部330は、Key:ID「2」、「3」に対するデータセットを、クライアント装置500へ返却する。
以上により、本発明の第1の実施の形態の動作が完了する。
なお、上述の例では、メインテーブルに格納されているデータセットのレプリカを、メインレプリカテーブル、または、サブテーブルから取得する場合を説明した。同様の方法で、サブテーブルに格納されているデータセットのレプリカも、メインテーブル、または、メインレプリカテーブルから取得できる。
また、上述の例では、図9のように、データノード300「N1」において、メインテーブルのKey:ID「1」とサブテーブルのKey:名前「AC」に対するデータセットが同じである。このように、同じデータノード300のメインテーブルとサブテーブルに同じデータセットが存在する場合、サブテーブルにおいて、メインテーブルのデータセットへの参照関係を設定してもよい。この場合、メインテーブルからデータセットが取得され、サブテーブルのデータセットに変換される。
次に、本発明の第1の実施の形態の特徴的な構成を説明する。図1は、本明の第1の実施の形態の特徴的な構成を示すブロック図である。
図1を参照すると、ストレージシステム100は、複数のデータノード300を含む。複数のデータノード300の各々は、データ記憶部340、及び、データ取得部330を記憶する。
データ記憶部340は、データセットの複数のデータ要素の内の異なる第1、及び、第2のデータ要素の値をキーとして、それぞれ、複数のデータセットを格納する、第1、及び、第2のテーブルの各々の、当該データノード300に割り当てられた部分を記憶する。
データ取得部330は、第1、及び、第2のデータ要素の内の一方のデータ要素の値が入力された場合に、次のようにデータセットを取得し、出力する。すなわち、データ取得部330は、一方のデータ要素に係るテーブルの当該データノード300に割り当てられた部分から、当該一方のデータ要素の値をキーとして、当該一方のデータ要素の値を含むデータセットを取得する。また、データ取得部330は、他方のデータ要素に係るテーブルの当該データノード300に割り当てられた部分から、当該一方のデータ要素の値に対応する当該他方のデータ要素の値をキーとして、当該一方のデータ要素の値を含むデータセットを取得する。
次に、本発明の第1の実施の形態の効果を説明する。
本発明の第1の実施の形態によれば、ストレージシステムにおいて、異なるKeyによるアクセスを効率的に実現できる。その理由は、以下の通りである。複数のデータノード300の各々のデータ記憶部340は、データセットの異なるデータ要素の値をキーとする、メインテーブル、サブテーブルの当該データノード300に割り当てられた部分を記憶する。データ取得部330は、異なるデータ要素の内の一方のデータ要素の値が入力された場合に、一方のデータ要素に係るテーブルの割り当てられた部分から、当該一方のデータ要素の値をキーとして、当該一方のデータ要素の値を含むデータセットを取得する。また、データ取得部330は、他方のデータ要素に係るテーブルの割り当てられた部分から、当該一方のデータ要素の値に対応する当該他方のデータ要素の値をキーとして、当該一方のデータ要素の値を含むデータセットを取得する。
これにより、例えば、サブテーブルにおいて、メインテーブルに格納されているデータセットのレプリカが、メインテーブルとは異なるデータノード300に格納されていれば、メインレプリカテーブルから、当該データセットを削除できる。すなわち、同じデータ構造を2重に持つことなく、データセットのレプリカを提供しながら、メインテーブルのKeyとは異なるKeyで、ストレージシステム100にアクセスできる。
また、非特許文献に記載されているような分散ストレージにおいて、Key以外の、Valueに含まれるデータ要素を指定して、データセットを取得するためには、例えば、当該データ要素とKeyとを対応づけたインデックステーブル用いる方法があった。しかしながら、インデックステーブルを用いた分散ストレージへのアクセスは、範囲検索において、Keyの値が連続しないため、ランダムアクセスとなり、アクセス速度が低下する問題があった。
本発明の第1の実施の形態によれば、ストレージシステムにおいて、異なるKeyによるアクセスを高速に実現できる。その理由は、サブテーブルで、データセットがサブテーブルのKeyの値でソーティングされ、各データノード300のデータ記憶部340が、サブテーブルの割り当てられた部分のデータセットを、ソーティングされた順番で格納するためである。これにより、範囲検索において、データ記憶部340対するアクセスが連続アクセスとなり、特に、データ記憶部340が、記憶媒体としてHDDを用いている場合、ランダムアクセスの場合に比べて、アクセス速度が向上する。
(第2の実施の形態)
次に、本発明の第2の実施の形態について説明する。
本発明の第2の実施の形態においては、1以上のデータセットを含むブロック単位で、各データノード300へのデータセットの割り当てが行われる点において、本発明の第1の実施の形態と異なる。
はじめに、本発明の第2の実施の形態の構成について説明する。本発明の第2の実施の形態の構成を示すブロック図は、本発明の第1の実施の形態(図2)と同様となる。
本発明の第2の実施の形態では、メインテーブルの各データノード300に割り当てられた部分は、各々が1以上のデータセットを含む1以上のブロックに分割される。各ブロックに含まれるデータセットの数は、各データノード300で定義された所定の値でもよいし、ストレージシステム100で定義された所定の値でもよい。また、各ブロックに含まれるデータセットの数は、ブロックごとに異なっていてもよい。
また、メインレプリカテーブルでは、メインテーブルにおける各ブロックが、メインテーブルとは異なるデータノード300に割り当てられる。
図11は、本発明の第2の実施の形態における、テーブルの例を示す図である。
図11の例では、メインテーブルにおいて、データノード300「N1」に格納されているKey:ID「1」、「2」、「3」、「102」のデータセットにより、ブロック「B1」が構成されている。同様に、データノード300「N2」、「N3」に格納されているデータセットにより、それぞれ、ブロック「B2」、「B3」が構成されている。また、メインレプリカテーブルにおいて、ブロック「B3」、「B1」、「B2」が、それぞれ、データノード300「N1」、「N2」、「N3」に格納されている。
また、サブテーブルでは、メインテーブルにおける各ブロックが、メインレプリカテーブルと同じデータノード300に割り当てられる。また、サブテーブルでは、各ブロック内のデータセットが、サブテーブルのKeyの値でソーティングされる。
図13、図15は、本発明の第2の実施の形態における、テーブルの他の例を示す図である。
図13、図15の例では、サブテーブルでも、ブロック「B3」、「B1」、「B2」が、それぞれ、データノード300「N1」、「N2」、「N3」に格納されている。
図12、図14、及び、図16は、本発明の第2の実施の形態における、Key情報221、222の例を示す図である。図12のKey情報221は、図11のテーブルに対応する。図14、図16のKey情報221、222は、それぞれ、図13、図15のテーブルに対応する。
本発明の第2の実施の形態における、Key情報221、222の「メイン」、「メインレプリカ」、「サブ」欄には、データノード300の識別子に加えて、ブロックの識別子が付与される。
データノード300のテーブル生成部310は、サブテーブルにおいて割り当てられた部分の各ブロックの各データセットを、各ブロックにおいてソーティングされた順番で、データ記憶部340に格納する。
次に、本発明の第2の実施の形態の動作について説明する。
<サブテーブル生成処理>
はじめに、本発明の第2の実施の形態における、サブテーブル生成処理について説明する。
ここでは、各データノード300のデータ記憶部340に、図11のように、IDをKeyとしたメインテーブル、及び、メインレプリカテーブルが記憶されていると仮定する。また、これらのテーブルに対して、図12のようなKey情報221が、Key情報記憶部220に記憶されていると仮定する。
本発明の第2の実施の形態では、第1の実施の形態のサブテーブル生成処理(図3)のステップB102で、メインレプリカテーブルとサブテーブルで同じブロックが同じデータノード300に格納されるように、サブテーブルのKeyの値が割り当てられる。
例えば、制御部210は、図14のKey情報222において、ブロック「B3」に含まれるKey:名前「AA」、「CC」をデータノード300「N1」に割り当てる。また、制御部210は、ブロック「B1」に含まれる、Key:名前「AC」、「BB」、「UU」、「ZZ」をデータノード300「N2」に、ブロック「B2」に含まれる、Key:名前「AB」、「AD」、「DD」をデータノード300「N3」に割り当てる。
データノード300「N1」のテーブル生成部310は、図14のKey情報222における、Key:名前「AA」に対するデータセットを、図13のようにデータ記憶部340におけるサブテーブルに格納する。同様に、テーブル生成部310は、Key:名前「CC」に対するデータセットを、データ記憶部340において、Key:名前「AA」のデータセットの次に格納する。データノード300「N2」、「N3」も同様に、サブテーブルにおける割り当てられた部分を、データ記憶部340に格納する。この結果、データノード300「N1」、「N2」、「N3」には、図13のように、サブテーブルが生成、格納される。
さらに、制御部210は、図16のように、Key情報221、222から、メインレプリカテーブルにおける、冗長なデータセットに係るデータノード300の割り当てを削除する。
データノード300「N1」、「N2」、「N3」は、図16のKey情報221をもとに、図15のように、メインレプリカテーブルから冗長なデータセットを削除する。
<データ読み出し処理>
次に、本発明の第2の実施の形態における、データ読み出し処理について説明する。
本発明の第2の実施の形態におけるデータ読み出し処理は、本発明の第1の実施の形態(図4)と同様となる。
例えば、アプリケーション510が、サブテーブルにおけるKey:名前「AA」〜「AD」の範囲検索を指示したと仮定する。この場合、ライブラリ520は、対象テーブル:サブテーブル、対象Key:名前「AA」〜「AD」として、データノード問い合わせを、制御ノード200へ送信する。
制御部210は、図16のKey情報222を参照し、サブテーブルにおいて、Key:名前「AA」を格納するデータノード300の識別子「N1」を抽出する。また、制御部210は、サブテーブルにおいて、Key:名前「AB」、「AD」を格納するデータノード300の識別子「N3」、Key:名前「AC」を格納するデータノード300の識別子「N2」を抽出する。
制御部210は、Key:名前「AA」に対してデータノード300「N1」、Key:名前「AB」、「AD」に対してデータノード300「N3」、Key:名前「AC」に対してデータノード300「N2」を、クライアント装置500へ返却する。
ライブラリ520は、データノード300「N1」に、対象テーブル:サブテーブル、対象Key:名前「AA」として、データ取得要求を送信する。また、ライブラリ520は、同時に、データノード300「N3」に、対象テーブル:サブテーブル、対象Key:名前「AB」、「AD」として、データ取得要求を送信する。さらに、ライブラリ520は、同時に、データノード300「N2」に、対象テーブル:サブテーブル、対象Key:名前「AC」として、データ取得要求を送信する。
データノード300「N1」のデータ取得部330は、図15におけるサブテーブルから、Key:名前「AA」に対するデータセット<Key:名前「AA」、Value:ID「301」、「富山」を取得し、クライアント装置500へ返却する。同様に、データノード300「N3」のデータ取得部330は、サブテーブルから、Key:名前「AB」、「AD」に対するデータセットを取得し、クライアント装置500へ返却する。データノード300「N2」のデータ取得部330は、サブテーブルから、Key:名前「AC」に対するデータセットを取得し、クライアント装置500へ返却する。
クライアント装置500のライブラリ520は、データノード300「N1」、「N2」、「N3」から取得したKey:名前「AA」〜「AD」に対するデータセットを、まとめて、アプリケーション510に転送する。
以上により、本発明の第2の実施の形態の動作が完了する。
次に、本発明の第2の実施の形態の効果を説明する。
本発明の第2の実施の形態によれば、ブロック単位でデータセットが管理される場合でも、異なるKeyによるアクセスを効率的、かつ、高速に実行できる。その理由は、ライブラリ520が、複数のブロックへの同時アクセスを行い、さらに、データ記憶部340が、各ブロック内のデータセットを、サブテーブルのKeyの値でソーティングされた順番で格納するためである。これにより、範囲検索において、複数のブロックに対する処理が並行して行われ、さらに、データ記憶部340対するアクセスが連続アクセスとなり、アクセス速度がより向上する。
(第3の実施の形態)
次に、本発明の第3の実施の形態について説明する。
本発明の第3の実施の形態においては、ソーティングバッファを用いて、ストレージシステム100から読み出したデータセットのソートを行う点において、本発明の第2の実施の形態と異なる。
はじめに、本発明の第3の実施の形態の構成について説明する。
図17は、本発明の第3の実施の形態の構成を示すブロック図である。図17を参照すると、本発明の第3の実施の形態におけるクライアント装置500は、さらに、ソーティング部530を含む。
ソーティング部530は、ソーティングバッファを用いてデータセットのソーティング処理を行う。ソーティング部530は、サブテーブルの全Key、あるいは、特定の範囲のKeyに対するデータセットの取得(範囲検索)を行う場合に、データノード300から取得したデータセットをサブテーブルのKeyの値でソーティングする。
なお、ストレージシステム100が、クライアント装置500の代わりに、ソーティング部530を含んでいてもよい。
また、本発明の第3の実施の形態では、サブテーブルにおいて、先頭のデータセットのKeyの値でソーティングされたブロックが、データノード300の識別子の順番に、データノード300に割り当てられる。ここで、先頭のデータセットとは、各ブロック内のデータセットをサブテーブルのKeyでソーティングしたときの先頭のデータセットである。
図19、図21は、本発明の第3の実施の形態における、テーブルの例を示す図である。図19、図21の例では、サブテーブルにおいて、先頭のデータセットのKeyが名前「AA」である、ブロック「B3」が、データノード300「N1」に格納されている。また、先頭のデータセットのKeyが名前「AB」である、ブロック「B2」が、データノード300「N2」に、先頭のデータセットのKeyが名前「AC」である、ブロック「B1」が、データノード300「N3」に格納されている。
図20、図22は、本発明の第3の実施の形態における、Key情報221、222の例を示す図である。図20、図22のKey情報221、222は、それぞれ、図19、図21のテーブルに対応する。
次に、本発明の第3の実施の形態の動作について説明する。
<サブテーブル生成処理>
はじめに、本発明の第3の実施の形態における、サブテーブル生成処理について説明する。
ここでは、本発明の第2の実施の形態と同様に、各データノード300のデータ記憶部340に、図11のように、IDをKeyとしたメインテーブル、及び、メインレプリカテーブルが記憶されていると仮定する。また、これらのテーブルに対して、図12のようなKey情報221が、Key情報記憶部220に記憶されていると仮定する。
本発明の第3の実施の形態では、第2の実施の形態のサブテーブル生成処理(図3)のステップB102で、先頭のデータセットのKeyの値でソーティングされたブロックが、データノード300の識別子の順番に、データノード300に割り当てられる。
例えば、図11のブロック「B1」、「B2」、「B3」において、先頭のデータセットのKey:名前は、それぞれ、「AC」、「AB」、「AA」である。したがって、制御部210は、図20のKey情報222において、ブロック「B3」、「B2」、「B1」のデータセットを、それぞれ、データノード300「N1」、「N2」、「N3」に割り当てる。すなわち、制御部210は、ブロック「B3」に含まれるKey:名前「AA」、「CC」をデータノード300「N1」に割り当てる。また、制御部210は、ブロック「B2」に含まれる、Key:名前「AB」、「AD」、「DD」をデータノード300「N2」に割り当てる。制御部210は、ブロック「B1」に含まれる、Key:名前「AC」、「BB」、「UU」、「ZZ」をデータノード300「N3」に割り当てる。
データノード300「N1」、「N2」、「N3」は、図20のKey情報222をもとに、図19のようにサブテーブルを生成する。
さらに、制御部210は、図22のように、Key情報221、222から、メインレプリカテーブルにおける、冗長なデータセットに係るデータノード300の割り当てを削除する。
データノード300「N1」、「N2」、「N3」は、図22のKey情報221をもとに、図21のように、メインレプリカテーブルから冗長なデータセットを削除する。
<データ読み出し処理>
次に、本発明の第3の実施の形態における、データ読み出し処理について説明する。
ここでは、クライアント装置500のアプリケーション510が、ストレージシステム100に対して、サブテーブルのKeyの全ての値に対するデータセットの取得を行う場合を例に、動作を説明する。
図18は、本発明の第3の実施の形態における、データ読み出し処理を示すフローチャートである。
はじめに、クライアント装置500において、ライブラリ520がデータノード問い合わせを送信するまでの処理(ステップA301、A302)は、本発明の第1、2の実施の形態(図4、ステップA201、A202)と同様となる。
例えば、ライブラリ520は、対象テーブル:サブテーブル、対象Key:名前「All」を指定して、データノード問い合わせを、制御ノード200へ送信する。
制御部210は、図22のKey情報222を参照し、各ブロックの先頭のKeyの値と当該ブロックのデータセットを格納するデータノード300の識別子を抽出し、クライアント装置500へ返却する。
例えば、制御部210は、Key:名前「AA」に対してデータノード300「N1」、Key:名前「AB」に対してデータノード300「N2」、Key:名前「AC」に対してデータノード300「N3」を、クライアント装置500へ返却する。
クライアント装置500のソーティング部530は、ブロック数のサイズのソーティングバッファを準備する(A303)。
図23は、本発明の第3の実施の形態における、ソーティングバッファの例を示す図である。
例えば、制御部210は、図23のように、サイズ「3」のソーティングバッファを準備する。
ソーティング部530は、各ブロックのデータセットを格納するデータノード300へ、サブテーブルと当該ブロックの先頭のKeyの値を指定して、当該ブロックの先頭のデータセットを要求する(A304)。
例えば、ソーティング部530は、データノード300「N1」、「N2」、「N3」に、それぞれ、先頭Key:名前「AA」、「AB」、「AC」として、データ取得要求を送信する。
各データノード300のデータ取得部330は、サブテーブルから、先頭のKeyの値に対するデータセットを取得し、クライアント装置500へ返却する。
例えば、データノード300「N1」、「N2」、「N3」のデータ取得部330は、図21のサブテーブルから、それぞれ、Key:名前「AA」、「AB」、「AC」に対するデータセットを取得し、クライアント装置500へ返却する。
ソーティング部530は、各データノード300から取得したデータセットを、データノード300の識別子の順番にソーティングバッファに挿入する(A305)。
例えば、ソーティング部530は、図23の状態(a)のように、データノード300の識別子の順番で、取得したデータセットを挿入する。
この時点で、ソーティングバッファの先頭のデータセット(Key:名前「AA」)は、範囲検索における先頭のデータセットである。また、ソーティングバッファ内では、データセットがサブテーブルのKeyの値でソーティングされている。
ソーティング部530は、ソーティングバッファの先頭のデータセットの取得元のデータノード300へ、当該データセットが含まれていたブロックにおける次のデータセットを要求する(A306)。
例えば、ソーティング部530は、先頭のデータセット(Key:名前「AA」)の取得元である、データノード300「N1」に、次のデータセットを要求する。
データノード300のデータ取得部330は、次のデータセットがあれば、当該データセットをクライアント装置500へ返却する。
例えば、データノード300「N1」のデータ取得部330は、図21のサブテーブルから、次のKey:名前「CC」に対するデータセットを取得し、クライアント装置500へ返却する。
ソーティング部530は、ソーティングバッファの先頭のデータセットを、ライブラリ520を介して、アプリケーション510へ転送するとともに、データノード300から取得したデータセットを、ソーティングバッファに挿入する。ここで、ソーティング部530は、データセットを、Keyの値でソーティングして挿入する(A307)。
例えば、ソーティング部530は、アプリケーション510に、Key:名前「AA」に対するデータセットを転送するとともに、図23の状態(b)のように、Key:名前「CC」に対するデータセットを、ソーティングバッファに挿入する。
ソーティング部530は、ステップA306、A307の処理を、ソーティングバッファが空になるまで繰り返す(A308)。
例えば、ソーティング部530は、先頭のデータセット(Key:名前「AB」)の取得元である、データノード300「N2」に、次のデータセットを要求する。
データノード300「N2」のデータ取得部330は、図21のサブテーブルから、次のKey:名前「AD」に対するデータセットを取得し、クライアント装置500へ返却する。
ソーティング部530は、ライブラリ520を介して、アプリケーション510に、Key:名前「AB」に対するデータセットを転送するとともに、図23の状態(c)のように、Key:名前「AD」に対するデータセットを設定する。
以上により、本発明の第3の実施の形態の動作が完了する。
なお、上述の例では、サブテーブルのKeyの全ての値に対するデータセットの取得を行う場合を説明した。特定の範囲の値に対するデータセットの取得を行う場合、上述のステップA305で、ライブラリ520は、各データノード300から取得したデータセットを、Keyの値でソーティングして、ソーティングバッファに挿入する。
また、サブテーブルにおいて、データノード300に割り当てられたブロックが複数ある場合、データノード300は、複数のブロックをまとめて、ラージブロックを生成してもよい。ラージブロック内のデータセットをKeyの値でソートすることにより、Keyの値の連続性をさらに向上させることができる。
次に、本発明の第3の実施の形態の効果を説明する。
本発明の第3の実施の形態によれば、範囲検索において、Keyの値でソートされたデータセットを、負荷を上げることなく取得できる。その理由は、ソーティング部530が、各ブロックからデータセットを順番に取得し、ブロック数の長さのソーティングバッファにおいて、Keyの値の順番に並べ換え、順番に出力するためである。
また、本発明の第3の実施の形態によれば、Keyの全ての値を指定した検索において、Keyの値でソートされたデータセットを高速に取得できる。その理由は、サブテーブルにおいて、先頭のデータセットのKeyの値でソーティングされたブロックが、データノード300の識別子の順番に、データノード300に割り当てられるためである。これにより、ソーティング部530が、各ブロックの先頭のデータセットをデータノード300の識別子の順番にソーティングバッファに挿入するだけで、ソートされたデータセットのリストが得られる。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
100 ストレージシステム
200 制御ノード
210 制御部
220 Key情報記憶部
221 Key情報
222 Key情報
300 データノード
310 テーブル生成部
320 Key情報記憶部
330 データ取得部
340 データ記憶部
500 クライアント装置
510 アプリケーション
520 ライブラリ
530 ソーティング部

Claims (10)

  1. 複数のデータ要素の値の組であるデータセットを格納する複数のデータノードを備えたストレージシステムであって、
    前記複数のデータノードの各々は、
    複数のデータセットを格納するテーブルであって、前記複数のデータ要素の内の第1のデータ要素の値をキーとして用いる第1のテーブルの、当該データノードに割り当てられたデータセットの部分と、前記複数のデータセットを格納するテーブルであって、前記複数のデータ要素の内の第2のデータ要素の値をキーとして用いる第2のテーブルの、当該データノードに割り当てられたデータセットの部分と、を記憶する、データ記憶手段と、
    前記第1のテーブルと前記第1のデータ要素の値とを指定した要求が入力された場合に、前記第1のテーブルの当該データノードに割り当てられた部分に、当該第1のデータ要素の値を含むデータセットがあれば、当該第1のテーブルの当該データノードに割り当てられた部分から、当該第1のデータ要素の値をキーとして、当該第1のデータ要素の値を含むデータセットを取得し、当該第1のデータ要素の値を含むデータセットがなければ、前記第2のテーブルの当該データノードに割り当てられた部分から、当該第1のデータ要素の値に対応する前記第2のデータ要素の値をキーとして、当該第1のデータ要素の値を含むデータセットを取得し、
    前記第2のテーブルと前記第2のデータ要素の値とを指定した要求が入力された場合に、前記第2のテーブルの当該データノードに割り当てられた部分に、当該第2のデータ要素の値を含むデータセットがあれば、当該第2のテーブルの当該データノードに割り当てられた部分から、当該第2のデータ要素の値をキーとして、当該第2のデータ要素の値を含むデータセットを取得し、当該第2のデータ要素の値を含むデータセットがなければ、前記第1のテーブルの当該データノードに割り当てられた部分から、当該第2のデータ要素の値に対応する前記第1のデータ要素の値をキーとして、当該第2のデータ要素の値を含むデータセットを取得し、
    取得したデータセットを出力する、データ取得手段と、
    を含む、ストレージシステム。
  2. 前記第1のデータ要素の値が入力された場合に、前記第1のテーブルの当該データノードに割り当てられた部分に、当該第1のデータ要素の値を含むデータセットがなければ、前記第2のテーブルの当該データノードに割り当てられた部分から、当該第1のデータ要素の値を含むデータセットの前記第2のデータ要素の値をキーとして、当該第1のデータ要素の値を含むデータセットを取得し、
    前記第2のデータ要素の値が入力された場合に、前記第2のテーブルの当該データノードに割り当てられた部分に、当該第2のデータ要素の値を含むデータセットがなければ、前記第1のテーブルの当該データノードに割り当てられた部分から、当該第2のデータ要素の値を含むデータセットの前記第1のデータ要素の値をキーとして、当該第2のデータ要素の値を含むデータセットを取得する、
    請求項1に記載のストレージシステム。
  3. 前記複数のデータノードの各々のデータ記憶手段は、さらに、前記複数のデータセットを格納する、前記第1のデータ要素の値をキーとして用いるテーブルであって、各データセットが、前記第1のテーブルで割り当てられたデータノードとは異なるデータノードに割り当てられる第3のテーブルの、当該データノードに割り当てられたデータセットの部分を記憶し、
    一のデータセットが、前記第1のテーブルと前記第2のテーブルとで異なるデータノードに割り当てられている場合、当該データセットは、前記第3のテーブルから削除される、
    請求項1に記載のストレージシステム。
  4. 前記第1のテーブル、及び、前記第2のテーブルのデータセットは、それぞれ、前記第1のテーブル、及び、前記第2のテーブルにおいて、前記第1のデータ要素の値、及び、前記第2のデータ要素の値の順番で並べられ、
    前記複数のデータノードの各々の前記データ記憶手段は、前記第1のテーブル、及び、前記第2のテーブルの当該データノードに割り当てられた部分のデータセットを、それぞれ、前記第1のテーブルにおける前記第1のデータ要素の値の順番、及び、前記第2のテーブルにおける前記第2のデータ要素の値の順番で記憶する、
    請求項1乃至3のいずれかに記載のストレージシステム。
  5. 前記第1のテーブルにおいて前記複数のデータノードの各々に割り当てられた部分の1以上のデータセットは、さらに、1以上のブロックに分割され、前記第2のテーブルは、当該ブロックの単位で、前記複数のデータノードに割り当てられる、
    請求項1乃至3のいずれかに記載のストレージシステム。
  6. 前記第1のテーブルのデータセットは、前記第1のテーブルにおいて、前記第1のデータ要素の値の順番で並べられ、前記第2のテーブルのデータセットは、前記ブロックにおいて、前記第2のデータ要素の値の順番で並べられ、
    前記複数のデータノードの各々の前記データ記憶手段は、前記第1のテーブルの当該データノードに割り当てられた部分のデータセットを、前記第1のテーブルにおける前記第1のデータ要素の値の順番で記憶し、前記第2のテーブルの当該データノードに割り当てられた部分のブロックのデータセットを、当該ブロックにおける前記第2のデータ要素の値の順番で記憶する、
    請求項5に記載のストレージシステム。
  7. さらに、前記第2のデータ要素の値の範囲が入力された場合に、1以上の前記データノードに記憶されている、当該範囲の値を含むデータセットを格納する複数のブロックの各々から、データセットを順番に取得し、前記第2のデータ要素の値の順番に並べ換え、順番に出力する、ソーティング手段を含む、
    請求項5または6に記載のストレージシステム。
  8. さらに、前記第1のデータ要素の値が入力された場合に、前記第1、または、第2のテーブルにおいて、当該第1のデータ要素の値を含むデータセットが割り当てられているデータノードの識別子を出力し、前記第2のデータ要素の値が入力された場合に、前記第1、または、第2のテーブルにおいて、当該第2のデータ要素の値を含むデータセットが割り当てられているデータノードの識別子を出力する、制御ノードを備える、
    請求項1乃至7のいずれかに記載のストレージシステム。
  9. 複数のデータ要素の値の組であるデータセットを格納する複数のデータノードを含むストレージシステムのストレージ方法であって、
    前記複数のデータノードの各々において、
    複数のデータセットを格納するテーブルであって、前記複数のデータ要素の内の第1のデータ要素の値をキーとして用いる第1のテーブルの、当該データノードに割り当てられたデータセットの部分と、前記複数のデータセットを格納するテーブルであって、前記複数のデータ要素の内の第2のデータ要素の値をキーとして用いる第2のテーブルの、当該データノードに割り当てられたデータセットの部分と、を記憶し
    前記第1のテーブルと前記第1のデータ要素の値とを指定した要求が入力された場合に、前記第1のテーブルの当該データノードに割り当てられた部分に、当該第1のデータ要素の値を含むデータセットがあれば、当該第1のテーブルの当該データノードに割り当てられた部分から、当該第1のデータ要素の値をキーとして、当該第1のデータ要素の値を含むデータセットを取得し、当該第1のデータ要素の値を含むデータセットがなければ、前記第2のテーブルの当該データノードに割り当てられた部分から、当該第1のデータ要素の値に対応する前記第2のデータ要素の値をキーとして、当該第1のデータ要素の値を含むデータセットを取得し、
    前記第2のテーブルと前記第2のデータ要素の値とを指定した要求が入力された場合に、前記第2のテーブルの当該データノードに割り当てられた部分に、当該第2のデータ要素の値を含むデータセットがあれば、当該第2のテーブルの当該データノードに割り当てられた部分から、当該第2のデータ要素の値をキーとして、当該第2のデータ要素の値を含むデータセットを取得し、当該第2のデータ要素の値を含むデータセットがなければ、前記第1のテーブルの当該データノードに割り当てられた部分から、当該第2のデータ要素の値に対応する前記第1のデータ要素の値をキーとして、当該第2のデータ要素の値を含むデータセットを取得し、
    取得したデータセットを出力する、
    ストレージ方法。
  10. 複数のデータ要素の値の組であるデータセットを格納する複数のデータノードを含むストレージシステムのプログラムであって、
    前記複数のデータノードのコンピュータの各々に、
    複数のデータセットを格納するテーブルであって、前記複数のデータ要素の内の第1のデータ要素の値をキーとして用いる第1のテーブルの、当該データノードに割り当てられたデータセットの部分と、前記複数のデータセットを格納するテーブルであって、前記複数のデータ要素の内の第2のデータ要素の値をキーとして用いる第2のテーブルの、当該データノードに割り当てられたデータセットの部分と、を記憶し
    前記第1のテーブルと前記第1のデータ要素の値とを指定した要求が入力された場合に、前記第1のテーブルの当該データノードに割り当てられた部分に、当該第1のデータ要素の値を含むデータセットがあれば、当該第1のテーブルの当該データノードに割り当てられた部分から、当該第1のデータ要素の値をキーとして、当該第1のデータ要素の値を含むデータセットを取得し、当該第1のデータ要素の値を含むデータセットがなければ、前記第2のテーブルの当該データノードに割り当てられた部分から、当該第1のデータ要素の値に対応する前記第2のデータ要素の値をキーとして、当該第1のデータ要素の値を含むデータセットを取得し、
    前記第2のテーブルと前記第2のデータ要素の値とを指定した要求が入力された場合に、前記第2のテーブルの当該データノードに割り当てられた部分に、当該第2のデータ要素の値を含むデータセットがあれば、当該第2のテーブルの当該データノードに割り当てられた部分から、当該第2のデータ要素の値をキーとして、当該第2のデータ要素の値を含むデータセットを取得し、当該第2のデータ要素の値を含むデータセットがなければ、前記第1のテーブルの当該データノードに割り当てられた部分から、当該第2のデータ要素の値に対応する前記第1のデータ要素の値をキーとして、当該第2のデータ要素の値を含むデータセットを取得し、
    取得したデータセットを出力する、
    処理を行わせるプログラム。
JP2014056622A 2014-03-19 2014-03-19 ストレージシステム、ストレージ方法、及び、プログラム Active JP6299307B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014056622A JP6299307B2 (ja) 2014-03-19 2014-03-19 ストレージシステム、ストレージ方法、及び、プログラム
US14/657,348 US10083121B2 (en) 2014-03-19 2015-03-13 Storage system and storage method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014056622A JP6299307B2 (ja) 2014-03-19 2014-03-19 ストレージシステム、ストレージ方法、及び、プログラム

Publications (2)

Publication Number Publication Date
JP2015179410A JP2015179410A (ja) 2015-10-08
JP6299307B2 true JP6299307B2 (ja) 2018-03-28

Family

ID=54142257

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014056622A Active JP6299307B2 (ja) 2014-03-19 2014-03-19 ストレージシステム、ストレージ方法、及び、プログラム

Country Status (2)

Country Link
US (1) US10083121B2 (ja)
JP (1) JP6299307B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11372569B2 (en) * 2018-05-23 2022-06-28 Sap Se De-duplication in master data management
CN111459949B (zh) * 2019-01-18 2023-12-19 阿里巴巴集团控股有限公司 针对数据库的数据处理方法、装置及设备和索引更新方法
WO2021187305A1 (ja) * 2020-03-17 2021-09-23 日本電気株式会社 情報処理システム、情報処理方法及び記録媒体

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2564306A4 (en) * 2010-04-27 2017-04-26 Cornell University System and methods for mapping and searching objects in multidimensional space
US9052831B1 (en) * 2011-06-30 2015-06-09 Amazon Technologies, Inc. System and method for performing live partitioning in a data store
JP5684671B2 (ja) * 2011-08-05 2015-03-18 日本電信電話株式会社 条件検索データ保存方法、条件検索データベースクラスタシステム、ディスパッチャ、およびプログラム
JP2014056622A (ja) 2012-09-11 2014-03-27 Fuji Electric Co Ltd 垂直磁気記録媒体
JP5732082B2 (ja) * 2013-02-05 2015-06-10 日本電信電話株式会社 データ管理装置およびデータ管理プログラム
US20140337375A1 (en) * 2013-05-07 2014-11-13 Exeray Inc. Data search and storage with hash table-based data structures
US9569517B1 (en) * 2013-11-27 2017-02-14 Google Inc. Fault tolerant distributed key-value storage
US10013422B2 (en) * 2014-05-28 2018-07-03 Oath Inc. Incremental data processing

Also Published As

Publication number Publication date
US10083121B2 (en) 2018-09-25
JP2015179410A (ja) 2015-10-08
US20150269086A1 (en) 2015-09-24

Similar Documents

Publication Publication Date Title
US11409703B2 (en) File versions within content addressable storage
US10282440B2 (en) Prioritizing rebuilding of encoded data slices
US20220327103A1 (en) Using a Dispersed Index in a Storage Network
US9794337B2 (en) Balancing storage node utilization of a dispersed storage network
Mackey et al. Improving metadata management for small files in HDFS
CN105893139B (zh) 在云存储环境中用于向租户提供存储服务的方法和装置
Vora Hadoop-HBase for large-scale data
US11360938B2 (en) Files having unallocated portions within content addressable storage
US9916114B2 (en) Deterministically sharing a plurality of processing resources
JP6542909B2 (ja) ファイル操作方法及び装置
US9251156B2 (en) Information processing devices, method, and recording medium with regard to a distributed file system
CN109983431B (zh) 用于存储设备中的列表检索的系统和方法
JP5375972B2 (ja) 分散ファイルシステム、そのデータ選択方法およびプログラム
US20140101213A1 (en) Computer-readable recording medium, execution control method, and information processing apparatus
US20160080462A1 (en) Data processing method and apparatus in service-oriented architecture system, and the service-oriented architecture system
JP6299307B2 (ja) ストレージシステム、ストレージ方法、及び、プログラム
JP2015528957A (ja) 分散ファイルシステム、ファイルアクセス方法及びクライアントデバイス
Mukhopadhyay et al. Addressing name node scalability issue in Hadoop distributed file system using cache approach
JP2022500724A (ja) テナント識別子の置換
Prasad et al. Improving the performance of processing for small files in Hadoop: A case study of weather data analytics
JP2012190377A (ja) コンテンツ分散保管システム
Prasad et al. A Comparative Study of NoSQL Databases.
Shin et al. Parqua: Online reconfigurations in virtual ring-based nosql systems
Jayakar et al. Managing small size files through indexing in extended Hadoop file system
JP5367622B2 (ja) ファイル分割装置及び方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170215

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171113

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20171121

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180116

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180212

R150 Certificate of patent or registration of utility model

Ref document number: 6299307

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150