WO2013061680A1 - 情報処理装置、データ・アクセス方法およびプログラム - Google Patents
情報処理装置、データ・アクセス方法およびプログラム Download PDFInfo
- Publication number
- WO2013061680A1 WO2013061680A1 PCT/JP2012/071448 JP2012071448W WO2013061680A1 WO 2013061680 A1 WO2013061680 A1 WO 2013061680A1 JP 2012071448 W JP2012071448 W JP 2012071448W WO 2013061680 A1 WO2013061680 A1 WO 2013061680A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- store
- value
- symbol
- hierarchical
- entry
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Quality & Reliability (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本発明は、キーを効率的に格納するデータストアを実現するための情報処理装置、データ・アクセス方法およびプログラムを提供する。本発明に従う情報処理装置は、データストア100を構成し、シンボルのエントリ毎のカウンタを有する最上位ストア110と、それぞれ、上記データストア100を構成し、階層ごとに頻度に関する代表値Riが定義される1以上の階層ストア130と、アクセスされるシンボルを、最上位ストア110内でカウントし、カウンタ値に応じて最上位ストア110および1以上の階層ストア130へ振り分けを行う振り分け部150とを含む。上記振り分け部150は、最上位ストア110から移動されたシンボルに対するアクセスに対応して、該シンボルが含まれる階層ストア130に対し定義される頻度に関する代表値Riを用いて、最上位ストア110に該シンボルのエントリを復元する。
Description
本発明は、データストアに関し、より詳細には、キーを効率的に格納するデータストアを実現する情報処理装置、該データストアに対するデータ・アクセス方法およびプログラムに関する。
言語処理、ユーザ管理などのアプリケーション開発の分野において、単語、フレーズ、人名、URLなどの膨大な文字列をメモリに空間効率高く格納する技術に対する要望が高まっている。これは、文字列などをキーとする効率の高いデータストアを実現することにより、多数の文字列を省メモリで管理することが可能となり、ひいては上記アプリケーションを効率よく実現できるようになるからである。
上記用途で用いられるデータストアとして、ハッシュ・マップ(Hash Map/Hash Table)が知られている。ハッシュ・マップは、ハッシュ関数を用いてキーを値へマップするデータ構造であり、キーで値を登録し、キーで照会して値を取得することができる。ハッシュ・マップは、キーから要約されたハッシュ値により「値」を管理しているため、追記が容易であり、かつ、要素数によらず定数時間での検索および追加が可能であり、高速なデータ・アクセスが可能とされる。しかしながら、ハッシュ・マップは、衝突を低減するために充分に疎なテーブルが用いられ、メモリ空間効率を高めることは困難である。
上述した用途で用いられる他のデータストアとして、ダブルアレイ(Double-Array)で実装したトライ木(TRIE)が知られている。ダブルアレイで実装したトライ木(以下、単にダブルアレイという場合がある。)は、キーが格納されるトライ木をリンク構造で維持するデータ構造である。ダブルアレイは、上記ハッシュ・マップと比較すると、データ・アクセス速度の観点で見劣りするが、メモリ空間効率を比較的高くできることが知られている。
上述した用途で用いられる他のデータストアとして、さらに、LOUDS(Level Order Unary Degree Structure)で実装したトライ木が知られている。LOUDSは、ツリー構造を表現する簡潔データ構造である(非特許文献1)。単語などの文字列を格納するトライ木の表現にLOUDSを用いることによって、ダブルアレイでの実装と比較して、アクセス速度では数倍のコストがかかる一方、4~10倍のメモリ空間効率を実現した例も報告されている(非特許文献2)。一方、LOUDSは、メモリ空間中に密に配置されたデータ構造であるため、一度完成したLOUDSに対し新たな文字列を追加するには、新たな文字列のノードを追加する箇所に隙間(ノードを現す1ビット)を作るため平均半分のデータを移動する必要がある。このため、構築済みのデータ構造に新たな文字列を追加することは大きな処理コストを発生させる。
また、膨大な量のストリーム・データを処理する用途において、高頻度に出現するキーを優先的に保持する戦略が知られている。例えば、非特許文献3は、誤り許容カウント法(Lossy Counting Method)により、ストリーム・データとして入力されるアイテムの頻度をカウントし、出現頻度上位のアイテムの集合を取得する技術を開示している。その他、誤り許容カウント法の改良型として、非特許文献4に開示される確率的誤り許容カウント法(Probabilistic Lossy Counting Method)や、非特許文献5に開示されるニーモニック誤り許容カウント法(Mnemonic Lossy Counting Method)が知られている。
G. Jacobson、"Space-efficient Static Trees and Graphs"、In Proceedings of the 30th Annual Symposium on Foundations of Computer Science (SFCS '89)、IEEE Computer Society、USA、1989、549-554
岡野原 大輔、「大規模キー集合の効率的な格納法tx bep」、[online]、東京大学、[平成23年9月15日検索]、インターネット<URL:http://www-tsujii.is.s.u-tokyo.ac.jp/~hillbig/papers/2007-1031-massiveKeys.pdf>
G. S. Manku, et al.、"Approximate Frequency Counts over Data Streams"、Proceedings of the 28th International Conference on Very Large Data Base (VLDB)、2002
X. Dimitropoulos, et al.、"Probabilistic Lossy Counting: An efficient Algorithm for Finding Heavy Hitters"、ACM SIGCOMM Computer Communication Review、Volume 38、Issue 1、January 2008
Q. Rong, et al.、"Mnemonic Lossy Counting: An Efficient and Accurate Heavy-Hitters Identification Algorithm"、Performance Computing and Communications Conference (IPCCC) 2010 IEEE 29th International、2010、255-262
上述したように、ハッシュ・マップ、ダブルアレイおよびLOUDSなどのデータストアは、その特性において、概ねメモリ空間効率とデータ・アクセス速度とがトレードオフの関係にある。このため、上記従来技術のデータ構造では、空間効率およびデータ・アクセス速度が両立したデータストアを実現することが困難であった。
また、上記特許文献3に開示されるストリーム・アルゴリズムによれば、出現頻度上位のアイテムの集合を効率的に取得することができる。これにより、低い頻度のデータが重要ではない用途においては、比較的小さなメモリ消費量で、高頻度の比較的重要なデータを効率的に保持することが可能となる。しかしながら、出現頻度上位から漏れた低い頻度のアイテム・セットは、破棄されてしまうことになるため、上記特許文献3の従来技術は、辞書やユーザ管理等のためのキーバリュー・ストアのように、全てのエントリを保持する必要がある用途には使用することが困難であった。
本発明は、上記従来技術における不充分な点に鑑みてなされたものであり、本発明は、オンライン構築が可能であり、高い空間効率でキーを格納し、かつ、高いデータ・アクセス速度を有するデータストアを実現する情報処理装置、データストア操作方法およびプログラムを提供することを目的とする。
本発明では、上記課題を解決するために、データストアに実際に入力されるデータには、出現頻度の高いものから低いものまで種々存在することに着目し、下記の特徴を有する情報処理装置を提供する。本情報処理装置は、データストアを構成し、シンボルのエントリ毎のカウンタを有する最上位ストアと、それぞれ、上記データストアを構成し、階層ごとに頻度に関する代表値が定義される1以上の階層ストアと、アクセスされるシンボルを、上記最上位ストア内でカウントし、カウンタ値に応じて最上位ストアおよび1以上の階層ストアへ振り分けを行う振り分け部とを含む。情報処理装置において上記振り分け部は、上記最上位ストアから移動されたシンボルに対するアクセスに対応して、該シンボルが含まれる階層ストアに対し定義される頻度に関する代表値を用いて最上位ストアに該シンボルのエントリを復元する。
上記構成によれば、高頻度のシンボルを、データ・アクセス速度が優先されたデータ構造内に格納し、低頻度のシンボルを、メモリ空間効率が優先されたデータ構造内に格納することが可能となる。各シンボルを出現頻度に応じたタイプのストアに格納することにより、現実のデータ・アクセスにおいて、全体としてのメモリ空間効率およびスループットを向上することができる。
以下、本発明について実施形態をもって説明するが、本発明は、後述する実施形態に限定されるものではない。なお、以下に説明する実施形態では、データストアを実現する情報処理装置として、複数タイプのストアにキーを振り分けて格納するキーバリュー・ストア100を実現する、コンピュータ装置を一例に説明する。
まず、本実施形態によるキーバリュー・ストア100の具体的な構成を説明する前に、本実施形態によるキーバリュー・ストアの主な格納対象である、単語において観察される経験則について説明する。図1は、キーワードの出現頻度と出現頻度の順位との間に成立するジップの法則(Zipf's Law)を説明する図である。図1は、NHTSA(National Highway Traffic Safety Administration)が収集公開している687,000件のレコードから、254,000,000キーワードについて作成したグラフである。
ジップの法則とは、出現頻度がk番目に大きい要素の全体に占める割合がkに反比例することを表す経験則である。図1に示すように、ジップの法則によれば、キーワードのうち上位数%の高頻度領域に属するものが、全体の80%程度のヒットに寄与する一方で、下位80%の低頻度領域に属するキーワードは、全体の数%程度のヒットにしか寄与しないことになる。
本実施形態によるキーバリュー・ストア100では、上述したキーワードの出現頻度において観測されるジップの法則に鑑みて、キーワードなどのシンボルの出現頻度を計測し、各シンボルの出現頻度に応じて、メモリ空間効率およびアクセス速度においてトレードオフの関係を有する各タイプのデータストアに振り分ける。以下、図2~図15の図面を参照して、本実施形態によるコンピュータ装置上で実現されるキーバリュー・ストア100について、より詳細に説明する。
(1)機能ブロック
図2は、第1の実施形態によるコンピュータ装置上で実現される、キーバリュー・ストアの機能ブロックを示す図である。図2に示すキーバリュー・ストア100は、そのデータ構造として、カウンタ付きの最上位ストア110と、ブルームフィルタ120と、1以上の階層ストア130とを含み構成される。
図2は、第1の実施形態によるコンピュータ装置上で実現される、キーバリュー・ストアの機能ブロックを示す図である。図2に示すキーバリュー・ストア100は、そのデータ構造として、カウンタ付きの最上位ストア110と、ブルームフィルタ120と、1以上の階層ストア130とを含み構成される。
最上位ストア110は、主として図1における高頻度領域に属するキーワードを格納するためのデータストアであり、メモリ空間効率およびアクセス速度のトレードオフにおいてはアクセス速度が優先される。最上位ストア110には、シンボルのエントリ毎に、その出現頻度を保持するカウンタが設けられており、カウンタの値は、詳細を後述するシンボルの出現頻度に応じた振り分け処理において参照される。
これに対して、1以上の階層ストア130は、主として図1における高頻度領域未満の中頻度領域ないし低頻度領域に属するキーワードを格納するためのデータストアである。1以上の階層ストア130は、それぞれ、上記最上位ストア110とは異なる特性を有しており、上記トレードオフにおいてはメモリ空間効率が優先される。1以上の階層ストア130には、最上位ストア110よりも、膨大な数のシンボルが格納されることになる。そこで、本実施形態では、階層ストア130には、各シンボルの出現回数を保持する整数型データであるカウンタを設けず、コンパクトなデータ構造としている。
最上位ストア110および階層ストア130は、それぞれ、既知の如何なるタイプのデータストアから、上記トレードオフの関係において優先される特性(アクセス速度またはメモリ空間効率)を考慮して選択することができる。選択肢となるデータストアとしては、ハッシュ・マップ、動的トライ木および静的トライ木を挙げることができる。上記動的トライ木とは、ノードごとに文字配列を持たせたデータ構造、ダブルアレイ、遷移テーブルおよびトリプルアレイなどのリンク構造によってツリー構造を維持するトライ木である。一方、静的トライ木とは、LOUDSなどの簡潔データ構造によってツリー構造を維持するトライ木である。なお、トライ木に代えて、パトリシア木などの他のツリーを用いてもよい。
ハッシュ・マップは、検索および追加の操作を要素数によらず定数時間で実現し、上記に列挙したデータストアの中では最もデータ・アクセス速度が高いが、メモリ空間効率が比較的低い特徴を有する。また、ハッシュ・マップは、追記容易なデータ構造である。これに対し、LOUDSなどの静的トライ木は、上記に列挙したデータストアの中では最もメモリ空間効率が高いが、データ・アクセス速度が比較的低い特徴を有する。ダブルアレイなどの動的トライ木は、静的トライ木よりもデータ・アクセス速度が高く、一方で、ハッシュ・マップよりもメモリ空間効率が高く、追記も静的トライ木に比較しても容易である。
好適な実施形態では、最上位ストア110は、上述したハッシュ・マップを採用することができる。階層ストア130は、それぞれ、上述した動的トライ木および静的トライ木またはいずれか一方を好適に採用することができる。頻度が高いシンボルが格納される方のストアを上位であるとすると、動的トライ木および静的トライ木の両方の階層ストアを採用する場合、好適には、上位の階層ストア130として動的トライ木を採用し、下位の階層ストア130として静的トライ木を採用することができる。具体例として、最上位ストア110、第1階層ストア130-1および第2階層ストア130-2の3ストア構成を採用する場合は、好適には、それぞれハッシュ・マップ、動的トライ木および静的トライ木を用いる構成を採用することができる。
図2に示すキーバリュー・ストア100は、さらに、キーバリュー・ストア100に対するデータ操作のバックグラウンドまたはフォアグラウンドで動作する、振り分け部150を含み構成される。振り分け部150は、入力されるシンボルを、ストリーム・アルゴリズムを用いて最上位ストア110および1以上の階層ストア130-1~130-nへ振り分ける処理を実行する。振り分け部150は、より具体的には、入力されるシンボルを、上記最上位ストア110内でその出現頻度をカウントし、カウンタの値に応じて最上位ストア110に残留(STAY)させるエントリと、取り出していずれかの階層ストア130-1~130-nへ追加(ADD)するエントリとを判定する。
また、振り分け部150は、最上位ストア110から一旦移動されて階層ストア130に格納されているシンボルが再度入力された場合は、該シンボルに対応するエントリを最上位ストア110に再度追加(RE-ENTRY)する。最上位ストア110には、上記の通り、シンボルのカウント値が保持されるが、階層ストア130には各シンボルのカウンタが設けられていない。このため、シンボルがカウンタ付きの最上位ストア110から階層ストア130へ一旦移動すると、それ以前のカウント値が失われてしまう。
そこで、本実施形態では、階層ストア130それぞれに対し、階層ストア130におけるシンボルの出現頻度を代表する少なくとも1つのストア代表頻度値が定義される。上記ストア代表頻度値としては、階層ストア130のシンボルの出現頻度を要約する種々の値を用いることができるが、好適には、上記階層ストア130内のシンボル平均出現頻度、または起こり得る最悪の誤差を想定した最大出現頻度などを用いることができる。振り分け部150は、過去に移動されて最上位ストア110からエントリが削除されたシンボルに対するアクセスに対応して、このシンボルが格納される階層ストア130に対し定義された上記ストア代表頻度値を読み出し、移動により失われたカウンタ値をストア代表頻度値で復元した上で、最上位ストア110にエントリを再度追加する。
上述したように、振り分け部150は、アクセス速度に優れたタイプのより上位ストアにより高頻度なシンボルを振り分け、メモリ空間効率に優れたタイプのより下位のストアにより低頻度なシンボルを振り分けるように動作する。
上記ストリーム・アルゴリズムとしては、誤り許容カウント法(Lossy Counting Method)挙げることができ、以下に説明する実施形態では、振り分け部150は、誤り許容カウント法によりシンボルの出現頻度をカウントするものとして説明する。しかしながら、上記ストリーム・アルゴリズムとしては、上記カウント法の改良型である、確率的誤り許容カウント法(Probabilistic Lossy Counting Method)およびニーモニック誤り許容カウント法(Mnemonic Lossy Counting Method)を採用することを妨げない。
図2に示すブルームフィルタ120は、キーバリュー・ストア100において特定のキーが格納されていることを近似的ないし確率的に判定するフィルタである。ブルームフィルタ120には、k個(1以上の自然数)のハッシュ関数が定義されており、ハッシュ関数は、それぞれ、入力される特定のキーをビット配列中の配列位置にマッピングする。特定のキーをk個のハッシュ関数に入力し、得られたk個のハッシュ値に対応するビット群いずれかひとつでも「0」であれば、その特定のキーがキーバリュー・ストア100内に含まれていないことを示す。反対に、得られたk個の配列インデックスに対応するビット群すべてが「1」、すなわち有効化されていれば、その特定のキーがキーバリュー・ストア100中に含まれている可能性(含まれていない場合もある。)があることを示す。
システムは、キーバリュー・ストア100へ「キー」で「値」を登録することを要求する、登録要求(PUT)を受領すると、最上位ストア110内に、「キー」のエントリに関連付けて「値」を記憶する。同時に、システムは、登録要求(PUT)に応答して、ブルームフィルタ120のk個のハッシュ値に対応するビット群を「1」に有効化する。
また、システムは、キーバリュー・ストア100から「キー」で「値」を取得することを要求する、取得要求(GET)を受領すると、まず最上位ストア110に対し問い合わせを行う(GET1)。カウンタ付き最上位ストア110内で取得要求にかかる「キー」が見付かれば、システムは、「キー」のエントリに関連付けられた値を読み出し、取得要求元に返却する。一方、カウンタ付き最上位ストア110内で「キー」が見付からなければ、システムは、続いてブルームフィルタ120に対しキー存在確認を行うことができる(CHECK2)。
ブルームフィルタ120から肯定的な結果が返却された場合は、システムは、第1階層ストア130-1・・・第n階層ストア130-nの順に問い合わせを行い(GET3・・・GETX)、キーが見付かれば「キー」のエントリに関連付けられた「値」を、対応する階層ストア130から読み出し、取得要求元に返却する。ブルームフィルタ120から否定的な結果が返却された場合は、キーバリュー・ストア100内にキーが登録されていないことが明らかなので、階層ストア130に対する問い合わせは行わず、直ちに取得要求元に、キーが未登録である旨のエラーを返却する。最下層の階層ストア130-nまで問い合わせても見付からなかった場合も、システムは、キーが未登録である旨のエラーを取得要求元に返却する。
なお、ブルームフィルタ120に対する問い合わせは、特に限定されるものではないが、最上位ストア110がハッシュ・マップである場合は、アクセス速度を向上させる観点からは、好適には、最上位ストア110への問い合わせの後に行うことができる。また、上記問い合わせは、階層ストア130に動的トライ木が含まれる場合は、動的トライ木の階層ストア130への問い合わせの前に行うことが好ましいが、後に行うことを妨げるものではない。上記問い合わせは、また、階層ストア130に静的トライが含まれる場合は、静的トライ木の階層ストア130への問い合わせの前に行うことが好ましく、これにより、メモリ空間効率が優先される静的トライ木を構成に含む場合でも、好適にアクセス速度を改善することができる。
上記カウンタ付き最上位ストア110、ブルームフィルタ120、1以上の階層ストア130は、好適には、高速なデータ操作を可能とするため、コンピュータ装置が備えるRAM(Random Access Memory)などの1次記憶装置で実装することができる。
(2)誤り許容カウント法を適用した振り分け処理
以下、図3~図7を参照しながら、振り分け部150が実行する誤り許容カウント法を適用した振り分け処理について、より詳細に説明する。誤り許容カウント法とは、出現頻度が所与の順位s(支持度)以上のシンボルを、出現頻度fに対する所与の許容誤差eを保証しながら列挙するストリーム・アルゴリズムである。誤り許容カウント法は、入力されるデータ・ストリームをバケットと呼ばれる単位に分割し、データ・ストリームを構成するシンボルの出現頻度をカウントするとともに、バケット境界毎に過去の実績から低頻度のシンボルのエントリを除外するアルゴリズムである。このように、低頻度のものを途中で適宜除外することにより、小さなメモリ領域で、所定頻度以上を有するシンボルの集合を得ることが可能となる。以下、まず誤り許容カウント法を適用した振り分け処理を説明するにあたって用いる定義を示す。
以下、図3~図7を参照しながら、振り分け部150が実行する誤り許容カウント法を適用した振り分け処理について、より詳細に説明する。誤り許容カウント法とは、出現頻度が所与の順位s(支持度)以上のシンボルを、出現頻度fに対する所与の許容誤差eを保証しながら列挙するストリーム・アルゴリズムである。誤り許容カウント法は、入力されるデータ・ストリームをバケットと呼ばれる単位に分割し、データ・ストリームを構成するシンボルの出現頻度をカウントするとともに、バケット境界毎に過去の実績から低頻度のシンボルのエントリを除外するアルゴリズムである。このように、低頻度のものを途中で適宜除外することにより、小さなメモリ領域で、所定頻度以上を有するシンボルの集合を得ることが可能となる。以下、まず誤り許容カウント法を適用した振り分け処理を説明するにあたって用いる定義を示す。
(2.1)定義
D:最上位ストア110内のエントリの集合を表す。
x:シンボル(キー)を表す。
f:シンボルxの出現頻度(出現回数)を表す。
Δ:シンボルxの出現頻度fに対する最大許容誤差(誤差値)を表す。なお、θiΔが、計数された出現頻度fに含まれる可能性のある最大の誤差となる。
(x,f,Δ):上記集合Dの各エントリ(要素)を表す。
Di:第i階層ストア130-i(i=1,…,n)内のエントリの集合を表す。ここで、添え字iは、階層の順位を表し、D1は最上層の階層ストアを表し、Dnは最下層の階層ストアを表す。
θi:第i階層ストア130-iのバケット内出現頻度上限を表す。バケット内出現頻度上限θiは、パラメータとして与えられる。
N:入力された全シンボルの合計出現頻度(入力データ数)を表す。重複するものも計数される。
Ni:第i階層ストア130-i内の全シンボルの合計出現頻度を表す。
|Di|:第i階層ストア130-iのシンボル数を表す。
w=1/e:バケット幅を表す。
e:許容される出現回数に対する誤差を表す。
B=ceiling(eN):現在のバケットを識別するバケット識別値を表す。
Ri:第i階層ストア130-iに定義されるストア代表頻度値を表す。ストア代表頻度値は、シンボル平均出現頻度を用いる場合は、下記式(1)で算出される。ストア代表頻度値は、最大出現頻度を用いる場合は、第i階層ストア130-iのバケット内出現頻度上限θiと現在のバケット識別値Bとを用いて、下記式(2)で算出される。最大出現頻度は、直前のバケット境界前まで整理されず出現頻度が計数されていたことを想定した、起こり得る出現頻度の最大値を示す。
D:最上位ストア110内のエントリの集合を表す。
x:シンボル(キー)を表す。
f:シンボルxの出現頻度(出現回数)を表す。
Δ:シンボルxの出現頻度fに対する最大許容誤差(誤差値)を表す。なお、θiΔが、計数された出現頻度fに含まれる可能性のある最大の誤差となる。
(x,f,Δ):上記集合Dの各エントリ(要素)を表す。
Di:第i階層ストア130-i(i=1,…,n)内のエントリの集合を表す。ここで、添え字iは、階層の順位を表し、D1は最上層の階層ストアを表し、Dnは最下層の階層ストアを表す。
θi:第i階層ストア130-iのバケット内出現頻度上限を表す。バケット内出現頻度上限θiは、パラメータとして与えられる。
N:入力された全シンボルの合計出現頻度(入力データ数)を表す。重複するものも計数される。
Ni:第i階層ストア130-i内の全シンボルの合計出現頻度を表す。
|Di|:第i階層ストア130-iのシンボル数を表す。
w=1/e:バケット幅を表す。
e:許容される出現回数に対する誤差を表す。
B=ceiling(eN):現在のバケットを識別するバケット識別値を表す。
Ri:第i階層ストア130-iに定義されるストア代表頻度値を表す。ストア代表頻度値は、シンボル平均出現頻度を用いる場合は、下記式(1)で算出される。ストア代表頻度値は、最大出現頻度を用いる場合は、第i階層ストア130-iのバケット内出現頻度上限θiと現在のバケット識別値Bとを用いて、下記式(2)で算出される。最大出現頻度は、直前のバケット境界前まで整理されず出現頻度が計数されていたことを想定した、起こり得る出現頻度の最大値を示す。
(2.2)アルゴリズムの説明
図3は、第1の実施形態において振り分け部150に入力される、データ・ストリーム200を模式的に表す図である。なお、説明する実施形態では、途切れなく連続して入力されるデータ・ストリーム200を例に説明するが、他の実施形態では、所定サイズのデータ・セットに対して適用することもできる。誤り許容カウント法においては、データ・ストリーム200を構成するシンボル列が、所定幅w(=1/e)のバケット210と呼ばれる単位に区分される。各バケット210-1,210-2・・・に対しては、現時点の入力データ数Nに応じてバケット識別値Bが付される。例えば、1/1000の誤差を許容する(e=1/1000)とすると、1000個のシンボル毎にバケットに区分され、連続するバケット識別値B(1,2,・・・)が割り振られることになる。
図3は、第1の実施形態において振り分け部150に入力される、データ・ストリーム200を模式的に表す図である。なお、説明する実施形態では、途切れなく連続して入力されるデータ・ストリーム200を例に説明するが、他の実施形態では、所定サイズのデータ・セットに対して適用することもできる。誤り許容カウント法においては、データ・ストリーム200を構成するシンボル列が、所定幅w(=1/e)のバケット210と呼ばれる単位に区分される。各バケット210-1,210-2・・・に対しては、現時点の入力データ数Nに応じてバケット識別値Bが付される。例えば、1/1000の誤差を許容する(e=1/1000)とすると、1000個のシンボル毎にバケットに区分され、連続するバケット識別値B(1,2,・・・)が割り振られることになる。
隣接するバケット間の境界212は、バケット境界と参照し、このバケット境界において、出現頻度に応じた振り分け処理が実行される。上記データ・ストリーム200のシンボル列が入力されると、順次、バケットが満たされて行き、バケット境界において振り分けが行われ、最上位ストア110の集合Dから低頻度のエントリが整理される。そして、整理されたエントリは、出現頻度に応じた階層ストア130で保存されることになる。図3中、矢印214は、該矢印214で示す位置まで入力によりバケットが満たされたことを表している。
本実施形態による誤り許容カウント法を適用した振り分け処理では、振り分け部150は、以下に説明する、アクセス毎の(A)カウント処理およびバケット毎の(B)振り分け処理を繰り返し実行する。
(A)カウント処理
振り分け部150は、シンボルxに対するアクセス毎に、下記(A1)~(A3)で説明するカウント処理を実行する。図4は、第1の実施形態による振り分け部150がシンボルxに対するアクセス毎に実行するカウント処理を説明する図である。
振り分け部150は、シンボルxに対するアクセス毎に、下記(A1)~(A3)で説明するカウント処理を実行する。図4は、第1の実施形態による振り分け部150がシンボルxに対するアクセス毎に実行するカウント処理を説明する図である。
(A1)振り分け部150は、カウント処理においては、最上位ストア110を参照し、アクセスにかかるシンボルxが集合D内で発見された場合は、このシンボルxの既存エントリの出現頻度のカウンタを増分し、(x,f+1,Δ)に更新する(図4の(A1))。
(A2)振り分け部150は、上記集合D内で発見されない場合は、さらに各階層ストア130を参照する。振り分け部150は、シンボルxが第i階層ストア130-iの集合Diで発見された場合は、発見された第i階層ストア130-iに対し定義されるストア代表頻度値Ri(132-i)を取得し、ストア代表頻度値Riからカウンタ値を復元して、最上位ストア110の集合Dにエントリ(x,Ri,B-1)を再追加する。発見された第i階層ストア130-i内のエントリについては、ストア内から削除されるか、あるいは、削除されたものと見なして無視されることになる。振り分け部150は、上記再追加に伴い、さらに、第i階層ストア130-iの全シンボルの合計出現回数Ni(134-i)を再追加のカウント分Riだけ減分する(Ni=Ni-Ri)(図4の(A2))。また、上記再追加に伴い、適宜第i階層ストア130-iのシンボル数|Di|も減少する。
ここで設定される最大許容誤差Δ(=B-1)は、直前のバケット境界前まで整理されず出現頻度が計数され、該バケット境界で整理された後に、当該バケットで再追加されることを想定した、起こり得る出現頻度の最大値(最大許容誤差:θi(B-1))を与える。
なお、ストア代表頻度値Riは、シンボル平均出現頻度を用いる場合は、第i階層ストア130-iの合計出現回数Ni(134-i)およびシンボル数|Di|(136-i)から算出することができる。最大出現頻度を用いる場合は、ストア代表頻度値Riは、第i階層ストア130-iに対応するバケット内出現頻度上限θiおよび現在のバケット識別値B152から算出することができる。なお、ストア代表頻度値としては、上記シンボル平均出現頻度および最大出現頻度のうち、シンボル平均出現頻度を好適に選択することができる。これにより、最上位ストア110の集合D内に残留するエントリの数の増長を抑制することができる。
(A3)振り分け部150は、最上位ストア110および1以上の階層ストア130すべてを参照したにもかかわらず、シンボルxが集合D,Di(i=1,・・・,n)内で発見できなかった場合は、最上位ストア110の集合Dに、エントリ(x,1,B-1)を新規追加する(図4の(A3))。ここで設定される出現頻度のカウンタ値は初期値であり、最大許容誤差Δ(=B-1)は上記と同様である。
(B)振り分け処理
振り分け部150は、バケット内のエントリ毎に、下記(B1)および(B2)で説明する振り分け処理を実行する。図5は、第1の実施形態による振り分け部150がバケット内のエントリ毎に実行する振り分け処理を説明する図である。
振り分け部150は、バケット内のエントリ毎に、下記(B1)および(B2)で説明する振り分け処理を実行する。図5は、第1の実施形態による振り分け部150がバケット内のエントリ毎に実行する振り分け処理を説明する図である。
(B1)振り分け部150は、各エントリ(x,f,Δ)の出現頻度fと、最大許容誤差Δと、現在のバケット識別値B(=eN)とが、階層iに関して下記式(3)を満たす場合は、最上位ストア110の集合Dから第i階層ストア130の集合Diへ移動する(図5の(B1))。上記移動では、振り分け部150は、最上位ストア110の集合Dからエントリを読み出し、第i階層ストアの集合Diに該エントリのシンボルを追加し、最上位ストア110の集合Dから該エントリを削除する。これにより、最上位ストア110内の比較的低頻度なエントリが、頻度別に階層ストア130へ振り分けられる。振り分け部150は、上記移動に伴い、第i階層ストアの全シンボルの合計出現頻度Ni134-iを、移動したエントリの出現頻度f分だけ増分する(Ni=Ni+f)。また、上記移動に伴い、適宜シンボル数|Di|も増加する。
(B2)振り分け部150は、各エントリ(x,f,Δ)における出現頻度fと、最大許容誤差Δと、現在のバケット識別値B(=eN)とが、上記式(3)を満たさない場合、つまり出現頻度fがθ1(B-Δ)より大きいエントリについては、最上位ストア110内に該エントリを残留させる(図5の(B2))。
図6は、上記(B)振り分け処理によって最上位ストア110および各階層ストア130へシンボルのエントリが振り分けられる様子を説明する図である。なお、図6は、最上位ストアDと、2つの階層ストアD1,D2を含む場合のキーバリュー・ストアを例示している。
図6(A)は、シンボルが濃度階調で表現されたデータ・ストリーム200を示す。図6(B)は、各エントリの最大許容誤差Δと、現在のバケット識別値B(B=eN:現在までの入力データ数Nに関係する。)に応じて画定される、出現頻度fに対するストア間の境界θi(B-Δ)を説明する図である。
図6(A)に示すようなデータ・ストリーム200が入力されると、図6(B)に示すように、上記カウント処理により各シンボルの出現頻度がカウントされる。また、各シンボルのエントリには、該シンボルのエントリが最上位ストア110に追加された時点における最大許容誤差Δが格納されている。したがって、境界θi(B-Δ)は、最上位ストア110にエントリが追加された時点で出現頻度fに含まれ得る最大の誤差(θiΔ)を差し引き、第i階層ストアに振り分ける出現頻度fに対する上限を表す。ひいては、第i階層ストアのバケット内出現頻度上限θiと、その下位の第(i+1)階層ストアのバケット内出現頻度上限θi+1とから、当該第i階層ストア130に振り分けられるシンボルの出現頻度fに対する範囲が画定される。
最上位ストア110に再追加されたエントリには、さらに、元の階層ストアのストア代表頻度値Riで復元された、過去の出現頻度をある程度反映したカウント値が含まれる。再追加されたエントリは、上記復元された値から出現頻度のカウントが始まるため、全くの初期値(=1)からカウントする場合と比較して、過去にある程度の出現頻度があったシンボルは、最上位ストア110に戻った後に再度階層ストアに移動し難くなる。例えば、図6に示すシンボル「B」は、1からカウントをしていた場合は出現頻度fが境界θ1(B-Δ)に達しないため、最上位ストア110から整理されてしまうはずであったところ、ストア代表頻度値Riでカウンタ値が復元されたことにより、最上位ストア110に残留している。
(C)組み入れ処理
さらに、本実施形態による誤り許容カウント法を適用した振り分け処理では、振り分け部150は、バケット毎に、下位の階層ストアの実績を下回った上位の階層ストアのエントリを下位の階層ストアに組み入れる、組み入れ処理を繰り返し実行することができる。
さらに、本実施形態による誤り許容カウント法を適用した振り分け処理では、振り分け部150は、バケット毎に、下位の階層ストアの実績を下回った上位の階層ストアのエントリを下位の階層ストアに組み入れる、組み入れ処理を繰り返し実行することができる。
図7は、振り分け部150がバケット毎に実行する組み入れ処理を説明する図である。振り分け部150は、組み入れ処理においては、各階層ストア(i=1,…,n-1)について、下記式(4)により、上位階層ストアiの実績が下位の階層ストアi+1の実績を下回っていないかを判定する。なお、下記式(4)中のμは、組み入れ判定における組み入れる条件を規定する因子であり、パラメータとして与えられる。振り分け部150は、下位階層ストア(i+1)の実績を規定より下回る上位階層ストアiが存在した場合は、その上位階層ストアi内の全エントリを取り出し、下位階層ストア(i+1)に組み入れる(図7の(C))。振り分け部150は、さらに、上記組み入れに伴い、上位階層ストアの合計出現頻度Niを下位階層ストアの合計出現頻度Ni+1に加算し(Ni+1=Ni+1+Ni)、0にリセットする(Ni=0)。上位階層ストアiは、上記組み入れに伴い、キーバリュー・ストア100から除外される。
(2.3)処理フロー
以下、図8~図12を参照しながら、振り分け部150が実行する誤り許容カウント法を適用した振り分け処理の流れについて、詳細を説明する。図8は、第1の実施形態による振り分け部150が実行する、誤り許容カウント法を適用した振り分け処理のメインフローを示すフローチャートである。
以下、図8~図12を参照しながら、振り分け部150が実行する誤り許容カウント法を適用した振り分け処理の流れについて、詳細を説明する。図8は、第1の実施形態による振り分け部150が実行する、誤り許容カウント法を適用した振り分け処理のメインフローを示すフローチャートである。
図8に示す処理は、ステップS100から開始し、ステップS101では、振り分け部150は、まず、初期化を行う。ステップS101で示す初期化処理では、各種パラメータ(e、θi、μ)が取得され、空の最上位ストア110および階層ストア130が準備され、各変数(N、Ni、|Di|、B)に初期値が設定される。
ステップS102では、シンボルxに対するアクセス毎に、図9に示すカウント処理を呼び出す。カウント処理フローは、図9を参照して説明する。ステップS102で示すカウント処理が終了すると、ステップS103へ処理が進められる。ステップS103では、振り分け部150は、データ・ストリームの入力によってバケットが満たされたか否かを判定する。ステップS103で、現在のバケットが未だ満たされていないと判定された場合(NO)は、ステップS102へループさせ、入力位置がバケット境界に達するまで待ち受ける。ステップS103で、現在のバケットが満たされたと判定された場合(YES)は、ステップS104へ処理を進める。
ステップS104では、振り分け部150は、詳細は図10を参照して説明する振り分け処理フローを呼び出す。ステップS104の振り分け処理が終了すると、ステップS105へ処理が進められる。ステップS105では、振り分け部150は、詳細は図11を参照して説明する組み入れ処理フローを呼び出す。ステップS105の組み入れ処理が終了すると、ステップS102へ再びループされて、次のアクセスへと処理対象が移り、ステップS102~ステップS105で示す処理が繰り返される。
図9は、第1の実施形態による振り分け部150が実行する、アクセス毎のカウント処理を示すフローチャートである。図9に示すカウント処理は、図8で示したステップS104で呼び出されて、ステップS200から開始する。ステップS201では、振り分け部150は、アクセスにかかるシンボルxを取得する。
ステップS202では、振り分け部150は、最上位ストア110を参照して、シンボルxが集合D内に存在するか否かを判定する。ステップS202で、最上位ストア110の集合D内からシンボルxが見付かり、集合D内に存在すると判定された場合(YES)は、ステップS207へ処理が分岐される。ステップS207では、振り分け部150は、最上位ストアの集合D内の既存エントリ(x,f,Δ)を、(x,f+1,Δ)に更新し、ステップS211で呼び出し元の処理に戻す。
ステップS207が、登録要求(PUT)に対応するアクセスによる場合は、上記アクセスに対応して、最上位ストア110の集合D内のエントリに対応する「値」が上書きされる。ステップS207が、取得要求(GET)に対応するアクセスによる場合は、上記アクセスに対応して、最上位ストア110から集合D内のエントリに対応して格納された「値」が読み出され、要求元に返却される。
一方、ステップS202で、シンボルxが集合D内に見付からず、存在しないと判定された場合(NO)は、ステップS203~S205で示すループへ処理を進める。ステップS203~S205のループでは、第1階層ストアD1から第n階層ストアDnまでの各第i階層ストア130-iの集合Diについて、ステップS204で、第i階層ストア130-iを参照して、該集合Di内にシンボルxが存在するか否かを判定する。
ステップS204で、第i階層ストア130-iの集合Di中にシンボルxが存在すると判定された場合(YES)は、ステップS203~S205のループを抜け出し、ステップS208へ処理が進められる。ステップS208では、振り分け部150は、シンボルxが存在する第i階層ストアの集合Diに定義されるストア代表頻度値Riを取得する。ステップS209では、振り分け部150は、最上位ストア110の集合D中にシンボルxのエントリ(x,Ri,B-1)を再度追加し、ステップS210で、上記第i階層ストアの合計出現頻度Niからストア代表頻度値Riを減算し、ステップS211で、呼び出し元の処理に戻す。
ステップS209が、登録要求(PUT)に対応するアクセスによる場合は、上記アクセスに対応して、最上位ストア110内にエントリに対応付けて値を格納する。ステップS209が、取得要求(GET)に対応するアクセスによる場合は、上記アクセスに対応して、上記第i階層ストア130-iからキーに対応する値が読み出されて、要求元に返却されるとともに、最上位ストア110内にエントリに対応して値が格納される。
一方、ステップS204で、第i階層ストア130-iの集合Di内にシンボルxが見付からず、存在しないと判定された場合(NO)は、ステップS205へ処理を進める。最下層の階層ストア130-nの集合Dnでも見付からなければ、ステップS203~ステップS205のループを終了して、ステップS206へ処理が進められる。この場合は、シンボルxは初出であるので、ステップS206では、振り分け部150は、最上位ストアDにシンボルxのエントリ(x,1,B-1)を新規追加し、ステップS211で呼び出し元の処理に戻す。
ステップS206のアクセスが、登録要求(PUT)に対応する場合は、最上位ストアD内にエントリに対応付けて「値」が格納される。ステップS206のアクセスが、取得要求(GET)に対応する場合は、照会されたキーに対応する値なしの旨の応答がなされる。
図10は、第1の実施形態による振り分け部150が実行する、振り分け処理を示すフローチャートである。図10に示す振り分け処理は、図8のステップS106で呼び出されて、ステップS300から開始する。ステップS301~S307のループでは、最上位ストア110の集合D内の各エントリ(x,f,Δ)毎に、ステップS302~S309で示す各処理を実行する。
ステップS302では、振り分け部150は、最上位ストア110から集合D内のエントリ(x,f,Δ)を読み出す。ステップS303~S305のループでは、振り分け部150は、第1階層ストアD1から第n階層ストアDnまでの各第i階層ストア130-iの集合Diについて、ステップS304で、エントリの出現頻度fに応じた振り分けを行うための上記式(3)を満たすか否かの判定を行う。
ステップS304で、上記式(3)を満たすと判定された場合(YES)は、ステップS308へ処理が進められる。この場合は、振り分け先が第i階層ストア130-iに決定されるので、ステップS308では、振り分け部150は、最上位ストア110からエントリ(x,f,Δ)を取り出し、第i階層ストア130-iの集合Diに移動する。ステップS309では、振り分け部150は、第i階層ストア130-iの合計出現頻度Niから、シンボルxの出現頻度fを減算し、ステップS303~S305のループを抜け出し、ステップS307へ分岐させる。
ステップS304で、上記式(3)が満たされないと判定された場合(NO)は、ステップS305へ処理が進められる。いずれの階層ストアの集合Di(1~n)でも、上記式(3)が満たされない場合、つまり出現頻度fがθ1(B-Δ)より大きかった場合は、ステップS303~ステップS305のループを終了して、ステップS306へ処理が進められる。この場合は、振り分け先が最上位ストア110に決定されるので、ステップS306では、振り分け部150は、エントリ(x,f,Δ)をそのまま最上位ストア110の集合D内に残留させて、ステップS307へ進める。ステップS301~S307のループが全エントリ(x,f,Δ)について行われると、ステップS310で呼び出し元に処理が戻される。
図11は、第1の実施形態による振り分け部150が実行する、組み入れ処理を示すフローチャートである。図11に示す組み入れ処理は、図8のステップS107で呼び出されて、ステップS400から開始する。ステップS401~S406のループでは、振り分け部150は、第1階層ストアD1から第n-1階層ストアDn-1までの各第i階層ストアの集合Diについて、ステップS402で、上記式(4)により、上位階層ストアiの出現頻度の実績が下位階層ストア(i+1)の実績を下回っていないかを判定する。
ステップS402で、上記式(4)を満たすと判定された場合(YES)は、ステップS403へ処理が進められる。この場合は、上位階層ストアiの実績が下位の階層ストアi+1の実績を規定より下回ったと判断されたことになる。ステップS403では、振り分け部150は、上位階層ストアiの集合Diすべてのエントリを下位階層ストアi+1の集合Di+1へ組み入れる。ステップS404では、振り分け部150は、上位階層ストアiの合計出現頻度Niを0とし、ステップS405で、上位階層ストアiの合計出現頻度Niを下位階層ストアi+1の合計出現頻度Ni+1に加算し、ステップS406へ進める。
一方、ステップS402で、上記式(4)が満たされないと判定された場合(NO)は、ステップS406へ処理が進められる。いずれの階層ストア(i=1~n-1)についても上記式(4)が満たされず、下位階層ストア(i+1)の実績を下回る上位階層ストアiが存在しないと判定された場合は、ステップS402~ステップS406のループを終了して、組み入れを行わずに、ステップS407呼び出し元へ処理が戻される。
(3)第1の実施形態による利点
上述した第1の実施形態によれば、高頻度のシンボルが、データ・アクセス速度が優先されたデータ構造内に格納され、低頻度のシンボルが、メモリ空間効率が優先されたデータ構造内に格納されることになる。これにより、各シンボルが出現頻度に応じた最適なタイプのストアに格納され、特にジップの法則に沿った現実のデータ・アクセスにおいて、全体としてのメモリ空間効率およびスループットが向上する。
上述した第1の実施形態によれば、高頻度のシンボルが、データ・アクセス速度が優先されたデータ構造内に格納され、低頻度のシンボルが、メモリ空間効率が優先されたデータ構造内に格納されることになる。これにより、各シンボルが出現頻度に応じた最適なタイプのストアに格納され、特にジップの法則に沿った現実のデータ・アクセスにおいて、全体としてのメモリ空間効率およびスループットが向上する。
また、上述した第1の実施形態によれば、頻度別のシンボルの抽出精度を許容誤差によって制御することが可能となる。最上位ストア110のエントリを(x,fB,ΔB)と表すと、該エントリは、パラメータとして与えられた第1階層ストアのバケット内出現頻度上限θ1に対し、下記式(5)を満足することが保証される。また、第i階層ストア130-i(i=1,…,n-1)のエントリを(yi,fi,Δi)と表すと、該エントリは、階層ストア130-iおよび階層ストア130-(i+1)のバケット内出現頻度上限θi,θi+1に対し、下記式(6)を満足することが保証される。さらに、最下層の第n階層ストア130-nのエントリを(z,fn,Δn)で表すと、該エントリは、下記式(7)を満足することが保証される。なお、下記式(5)~(7)中、E()は、平均を表す。
また、上記第1の実施形態によれば、各階層ストア130-iに対してストア代表頻度値Riが定義されており、各階層ストアiから最上位ストア110に再追加されるエントリは、ストア代表頻度値Riに基づきある程度過去を反映した出現頻度が復元される。このため、バケット幅を小さくし、中頻度の正確な情報が失われる状況においても、上記ストア代表頻度値Riから適切な頻度が復元されることで、最上位ストア110および階層ストア130間のエントリの行き来による振動が低減される。さらに、上記組み入れ処理により、頻度の抽出精度を高いレベルに維持し、最悪のケースの性能を底上げすることが可能となる。
(4)第2の実施形態
以上、最上位ストア110および1以上の階層ストア130を含み構成されるキーバリュー・ストア100を実現する第1の実施形態について説明してきたが、以下、より具体的な実施形態について説明する。また、上記第1の実施形態では、再追加されるエントリについて、ストア代表頻度値Riからカウンタ値fが復元されるものとして説明してきた。しかしながら、上述したように、振り分けの際の境界θi(B-Δ)は、各エントリの最大許容誤差Δ、出現頻度fおよび入力データ数Nとの関係により画定されることから、他の実施形態では、最大許容誤差Δを復元するストア代表値を定義することもできる。以下、カウンタ付きハッシュマップ・ストア、ダブルアレイ・ストアおよびLOUDSストアの3つのデータストアを含み構成され、最大許容誤差Δを復元するストア代表値が定義された、第2の実施形態について説明する。
以上、最上位ストア110および1以上の階層ストア130を含み構成されるキーバリュー・ストア100を実現する第1の実施形態について説明してきたが、以下、より具体的な実施形態について説明する。また、上記第1の実施形態では、再追加されるエントリについて、ストア代表頻度値Riからカウンタ値fが復元されるものとして説明してきた。しかしながら、上述したように、振り分けの際の境界θi(B-Δ)は、各エントリの最大許容誤差Δ、出現頻度fおよび入力データ数Nとの関係により画定されることから、他の実施形態では、最大許容誤差Δを復元するストア代表値を定義することもできる。以下、カウンタ付きハッシュマップ・ストア、ダブルアレイ・ストアおよびLOUDSストアの3つのデータストアを含み構成され、最大許容誤差Δを復元するストア代表値が定義された、第2の実施形態について説明する。
図12は、第2の実施形態によるコンピュータ装置上で実現されるキーバリュー・ストアの機能ブロック図である。図12に示すキーバリュー・ストア300は、カウンタ付きのハッシュマップ・ストア310と、ブルームフィルタ320と、ダブルアレイ・ストア330と、LOUDSストア340と、振り分け部350とを含み構成される。
ハッシュマップ・ストア310は、図1における高頻度領域(概ね上位1%)に属するキーワードを格納するためのアクセス速度に優れたデータストアである。ハッシュマップ・ストア310には、シンボルのエントリ毎に、その出現頻度を保持するカウンタが設けられている。LOUDSストア340は、図1における低頻度領域(概ね下位79%)に属するキーワードを格納するためのメモリ空間効率に優れたデータストアである。ダブルアレイ・ストア330は、図1における中頻度領域に属するキーワードを格納するためのデータストアである。ダブルアレイ・ストア330は、ハッシュマップ・ストア310よりもメモリ空間効率が優れ、LOUDSストア340よりもアクセス速度が優れた特徴を有する。
LOUDSストア340は、上述したように、追記が難しいデータ構造であるため、本実施形態では、ファサード構成を採用する。すなわち、LOUDSストア340は、それぞれm個ずつのキーを格納する下位のLOUDS(以下、下位LOUDSと参照する。)342-1~342-xを含み構成され、これらの下位LOUDS342があたかも単一のデータ構造であるかのように扱われる。
図13は、第2の実施形態によるLOUDSストア340のより詳細な機能ブロックを示す図である。図13に示すLOUDSストア340は、入力バッファトライ木346と、0または1以上の下位LOUDS342-1~342-xとを含む。
入力バッファトライ木346は、キーおよび値のエントリが格納されたトライ木を維持する追記可能なバッファである。入力バッファトライ木346は、LOUDSが追記困難な静的なトライ木であるのに対し、リンク構造によりツリー構造が維持された、追記可能な動的なトライ木として構成される。
下位LOUDS342は、それぞれ、LOUDSストア340に対する入力データ総数Mのうちのm個ずつの入力データ・セットが格納されたトライ木を表現する簡潔データ構造である。下位LOUDS342は、入力バッファトライ木346に入力されたデータ数が規定数mに達する毎に呼び出されるLOUDS構築処理中に構築される。
LOUDSストア340は、さらに、上記下位LOUDS342に対応する0または1以上のブルームフィルタ344を備えることができる。各ブルームフィルタ344は、対応する下位LOUDS342内に特定のキーが存在することを近似的ないし確率的に判定するフィルタである。ブルームフィルタ344は、入力バッファトライ木346に入力されたデータ数が規定数mに達する毎に呼び出されるLOUDS構築処理中に、下位LOUDS342とともに構築することができる。
LOUDSストア340に対しデータ入力要求(ADD)が行われると、キーおよび値が入力バッファトライ木346に追記される。LOUDSストア340は、図示しないLOUDS構築手段を備えており、入力バッファトライ木346に入力されたデータ数が一定数mに達する毎に、入力バッファトライ木346の各ノードを走査して、該トライ木を表現する下位LOUDS342を構築するとともに、対応するブルームフィルタ344を構築する。また、LOUDSストア340は、図示しないLOUDS結合手段を備えることができ、一定の戦略に従って複数の下位LOUDS342の各ノードを走査して、複数の下位LOUDS342のトライ木を結合した結合トライ木を表現する上位レベルのLOUDSを構築するとともに、対応するフィルタを構築することもできる。上記構築および結合におけるノードの走査は、具体的には、幅優先走査により行うことができる。
LOUDSストア340に対しキー照会要求(GET)が行われると、当該LOUDSストア340の実データ構造(入力バッファトライ木346および下位LOUDS342(対応するブルームフィルタ344を含む。))群に対し、新しいものから順に問い合わせが行われ、いずれかの実データ構造から照会キーが見付かった時点で値が返却される。これにより、LOUDSストア340に格納されたキーに対応する値(複数あるのであればその最新の値)が、要求元に返却される。上述した構成により、LOUDS単体のデータ構造よりも、追記が容易であり、かつ、メモリ利用効率も高く、アクセス速度が改善されたLOUDSストア340を提供することができる。
第2の実施形態による振り分け部350が実行する、誤り許容カウント法を適用した振り分け処理について、より詳細に説明する。以下、まず、誤り許容カウント法を適用した振り分け処理を説明するにあたって用いる定義を示す。
DHM:ハッシュマップ・ストア310内のエントリの集合を表す。DHMは最上位のストアである。
DDA:ダブルアレイ・ストア330内のエントリの集合を表す。DDAは最上位の階層ストアであり、中位のストアである。
DL:LOUDSストア340内のエントリの集合を表す。DLは最下層の階層ストアであり、最下位のストアである。
ΘDA:ダブルアレイ・ストア330の出現頻度に関する上限閾値を表す。上限閾値ΘDAは、パラメータとして与えられる。
ΘL:LOUDSストア340の出現頻度に関する上限閾値を表す。上限閾値ΘLは、パラメータとして与えられる。
x:シンボル(キー)を表す。
f:シンボルの出現頻度を表す。
δ:出現頻度fに対するエラー見積もり(誤差値)を表す。
(x,f,δ):上記集合DHMの各エントリ(要素)を表す。
N:入力された全シンボルの合計出現頻度(入力データ数)を表す。重複するものも計数される。
TDA:ダブルアレイ・ストア330の全シンボルの合計出現頻度を表す。
#DA:ダブルアレイ・ストア330のシンボル数(キー数)を表す。
TL:LOUDSストア340の全シンボルの合計出現頻度を表す。
#L:LOUDSストア340のシンボル数を表す。
w=1/e:バケット幅を表す。
B=ceiling(eN):現在のバケットを識別するバケット識別値を表す。
RDA:ダブルアレイ・ストア330に定義されるストア代表値を表す。シンボル平均出現頻度を用いる場合は、ストア代表値RDAは、下記式(8)で算出される。最大出現頻度を用いる場合は、ストア代表値RDAは、ダブルアレイ・ストア330の上限閾値ΘDAと現在のバケット識別値Bとを用いて、下記式(9)で算出される。
RL:LOUDSストア340に定義されるストア代表値を表す。ストア代表値RLは、ストア代表値RDAと同様に計算される。
DDA:ダブルアレイ・ストア330内のエントリの集合を表す。DDAは最上位の階層ストアであり、中位のストアである。
DL:LOUDSストア340内のエントリの集合を表す。DLは最下層の階層ストアであり、最下位のストアである。
ΘDA:ダブルアレイ・ストア330の出現頻度に関する上限閾値を表す。上限閾値ΘDAは、パラメータとして与えられる。
ΘL:LOUDSストア340の出現頻度に関する上限閾値を表す。上限閾値ΘLは、パラメータとして与えられる。
x:シンボル(キー)を表す。
f:シンボルの出現頻度を表す。
δ:出現頻度fに対するエラー見積もり(誤差値)を表す。
(x,f,δ):上記集合DHMの各エントリ(要素)を表す。
N:入力された全シンボルの合計出現頻度(入力データ数)を表す。重複するものも計数される。
TDA:ダブルアレイ・ストア330の全シンボルの合計出現頻度を表す。
#DA:ダブルアレイ・ストア330のシンボル数(キー数)を表す。
TL:LOUDSストア340の全シンボルの合計出現頻度を表す。
#L:LOUDSストア340のシンボル数を表す。
w=1/e:バケット幅を表す。
B=ceiling(eN):現在のバケットを識別するバケット識別値を表す。
RDA:ダブルアレイ・ストア330に定義されるストア代表値を表す。シンボル平均出現頻度を用いる場合は、ストア代表値RDAは、下記式(8)で算出される。最大出現頻度を用いる場合は、ストア代表値RDAは、ダブルアレイ・ストア330の上限閾値ΘDAと現在のバケット識別値Bとを用いて、下記式(9)で算出される。
RL:LOUDSストア340に定義されるストア代表値を表す。ストア代表値RLは、ストア代表値RDAと同様に計算される。
第1の実施形態と同様に、入力されるデータ・ストリーム200は、所定幅w(=1/e)のバケット210と呼ばれる単位に区分される。各バケット210-1,210-2・・・に対しては、現在の入力データ数Nに応じてバケット識別値Bが付される。上記データ・ストリーム200が入力されると、順次、バケット210が満たされて行き、バケット境界212において振り分けが行われ、ハッシュマップ・ストア310の集合DHMから低頻度のエントリが整理される。整理されたエントリは、出現頻度に応じてダブルアレイ・ストア330またはLOUDSストア340内に保存されることになる。
上記誤り許容カウント法を適用した振り分け処理では、振り分け部350は、アクセス毎に(A)カウント処理を実行し、バケット毎に(B)振り分け処理を繰り返し実行する。また、振り分け部350は、バケット毎に、(C)組み入れ処理を繰り返し実行することができる。
(A)カウント処理
振り分け部350は、シンボルxに対するアクセス毎に、下記(A1)~(A4)で説明するカウント処理を実行する。
振り分け部350は、シンボルxに対するアクセス毎に、下記(A1)~(A4)で説明するカウント処理を実行する。
(A1)振り分け部350は、カウント処理においては、ハッシュマップ・ストア310を参照し、アクセスにかかるシンボルxが集合DHM内で発見された場合は、このシンボルxの既存エントリの出現頻度のカウンタを増分し、(x,f+1,δ)に更新する。
(A2)振り分け部350は、上記集合DHM内で発見されない場合は、さらにダブルアレイ・ストア330を参照する。振り分け部350は、ダブルアレイ・ストア330の集合DDAでシンボルxを発見すると、ダブルアレイ・ストア330に対し定義されるストア代表値RDAを取得し、ハッシュマップ・ストア310の集合DHMにエントリ(x,1,RDA)を再追加する。振り分け部350は、上記再追加に伴い、さらに、ハッシュマップ・ストア310の全シンボルの合計出現回数TDAを再追加のカウント分RDAだけ減分する(TDA=TDA-RDA)。また、上記再追加に伴い、適宜ハッシュマップ・ストア310のシンボル数#DAも減少する。
第2の実施形態では、エントリが復元される際には、ストア代表値からカウント値が復元される代わりに、カウント値は初期値1のままに設定され、ストア代表値RDAからエラー見積もりδが設定される。このエラー見積もりδは、ストア代表値としてシンボル平均出現頻度を用いる場合は、平均出現頻度が含まれ得る誤差として見積もられる。最大出現頻度を用いる場合は、エラー見積もりδは、直前のバケット境界前まで整理されず出現頻度が計数され、該境界で整理された後に当該バケットで再追加されることを想定した、起こり得る出現頻度の最大値(最大許容誤差)を与える。
(A3)振り分け部350は、上記集合DHM,DDA内で発見されない場合は、さらにLOUDSストア340を参照する。振り分け部350は、LOUDSストア340の集合DL内でシンボルxを発見すると、LOUDSストア340に対し定義されるストア代表値RLを取得し、ハッシュマップ・ストア310の集合DHMにエントリ(x,1,RL)を再追加する。ここで設定される出現頻度fのカウンタ値は、初期値1であり、エラー見積もりδは上記と同様である。
(A4)振り分け部350は、ハッシュマップ・ストア310、ダブルアレイ・ストア330およびLOUDSストア340すべてを参照したにもかかわらず、集合DHM,DDA,DLでシンボルxを発見できなかった場合は、ハッシュマップ・ストア310の集合DHMに、エントリ(x,1,0)を新規追加する。ここで設定される出現頻度のカウンタ値は初期値1であり、エラー見積もりδ(=0)は、シンボルxが初出であり、誤差が含まれ得ないことを表しているが、エラー見積もりδにバケット識別値を入力してもよい。
(B)振り分け処理
振り分け部350は、バケット内のエントリ毎に、下記(B1)~(B3)で説明する振り分け処理を実行する。
振り分け部350は、バケット内のエントリ毎に、下記(B1)~(B3)で説明する振り分け処理を実行する。
(B1)振り分け部350は、各エントリ(x,f,δ)の出現頻度fと、エラー見積もりδと、現在の入力データ数Nとが、下記式(10)を満たす場合は、ハッシュマップ・ストア310内に該エントリを残留させる。
(B2)振り分け部350は、各エントリ(x,f,δ)の出現頻度fと、エラー見積もりδと、現在の入力データ数Nとが、下記式(11)を満たす場合は、該エントリをハッシュマップ・ストア310の集合DHMからダブルアレイ・ストア330の集合DDAへ移動する。振り分け部350は、上記移動に伴い、ダブルアレイ・ストアの全シンボルの合計出現頻度TDAを、移動したエントリの出現頻度f分だけ増分する(TDA=TDA+f)。また、上記移動に伴い、ダブルアレイ・ストア330のシンボル数#DAは、集合DDAにシンボルxが存在しなければ、移動したエントリ分だけ増分する(#DA=#DA+1)。
(B3)振り分け部350は、各エントリ(x,f,δ)の出現頻度fと、エラー見積もりδと、現在の入力データ数Nとが、下記式(12)を満たす場合は、該エントリをハッシュマップ・ストア310の集合DHMからLOUDSストア340の集合DLへ移動する。振り分け部350は、上記移動に伴い、LOUDSストア340の合計出現頻度TLを、移動したエントリの出現頻度f分だけ増分する(TL=TL+f)。またこれに伴い、LOUDSストア340のシンボル数#Lは、集合DLにシンボルxが存在しなければ、移動したエントリ分だけ増分する(#L=#L+1)。
(C)組み入れ処理
振り分け部150は、組み入れ処理においては、ダブルアレイ・ストア330について下記式(13)により、上位であるダブルアレイ・ストア330が、それより下位のLOUDSストア340の実績を下回っていないかを判定する。振り分け部350は、ダブルアレイ・ストア330の実績が、LOUDSストア340の実績を規定より下回った場合は、ダブルアレイ・ストア330の全エントリ(ハッシュマップ・ストア310に存在するエントリを除く。)を取り出し、LOUDSストアに組み入れる。振り分け部350は、さらに、上記組み入れに伴い、ダブルアレイ・ストア330の合計出現頻度TDAをLOUDSストア340の合計出現頻度TLに加算し(TL=TL+TDA:ハッシュマップ・ストア310に存在する分を除く。)、ダブルアレイ・ストア330のシンボル数#DAをLOUDSストア340のシンボル数#Lに加算し(#L=#L+#DA:ハッシュマップ・ストア310に存在する分を除く。)、合計出現頻度TDAおよび数#DAを0にリセットする。
振り分け部150は、組み入れ処理においては、ダブルアレイ・ストア330について下記式(13)により、上位であるダブルアレイ・ストア330が、それより下位のLOUDSストア340の実績を下回っていないかを判定する。振り分け部350は、ダブルアレイ・ストア330の実績が、LOUDSストア340の実績を規定より下回った場合は、ダブルアレイ・ストア330の全エントリ(ハッシュマップ・ストア310に存在するエントリを除く。)を取り出し、LOUDSストアに組み入れる。振り分け部350は、さらに、上記組み入れに伴い、ダブルアレイ・ストア330の合計出現頻度TDAをLOUDSストア340の合計出現頻度TLに加算し(TL=TL+TDA:ハッシュマップ・ストア310に存在する分を除く。)、ダブルアレイ・ストア330のシンボル数#DAをLOUDSストア340のシンボル数#Lに加算し(#L=#L+#DA:ハッシュマップ・ストア310に存在する分を除く。)、合計出現頻度TDAおよび数#DAを0にリセットする。
上述した第2の実施形態によれば、第1の実施形態と同様に、各シンボルが最適なタイプのストアに格納され、ジップの法則に沿った現実のデータ・アクセスにおいて、全体としてのメモリ空間効率およびスループットが向上する。
また、上述した第2の実施形態によれば、頻度別のシンボルの抽出精度を許容誤差によって制御することが可能となる。ここで、Xを、xに対するアクセス数を表す確率変数であるとすると、ハッシュマップ・ストア310のエントリについては、パラメータとして与えられたΘDAに対し、下記式(14)を満足することが保証される。ダブルアレイ・ストア330のエントリについては、パラメータとして与えられたΘDAおよびΘLに対し、下記式(15)を満足することが保証される。LOUDSストア340のエントリについては、パラメータとして与えられたΘLに対し、下記式(16)を満足することが保証される。下記式(14)~(16)中、E()は、平均を表す。
また、上記第2の実施形態によれば、ダブルアレイ・ストア330およびLOUDSストア340各々に対してストア代表値RDA,RLが定義されており、ハッシュマップ・ストア310に再追加されるエントリには、ある程度過去を考慮したエラー見積もりが設定される。このため、第1の実施形態と同様に、ハッシュマップ・ストア310およびストア330,340間のエントリの行き来による振動が低減される。さらに、上記組み入れ処理により、頻度の抽出精度を高いレベルに維持し、最悪のケースの性能を底上げすることが可能となる。
(5)第3の実施形態
以上、ハッシュマップ・ストア310、ブルームフィルタ320、ダブルアレイ・ストア330およびLOUDSストア340を含み構成されるキーバリュー・ストア300を実現する第2の実施形態について説明してきた。しかしながら、他の実施形態は、図14に示すような、2つタイプのストアを用いてキーバリュー・ストア400を構成することもできる。図14に示す第3の実施形態のキーバリュー・ストア400は、カウンタ付きのハッシュマップ・ストア410と、ブルームフィルタ420と、ダブルアレイ・ストアまたはLOUDSストアから構成されるストア430と、振り分け部450とを含み構成される。
以上、ハッシュマップ・ストア310、ブルームフィルタ320、ダブルアレイ・ストア330およびLOUDSストア340を含み構成されるキーバリュー・ストア300を実現する第2の実施形態について説明してきた。しかしながら、他の実施形態は、図14に示すような、2つタイプのストアを用いてキーバリュー・ストア400を構成することもできる。図14に示す第3の実施形態のキーバリュー・ストア400は、カウンタ付きのハッシュマップ・ストア410と、ブルームフィルタ420と、ダブルアレイ・ストアまたはLOUDSストアから構成されるストア430と、振り分け部450とを含み構成される。
図14に示す第3の実施形態においても、ジップの法則に沿った現実のデータ・アクセスにおいて、全体としてのメモリ空間効率およびスループットを向上することができる。また、ハッシュマップ・ストア410およびストア430間のエントリの行き来による振動を低減することが可能となり、また、最悪のケースの性能を底上げすることが可能となる。
(6)ハードウェア構成
以下、上記実施形態によるキーバリュー・ストアを実現するコンピュータ装置について説明する。図15は、本実施形態のキーバリュー・ストア(100/300/400)を実現するコンピュータ装置の概略的なハードウェア構成を示す。図15に示すコンピュータ装置は、中央処理装置(CPU)12と、CPU12が使用するデータの高速アクセスを可能とするL1およびL2などのレベルを有するキャッシュ・メモリ14と、CPU12の処理を可能とするDRAMなどの固体メモリ素子から形成されるシステム・メモリ16とを備えている。システム・メモリ16は、本実施形態のキーバリュー・ストア(100/300/400)のデータ構造の格納領域を提供する。
以下、上記実施形態によるキーバリュー・ストアを実現するコンピュータ装置について説明する。図15は、本実施形態のキーバリュー・ストア(100/300/400)を実現するコンピュータ装置の概略的なハードウェア構成を示す。図15に示すコンピュータ装置は、中央処理装置(CPU)12と、CPU12が使用するデータの高速アクセスを可能とするL1およびL2などのレベルを有するキャッシュ・メモリ14と、CPU12の処理を可能とするDRAMなどの固体メモリ素子から形成されるシステム・メモリ16とを備えている。システム・メモリ16は、本実施形態のキーバリュー・ストア(100/300/400)のデータ構造の格納領域を提供する。
CPU12、キャッシュ・メモリ14およびシステム・メモリ16は、システム・バス18を介して、他のデバイスまたはドライバ、例えば、グラフィックス・ドライバ20およびネットワーク・インタフェース・カード(NIC)22へと接続されている。グラフィックス・ドライバ20は、バスを介して外部のディスプレイ24に接続されて、CPU12による処理結果をディスプレイ画面上に表示させることができる。また、NIC22は、物理層レベルおよびデータリンク層レベルでコンピュータ装置を、TCP/IPなどの適切な通信プロトコルを使用するネットワークへと接続している。
システム・バス18には、さらにI/Oバス・ブリッジ26が接続されている。I/Oバス・ブリッジ26の下流側には、PCIなどのI/Oバス28を介して、IDE、ATA、ATAPI、シリアルATA、SCSI、USBなどにより、ハードディスク装置30が接続されている。また、I/Oバス28には、USBなどのバスを介して、キーボードおよびマウスなどのポインティング・デバイスなどの入力装置32が接続されていて、この入力装置32によりユーザ・インタフェースが提供される。
コンピュータ装置のCPU12としては、いかなるシングルコア・プロセッサまたはマルチコア・プロセッサを用いることができる。コンピュータ装置は、WINDOWS(登録商標)200X、UNIX(登録商標)、LINUX(登録商標)などのオペレーティング・システム(以下、OSとして参照する。)により制御される。コンピュータ装置は、上記OSの管理の下、システム・メモリ16上などにプログラムを展開し、プログラムを実行し、各ハードウェア資源を動作制御することによって、上述した機能部の構成および処理をコンピュータ上に実現する。
(7)実験
(7-1)コンピュータ装置における実装
クロック数2.2GHzのDual Core Opteron(登録商標)275プロセッサ2機と、2MBの2次キャッシュ、4GBのPC3200のRAM、750GBのSATAインタフェースのHDD(7200rpm)2機を備えるIntelliStation(登録商標)AProを用いて、本実施形態によるキーバリュー・ストアを実現するコンピュータ装置を実装した。このコンピュータ装置のオペレーティング・システムは、Windows(登録商標)2003 Server Standard x64 Edition ServicePack2であり、上記プログラムは、Java(登録商標)言語(Version 1.6.0)によって記述した。
(7-1)コンピュータ装置における実装
クロック数2.2GHzのDual Core Opteron(登録商標)275プロセッサ2機と、2MBの2次キャッシュ、4GBのPC3200のRAM、750GBのSATAインタフェースのHDD(7200rpm)2機を備えるIntelliStation(登録商標)AProを用いて、本実施形態によるキーバリュー・ストアを実現するコンピュータ装置を実装した。このコンピュータ装置のオペレーティング・システムは、Windows(登録商標)2003 Server Standard x64 Edition ServicePack2であり、上記プログラムは、Java(登録商標)言語(Version 1.6.0)によって記述した。
(7-2)実験結果(スループットおよびメモリ消費量)
図12に示すキーバリュー・ストア300を実現するシステムをコンピュータ装置上に実現した。LOUDSストア340は、図13に示すファサード構成により実装した。LOUDSストア340において、ブルームフィルタ344は、1キーワードあたり3ビットのビット配列を準備し、2個のハッシュ関数によって各2ビットを有効化する構成とした。また、誤差eは、1/20000とし、上限閾値ΘHMおよびΘLは、それぞれ、1/4000および1/10000とした。
図12に示すキーバリュー・ストア300を実現するシステムをコンピュータ装置上に実現した。LOUDSストア340は、図13に示すファサード構成により実装した。LOUDSストア340において、ブルームフィルタ344は、1キーワードあたり3ビットのビット配列を準備し、2個のハッシュ関数によって各2ビットを有効化する構成とした。また、誤差eは、1/20000とし、上限閾値ΘHMおよびΘLは、それぞれ、1/4000および1/10000とした。
上記キーバリュー・ストア300に対し、NHTSAが収集公開している自動車の不具合報告データベースから言語処理によって抽出された重複を含むキーワード2.4億件のデータ・セットを入力した際の平均スループットおよびメモリ使用量を計測した。上記キーワードは、平均約27.2文字であり、上記データ・セットには約650万個のユニークなキーワード文字列が含まれていた。
さらに比較のため、ハッシュマップ・ストアのみからなるキーバリュー・ストア、ダブルアレイ・ストアのみからなるキーバリュー・ストア、およびLOUDSストアのみからなるキーバリュー・ストアをそれぞれ構成し、上記と同一のデータ・セットを入力し、平均スループットおよびメモリ使用量を計測した。
上記データ・セットからキーバリュー・ストアを構築した際の第2の実施形態(Hash Map+DA+LOUDS)、ハッシュマップ・ストアのみ(Hash Map)、ダブルアレイ・ストアのみ(Double Array TRIE)、LOUDSストアのみ(LOUDS TRIE)にかかる実験例を、それぞれ、実験例1、実験例2、実験例3および実験例4と参照する。実験例1が実施例に対応する。
下記表1は、上記実験例1~実験例4について測定された平均スループットおよびメモリ使用量をまとめたテーブルである。下記表1が示すように、実験例1のキーバリュー・ストア300は、実験例3のダブルアレイのみのキーバリュー・ストアの約半分のメモリ消費量で、ダブルアレイのみのストアに迫る平均スループットを記録した。したがって、ハッシュマップ・ストアのみ、ダブルアレイ・ストアのみまたはLOUDSストアのみでの実装と比較して、概ねジップの法則に従う現実のデータ・アクセスにおいて、上記実施形態によるキーバリュー・ストアが、メモリ空間効率およびスループットの総合的な観点から優れた性能を発揮できることが示された。
(7-3)実験結果(帰還率および残留率)
さらに、上記コンピュータ装置において、上記データ・セットを入力した際のバケットごとのハッシュマップ・ストアに入った全シンボル数に対する他ストアからハッシュマップ・ストア310へ帰還したシンボル数の割合(帰還率)、振り分け時のハッシュマップ・ストアの全エントリに対するハッシュマップ・ストア310に残留したエントリ数の割合(残留率)、全シンボル数に対するハッシュマップ・ストア310のエントリにヒットする割合(ヒット率)の経時変化を計測した。また、上記データ・セットを入力して最終的に得られたキーバリュー・ストアのメモリ消費量を計測した。
さらに、上記コンピュータ装置において、上記データ・セットを入力した際のバケットごとのハッシュマップ・ストアに入った全シンボル数に対する他ストアからハッシュマップ・ストア310へ帰還したシンボル数の割合(帰還率)、振り分け時のハッシュマップ・ストアの全エントリに対するハッシュマップ・ストア310に残留したエントリ数の割合(残留率)、全シンボル数に対するハッシュマップ・ストア310のエントリにヒットする割合(ヒット率)の経時変化を計測した。また、上記データ・セットを入力して最終的に得られたキーバリュー・ストアのメモリ消費量を計測した。
さらに比較のため、図12に示すキーバリュー・ストア300を実現するシステムにおいて、ストア代表値を用いたエントリの復元を行わないシステムを構成し、同一データ・セットを入力し、上記データ・セットを入力した際の帰還率、残留率およびヒット率の経時変化を計測した。また、上記データ・セットを入力して最終的に得られたキーバリュー・ストアのメモリ消費量を計測した。
上記データ・セットからキーバリュー・ストアを構築した際の、第2の実施形態によるシステムと、第2の実施形態によるシステムにおいてストア代表値を用いたエントリの復元を行わないシステムとにかかる実験例を、それぞれ、実験例5および実験例6と参照する。実験例5が実施例に対応する。
図16(A)は、上記実験例5および実験例6について測定された帰還率の経時変化をプロットした折れ線グラフである。図16(B)は、上記実験例5および実験例6について測定された残留率の経時変化をプロットした折れ線グラフである。図17(A)は、上記実験例5および実験例6について測定されたヒット率の経時変化をプロットした折れ線グラフである。図17(B)は、上記実験例5および実験例6について最終的に得られたキーバリュー・ストアの消費メモリ量をプロットした棒グラフである。なお、上記図16および図17(A)において、横軸の時間は、入力データ数に対応する。
図16(A)に示すように、ストア代表値を用いた復元が行われないシステム(実験例6)では、帰還率が時間の経過に従って大きく変動し、高い値を示す。これに対し、ストア代表値を用いた復元が行われる第2の実施形態のシステム(実験例5)では、定常的に低い帰還率に抑制されていることが理解される。同様に図16(B)に示すように、実験例6のシステムでは、残留率が時間の経過に関わらず低い値を示すが、実験例5の第2の実施形態によるシステムでは、時間の経過とともに残留率が改善し、最終的には約93%まで向上していることが理解される。同様に図17(A)を参照すると、実験例6のシステムでは、ヒット率が時間の経過に伴い単調減少して行くが、実験例5の第2の実施形態によるシステムでは、時間の経過とともにヒット率が向上していることが理解される。
また、図17(B)に示すように、実験例6のシステムと、実験例5の第2の実施形態によるシステムとでは、メモリ消費量に大きな相違が無く、第2の実施形態によるシステムの方が若干コンパクトになる結果であった。
帰還率は、低いときに精度が高いと評価され、残留率は、高いときに精度が高いと評価され、ヒット率も高いときに精度が高いと評価されるが、上記実験例5は、ストア代表値を用いた復元が行われない実験例6と比較して、帰還率、残留率およびヒット率のいずれの観点からも精度が改善することが示された。
第2の実施形態のシステムにおいて、帰還率、残留率およびヒット率が改善されるのは、ストア代表値を用いた復元により、シンボルの出現頻度が適正に評価され、高頻度のシンボルがハッシュマップ・ストア310に残留し易く、一度整理された低頻度のシンボルがハッシュマップ・ストア310に帰還し難くなり、ひいてはハッシュマップ・ストア310およびストア330,340間のエントリの行き来による振動が低減された結果であると考えられる。
以上説明したように、本発明の実施形態によれば、オンライン構築が可能であり、高い空間効率でキーを格納し、かつ、高いデータ・アクセス速度を有するデータストアを実現する情報処理装置、データストア操作方法およびプログラムを提供することができる。
なお、本発明につき、発明の理解を容易にするために各機能部および各機能部の処理を記述したが、本発明は、上述した特定の機能部が特定の処理を実行するほか、処理効率や実装上のプログラミングなどの効率を考慮して、いかなる機能部に、上述した処理を実行するための機能を割当てることができる。
また、本発明は、キーとして、記号として1バイト文字を用いる文字列のほか、日本語、中国語、韓国語、アラビア語などマルチ・バイトの文字の文字列に対しても適用可能であることは言うまでもない。
本発明の上記機能は、C++、Java(登録商標)、JavaBeans(登録商標)、Java(登録商標)Applet、JavaScript(登録商標)、Perl、Rubyなどのオブジェクト指向プログラミング言語などで記述された装置実行可能なプログラムにより実現でき、装置可読な記録媒体に格納して頒布または伝送して頒布することができる。
これまで本発明を、特定の実施形態をもって説明してきたが、本発明は、実施形態に限定されるものではなく、他の実施形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。
12…CPU、14…キャッシュ・メモリ、16…システム・メモリ、18…システム・バス、20…グラフィックス・ドライバ、22…NIC、24…ディスプレイ、26…I/Oバス・ブリッジ、28…I/Oバス、30…ハードディスク装置、32…入力装置、100,300,400…キーバリュー・ストア、110…最上位ストア、120,320,420…ブルームフィルタ、130…階層ストア、132…ストア代表頻度値Ri、134…合計出現回数Ni、136…シンボル数|Di|、150,350,450…振り分け部、200…データ・ストリーム、210…バケット、212…バケット境界、214…入力位置、310,410…ハッシュマップ・ストア、330…ダブルアレイ・ストア、340…LOUDSストア、342…下位LOUDS、344…ブルームフィルタ、346…入力バッファトライ木、430…ダブルアレイ・ストアまたはLOUDSストア
Claims (15)
- データストアを実現する情報処理装置であって、
前記データストアを構成し、シンボルのエントリ毎のカウンタを有する最上位ストアと、
それぞれ、前記データストアを構成し、階層ごとに頻度に関する代表値が定義される1以上の階層ストアと、
アクセスされるシンボルを、前記最上位ストア内でカウントし、カウンタ値に応じて前記最上位ストアおよび前記1以上の階層ストアへ振り分けを行う振り分け部と
を含み、前記振り分け部は、前記最上位ストアから移動されたシンボルに対するアクセスに対応して、該シンボルが含まれる階層ストアに対し定義される頻度に関する代表値を用いて前記最上位ストアに該シンボルのエントリを復元する、情報処理装置。 - 前記カウンタ値は、シンボルの出現頻度値を保持し、前記復元は、前記代表値に応じて、シンボルの失われた過去を反映した出現頻度値、または出現頻度値に含まれ得る誤差を表す誤差値を設定することを含み、
前記振り分け部は、前記誤差値を設定して前記最上位ストアにエントリを追加するとともに、入力データに対する規定幅のバケットの境界で、出現頻度値、誤差値および入力データ数の関係から、前記最上位ストアに残留させるエントリと、前記最上位ストアから前記階層ストア各々に移動するエントリとを判定する、請求項1に記載の情報処理装置。 - 前記代表値は、前記階層ストア内のシンボル平均出現頻度または最大出現頻度である、請求項2に記載の情報処理装置。
- 前記代表値は、階層ストア毎にカウントされるシンボルの合計出現頻度とシンボル数とから算出される前記シンボル平均出現頻度である、請求項3に記載の情報処理装置。
- 前記1以上の階層ストアは、少なくとも2つの階層ストアを含み、
前記振り分け部は、規定幅のバケットの境界で、シンボル平均出現頻度が下位の階層ストアより規定以上下回る上位の階層ストア内の全エントリを、該下位の階層ストアに組み入れる、請求項1に記載の情報処理装置。 - 前記1以上の階層ストアは、リンク構造による動的なツリーおよび簡潔データ構造による静的なツリー、またはいずれか一方の構造によるツリーを少なくとも階層ストアとして含む、請求項1に記載の情報処理装置。
- 前記最上位ストアは、ハッシュ・マップであり、前記1以上の階層ストアの1つがリンク構造による動的なツリーであり、前記1以上の階層ストアの他の1つが、LOUDS(Level Order Unary Degree Sequence)による静的なツリーである、請求項1に記載の情報処理装置。
- 前記振り分け部は、前記最上位ストア内のエントリに対するアクセスに対応して、前記カウンタを増分するとともに、前記最上位ストアおよび前記1以上の階層ストアのいずれにも含まれないシンボルに対するアクセスに対応して、該シンボルのエントリを、カウンタに初期値を設定して、前記最上位ストアに新規追加する、請求項1に記載の情報処理装置。
- データストアにアクセスするため情報処理装置が実行する方法であって、情報処理装置が、
シンボルに対するアクセスを受領するステップと、
アクセスされたシンボルを、前記データストアを構成しシンボルのエントリ毎にカウンタが設けられた最上位ストア内でカウントするステップと、
カウンタ値に応じて前記最上位ストアと、それぞれ前記データストアを構成する1以上の階層ストアとへ振り分けるステップと、
前記最上位ストアから移動されたシンボルに対するアクセスに対応して、該シンボルが含まれる階層ストアに対し定義される代表値を用いて前記最上位ストアに該シンボルのエントリを復元するステップと
を含む、データ・アクセス方法。 - 前記カウントするステップは、カウンタがシンボルの出現頻度値を保持するとして、出現頻度値に含まれ得る誤差を表す誤差値を設定して前記最上位ストアにエントリを追加するサブステップを含み、
前記振り分けるステップは、入力データに対する規定幅のバケットの境界で、出現頻度値、誤差値および入力データ数の関係から、前記最上位ストアに残留させるエントリを判定するサブステップと、前記境界で前記関係に応じて前記最上位ストアから前記階層ストア各々に移動するエントリを判定するサブステップとを含み、
前記復元するステップは、前記代表値に応じて、シンボルの失われた過去を反映した出現頻度値または誤差値をエントリに設定するサブステップをさらに含む、請求項10に記載のデータ・アクセス方法。 - 前記復元するステップは、前記代表値として、前記階層ストア内のシンボル平均出現頻度または最大出現頻度を算出するサブステップを含む、請求項11に記載のデータ・アクセス方法。
- 前記復元するステップにおける前記算出するサブステップは、階層ストア毎にカウントされるシンボル合計出現回数とシンボル数とから、前記シンボル平均出現頻度を前記代表値として算出するサブステップである、請求項12に記載のデータ・アクセス方法。
- 前記1以上の階層ストアは、少なくとも2つの階層ストアを含み、
規定幅のバケットの境界で、シンボル平均出現頻度が下位の階層ストアより規定以上下回る上位の階層ストア内のエントリを、該下位の階層ストアに組み入れるステップをさらに含む、請求項11に記載のデータ・アクセス方法。 - コンピュータ・システム上にデータストアを実現するためのコンピュータ実行可能なプログラムであって、前記プログラムは、前記コンピュータ・システムを、
前記データストアを構成し、シンボルのエントリ毎のカウンタを有する最上位ストア、 それぞれ、前記データストアを構成し、代表値が定義される1以上の階層ストア、および
アクセスされるシンボルを、前記最上位ストア内でカウントし、カウンタ値に応じて前記最上位ストアおよび前記1以上の階層ストアへ振り分けを行う振り分け部であって、前記最上位ストアから移動されたシンボルに対するアクセスに対応して、該シンボルが含まれる階層ストアに対し定義される代表値を用いて前記最上位ストアに該シンボルのエントリを復元する、当該振り分け部、
として機能させるプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201280052433.0A CN103890763B (zh) | 2011-10-26 | 2012-08-24 | 信息处理装置、数据存取方法以及计算机可读存储介质 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011-234790 | 2011-10-26 | ||
JP2011234790 | 2011-10-26 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2013061680A1 true WO2013061680A1 (ja) | 2013-05-02 |
Family
ID=48167522
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2012/071448 WO2013061680A1 (ja) | 2011-10-26 | 2012-08-24 | 情報処理装置、データ・アクセス方法およびプログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US9043660B2 (ja) |
CN (1) | CN103890763B (ja) |
WO (1) | WO2013061680A1 (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9043660B2 (en) | 2011-10-26 | 2015-05-26 | International Business Machines Corporation | Data store capable of efficient storing of keys |
CN109389880A (zh) * | 2017-08-11 | 2019-02-26 | 波音公司 | 包括使用嵌套哈希表的消息回放的资产模拟 |
CN111078718A (zh) * | 2019-12-30 | 2020-04-28 | 广州酷狗计算机科技有限公司 | 频率控制方法、装置、设备以及计算机存储介质 |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014191651A (ja) * | 2013-03-27 | 2014-10-06 | Fujitsu Ltd | ストレージシステム、ストレージ装置、ストレージシステムの制御方法、およびストレージ装置の制御プログラム |
CA3042478A1 (en) * | 2016-08-31 | 2018-03-08 | Pointerra Technologies Pty Ltd | Method and system for storing and retrieving multi-dimensional data |
JP6720844B2 (ja) * | 2016-11-30 | 2020-07-08 | 富士通株式会社 | データ管理プログラム、データ管理方法及びデータ管理装置 |
US11809384B2 (en) | 2017-03-06 | 2023-11-07 | Microsoft Technology Licensing, Llc | Optimized data storage for fast retrieval |
CN107329903B (zh) * | 2017-06-28 | 2021-03-02 | 苏州浪潮智能科技有限公司 | 一种内存垃圾回收方法及系统 |
US10929260B2 (en) | 2018-05-16 | 2021-02-23 | Advantest Corporation | Traffic capture and debugging tools for identifying root causes of device failure during automated testing |
US10955461B2 (en) * | 2018-05-16 | 2021-03-23 | Advantest Corporation | Smart and efficient protocol logic analyzer configured within automated test equipment (ATE) hardware |
US10948540B2 (en) | 2018-07-27 | 2021-03-16 | Advantest Corporation | Integrated protocol analyzer configured within automated test equipment (ate) hardware |
US11409747B2 (en) * | 2020-03-23 | 2022-08-09 | Alibaba Group Holding Limited | Combined filtering and indexing for read-only data sets |
US11620547B2 (en) | 2020-05-19 | 2023-04-04 | Oracle International Corporation | Estimating number of distinct values in a data set using machine learning |
CN111966681A (zh) * | 2020-08-14 | 2020-11-20 | 咪咕文化科技有限公司 | 数据处理方法、装置、网络设备及存储介质 |
US11520834B1 (en) * | 2021-07-28 | 2022-12-06 | Oracle International Corporation | Chaining bloom filters to estimate the number of keys with low frequencies in a dataset |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06149897A (ja) * | 1992-11-10 | 1994-05-31 | Hitachi Ltd | 電子ファイル装置の文書画像検索方法 |
JPH06176070A (ja) * | 1992-12-09 | 1994-06-24 | Matsushita Electric Ind Co Ltd | データ処理装置 |
JPH0830640A (ja) * | 1994-07-15 | 1996-02-02 | Matsushita Electric Ind Co Ltd | 情報再生装置 |
JP2000215201A (ja) * | 1999-01-21 | 2000-08-04 | Matsushita Electric Ind Co Ltd | マルチメディア情報提供システム |
JP2001014191A (ja) * | 1999-07-01 | 2001-01-19 | Mitsubishi Electric Engineering Co Ltd | 電子ファイリング装置 |
JP2005050197A (ja) * | 2003-07-30 | 2005-02-24 | Internatl Business Mach Corp <Ibm> | コンピュータ実行可能な次元削減方法、該次元削減方法を実行させるためのプログラム、次元削減装置および該次元削減装置を使用した検索エンジン |
JP2008134688A (ja) * | 2006-11-27 | 2008-06-12 | Hitachi Ltd | 記号列検索方法、プログラムおよび装置ならびにそのトライの生成方法、プログラムおよび装置 |
WO2010114006A1 (ja) * | 2009-03-31 | 2010-10-07 | 日本電気株式会社 | ストレージシステムとストレージアクセス方法とプログラム |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7177883B2 (en) * | 2004-07-15 | 2007-02-13 | Hitachi, Ltd. | Method and apparatus for hierarchical storage management based on data value and user interest |
US20060036627A1 (en) * | 2004-08-06 | 2006-02-16 | Roger Deran | Method and apparatus for a restartable hash in a trie |
US7457813B2 (en) * | 2004-10-06 | 2008-11-25 | Burnside Acquisition, Llc | Storage system for randomly named blocks of data |
JPWO2006048998A1 (ja) * | 2004-11-05 | 2008-05-22 | 株式会社アイ・ピー・ビー | キーワード抽出装置 |
US8311663B2 (en) * | 2005-08-31 | 2012-11-13 | International Business Machines Corporation | Apparatus and method to store information |
US7496711B2 (en) * | 2006-07-13 | 2009-02-24 | International Business Machines Corporation | Multi-level memory architecture with data prioritization |
US7496568B2 (en) * | 2006-11-30 | 2009-02-24 | International Business Machines Corporation | Efficient multifaceted search in information retrieval systems |
US20090132769A1 (en) * | 2007-11-19 | 2009-05-21 | Microsoft Corporation | Statistical counting for memory hierarchy optimization |
JP5224953B2 (ja) * | 2008-07-17 | 2013-07-03 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 情報処理装置、情報処理方法およびプログラム |
JP2010257094A (ja) * | 2009-04-23 | 2010-11-11 | Hitachi Ltd | 階層ストレージ管理システムにおける移動候補ファイルの抽出方法 |
CN102640125B (zh) * | 2009-09-21 | 2015-07-08 | 高通股份有限公司 | 分布式内容存储和取回 |
US20110107042A1 (en) * | 2009-11-03 | 2011-05-05 | Andrew Herron | Formatting data storage according to data classification |
US8386717B1 (en) * | 2010-09-08 | 2013-02-26 | Symantec Corporation | Method and apparatus to free up cache memory space with a pseudo least recently used scheme |
US8838895B2 (en) * | 2011-06-09 | 2014-09-16 | 21Vianet Group, Inc. | Solid-state disk caching the top-K hard-disk blocks selected as a function of access frequency and a logarithmic system time |
CN103890763B (zh) | 2011-10-26 | 2017-09-12 | 国际商业机器公司 | 信息处理装置、数据存取方法以及计算机可读存储介质 |
US8380758B1 (en) * | 2011-11-14 | 2013-02-19 | Google Inc. | Trie specialization allowing storage of value keyed by patterns and retrieval by tokens |
-
2012
- 2012-08-24 CN CN201280052433.0A patent/CN103890763B/zh not_active Expired - Fee Related
- 2012-08-24 WO PCT/JP2012/071448 patent/WO2013061680A1/ja active Application Filing
- 2012-10-26 US US13/661,862 patent/US9043660B2/en not_active Expired - Fee Related
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06149897A (ja) * | 1992-11-10 | 1994-05-31 | Hitachi Ltd | 電子ファイル装置の文書画像検索方法 |
JPH06176070A (ja) * | 1992-12-09 | 1994-06-24 | Matsushita Electric Ind Co Ltd | データ処理装置 |
JPH0830640A (ja) * | 1994-07-15 | 1996-02-02 | Matsushita Electric Ind Co Ltd | 情報再生装置 |
JP2000215201A (ja) * | 1999-01-21 | 2000-08-04 | Matsushita Electric Ind Co Ltd | マルチメディア情報提供システム |
JP2001014191A (ja) * | 1999-07-01 | 2001-01-19 | Mitsubishi Electric Engineering Co Ltd | 電子ファイリング装置 |
JP2005050197A (ja) * | 2003-07-30 | 2005-02-24 | Internatl Business Mach Corp <Ibm> | コンピュータ実行可能な次元削減方法、該次元削減方法を実行させるためのプログラム、次元削減装置および該次元削減装置を使用した検索エンジン |
JP2008134688A (ja) * | 2006-11-27 | 2008-06-12 | Hitachi Ltd | 記号列検索方法、プログラムおよび装置ならびにそのトライの生成方法、プログラムおよび装置 |
WO2010114006A1 (ja) * | 2009-03-31 | 2010-10-07 | 日本電気株式会社 | ストレージシステムとストレージアクセス方法とプログラム |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9043660B2 (en) | 2011-10-26 | 2015-05-26 | International Business Machines Corporation | Data store capable of efficient storing of keys |
CN109389880A (zh) * | 2017-08-11 | 2019-02-26 | 波音公司 | 包括使用嵌套哈希表的消息回放的资产模拟 |
CN111078718A (zh) * | 2019-12-30 | 2020-04-28 | 广州酷狗计算机科技有限公司 | 频率控制方法、装置、设备以及计算机存储介质 |
CN111078718B (zh) * | 2019-12-30 | 2023-04-07 | 广州酷狗计算机科技有限公司 | 频率控制方法、装置、设备以及计算机存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20140122921A1 (en) | 2014-05-01 |
US9043660B2 (en) | 2015-05-26 |
CN103890763B (zh) | 2017-09-12 |
CN103890763A (zh) | 2014-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2013061680A1 (ja) | 情報処理装置、データ・アクセス方法およびプログラム | |
KR102462781B1 (ko) | Kvs 트리 데이터베이스 | |
KR102266756B1 (ko) | Kvs 트리 | |
US8433674B2 (en) | Method for clipping migration candidate file in hierarchical storage management system | |
US10831736B2 (en) | Fast multi-tier indexing supporting dynamic update | |
US8554993B2 (en) | Distributed content storage and retrieval | |
CN107247778B (zh) | 用于实施可扩展数据存储服务的系统和方法 | |
US10769126B1 (en) | Data entropy reduction across stream shard | |
US8229916B2 (en) | Method for massively parallel multi-core text indexing | |
US11061881B2 (en) | Bounding cost of flushes in buffer trees | |
CN109344157A (zh) | 读写分离方法、装置、计算机设备及存储介质 | |
CN110399096A (zh) | 分布式文件系统元数据缓存重删的方法、装置以及设备 | |
Horri et al. | A hierarchical scheduling and replication strategy | |
CN108874930A (zh) | 文件属性信息统计方法、装置、系统、设备及存储介质 | |
Ghandeharizadeh et al. | CAMP: A cost adaptive multi-queue eviction policy for key-value stores | |
CN109086462A (zh) | 一种分布式文件系统中元数据的管理方法 | |
Carniel et al. | A generic and efficient framework for flash-aware spatial indexing | |
WO2015129109A1 (ja) | インデックス管理装置 | |
CN112506875B (zh) | 文件存储方法、相关装置及文件存储系统 | |
Hildrum et al. | Storage optimization for large-scale distributed stream-processing systems | |
US9824105B2 (en) | Adaptive probabilistic indexing with skip lists | |
CN112328587A (zh) | ElasticSearch的数据处理方法和装置 | |
CN111949218B (zh) | 一种高可用存储系统负载均衡方法、系统、介质及终端 | |
US11663127B2 (en) | Method, electronic device and computer program product for managing storage system | |
CN114706849B (zh) | 一种数据检索方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 12844111 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
NENP | Non-entry into the national phase |
Ref country code: JP |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 12844111 Country of ref document: EP Kind code of ref document: A1 |