JP6268116B2 - データ処理装置、データ処理方法およびコンピュータプログラム - Google Patents

データ処理装置、データ処理方法およびコンピュータプログラム Download PDF

Info

Publication number
JP6268116B2
JP6268116B2 JP2015058741A JP2015058741A JP6268116B2 JP 6268116 B2 JP6268116 B2 JP 6268116B2 JP 2015058741 A JP2015058741 A JP 2015058741A JP 2015058741 A JP2015058741 A JP 2015058741A JP 6268116 B2 JP6268116 B2 JP 6268116B2
Authority
JP
Japan
Prior art keywords
key
address
request
access unit
order
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
JP2015058741A
Other languages
English (en)
Other versions
JP2016177688A (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.)
Kioxia Corp
Original Assignee
Toshiba Memory 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 Toshiba Memory Corp filed Critical Toshiba Memory Corp
Priority to JP2015058741A priority Critical patent/JP6268116B2/ja
Priority to US15/067,518 priority patent/US10846338B2/en
Publication of JP2016177688A publication Critical patent/JP2016177688A/ja
Application granted granted Critical
Publication of JP6268116B2 publication Critical patent/JP6268116B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/95Retrieval from the web
    • G06F16/951Indexing; Web crawling techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/901Indexing; Data structures therefor; Storage structures
    • G06F16/9014Indexing; Data structures therefor; Storage structures hash tables
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)

Description

本発明の実施形態は、データ処理装置、データ処理方法およびコンピュータプログラムに関する。
近年、Webメールやソーシャルネットワークなどに代表される高度なWebサービスが急速に普及している。このようなWebサービスでは、WebサーバがユーザからのWebページ表示要求を受けると、Webサーバは必要な個々のテキスト、画像や動画などのデータを、逐一バックエンドのストレージに問い合わせて取得し、ユーザに応答する。このようなストレージとしては、従来からのファイルシステムベースのデータベースも使われているが、近年では、一意のURLを指定してコンテンツデータにアクセスするという、インターネット上のコンテンツアクセス方式と親和性の高いオブジェクトストレージが、活用され始めている。このようなオブジェクトストレージでは、Webサーバといったクライアント装置から、イーサネット(登録商標)越しに可変長の一意のKey(キー)で、可変長のValue(バリュー)にアクセスするというキーバリューストア(KVS)型のI/Fがとられている。Webサーバの場合、キーはURL、バリューはコンテンツデータであることが一般的である。キーに関して、オブジェクトIDが可変長でなく、固定長になるものもあるが、基本的な原理等は同様である。ストレージデバイスとしてはHDDやSSDが用いられる。
最もシンプルなアクセスの方法は、例えばKey=“001”に対する読み出しアクセスは、GET(Key=“001”)など、読み出したいバリューに対応するキーを指定した要求を送り、応答としてバリューを受けるものである。また、書き込みアクセスは、PUT(Key=“002”,Value=“GHI”)など、書き込みを行いたいキーとバリューを指定して、要求を送るという形態である。なお、応答として、指定したキーに対応するバリューのみを受ける形態、指定したキーと、対応するバリューとの両方を受ける形態など種々の態様がある。
より高度なアクセスとして、指定したキーの辞書順で、次の/前のキーに対応するバリューを読み出す、GETNEXT要求/GETPREV要求などもある。例えば(Key,Value)=(“000”,“ABC”)、(“002”,“DEF”)、(“004”,“GHI”)、(“005”,“JKL”)という、4つのキーおよびバリューが格納されているとする。このとき、GETNEXT(Key=“002”)の要求を送ると、応答として次のキーであるKey=“004”に対応するバリューである“GHI”が返される。GETPREV(Key=“002”)の場合は、前のキーであるKey=“000”に対応するバリューである“ABC”が返される。
このような要求は、大きなデータを複数のバリューに分割して、各バリューにキーを対応付けておき、各キーに対応するバリューを順次読み出す場合などに用いられる。なお、要求で指定されたキーが存在しない場合もある。例えばKey=“001”などのような場合もある。その場合でも、GETPREV(Key=“001”)に対する応答は、Key=“000”に対応するバリューである“ABC”であり、GETNEXT(Key=“001”)に対する応答は、Key=“002”に対応するバリューである“DEF”となる。
同様に2つのキーの間に存在する全てのキーおよびバリューを応答するGETRANGE要求もある。例えばGETRANGE(Key1=“001”,Key2=“004”)の要求を送ると、(Key,Value)=(“002”,“DEF”)、(“004”,“GHI”)が応答される。この例では、応答としてバリューと、キーとの両方が返されている。
キーバリューストア(KVS)の典型的な形態として、ハッシュテーブルベースのものが挙げられる。ハッシュテーブルベースのKVSは、キーに対応するバリューのストレージ上のアドレス(以下、KVアドレス)を、ハッシュテーブルで管理する。典型的には、キーを入力とする所定のハッシュ関数を計算し、ハッシュテーブル上のそのハッシュ値(通常、キーよりも十分短いバイト列である)に基づくアドレス(以下、ハッシュアドレス)のエントリに、バリューが記憶されているストレージ上のKVアドレスを格納しておく。なお、ハッシュ値から、ハッシュテーブル上のハッシュアドレスが一意に決まる限り、ハッシュ値とハッシュアドレスとが必ずしも一致する必要はないが、以下では説明のためハッシュ値とハッシュアドレスが一致する場合を想定する。このようにすることによって、GET要求(バリューの読み出し)などを受けた場合、要求で指定されたキーに対して、ハッシュ関数を用いて瞬時にバリューが格納されているストレージ上のKVアドレスを特定することができる。よって、高速にバリューにアクセスして、応答を返すことができる。
しかしながら、ハッシュテーブルベースのKVSは、上記のGETNEXT要求/GETPREV要求/GETRANGE要求に対する応答を返すことが出来ない。なぜなら、ハッシュテーブルベースのKVSは、指定されたキーのバリューを読み出すことはできるものの、指定されたキーの前後にどのようなキーが格納されているかを知る事が出来ないためである。各キーはハッシュ関数を介してハッシュ値に変換されて、ハッシュテーブル上のハッシュアドレスとして扱われる。ハッシュテーブル上のハッシュアドレスの前後関係は、実際のキーの前後関係とは異なるものであり、ハッシュテーブルからは実際のキーの前後関係を辿ることができない。よって、所定のキーの辞書順で、指定されたキーの次のキーを得るには、全検索を行うしかなく、それは現実的ではない。
上記のようなGETNEXT要求/GETPREV要求/GETRANGE要求などに応答するため、キーを辞書順でアクセス可能なKVS(以下、順序型KVS)がある。順序型KVSは、ハッシュテーブルではなく、辞書順でアクセス可能なデータ構造でキーを管理し、GETNEXT要求/GETPREV要求/GETRANGE要求などに対応するものである。オープンソース・ソフトウェアとしては、LevelDB、RocksDBなどが有名である。このような順序型KVSは、B−treeやLSM−treeなどのデータ構造でキーを管理し、通常のGET要求などに対して、上記データ構造上でキーの探索を行う。探索の結果、キーが見つかった場合は、キーに対応するストレージ上のバリューのKVアドレスを取得し、取得したKVアドレスに基づきストレージ上のバリューにアクセスして、そのバリューを応答する。上記データ構造では、キーを辞書順で並べて管理しているため、GETNEXT要求を受けた場合も、通常のGET要求と同様に、まず指定されたキーを探索し、その後にその次のキーを辿って、当該次のキーに対応するバリューのKVアドレスにアクセスすることができる。よって、GETNEXT要求にも応答可能である。
前述の順序型KVSは、GETNEXT要求等に応答できる機能を持つものの、ハッシュテーブルベースのものと異なり、キーを「探索」する必要があるという問題がある。応答速度を高めるために数々のデータベース技術によって改良が試みられているものの、順序型KVSでは、基本的に探索が不要なハッシュテーブルベースのKVSに比べて、キーを特定するまでの手順が複雑になるという問題がある。このため目的のバリューを検索するまでの時間が長くなり、結果的に応答速度の悪化につながる。
米国出願公開第2011/0276744号明細書
本発明の実施形態は、指定されたキーとある位置関係にあるキーに対するデータを高速に検索可能することを目的とする。
本発明の実施形態としてのデータ処理装置は、要求解釈部と、第1アクセス部と、第2アクセス部と、第3アクセス部とを、備える。前記要求解釈部は、キーを指定した読み出し要求を受け付け、前記読み出し要求を解釈する。前記第1アクセス部は、複数のキーを所定のルールに従った順序で保持する順序キー列における前記キーに対して前記読み出し要求で指示された位置関係にあるキーを特定する。前記第2アクセス部は、第1アドレスと第2アドレスとを対応づけて管理する内部または外部の第1記憶装置から、前記第1アクセス部で特定されたキーのハッシュ値に基づく第1アドレスに対応する第2アドレスを取得する。前記第3アクセス部は、内部または外部の第2記憶装置において前記第2アクセス部で取得された前記第2アドレスに格納されたデータを読み出す。
本発明の実施形態に係るデータ処理システムを示す図。 第1の実施形態に係るデータ処理装置のブロック図。 ハッシュテーブル、順序キー列、およびバリューを含むデータ群を示す図。 ハッシュテーブルの他の例を示す図。 第1の実施形態の動作例のフローチャート。 第1の実施形態の他の動作例のフローチャート。 第2の実施形態に係るデータ処理装置のブロック図。 順序キー列をバリューとして保存する様子を示す図。 第2の実施形態の動作例のフローチャート。 第2の実施形態の他の動作例のフローチャート。
以下、図面を参照しながら、本発明の実施形態について説明する。
図1は、本発明の実施形態に係るデータ処理システムを示す。データ処理システムは、データ処理装置11と、複数のクライアント装置21〜23を備えている。
データ処理装置11は、イーサネットなどのネットワーク越しに、クライアント装置21、22、23からの各種読み出しまたは書き込みの要求を受け付けるキーバリューストア装置である。クライアント装置21〜23は、例えばWebサーバ等のサーバであり、Webサーバの場合、一例として、URLをキー、Webページ等のコンテンツデータをバリューとして、キーとバリュー(キーバリュー)の書き込み要求をデータ処理装置11に行う。クライアント装置21〜23は、インターネット等のネットワークを介してユーザ端末と接続されており、例えば、ユーザ端末からURLを指定した、コンテンツデータの書き込み指示を受ける。クライアント装置21〜23は、この書き込み指示に基づき、URLをキー、コンテンツデータをバリューとして、キーバリューの書き込み要求を生成して、データ処理装置11に送る。データ処理装置11は、キーバリューの書き込み要求を受けると、後述する各実施形態に従ってキーバリューの書き込み処理を行う。書き込みが完了すると、書き込み完了の応答をクライアント装置21〜23に返す。
また、クライアント装置21〜23は、ユーザ端末から、一例として、キーを指定した、バリューの読み出し指示を受けると、キーを指定した、キーバリューの読み出し要求を生成してデータ処理装置11に送る。データ処理装置11は、クライアント装置21〜23からの読み出し要求を受けて、指定されたキーに基づき、後述する各実施形態に従って読み出し処理を行ってバリューを取得し、取得したバリューを含む応答をクライアント装置21〜23に返す。以下、このようなデータ処理装置の各種の実施形態について説明する。
(第1の実施形態)
図2は、本発明の第1の実施形態に係るデータ処理装置を示す。
図2のデータ処理装置は、要求解釈部101、処理振分部102、ハッシュテーブルアクセス部103、順序キー列アクセス部104、KVアドレス割当部105、KVアクセス部106、応答生成部107、ハッシュテーブル記憶部108、順序キー列記憶部109、およびKV記憶部110を備える。順序キー列アクセス部104は一例として第1アクセス部に対応し、ハッシュテーブルアクセス部103は一例として第2アクセス部に対応し、KVアクセス部106は一例として第3アクセス部に対応する。このデータ処理装置は、典型的な形態としては、CPU、メモリ、ストレージ、ネットワークインタフェースなどで構成される。一部の機能がFPGAやASICなどの専用ハードウェアによって実現されていてもよい。
要求解釈部101は、GET要求、GETNEXT要求、GETPREV要求、または、GETRANGE要求またはPUT要求などの要求を受け付け、受信した要求を解釈する。GET要求は、指定したキーに対応するバリューを読み出すことの要求である。GETNEXT要求は、指定したキーの辞書順で、次のキーに対応するバリューを読み出すことの要求である。GETPREV要求は、指定したキーの辞書順で、前のキーに対応するバリューを読み出すことの要求である。GETRANGE要求は,2つのキーを指定し、当該指定した2つのキーの間に辞書順で存在する全てのキーに対応するバリューを読み出すことの要求である。PUT要求は、キーとバリューとを指定し、キーに対応づけてバリューを書き込むことの要求である。
KV記憶部110は、キーとバリューとを含むデータを記憶している。キー毎に対応して、キーバリューが格納されている。図3の右下において複数のキーに対応する複数のデータが格納されている様子が示される。例えば、KV(Bruce)は、キーであるBruceと、当該キーに対応するバリューとを含むデータを表している。図3では、複数のデータ(キーバリュー)が、連続したアドレスに書き込まれている様子が示されるが、これは一例であり、どのように格納するかは、書き込むKVアドレスを割り当てる方式等に依存する。本例では、データは、キーとバリュー(すなわちキーバリュー)を含むが、データが、バリューを含み、キーは含まない構成もあり得る。またデータが、キーとバリュー以外の情報(例えばバリューのサイズ情報など)を含んでもかまわない。以下では、データが、少なくともバリューを含むことを前提として、説明を続ける。KV記憶部110は、ハードディスクまたはSSD、あるいは任意の不揮発性メモリ、あるいはその他の任意の永続的にデータを記憶する装置で構成されることができる。
ハッシュテーブル記憶部108は、ハッシュテーブルを保持する。ハッシュテーブルとは、キーを所定のハッシュ関数にかけて算出されたハッシュ値に基づくアドレス(以下、ハッシュアドレス)のエントリに、そのキーに関わる情報、特にバリューを含むデータのKV記憶部110上のKVアドレス(以下、KVアドレス)等を格納するテーブルである。ハッシュアドレスは、ハッシュ値そのものでもよいし、ハッシュ値から一意に特定される別の値でもかまわない。本例では、ハッシュアドレスが、ハッシュ値そのものである場合を想定する。図3の左にハッシュテーブルの例を示す。H1、H5等はハッシュ値を表している。ADR(Bruce)は、キーであるBruceに対応するデータが格納された記憶部上のKVアドレスを表す。ハッシュテーブル記憶部108は、SSDまたはDRAMなど、任意の記憶媒体により構成でき、メモリで構成する場合、不揮発性メモリでも揮発性メモリでもよい。
順序キー列記憶部109は、順序キー列を管理する。順序キー列は、複数のキーを所定のルールに従った順序で保持したものである。例えば、順序キー列は、B−treeまたはLSM−treeなどのデータ構造であり、複数のキーを辞書順の並びで保持する。図3の右上に順序キー列の例を示す。図3の例では、Bob、Bruce、Jone、Kenがこの順序で並んでいる。このデータ構造は、ハッシュテーブルと異なり、指定されたキーの前後のキーに容易にアクセスできるという特長を持つ。順序キー列は、単純にキーの並びだけ表してもよいし、キーのみならず、そのキーに関わる情報、特にバリューのKVアドレスをキーに関連付けて含んでも良い。以降では簡単のため、KVアドレスをキーに関連付けて含まない例を用いてKVアドレスを得るためにハッシュテーブルにアクセスする実施の形態を説明する。しかしながら、順序キー列にアクセスした後にハッシュテーブルにアクセスしてKVアドレスを得る代わりに、順序キー列内にKVアドレスをキーに関連付けて含むことで、その後のハッシュテーブルアクセスを省略する形態でもよい。順序キー列の構成は、具体的には様々な形態があり得るが、そのアルゴリズム自体は本実施形態とは無関係であり、本実施形態としては何でも良い。なお、順序キー列の管理には、一例としてファイルシステムが利用され、個々の部分データは個々のファイルとして実装される。順序キー列記憶部109は、HDD、SSDまたはDRAMなど、任意の記憶媒体により構成でき、メモリで構成する場合、不揮発性メモリでも揮発性メモリでもよい。
なお、図3では、KV記憶部110に格納されているデータに対し矢印付きの線が引かれている。当該線は、ハッシュテーブルのエントリに格納されているKVアドレスと、順序キー列のキー(エントリ)とからそれぞれ引かれている。これは、ハッシュテーブルのエントリに格納されたKVアドレスが指す領域に、当該エントリに対応するキーに対するデータが格納されていることを表現している。
KV記憶部110、ハッシュテーブル記憶部108および順序キー列記憶部109はそれぞれ別々のハードウェアでもよいし、共通のハードウェアでもよい。またはこれらの内の一部が同じハードウェアで、残りが別のハードウェアでもよい。
処理振分部102は、要求解釈部101で解釈された要求の内容に応じて、ハッシュテーブルアクセス部103または順序キー列アクセス部104またはこれらの両方に、処理を依頼する。
ハッシュテーブルアクセス部103は、指定されたキーのハッシュ値を計算し、当該ハッシュ値に対応するハッシュアドレスに基づき、ハッシュテーブルのエントリへアクセスし、エントリに格納されているKV記憶部110上のKVアドレスを取得する。
KVアドレス割当部105は、KV記憶部110に新規にデータ(バリューまたはキーバリューなど)を書き込むときのKVアドレスを割り当てる。KVアドレスの割り当て方法は、ログ形式でPUT要求が来た順番にシーケンシャルにKVアドレスを割り当てて、その順番で書き込みを行う方式が一般的であるが、これに限定されるものではない。
KVアクセス部106は、KV記憶部110にアクセスして、ハッシュテーブルアクセス部103(または順序キー列アクセス部104)によって取得されたKVアドレスに格納されているデータを取得する。
応答生成部107は、KVアクセス部106により取得されたデータ(バリューまたはキーバリューなど)に基づき応答を生成して、生成した応答を、要求解釈部101で受けた要求の送信元に送信する。
ここでハッシュテーブルについて補足説明を行う。前述したハッシュテーブルの構成方法には、様々な形態があり得る。特に異なるキーが同じハッシュ値をとってしまうという、いわゆる衝突が発生した場合に、どのようにその同じハッシュ値を持つ複数のキーのエントリを格納するかについては、様々なアルゴリズムがある。
例えば、衝突した場合には、所定のルールに基づいて他の空いているエントリが見つかるまで探索する開番地法、一つのエントリに、例えばリスト構造などで複数のエントリを格納する連鎖法などがある。別の例として、指定されたキーと、対応するエントリが一致するかどうかを確認する方法がある。この方法の場合、ハッシュテーブルの各エントリに、KVアドレスに加えて、キーそのものを格納して、指定されたキーと、エントリに格納されたキーの一致性を確認してもよい。
ハッシュテーブルの容量を減らすために、ハッシュテーブルの各エントリに、キーを所定の関数で縮退させたビット列をKVアドレスに加えて格納してもよい。例えばキーであるBruceを関数Sig()で縮退させてビット列Sig(Bruce)を、ADR(Bruce)に加えてエントリに格納する。縮退させたビット列は、縮退キーとも呼ぶ。このハッシュテーブルの例を図4に示す。この場合は、最終的に、指定されたキーとの完全マッチングを確認するために、KV記憶部110上にキーバリューを格納し、そのキーバリューにアクセスして、そこに含まれるキーとの最終的なマッチングを図る必要がある。すなわち、まずは、指定されたキーを縮退させてビット列を取得し、そのビット列と、ハッシュテーブルの該当するエントリに格納されている、縮退させたビット列とのマッチングを確認する。この段階でマッチングしていなければ、マッチしていない(つまり当該エントリに含まれるKVアドレスに格納されているバリューは、指定されたキーに対応するバリューではない)と判断し、エントリの探索を再開する。マッチしていれば、マッチしている可能性は高いが、完全にはマッチすることはまだ確認されていないため、そのエントリに格納されているKV記憶部110上のKVアドレスを元にKV記憶部110にアクセスしてキーバリューを読み出す。そして、そこに含まれているキーと、指定されたキーとのマッチングを確認する。マッチしたら、そのときに読み出したバリューをそのまま採用し、マッチしなかった場合は再びハッシュテーブルに戻り、エントリの探索を再開し、同様にマッチするキーが見つかるか、あるいはマッチするキーが無いことが確認できるまで繰り返す。
このようなハッシュテーブルの構造、および探索アルゴリズム自体は、本実施形態の本質とは無関係であり、本実施形態では何でもよい。以下の説明では、KV記憶部110上に少なくともバリューを含むデータを格納することを仮定するが、本実施形態は、これに限定するものではない。
本実施形態は、要求解釈部101が受けた要求の種類によって、ハッシュテーブルと順序キー列とを使い分けるところを特徴の1つとする。以下、GET要求を受けたとき、GETNEXT要求/GETPREV要求/GETRANGE要求を受けたとき、および、PUT要求を受けたときの動作について、それぞれ説明する。
まず、キーを指定したGET要求を受けたときの動作を説明する。要求解釈部101が、その要求がGETであることを解釈し、処理振分部102は、キーをハッシュテーブルアクセス部103に渡す。ハッシュテーブルアクセス部103は、所定のハッシュ関数を用いて、指定されたキーのテーブルエントリにアクセスし、KVアドレスを取得する。例えば指定されたキーのハッシュ値を計算し、ハッシュ値に対応するハッシュテーブル上のエントリを特定する。そして、特定したエントリに格納されているKVアドレスに基づきKVアクセス部106が、KV記憶部110にアクセスして、KV記憶部110に記憶されているデータ(キーバリュー)を読み出す。読み出したキーバリューに含まれるキーが、指定されたキーにマッチすることを確認した上で、応答生成部107が、読み出したバリューを含む応答を生成して、GET要求の送信元に送信する。読み出したキーバリューに含まれるキーが、指定されたキーにマッチするかの判断は、KVアクセス部106が行っても良いし、処理振分部102が行っても良いし、当該判断を行う処理部を独立して設けてもよい。指定されたキーにマッチしない場合は、マッチしなかった場合は再びハッシュテーブルに戻り、エントリの探索を再開し、同様にマッチするキーが見つかるか、あるいはマッチするキーが無いことが確認できるまで繰り返す。
次に、GETNEXT要求、GETPREV要求、または、GETRANGE要求を受けた場合の動作を説明する。GETNEXT要求は、指定したキーの辞書順で、次のキーに対応するバリューを読み出すことの要求である。GETPREV要求は、指定したキーの辞書順で、前のキーに対応するバリューを読み出すことの要求である。GETRANGE要求は,2つのキーを指定し、当該指定した2つのキーの間に存在する全てのキー(当該範囲を規定する2つのキーを含むように定義しても、含まないように定義してもよい)に対応するバリューを読み出すことの要求である。
処理振分部102が、GETNEXT要求、GETPREV要求、または、GETRANGE要求を受けたことを解釈し、順序キー列アクセス部104に、指定されたキーと、要求の内容を通知する。
順序キー列アクセス部104は、GETNEXT要求であれば、指定されたキーの次のキー、GETPREV要求であれば、指定されたキーの前のキー、GETRANGE要求であれば、指定された2つのキーの間にある全てのキーを、順序キー列記憶部109内の順序キー列に基づき、特定する。なお、前述したように、順序キー列において、キーと関連づけて、バリューが格納されているKV記憶部110上のKVアドレスを保持してもよく、この場合は、特定したキーに対応するバリューのKV記憶部110上のKVアドレスも特定してもよい。
順序キー列アクセス部104は、特定したキーを、処理振分部102に渡し、処理振分部102は、当該特定したキーをハッシュテーブルアクセス部103に渡す。ハッシュテーブルアクセス部103は、ハッシュテーブルを用いて、当該特定したキーに対応するバリューのKV記憶部110上のKVアドレスを特定する。なお、順序キー列に関連づけられたKVアドレスを特定した場合は、順序キー列アクセス部104は、特定したKVアドレスをKVアクセス部106に渡せばよい。
この後の処理は、GET要求の場合と同様である。すなわち、KVアクセス部106が、KV記憶部110にアクセスしてバリュー(もしくはキーバリューなど)を読み出し、応答生成部107が、読み出したバリュー(もしくはキーバリューなど)を含めた応答を生成して、要求の送信元に送信する。
次に、PUT要求を受けた場合の動作を説明する。PUT要求は、キーとバリューとを指定し、キーに対応づけてバリューを書き込むことの要求である。
処理振分部102が、PUT要求を受けたことを解釈し、ハッシュテーブルアクセス部103にキーとバリューとを渡し、順序キー列アクセス部104にキーを渡す。ハッシュテーブルアクセス部103は、指定されたキーのハッシュ値を計算し、ハッシュテーブル上の当該ハッシュアドレスに対応するエントリを生成する。KVアドレス割当部105は、指定されたキーとバリュー(少なくともバリュー)とを含むデータを格納するKV記憶部110上のKVアドレスを、当該キーに対して割り当てる。ハッシュテーブルアクセス部103は、生成したエントリに、KVアドレス割当部105が決定したKV記憶部110上のKVアドレスを格納する。
また順序キー列アクセス部104は、順序キー列の構造に従って、指定されたキーのエントリを順序キー列に追加する。キーに関連づけて、当該KVアドレス割当部105が割り当てたKVアドレスを格納してもよい。このKVアドレスは、ハッシュテーブルに生成したエントリに設定したKVアドレスと同じである。
なお、KVアドレス割当部105は、ハッシュテーブルアクセス部103または順序キー列アクセス部104の少なくとも一方の要求に応じて、KVアドレスを割り当ててもよい。あるいは、処理振分部102からKVアドレスの割り当て要求を受けて、指定されたバリューを含むデータを格納するKV記憶部110上のKVアドレスを割り当ててもよい。
KVアクセス部106は、KVアドレス割当部105で割り当てられたKV記憶部110上のKVアドレスに、指定されたバリューを含むデータ(ここではキーバリュ−)の書き込みを行う。
応答生成部107は、KVアクセス部106による書き込みが完了すると、PUT要求を実行できた旨の応答を生成して、PUT要求の送信元に送信する。
ここで、指定されたキーと同じキーに対応するキーバリューが既にKV記憶部110されているかどうかを事前に確認する必要がある場合は、当該キーにマッチするエントリがハッシュテーブルに無いことを確認できた場合、または、KVアクセス部106でキーを読み出した時点で、マッチするエントリが無いことを確認できた場合に、KVアドレス割当部105は、KV記憶部110上に新規に格納するデータ(キーまたはキーバリューなど)のKVアドレスの割り当てを行えばよい。指定されたキーに対応するデータが既に保持されていた場合は、既にハッシュテーブルと順序キー列に該当エントリがあることになるので、それぞれに既に存在しているエントリのKVアドレスを、新しく割り当てられたKVアドレスで上書きすればよい。
なお、指定されたキーと同じキーに対応するデータ(バリューまたはキーバリューなど)を既に登録しているかどうかの確認は、上述ではハッシュテーブルアクセス部103経由で行う例を示したが、順序キー列アクセス部104を用いてもよい。すなわち、順序キー列に、指定されたキーと同じキーが存在するかを確認すればよい。なお、ハッシュテーブルアクセス部103経由で行った方が、処理が高速になるという利点がある。
図5に、本実施形態の動作例のフローチャートを示す。ここでは読み出しに係る要求として、GETNEXT要求を受け付けた場合の動作例を示す。
まず、要求解釈部101がクライアント装置(図1参照)から、ネットワークを介してGETNEXT要求を受け付ける(S101)。GETNEXT要求は、インターネットであればTCP/IPパケット等により運ばれる。
処理振分部102は、GETNEXT要求で指定されたキーと、要求の処理内容とを順序キー列アクセス部104に通知する。順序キー列アクセス部104は、順序キー列に基づき、指定されたキーの次のキー(指定されたキーに関連するキー)を特定し、処理振分部102に渡す(S102)。
処理振分部102は、当該キーをハッシュテーブルアクセス部103に渡し、ハッシュテーブルアクセス部103は、当該キーのハッシュ値を計算する。そして、ハッシュテーブルにおいて当該ハッシュ値に基づくハッシュアドレスに対応するエントリに格納されているKVアドレスを取得する(S103)。
KVアクセス部106は、KV記憶部110において当該KVアドレスに格納されているデータ(キーバリューなど)を読み出し、当該データからバリューを取り出す(S104)。
応答生成部107は、KVアクセス部106により取得されたバリューを含む応答を生成し、当該応答をGETNEXT要求の送信元に送信する(S105)。
ここでは、GETNEXT要求を受け受けた場合の動作を説明したが、GETPREV要求、または、GETRANGE要求などを受けた場合も同様にして行われる。
図6に、本実施形態の他の動作例のフローチャートを示す。ここでは、書き込みに係る要求として、PUT要求を受け付けた場合の動作例を示す。
まず、要求解釈部101がクライアント装置から、ネットワークを介してPUT要求を受け付ける(S201)。
処理振分部102は、PUT要求で指定されたキーとバリューとをハッシュテーブルアクセス部103に渡し、ハッシュテーブルアクセス部103は、当該キーのハッシュ値を計算する。またKVアドレス割当部105にKVアドレスの割り当てを要求してKVアドレスの割り当てを受け(S202)、ハッシュテーブルにおいて当該ハッシュ値に基づくハッシュアドレスに対応するエントリにKVアドレスを格納する(S203)。
処理振分部102は、PUT要求で指定されたキーを順序キー列アクセス部104に渡す。順序キー列アクセス部104は、順序キー列に、指定されたキーを追加する(S204)。
KVアクセス部106は、KVアドレス割当部105で割り当てられたKV記憶部110上のKVアドレスに、指定されたバリューを含むデータ(キーバリューなど)の書き込みを行う(S205)。
応答生成部107は、KVアクセス部106による書き込みが完了すると、PUT要求を実行できた旨の応答を生成して、PUT要求の送信元に送信する(S206)。
以上、本実施形態によれば、GET要求に対してはハッシュテーブル方式並みの高速な検索を行って応答を返しつつ、GETNEXT要求/GETPREV要求/GETRANGE要求などのキー順序を考慮する必要がある要求にも、高速に検索して応答することが可能になる。
(第2の実施形態)
図7に、本発明の第2の実施形態に係るデータ処理装置を示す。図7のデータ処理装置は、第1の実施形態のデータ処理装置を拡張したものである。第1の実施形態と異なり、内部キー生成部111が追加され、順序キー列記憶部109が除去されている。第2の実施形態では、順序キー列をバリューとして、KV記憶部110で管理するところが異なる。以下、第1の実施形態との差分を中心に説明し、重複する構成および動作の説明は適宜省略する。
第1の実施形態では、順序キー列は順序キー列記憶部109(図2参照)で管理され、一例としてファイルシステムで管理されることを述べた。順序キー列は、全てのキーを辞書順に並べて記憶しているので、それだけで容量が大きくなるため、一般に複数の部分に分割されている。個々の部分は全体の部分集合となり、それ自体でキーを辞書順に並べて管理している。当然ながら既存のキーの並び間に、新たなキーを挿入したり、あるいはキーの並びの中の途中のキーを削除したりする必要がある。このことから、キーの位置や長さが柔軟に変更可能である必要があり、また、部分自体を新規に生成したり削除したりすることも容易にできる必要がある。これには上述したファイルシステムを利用することで対応でき、個々の部分は個々のファイルとして実装される。これにより実装が容易となるが、一方でファイルシステムを用いると、汎用で複雑な機構を設ける必要があり、構成全体として複雑になり、性能的にもあまり効率が良くなくなる可能性がある。
そこで本実施形態では、ファイルシステムを使わずに、順序キー列を、内部的なキーバリューとしてKV記憶部110で管理する構成をとる。
順序キー列アクセス部104は、PUT要求を受けた場合、PUT要求で指定されたキーを追加した新たな順序キー列を生成(詳細は後述)する。内部キー生成部111は、予め定めた方法で内部キーを生成する。一例として内部キーとして、常に同じ値を生成することがある。以下の説明では、内部キー生成部111は、常に同じ値の内部キーを生成するとする。処理振分部102は、内部キーと新たな順序キー列とをハッシュテーブルアクセス部103に渡す。ハッシュテーブルアクセス部103は、内部キーからハッシュ値を計算し、ハッシュテーブルに当該ハッシュ値に基づくハッシュアドレスに対応するエントリを生成し、生成したエントリに、新たな順序キー列を格納するためのKV記憶部110上のKVアドレスを格納する。当該KVアドレスは、KVアドレス割当部105に要求するなどして割り当てを受ければよい。KVアクセス部106は、新たな順序キー列を、通常のバリュー(データ)として、KV記憶部110上のKVアドレスに格納する。
具体例として、例えばデータ処理装置を立ち上げて、最初のPUT(Key=“John”、Value=“GHI”)要求を受けたとする。このとき、指定されたキーとバリューが初めて、この装置に格納されることになるので、順序キー列としては、この指定されたキー(John)のみが存在することになる。よって、このキーを最初の順序キー列として、KV記憶部110に、内部キーに対応するデータ(バリュー)として格納するべく、例えば、内部キー生成部111は、Key=“key_seq0”を生成し、Value=“John”とする。これらを処理振分部102に渡す。処理振分部102は、内部キーと“John”とをハッシュテーブルアクセス部103に渡す。ハッシュテーブルアクセス部103は、この内部キー “key_seq0”のハッシュ値を計算し、ハッシュテーブルにおける当該ハッシュ値のエントリに、“John”が格納されるKVアドレスを格納する。KVアドレスは、KVアドレス割当部105が割り当てる。KVアクセス部106は、“John”を、通常のバリューとしてKV記憶部110に格納する。なお、PUT要求そのものに対する処理も、第1の実施形態と同様にして行う。すなわち、“John”のハッシュ値に対応するエントリに、“GHI”を格納するKV記憶部110上のKVアドレスを格納し、KV記憶部110上の当該KVアドレスには、“GHI”を含むデータを格納する。どちらの処理を先にするかは任意である。
さらに、PUT(Key=“Bob”、Value=“JKL”)要求を受けた場合、まず順序キー列アクセス部104は、現在の順序キー列の読み出しを行う。すなわち、内部キー生成部111に内部キーの生成を依頼する。内部キー生成部111は、Key=“key_seq0”を生成し、処理振分部102に渡す。処理振分部102は、これをハッシュテーブルアクセス部103に送る。ハッシュテーブルアクセス部103は、“key_seq0”のハッシュ値を計算し、ハッシュ値に対応するエントリに格納されたKVアドレスを取得する。KVアクセス部106は、KV記憶部110上の当該KVアドレスからデータ、すなわち、内部キー “key_seq0”のバリューである“John”を読み出す。KVアクセス部106は、これを順序キー列アクセス部104に渡す。これにより、順序キー列アクセス部104は、現在の順序キー列“John”を得る。そして、今回のPUT要求で指定されたKey=“Bob”と、現在の順序キー列“John”を比較し、“Bob”を“John”の前に配置することにより、新たな順序キー列として“Bob John”を生成する。これを新たなバリューとし、また内部キーは固定の値である “key_seq0”とする。そして、前回同様に、ハッシュテーブルに、当該内部キーのハッシュ値に対応するエントリに、“Bob John”を格納するためのKV記憶部110上のKVアドレスを上書きし、“Bob John”をKV記憶部110上のKVアドレスに格納する。当該アドレスはKVアドレス割当部105により割り当てを受ける。なお、PUT要求そのものに対する処理も行う。すなわち、“Bob”のハッシュ値に対応するエントリに、“JKL”を格納するKV記憶部110上のKVアドレスを格納し、KV記憶部110上の当該KVアドレスには、“JKL”を含むデータを格納する。どちらの処理を先にするかは任意である。
この後、さらにPUT(Key=“Ken”、Value=“MNO”)要求が来た場合、同様に、内部キーを “key_seq0”として、KV記憶部110からバリュー(データ)“Bob John Ken”を現在の順序キー列として読み出す。これに“Ken”を追加して、新たな順序キー列“Bob John Ken”を得る。ハッシュテーブルおよびKV記憶部110を前回と同様にして更新する。なお、PUT要求そのものに対する処理も前回と同様にして行う。
さらに、PUT(Key=“Bruce”、Value=“PQR”)要求が来た場合、同様に、内部キーを“key_seq0”として生成し、KV記憶部110からバリュー(データ)“Bob John Ken”を現在の順序キー列として読み出す。これに“Bruce”を追加して、新たな順序キー列“Bob Bruce John Ken”を得る。ハッシュテーブルおよびKV記憶部110を前回と同様にして更新する。なお、PUT要求そのものに対する処理も前回と同様にして行う。
本実施形態におけるKV記憶部110のデータ構造を図8に示す。順序キー列を含むデータ(バリュー)が、通常のキーに対応するバリューと同じ位置づけで、KV記憶部110に記憶されている。
次に、GETNEXT(Key=“John”)要求を受けた場合、順序キー列アクセス部104は、前述同様に、まず現在の順序キー列を読み出す。すなわち、内部キー生成部111に内部キーの生成を要求し、内部キー生成部111は、内部キーとして固定の値である“key_seq0”を生成して、処理振分部102に渡す。処理振分部102は、これをハッシュテーブルアクセス部103に渡して、内部キーに対応するバリュー(データ)が格納されているKVアドレスをハッシュテーブルから取得する。KVアクセス部106は、KV記憶部110の当該取得したKVアドレスから、内部キー “key_seq0”のバリューである“Bob Bruce John Ken”を読み出す。これを順序キー列アクセス部104に渡し、これにより順序キー列アクセス部104は現在の順序キー列を得る。この順序キー列の情報から、GETNEXTで指定されたキーであるJohnの次のキーはKenであることを確認する。キー“Ken”を処理振分部102に渡し、処理振分部102は、これをハッシュテーブルアクセス部103に渡す。ハッシュテーブルアクセス部103は、“Ken”のハッシュ値に対応するエントリからKVアドレスを取得し、KVアクセス部106が、KV記憶部110における当該KVアドレスからデータを読み出し、読み出したデータから、キー“Ken”に対応するバリューを取り出す。応答生成部107が、取り出したバリューを含む応答を生成して、GETNEXT要求の送信元に送信する。
なお、順序キー列はPUT要求が来る毎にサイズが増大していくので、適宜分割して、それぞれに異なる内部キーを割り当ててもよい。例えば内部キーkey_seq0に対応する順序キー列を2つに分割し、それぞれ、内部キーとしてkey_seq1、key_seq2を割り当ててもよい。分割して管理するアルゴリズムは、LSM−treeなど従来の様々な方式に従ってよく、本実施形態はその内容を問わない。この場合、内部キー生成部111は、GET要求等の読み出しの要求を受けた場合は、当該アルゴリズムに基づき内部キーを特定すればよい。単純には、分割の際、アルファベットの範囲で分けてもよい。例えばA〜L、M〜Zの2つのグループに分けて、内部キーとしてkey_seq1、key_seq2を割り当てる。そして、読み出し要求で指定されたキーの先頭のアルファベットがA〜Lのときはkey_seq1、M〜Zのときはkey_seq2と決定してもよい。ここで述べた例は実現の可能性を示すための例に過ぎず、他にも様々な方法で実施可能である。
また、内部キー生成部111が生成する内部キーは、GET要求やPUT要求など、要求解析部で受け付ける要求で指定されるキー(外部キーと呼ぶ)と同じ値になる可能性もある。この問題を解消するため、外部キーと内部キーを明確に区別する情報を別途、外部キーおよび内部キーに付加してもよい。例えば、外部キーには例えば常に先頭に0を付け、内部キーには常に先頭に1を付ける。すなわち、外部キーが “John”であれば、先頭に0を付けて“0John”とし、内部キーが“key_seq0”であれば、先頭に1を付けて、 “1key_seq0”とする。このように、内部キーおよび外部キーに、特定の識別子を付けることで、内部キーと外部キーとを明確に区別できる。識別子の形式や付け方はどのような形態でもよい。
図9に、本実施形態の動作例のフローチャートを示す。ここでは、読み出しに係る要求として、GETNEXT要求を受け付けた場合の動作例を示す。
まず、要求解釈部101がクライアント装置から、ネットワークを介してGETNEXT要求を受け付ける(S301)。
処理振分部102は、GETNEXT要求で指定されたキーを順序キー列アクセス部104に渡す。順序キー列アクセス部104は、内部キー生成部111に内部キーの生成を依頼し、内部キー生成部111は、内部キーを生成して、処理振分部102に送る(S302)。
処理振分部102は、内部キーをハッシュテーブルアクセス部103に渡し、ハッシュテーブルアクセス部103は、当該内部キーのハッシュ値を計算する。そして、ハッシュテーブルにおいて当該ハッシュ値に基づくハッシュアドレスに対応するエントリに格納されているKVアドレスを取得する(S303)。
KVアクセス部106は、KV記憶部110において当該KVアドレスに格納されているデータを読み出し、当該データからバリューである順序キー列を取り出す(S304)。
順序キー列アクセス部104は、当該順序キー列において、指定されたキーの次のキーを特定し、特定したキーを処理振分部102に送る(S305)。
処理振分部102は、当該キーをハッシュテーブルアクセス部103に渡し、ハッシュテーブルアクセス部103は、当該キーのハッシュ値を計算する。そして、ハッシュテーブルにおいて当該ハッシュ値に基づくハッシュアドレスに対応するエントリに格納されているKVアドレスを取得する(S306)。
KVアクセス部106は、KV記憶部110において当該KVアドレスに格納されているデータを読み出し、当該データからバリューを取り出す(S307)。
応答生成部107は、KVアクセス部106により取得されたバリューを含む応答を生成し、当該応答をGETNEXT要求の送信元に送信する(S308)。
ここでは、GETNEXT要求を受け受けた場合の動作を説明したが、GETPREV要求、または、GETRANGE要求などを受けた場合も同様にして行われる。
図10に、本実施形態の他の動作例のフローチャートを示す。ここでは、書き込みに係る要求として、PUT要求を受け付けた場合の動作例を示す。
まず、要求解釈部101がクライアント装置から、ネットワークを介してPUT要求を受け付ける(S401)。
処理振分部102は、PUT要求で指定されたキーを順序キー列アクセス部104に渡す。順序キー列アクセス部104は、内部キー生成部111に内部キーの生成を依頼し、内部キー生成部111は、内部キーを生成して、処理振分部102に送る(S402)。
処理振分部102は、当該内部キーをハッシュテーブルアクセス部103に渡し、ハッシュテーブルアクセス部103は、当該内部キーのハッシュ値を計算する。ハッシュ値に対応するエントリからKVアドレスを取得し(S403)、KVアクセス部106に渡す。KVアクセス部106は、KV記憶部110における当該KVアドレスからデータを読み出し、データから順序キー列を取得する(S404)。
順序キー列アクセス部104は、取得された順序キー列に、PUT要求で指定されたキーを追加して更新し、更新後の順序キー列をハッシュテーブルアクセス部103に渡す(S405)。ハッシュテーブルアクセス部103は、KVアドレス割当部105にKVアドレスの割り当てを要求して、KVアドレスの割り当てを受ける(S406)。ハッシュテーブルにおいて当該更新後の順序キー列のハッシュ値に基づくハッシュアドレスに対応するエントリに、KVアドレスを格納(上書き)する(S407)。KVアクセス部106は、KV記憶部110における当該KVアドレスに、更新後の順序キーを含むデータを書き込む(S408)。
処理振分部102は、PUT要求で指定されたキーとバリューとをハッシュテーブルアクセス部103に渡し、ハッシュテーブルアクセス部103は、当該指定されたキーのハッシュ値を計算する。ハッシュテーブルアクセス部103は、KVアドレス割当部105にKVアドレスの割り当てを要求してKVアドレスの割り当てを受け(S409)、ハッシュテーブルにおいて当該ハッシュ値に基づくハッシュアドレスに対応するエントリにKVアドレスを格納する(S410)。
KVアクセス部106は、KV記憶部110上の当該KVアドレスに、指定されたバリューを含むデータの書き込みを行う(S411)。
応答生成部107は、KVアクセス部106による書き込みが完了すると、PUT要求を実行できた旨の応答を生成して、PUT要求の送信元に送信する(S412)。
以上、本実施形態によれば、順序キー列をハッシュテーブルベースのKVS上にバリューとして管理することができるので、順序キー列を管理するためにファイルシステムを使用する必要はなくなる。これにより、全体のデータ構造の簡略化を図ることができる。
尚、各実施形態のデータ処理装置は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現可能である。すなわち、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現出来る。このとき、データ処理装置は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現することや、各種の記憶媒体に記憶、あるいはネットワークを介して上記のプログラムを配布、このプログラムをコンピュータ装置に適宜インストールすることで実現が出来る。また、データ処理装置内の各記憶部は、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはCD−R、CD−RW、DVD−RAM、DVD−Rなどの記憶媒体などを適宜利用して実現することができる。
本発明は上記実施形態そのままに限定されず、実施段階では要旨を逸脱しない範囲で構成要素を変形し具体化出来る。上記実施形態に開示されている複数の構成要素の適宜な組み合わせで、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除出来、異なる実施形態に渡る要素を適宜組み合わせることも出来る。
21〜23:クライアント装置
11:データ処理装置
101:要求解釈部
102:処理振分部
103;ハッシュテーブルアクセス部
104:順序キー列アクセス部
105:KVアドレス割当部
106:KVアクセス部
107:応答生成部
108:ハッシュテーブル記憶部
109:順序キー列記憶部
110:KV記憶部
111:内部キー生成部

Claims (16)

  1. キーを指定した読み出し要求を受け付け、前記読み出し要求を解釈する要求解釈部と、
    複数のキーを所定のルールに従った順序で保持する順序キー列における前記キーに対して前記読み出し要求で指示された位置関係にあるキーを特定する第1アクセス部と、
    第1アドレスと第2アドレスとを対応づけて管理する内部または外部の第1記憶装置から、前記第1アクセス部で特定されたキーのハッシュ値に基づく第1アドレスに対応する第2アドレスを取得する第2アクセス部と、
    内部または外部の第2記憶装置において前記第2アクセス部で取得された前記第2アドレスに格納されたデータを読み出す第3アクセス部と、
    を備えたデータ処理装置。
  2. 前記要求解釈部で解釈された前記読み出し要求の内容に応じて、前記第1アクセス部に前記キーと前記読み出し要求で指示された位置関係の情報とを通知し、前記第1アクセス部で特定されたキーを受け取り、受け取ったキーを前記第2アクセス部に通知する処理振分部
    をさらに備えた請求項1に記載のデータ処理装置。
  3. 前記第2記憶装置の第2アドレスを管理するアドレス割当部を備え、
    前記要求解釈部は、キーとバリューとを指定した書き込み要求を受け付け、前記書き込み要求を解釈し、
    前記第1アクセス部は、前記書き込み要求で指定されたキーを前記順序キー列に追加することにより前記順序キー列を更新し、
    前記アドレス割当部は、前記書き込み要求で指定されたキーに対して第2アドレスを割り当て、
    前記第2アクセス部は、前記第1記憶装置において前記指定されたキーのハッシュ値に基づく第1アドレスに対応づけて前記第2アドレスを登録し、
    前記第3アクセス部は、前記第2記憶装置における前記第2アドレスに前記バリューを含むデータを書き込む
    請求項1または2に記載のデータ処理装置。
  4. 前記順序キー列は、前記第2記憶装置に格納されており、
    前記第1記憶装置は、内部キーのハッシュ値に基づく第1アドレスと、前記順序キー列が格納された第2アドレスとの対応を管理し、
    前記第2アクセス部は、前記第1記憶装置から前記内部キーに対応する前記第2アドレスを取得し、
    前記第3アクセス部は、前記第2アクセス部で取得された前記第2アドレスに格納されたデータである前記順序キー列を前記第2記憶装置から読み出し、
    前記第1アクセス部は、前記第3アクセス部により読み出された前記順序キー列を用いて前記キーを特定する
    請求項1ないし3のいずれか一項に記載のデータ処理装置。
  5. 前記順序キー列は、前記第2記憶装置に格納されており、
    前記第1記憶装置は、内部キーのハッシュ値に基づく第1アドレスと、前記順序キー列が格納された第2アドレスとの対応を管理し、
    前記第2アクセス部は、前記第1記憶装置から前記内部キーに対応する前記第2アドレスを取得し、
    前記第3アクセス部は、前記第2アクセス部で取得された前記第2アドレスに格納されたデータに含まれる前記順序キー列を前記第2記憶装置から読み出し、
    前記第1アクセス部は、前記第3アクセス部により読み出された前記順序キー列に、前記書き込み要求で指定されたキーを追加することにより前記順序キー列を更新し、
    前記アドレス割当部は、前記更新された順序キー列に対して第2アドレスを割り当て、
    前記第2アクセス部は、前記第1記憶装置において前記内部キーのハッシュ値に基づく第1アドレスに対応づけて前記割り当てられた第2アドレスを登録し、
    前記第3アクセス部は、前記第2記憶装置における前記割り当てられた第2アドレスに前記順序キー列を含むデータを書き込む
    請求項3に記載のデータ処理装置。
  6. 前記内部キーを生成する内部キー生成部
    をさらに備えた請求項4または5に記載のデータ処理装置。
  7. 前記順序キー列を複数に分割した各部分に、それぞれ異なる内部キーが割り当てられ、
    前記内部キー生成部は、前記読み出し要求または前記書き込み要求で指定されたキーが、前記複数の各部分のいずれに属するかに応じて前記内部キーを生成する
    請求項6に記載のデータ処理装置。
  8. 前記順序キー列は、前記複数のキーにそれぞれ対応づけて前記第2アドレスを管理し、
    前記第1アクセス部は、前記特定したキーに対応する前記第2アドレスを特定し、
    前記第3アクセス部は、前記第2記憶装置における前記特定した第2アドレスからデータを読み出す
    請求項1ないし7のいずれか一項に記載のデータ処理装置。
  9. 前記順序キー列は、前記複数のキーを辞書順で管理する
    請求項1ないし8のいずれか一項に記載のデータ処理装置。
  10. 前記読み出し要求は、1つのキーを指定し、前記キーの次の位置のキー、前記キーの前の位置のキー、またはこれらの両方を読み出すことを要求する、
    もしくは、
    前記読み出し要求は、2つのキーを含み、前記2つのキーの間に位置するキーの読み出しを要求する
    請求項1ないし9のいずれか一項に記載のデータ処理装置。
  11. キーを指定した読み出し要求を受け付け、前記読み出し要求を解釈する要求解釈ステップと、
    複数のキーを所定のルールに従った順序で保持する順序キー列における前記キーに対して前記読み出し要求で指示された位置関係にあるキーを特定する第1アクセスステップと、
    第1アドレスと第2アドレスとを対応づけて管理する内部または外部の第1記憶装置から、前記第1アクセス部で特定されたキーのハッシュ値に基づく第1アドレスに対応する第2アドレスを取得する第2アクセスステップと、
    内部または外部の第2記憶装置において前記第2アクセス部で取得された前記第2アドレスに格納されたデータを読み出す第3アクセスステップと、
    をコンピュータが実行するデータ処理方法。
  12. 前記要求解釈ステップで解釈された前記読み出し要求の内容に応じて、前記第1アクセスステップに前記キーと前記読み出し要求で指示された位置関係の情報とを通知し、前記第1アクセスステップで特定されたキーを受け取り、受け取ったキーを前記第2アクセスステップに通知する処理振分ステップ
    をさらに備えた請求項11に記載のデータ処理方法。
  13. 前記第2記憶装置の第2アドレスを管理するアドレス割当ステップを備え、
    前記要求解釈ステップは、キーとバリューとを指定した書き込み要求を受け付け、前記書き込み要求を解釈し、
    前記第1アクセスステップは、前記書き込み要求で指定されたキーを前記順序キー列に追加することにより前記順序キー列を更新し、
    前記アドレス割当ステップは、前記書き込み要求で指定されたキーに対して第2アドレスを割り当て、
    前記第2アクセスステップは、前記第1記憶装置において前記指定されたキーのハッシュ値に基づく第1アドレスに対応づけて前記第2アドレスを登録し、
    前記第3アクセスステップは、前記第2記憶装置における前記第2アドレスに前記バリューを含むデータを書き込む
    請求項11または12に記載のデータ処理方法。
  14. キーを指定した読み出し要求を受け付け、前記読み出し要求を解釈する要求解釈ステップと、
    複数のキーを所定のルールに従った順序で保持する順序キー列における前記キーに対して前記読み出し要求で指示された位置関係にあるキーを特定する第1アクセスステップと、
    第1アドレスと第2アドレスとを対応づけて管理する内部または外部の第1記憶装置から、前記第1アクセス部で特定されたキーのハッシュ値に基づく第1アドレスに対応する第2アドレスを取得する第2アクセスステップと、
    内部または外部の第2記憶装置において前記第2アクセス部で取得された前記第2アドレスに格納されたデータを読み出す第3アクセスステップと、
    をコンピュータに実行させるためのコンピュータプログラム。
  15. 前記要求解釈ステップで解釈された前記読み出し要求の内容に応じて、前記第1アクセスステップに前記キーと前記読み出し要求で指示された位置関係の情報とを通知し、前記第1アクセスステップで特定されたキーを受け取り、受け取ったキーを前記第2アクセスステップに通知する処理振分ステップ
    をさらに備えた請求項14に記載のコンピュータプログラム。
  16. 前記第2記憶装置の第2アドレスを管理するアドレス割当ステップをさらに前記コンピュータに実行させ、
    前記要求解釈ステップは、キーとバリューとを指定した書き込み要求を受け付け、前記書き込み要求を解釈し、
    前記第1アクセスステップは、前記書き込み要求で指定されたキーを前記順序キー列に追加することにより前記順序キー列を更新し、
    前記アドレス割当ステップは、前記書き込み要求で指定されたキーに対して第2アドレスを割り当て、
    前記第2アクセスステップは、前記第1記憶装置において前記指定されたキーのハッシュ値に基づく第1アドレスに対応づけて前記第2アドレスを登録し、
    前記第3アクセスステップは、前記第2記憶装置における前記第2アドレスに前記バリューを含むデータを書き込む
    請求項14または15に記載のコンピュータプログラム。
JP2015058741A 2015-03-20 2015-03-20 データ処理装置、データ処理方法およびコンピュータプログラム Active JP6268116B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015058741A JP6268116B2 (ja) 2015-03-20 2015-03-20 データ処理装置、データ処理方法およびコンピュータプログラム
US15/067,518 US10846338B2 (en) 2015-03-20 2016-03-11 Data processing device, data processing method, and non-transitory computer readable medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015058741A JP6268116B2 (ja) 2015-03-20 2015-03-20 データ処理装置、データ処理方法およびコンピュータプログラム

Publications (2)

Publication Number Publication Date
JP2016177688A JP2016177688A (ja) 2016-10-06
JP6268116B2 true JP6268116B2 (ja) 2018-01-24

Family

ID=56925385

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015058741A Active JP6268116B2 (ja) 2015-03-20 2015-03-20 データ処理装置、データ処理方法およびコンピュータプログラム

Country Status (2)

Country Link
US (1) US10846338B2 (ja)
JP (1) JP6268116B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6378044B2 (ja) 2014-10-31 2018-08-22 東芝メモリ株式会社 データ処理装置、データ処理方法およびプログラム
KR102416004B1 (ko) * 2015-09-02 2022-07-04 삼성전자주식회사 인터페이스 회로들, 메모리 모듈들 및 인터페이스 회로들과 메모리 모듈들을 연결하는 스위치 회로를 포함하는 서버 장치
WO2020066148A1 (ja) * 2018-09-27 2020-04-02 ソニー株式会社 記憶装置、High Dimensional Gaussian Filtering回路、Stereo Depth計算回路、並びに情報処理装置
EP3542278A4 (en) * 2018-11-07 2019-12-18 Alibaba Group Holding Limited CROSSING A DATABASE OF INTELLIGENT CONTRACTS THROUGH A LOGIC CARD
CN110362572B (zh) * 2019-06-25 2022-07-01 浙江邦盛科技股份有限公司 一种基于列式存储的时序数据库***
CN110413613B (zh) * 2019-07-09 2023-01-17 创新先进技术有限公司 大数据量数据的写入、读取方法、装置及设备

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006053711A (ja) * 2004-08-11 2006-02-23 Tamaki Hirano 情報管理方法、情報処理システム、及びプログラム
US8086593B2 (en) * 2007-03-01 2011-12-27 Microsoft Corporation Dynamic filters for relational query processing
JP4848317B2 (ja) * 2007-06-19 2011-12-28 インターナショナル・ビジネス・マシーンズ・コーポレーション データベースのインデックス作成システム、方法及びプログラム
US8484439B1 (en) * 2009-10-27 2013-07-09 Juniper Networks, Inc. Scalable hash tables
US20110276744A1 (en) 2010-05-05 2011-11-10 Microsoft Corporation Flash memory cache including for use with persistent key-value store
JP5597666B2 (ja) * 2012-03-26 2014-10-01 株式会社東芝 半導体記憶装置、情報処理システムおよび制御方法
US10146818B2 (en) * 2013-03-15 2018-12-04 Nec Corporation Computing system
US9519575B2 (en) * 2013-04-25 2016-12-13 Sandisk Technologies Llc Conditional iteration for a non-volatile device
US9298521B1 (en) * 2013-04-29 2016-03-29 Seagate Technology Llc Command sets and functions
JP2015176407A (ja) * 2014-03-17 2015-10-05 Necソリューションイノベータ株式会社 検索装置、検索方法、検索用プログラムおよび検索用データ構造
JP6189266B2 (ja) 2014-08-20 2017-08-30 東芝メモリ株式会社 データ処理装置、データ処理方法及びデータ処理プログラム

Also Published As

Publication number Publication date
US10846338B2 (en) 2020-11-24
JP2016177688A (ja) 2016-10-06
US20160275199A1 (en) 2016-09-22

Similar Documents

Publication Publication Date Title
JP6268116B2 (ja) データ処理装置、データ処理方法およびコンピュータプログラム
US8996611B2 (en) Parallel serialization of request processing
JP6122557B2 (ja) ファイルマイグレーション方法及び装置、並びにストレージデバイス
JP6542909B2 (ja) ファイル操作方法及び装置
JP2012089094A5 (ja)
US9002844B2 (en) Generating method, generating system, and recording medium
US9584481B2 (en) Host providing system and communication control method
US20160306741A1 (en) Data Migration Method and Apparatus, and Processor
WO2014094421A1 (zh) 数据处理方法和虚拟机管理平台
CN107153512B (zh) 一种数据迁移方法和装置
CN109597903B (zh) 图像文件处理装置和方法、文件存储***及存储介质
CN112579595A (zh) 数据处理方法、装置、电子设备及可读存储介质
JP6951846B2 (ja) 計算機システム及びタスクの割当方法
CN113853778B (zh) 一种文件***的克隆方法及装置
JP6378044B2 (ja) データ処理装置、データ処理方法およびプログラム
JP6233846B2 (ja) 可変長ノンスの生成
CN114640678A (zh) 基于SR-IOV的Pod管理方法、设备及介质
JP6607044B2 (ja) サーバー装置、分散ファイルシステム、分散ファイルシステム制御方法、および、プログラム
CN107168645B (zh) 一种分布式***的存储控制方法及***
CN105786608A (zh) 异地虚拟机去重迁移方法及***
CN107153513B (zh) 一种分布式***服务器的存储控制方法及服务器
CN107168646B (zh) 一种分布式数据存储控制方法及服务器
CN107066206B (zh) 一种分布式物理磁盘的存储控制方法及***
JP2015179326A (ja) データ転送装置、データ転送方法およびコンピュータプログラム
CN107145305B (zh) 一种分布式物理磁盘的使用方法及虚拟机

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170307

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20170607

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171115

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

R150 Certificate of patent or registration of utility model

Ref document number: 6268116

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350