JP2015512604A - 暗号ハッシュ・データベース - Google Patents

暗号ハッシュ・データベース Download PDF

Info

Publication number
JP2015512604A
JP2015512604A JP2015504768A JP2015504768A JP2015512604A JP 2015512604 A JP2015512604 A JP 2015512604A JP 2015504768 A JP2015504768 A JP 2015504768A JP 2015504768 A JP2015504768 A JP 2015504768A JP 2015512604 A JP2015512604 A JP 2015512604A
Authority
JP
Japan
Prior art keywords
key
computer
hash table
implemented method
hash
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2015504768A
Other languages
English (en)
Other versions
JP5996088B2 (ja
Inventor
ハント,タッド
バラス,フランク,イー
Original Assignee
エグザブロックス・コーポレーション
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 エグザブロックス・コーポレーション filed Critical エグザブロックス・コーポレーション
Publication of JP2015512604A publication Critical patent/JP2015512604A/ja
Application granted granted Critical
Publication of JP5996088B2 publication Critical patent/JP5996088B2/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/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables

Landscapes

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

Abstract

キー値データベースのハッシュ・テーブルのバースティングを行う方法は、キー及び値を受け取る工程と、プレフィックス及びサフィックスにキーを再帰的に分けることにより、キー値データベースのトライ・ノードをルート・ノードからリーフ・ノードまで辿る工程と、リーフ・ノードに達する工程であって、リーフ・ノードがハッシュ・テーブルである工程と、キーがハッシュ・テーブルに記憶されていないことを判定する工程と、ハッシュ・テーブルが、キー及び値を記憶することができないことを判定する工程と、ハッシュ・テーブルを除去する工程と、新たなトライ・ノードをハッシュ・テーブルの親トライ・ノードと関連付ける工程と、2つ以上の新たなハッシュ・テーブルを新たなトライ・ノードと関連付ける工程と、ハッシュ・テーブルからのキー及び関連付けられた値全てを2つ以上の新たなハッシュ・テーブルの1つに移動させる工程と、キー及び関連付けられた値を2つ以上の新たなハッシュ・テーブルの1つに挿入する工程とを含む。

Description

本開示は一般にデータ処理に関し、特に、暗号ハッシュ・データベースを生成し、管理する方法及びシステムに関する。
本セクションにおいて説明する手法は、追求し得るが、必ずしも、先行して考え出されたか、又は追求された訳でない手法である。したがって、別途明記しない限り、本セクションにおいて説明する手法の何れも、単に本セクションに含められていることにより、従来技術としてみなされると解釈すべきでない。
トライ(trie)すなわちプレフィックス・ツリー(prefix tree)は、キーが通常、ストリングである連想配列(アレイ)を記憶するために使用される順序付き木データ構造である。バイナリ・サーチ・ツリーと違って、ツリー内のノードは、そのノードに関連付けられたキーを記憶しない。その代わりに、ツリー内のその位置は、それが関連付けられたキーを規定する。ノードの子孫は全て、そのノードに関連付けられたストリングの共通のプレフィックスを有し、ルートは空ストリングに関連付けられる。値は、通常、全てのノードと関連付けられる訳でなく、関心のキーに対応する一部の内部ノード及びリーフのみと関連付けられる。トライは、メモリ内のストリングを管理するための非常に高速のツリーベースのデータ構造である一方、空間集約的である。
バースティングされたトライは、トライのブランチを作成する前にキー値対を記憶するためにバケットを使用するトライである。バケットが満杯の場合、バケットには「バースティング」が行われ、バケットはブランチになる。バースティングされたトライは、標準トライとほぼ同速度を有するが、トライチェインをバケットに収納することにより、空間を削減する。別の利点は、小さいキー値対の組に対して、より効率的なデータ構造をバケット内で使用し、通常のトライよりも高速にすることが可能であることである。バースティングされたトライのサーチには、クエリ・ストリングのプレフィックスを使用して、次いでバケット内のレコードを見つけるためにクエリ・ストリングの残りを使用して特定のバケットを識別することが関係する。当初、バースティングされたツリーは単一のバケットを含む。コンテナが非効率的であると認められる場合、コンテナにはバースティングが行われ、次いで、コンテナは、元のコンテナのストリングを区分する子ビンの組及びトライ・ノードによって置き換えられる。高速であるが、バースティングされたトライはキャッシュを意識していない。多くのメモリ内データ構造と同様に、メモリ・アクセスが全て、等コストである状況において効率的である。しかし、実際には、メモリへの単一のランダム・アクセスには通常、何百ものクロック・サイクルが発生する。
空間集約的であるが、トライはキャッシュを意識し得る。トライ・ノードはサイズが小さく、それにより、頻繁にアクセスされるトライパスがキャッシュ内に存在している確率が増加する。しかし、バースティングされたトライは、そのキャッシュ非効率性について知られている連結リストとしてバケットを表す。連結リストを辿る場合、子のアドレスは、親が処理されるまで知ることが可能でない。このことは、ポインタ追跡問題として知られており、実行しているプログラムに先行してデータを予想し、キャッシュにロードすることにより、キャッシュミスの削減を試行するハードウェア・プリフェッチャの有効性を妨げる。
「HAT−trie:A Cache−conscious Trie−based Data Structure for Strings」は、その全部を参照により、本明細書及び特許請求の範囲において援用するNikolas Askitis及びRanjan Sinhaによる刊行物である。これには、可変長ストリングのバースティングされたトライのアルゴリズムが開示されているが、前述の可変長ストリングの処理は開示していない。更に、上記刊行物には、キャッシュを意識する一方、バースティングされたトライのアルゴリズムの効率を向上させることができないデータ構造及びアルゴリズムが開示されている。
更に、既存のデータ構造は何れも、利用可能なRAMの容量を超えるデータセットを処理することを可能にするものでない。
本概要は、詳細な説明において以下に更に説明された、単純化された形式での概念の選択肢を紹介するために提供する。本概要は、特許請求の範囲に記載の主題の主要な構成又は必須の構成を識別することを意図するものでなく、特許請求の範囲に記載の主題の範囲の規定を助けるものとして使用されることを意図するものでもない。
キー値データベースのハッシュ・テーブルのバースティングを行う方法及びシステムを提供する。例示的な一実施形態では、キー値データベースのハッシュ・テーブルのバースティングを行う方法は、キー、及びキーに関連付けられた値を受け取る工程と、キーをプレフィックス及びサフィックスに再帰的に分けることにより、キー値データベースのトライ・ノードをル―ト・ノードからリーフ・ノードまで辿る工程とを含み得る。全ての反復により、キーには、サフィックスに関連付けられた値が帰され、キー値データベースの現在のノードの値と比較され得る。キー値データベースの(ハッシュ・テーブルでもある)リーフ・ノードに達し、キーがハッシュ・テーブルに記憶されていないと判定されると、ハッシュ・テーブルがキー及び値を記憶することができるか否かが更に判定され得る。ハッシュ・テーブルに既に記憶されているデータの量が、キー及び関連付けられた値の記憶を可能にしないと判定された場合、ハッシュ・テーブルが除去され、新たなトライ・ノードがハッシュ・テーブルの親トライ・ノードと関連付けられ、2つ以上の新たなハッシュ・テーブルが、新たなトライ・ノードと関連付けられ得る。その後、取り外されたハッシュ・テーブルからのキー及び関連付けられた値は全て、新たなハッシュ・テーブルに移動させ得、新たなキー、及び関連付けられた値は、2つ以上の新たなハッシュ・テーブルのうちの1つに挿入し得る。
上記及び関連する目的の実現のために、1つ又は複数の局面は、以下に詳細に説明し、特許請求の範囲に特記する構成を含む。以下の説明及び図面は、1つ又は複数の局面の特定の例証的な構成を詳細に表している。しかし、前述の構成は、種々の局面の原理を使用し得る種々のやり方のうちのいくつかのやり方を示しているに過ぎず、前述の説明は、前述の局面及びその均等物全てを含むことを意図しているものでない。
本発明の実施形態は、添付図面の図における限定の目的でなく、例示の目的で例証し、同様な参照符号は同様な構成要素を示す。
ハッシュ・データベース(HDB)を管理する方法の実現に適したコンピューティング環境を示す図である。 キー値データベースのハッシュ・テーブルのバースティングを行う、コンピュータによって実現される方法を示す例示的なプロセス・フローチャートである。 例示的な暗号キー値データベースを示すブロック図である。 例示的なノード・ヘッダを示すブロック図である。 例示的なトライ・ノードを示すブロック図である。 例示的なハッシュ・テーブル・ノードを示すブロック図である。 純粋なハッシュ・テーブルを例示するブロック図である。 ハイブリッド・ハッシュ・テーブルを例示するブロック図である。 半純粋なハッシュ・テーブルを例示するブロック図である。 新たな暗号キー値データベースの作成を示すフローチャートである。 新たなキー値対のHDBへの挿入を示すフロー図である。 高レベル・バースティング・アルゴリズムを示すフローチャートである。 純粋なハッシュ・テーブルのバースティングを示すフローチャートである。 半純粋なハッシュ・テーブルのバースティングを示すフローチャートである。 ハイブリッド・ハッシュ・テーブルのバースティングを示すフローチャートである。 新たなトライ・ノードの作成を示すフローチャートである。 新たなハッシュ・ノードの作成を示すフローチャートである。 キーがデータベース内に存在しているか否かを判定し、キーがデータベース内に存在している場合、キーに関連付けられた値を判定する方法を示すフローチャートである。 キー及びその関連付けられた値をハッシュ・テーブルから削除する方法を示すフローチャートである。 ハッシュ・テーブル内の特定のキーの新たな値の挿入を示すフローチャートである。 キー及び対応する値をハッシュ・テーブルから削除する方法を示すフローチャートである。 ハッシュ・テーブル内の新たな値で、旧い値を置き換える方法を示すフローチャートである。 キャッシュ・キューの判定を示すフローチャートである。 ノードのキャッシュへの挿入を示すフローチャートである。 キャッシュからのノードの削除を示すフローチャートである。 ディスクからのノードのロード、及びそのキャッシュへの追加を示すフローチャートである。 修正されたノードにマーキングし、クリーンなキャッシュからダーティーなキャッシュにノードを移動させる方法を示すフローチャートである。 ロックされたキャッシュにノードを移動させることにより、削除することができないとしてノードにマーキングすることを示すフローチャートである。 ロックされたキャッシュを退出させ、そのキャッシュにもう一度、移動させることによる、ノードのアンロックを示すフローチャートである。 ロックされたキャッシュのノード全てをもう一度、それらそれぞれのキャッシュに移動させることを示すフローチャートである。 キャッシュから1つ又は複数の、クリーンな、ロックされていない非ルート・ノードを除去し、関連付けられたRAMを自由プールに戻すことにより、新たなノード用にキャッシュ内の空間を作ることを示すフローチャートである。 再帰的に、特定のノード及びその子全てをキャッシュから除去し、RAMをRAM自由プールに戻し、任意的には、ディスク空間をディスク自由プールに戻すことを示すフローチャートである。 修正されたノードをディスクに書き込み、それにより、クリーンなノードを作成することを示すフローチャートである。 本明細書及び特許請求の範囲記載の方法論の何れか1つ又は複数をマシンに行わせるための命令の組を実行することが可能なコンピュータ・システムの例示的な電子的形態におけるマシンのコンピューティング装置の模式図表現を示す図である。
以下の詳細な説明は、詳細な説明の一部を構成する添付図面への参照を含む。図面は、例示的な実施形態による例証を示す。本明細書において「実施例」としても表す前述の例示的な実施形態は、本願の主題を当業者が実施することを可能にするために十分な詳細で説明している。実施形態を組み合わせることが可能であり、他の実施形態を利用することが可能であり、又は、特許請求の範囲記載の範囲から逸脱しない限り、構造的、論理的、及び電気的変更を行うことが可能である。したがって、以下の詳細な説明は、限定的な意味合いで解されないものとし、本開示の範囲は特許請求の範囲及びその均等物によって画定される。
本明細書及び特許請求の範囲記載の手法は、高速であり、かつ効率的な不揮発性キー値記憶装置を作成することを可能にし、各キーは固定長暗号ハッシュであり、値は任意の値である。固定長ハッシュ値は、何れかの長さのストリングを入力としてとり、固定長値を生成するよう企図された固定長暗号ハッシュ関数によって生成される。固定長暗号ハッシュは、各固定長暗号ハッシュ値が一意の値を有する可能性を最大にする暗号ハッシュ関数を使用して導き出すことが可能である。更に、一部の実施形態では、ハッシュ関数への入力が同様であっても、ハッシュ値の明白なグルーピングが存在しないようなランダムなハッシュ分布をもたらす暗号ハッシュ関数を使用して、固定長暗号ハッシュを導き出すことが可能である。
キー値記憶装置は、スキーマなしの態様でアプリケーションがそのデータを記憶することを可能にする。データは、オブジェクト又はプログラミング言語のデータタイプに記憶することが可能である。キー値記憶装置は、何れの外部ソフトウェア又はアプリケーションについての値もオペークに処理し、一般に、キー値記憶装置は、受け取った如何なる値も記憶し、対応する取り出し要求が受け取られると、値の同一の複製を返す。更に、単一のキーは、同じキーを有する各値が別のデータベース・ルート下で記憶されるように複数の値を有し得る。
多数のキー値対を記憶し、管理することができるデータ構造を構築することが可能であり、キーは全て、例えばMD5、SHA−1、SHA−2、SHA−3、タイガー(Tiger)等などの固定長暗号ハッシュである。
本明細書及び特許請求の範囲記載の手法は、利用可能なランダム・アクセス・メモリ(RAM)によって限定されない一方、下にある不揮発性記憶装置において利用可能な空間によって限定されて、多数のキーを処理し、キーの数が利用可能なRAMをはるかに超える場合にも高速であることを意図している。一部のタイプの不揮発性記憶媒体は、限定列挙でないが、ハード・ドライブ、ユニバーサル・シリアル・バス(USB)サム・ドライブ、ソリッド・ステート・ドライブ(SATA/SAS/PCIe/等)、バッテリ・バックアップされたRAM等を含む。記憶装置が不揮発である旨の要件は厳密でなく、不揮発性記憶装置が、揮発性記憶装置で置き換えられた場合、それに記憶されたデータベースにより、電源障害が克服されなくなる。
本明細書及び特許請求の範囲記載の手法の種々の構成は、限定列挙でないが、キーに関連付けられた1つ又は複数のキーを記憶する工程、キーに関連付けられた値を取り出す工程、データベースからキー及び値を除去する工程、キーがデータベース内にあるかを判定する工程、考えられるキー全てのサブ範囲内のキーを求めてデータベースをサーチする工程、キーをソートする工程、順番にキー及び値を取り出す工程、キーに関連付けられた旧い値を新たな値で置き換える工程、データの喪失なしで、電源喪失などの障害から回復する工程、並びに、下にある記憶装置によってもたらされる破損を検出する工程を含む。
例示的なハッシュ・データベース(HDB)(すなわち、本明細書及び特許請求の範囲記載の「キー値データベース」)データ構造(すなわち、トライ・ノード及びハッシュ・テーブル)は、HDBインタフェース及びアルゴリズム(HDB作成及びキー値挿入、並びにハッシュ・テーブル・バースティングなど)と、階層キャッシュ・インタフェース及びアルゴリズムとを含み得る。
本書類を通して、「ディスク」の語は、下にある不揮発性記憶装置の略語として使用され、この装置が提供する抽象的なインタフェース(すなわち、このHDBがその上に記憶するオブジェクトをロードし、保存し、上記オブジェクト用に空間を割り当て、上記オブジェクトに対する持続ハンドルを作成する機能)を規定する。新たなオブジェクトを作成し、又は既存のオブジェクトを修正する特定のHDB動作が首尾良く行われると、ディスクは、変更を持続させたことが保証され、よって、保存と、対応するロードとの間で(電源障害などの)障害イベントが生じた場合でも、後続ロードは各オブジェクトの最後の状態を返す。ディスク管理ソフトウェアは、ソリッドステート・アロケータ(Solidstate Allocator)として表す。これは以下に更に詳細に説明する。
HDB及びソリッドステート・アロケータは、シリアル・アドバンスド・テクノロジ・アタッチメント(SATA−III)や、PCIe接続ソリッド・ステート・ドライブ(SSD)などのソリッド・ステート記憶装置とともに利用し得る。しかし、手法は何れかの特定の記憶装置にも限定されない。
既に上述したように、本明細書及び特許請求の範囲記載の手法は、利用可能なRAMよりもずっと大きなデータセットを管理することを可能にし得、したがって、サブシステムとしての効率的なキャッシュ手法を含み得る。例えば、最近最も使用されていない(LRU)キャッシング・アルゴリズム又は階層LRUキャッシング・アルゴリズムを使用することが可能である。キャッシュ動作はカプセル化し得るので、キャッシュ手法は、全体のプロセス・フロー、又は高レベルHDB手法を変えることなく、変わり得る。
本明細書及び特許請求の範囲記載のHDBは、暗号ハッシュに関連付けられた値を記憶し、取り出すデータベースである。LRUキャッシュは、先頭において最近最も使用されておらず、末尾において最近最も使用されている順にソートされたキューとして本書類を通じてモデリングされる。Length(x)は、x個のキューにおける要素の数である。
キュー(LRUキャッシュ)は、
x=q.head() qにおける最初のアイテムを、それを除去することなく返す
x=q.dequeue() qにおける最初のアイテムを、処理においてそれを除外して返す
q.enqueue(x) qにおける最後のアイテムとしてxを追加する
q.remove(x) その位置にかかわらず、qからxを除外する
length(q) q個のキューにおける要素の数
のように定義することが可能である。
更に、本明細書及び特許請求の範囲記載のディスク・アドレスは、ディスクによって提供されるオペーク・アドレスである。前述のアドレスに書き込まれる最後のデータは、電力サイクル後であっても後続読み出し動作中に返されることが保証される。
以下では、階層データ構造を生成し、管理する方法及びシステムに関する種々の実施形態の詳細な説明を提供する。
次に図面を参照するに、図1は、HDBを管理する種々の手法の実現に適したコンピューティング環境100を示す。コンピューティング環境100はコンピューティング・システム110及びメモリ120を備え得る。一般に、コンピューティング・システム110及びメモリ120は互いに結合され、互いにデータを送信することができる。一部の実施形態では、コンピューティング・システム110及びメモリ120は、単一のコンピュータ内に一体化し得、又は、相互接続されたコンピューティング・リソースを含み得る。メモリ120は、何れのタイプのものでもよく、揮発性メモリ及び不揮発性メモリ(例えば、リードオンリ・メモリ(ROM)、ランダム・アクセス・メモリ(RAM)、ダイナミック・ランダム・アクセス・メモリ(DRAM)、スタティック・ランダム・アクセス・メモリ(SRAM)、NANDフラッシュ・メモリ、NORフラッシュ・メモリ、ソリッドステート・ディスク(SSD)、シリアル・アドバンスド・テクノロジ・アタッチメント(SATA)SSD等)を含み得る。
コンピューティング・システム110は、キー値データベースのハッシュ・テーブルのバースティングを行うシステム130を含む。キー値データベースのハッシュ・テーブルのバースティングを行うシステム130は通信モジュール140及び処理モジュール150を含み得る。通信モジュール140は、キー、及びキーに関連付けられた値を受け取り得、キー、及びキーに関連付けられた値を、更なる処理のために処理モジュール150に送信する。処理モジュール150は、本明細書及び特許請求の範囲記載の種々の方法を実現し得る。
図2は、一部の実施形態により、キー値データベースのハッシュ・テーブルのバースティングを行う、コンピュータによって実現される方法200を示す例示的なプロセス・フローチャートである。方法200は、ハードウェア(例えば、専用ロジック、プログラマブル・ロジック、マイクロコード等)、(汎用コンピュータ・システム上又は専用マシン上で実行されるソフトウェアなどの)ソフトウェア、又は両方の組み合わせを備え得る処理ロジックによって行い得る。例示的な一実施形態では、処理ロジックは図1に示すシステム130に存在している。
方法200は、通信モジュール140がキー、及びキーに関連付けられた値を受け取る動作202で始まり得、プレフィックス及びサフィックスにキーを再帰的に分けることにより、処理モジュール150が、キー値データベースのトライ・ノードをルート・ノードから(ハッシュ・テーブルを含む)リーフ・ノードまで辿る動作204に進む。動作206では、ハッシュ・テーブルであるキー値データベースのリーフ・ノードに達し得る。動作208では、キーがキー値データベースに記憶されていないと判定し得る。方法は次いで、ハッシュ・テーブルがキー及び値を記憶することができない旨を判定する動作210に進み得る。これが判定されると、ハッシュ・テーブルを動作212で除去し得る。除去後、動作214で新たなトライ・ノードはハッシュ・テーブルの親トライ・ノードと関連付け得、動作216で2つ以上の新たなハッシュ・テーブルを新たなトライ・ノードと関連付け得る。動作218では、キー及び関連付けられた値は全て、2つ以上の新たなハッシュ・テーブルに動作212において除去されたハッシュ・テーブルから移動させ得る。方法は、適切な新たなハッシュ・テーブルに、キー及び関連付けられた値を挿入する動作220で終了し得る。
図3は、例示的なトライ・ノード及びハッシュ・テーブル、並びにHDB300内のそれらの関係を示すブロック図である。図示するように、HDB300は2つのタイプのオブジェクト(すなわち、トライ・ノード310及び320、並びにハッシュ・テーブル700、800、及び900)を含み得る。ハッシュ・テーブルは3つの変形(すなわち、純粋なハッシュ・テーブル700、ハイブリッド・ハッシュ・テーブル800、及び半純粋なハッシュ・テーブル900)を含み得る。ハッシュ・テーブル700、800、及び900はキー値対、及び親トライ・ノード320へのポインタを記憶することが可能であり、トライ・ノード310及び320は、他のトライ・ノード、又はハッシュ・テーブルへのポインタを記憶することが可能である。図3に示すように、トライ・ノード310は、ハッシュ・テーブル900及びトライ・ノード320へのポインタを記憶する。トライ・ノード320は、ハッシュ・テーブル700及び800へのポインタと、トライ・ノード310へのポインタとを記憶する。
HDB300は、ハッシュ・テーブル700、800、及び900からのキー値対を、順番にソートされたキーを維持する一方で、挿入し、サーチし、及び除去する機能を提供し得る。ハッシュ・テーブル700、800、及び900は、実際のキー値対を記憶することが可能であり、トライ構造の底部に配置される。トライ・ノードは、通常、キー値対を記憶せず、適切なハッシュ・テーブルを見つけるために使用されるキー・プレフィックスを間接的に記憶する。よって、キー値対は全て、ハッシュ・テーブルであるリーフ・ノードに記憶される。
上述したように、ハッシュ・テーブル700は純粋なハッシュ・テーブルである。純粋なハッシュ・テーブル700に達するために、単一のパスのみが存在している。このことは、ハッシュ・テーブル700に記憶されたキー値対が全て、同じプレフィックス(この例では「6B」)で始まるということを意味している。1つのパスのみが存在している限り、ハッシュ・テーブルは、空きであっても純粋であり得る。
ハッシュ・テーブル800は、ハイブリッド・ハッシュ・テーブルである。前述のノードには複数のパスが存在しているので、プレフィックスが同一でないキー値対を保持している。前述のハッシュ・テーブルがハイブリッドであるためには、プレフィックスが異なる少なくとも2つのキーが存在していなければならない。記憶されたキー値対が0個又は1個存在している場合、このハッシュ・テーブルは半純粋ハッシュ・テーブル(例えば、ハッシュ・テーブル900)である。
ハッシュ・テーブル900は、半純粋なハッシュ・テーブルである。前述のノードには複数のパスが存在しているが、ここに現在記憶されているキー値対が0個存在しているか、又は、ここに記憶されたキー値対が全て、同一のプレフィクスを有している(前述の例では「EEA9」)。
図3に示すように、トライ・ノード320はルート・トライ・ノードである。HDBは、構成可能な数のルート・トライ・ノードを提供することが可能である。各ルート・トライ・ノードは、下にある同じ永続性記憶装置を共有し得る独立のデータベースである。ルートの数は初期化時点で構成することが可能である。ルートは更に、実行時に追加又は除去し得る。ハッシュ・テーブルのキーは、固定長暗号ハッシュである。
既存の解決策と対照的に、本明細書及び特許請求の範囲記載の手法により、データ構造及びデータを扱う方法は、同時にキャッシュを意識し、かつ、I/Oを意識するものである。上記手法は、各種の不揮発性メモリをサポートするためにHDBにおける変更を必要としない汎用永続性記憶インタフェース層上に、又は特定のタイプのフラッシュ・メモリ上に展開し得る。
HDBにおける各ハッシュ・テーブルは、(512、4096、又は8192バイトなどの)最小ディスク又はフラッシュI/O容量の整数の倍数であるよう構成される。各ハッシュ・テーブルはアレイ・ハッシュを含み得、ハッシュ・テーブル内の各レコードは、キャッシュ・ライン・サイズの整数の倍数であるよう企図される。ノードは、オープン・アドレス法、線形探索モデルを使用して充填し、サーチし得る。オープン・アドレス法は、ハッシュ・テーブルにおける衝突解決の手法である。前述の手法により、目標レコードが見つかるか、又は、未使用のアレイ・スロットが見つかる(テーブル内に当該キーが存在していない旨を示す)までアレイ内の交互にくる位置にわたってサーチし、又は探索することによってハッシュ衝突が解決される。目標レコードを見つけるために種々の探索手法を使用することが可能であり、その一部の例には、線形探索、二次探索、ダブル・ハッシング、複数ハッシング・アルゴリズム等を含む。ハッシュ・テーブルを探索するために使用されるハッシュ関数は、キーである暗号ハッシュの「スライス」又はセグメントから得ることが可能である。探索の開始レコードは、
start_record_number=slice_to_integer(key,start,stop)MODULUS(number_of_records)
の整数演算(すなわち、分数値なし)を行うことによって生成される。ここで、「start」及び「stop」は、(暗号ハッシュである)キーの開始バイト及びストップ・バイトのインデックスであり、「slice_to_integer()」は、ゼロ・コスト演算であるタイプ(値でない)の変換である。よって、キーは既に暗号ハッシュであるので、キーにわたる新たなハッシュを何ら計算することなく、キー自体の「スライス」又は特定セグメントのみがハッシュ値としての役目を担い得る。これは、本願の手法の効果的な原理の1つである。
値を求めるために、例示的な手法は、ハッシュ内のバイトをみることにより、キー値対までトライを辿ることが可能である。キーのプレフィックスは、ハッシュ・テーブルに達するよう辿るパスを示すようエンコードされるので、ハッシュ・テーブルに記憶されたキーから除外し、それにより、ハッシュに関連付けられた値のハッシュ・テーブルに、より多くの空間を残し得る。性能の理由で、各ハッシュ・テーブルのサイズは下にある記憶媒体の自然なアクセス・サイズ(すなわち、フラッシュ又はSSDページ・サイズ)の整数倍数に等しいものであり得る。
一部の例示的な実施形態では、ハッシュ・テーブルは、バースティング前に100%の負荷率に達することを可能にし得る。ハッシュ・テーブルが達することが許容される充填度は、調整可能なパラメータによって予め定め得る。
各種サーチをサポートすることが可能である。例示的なサーチ・タイプの1つは、方法が、ハッシュに関連付けられた値とともにFOUNDを返すか、又は、ハッシュがデータベースにない場合にNOT−FOUNDを返して、単一のハッシュを提供する工程を含む。この場合、ハッシュ・テーブルのソート順序は、インタフェース外に露呈せず、よって、内部の順序付けは無関係である。
別の例示的なサーチ・タイプは、コールバック関数と、「開始」及び「終了」の2つのハッシュを備えた範囲マッチングが提供される。コールバック関数は、開始と終了との間のデータベース内のキー値対全てについてゼロ回以上、コールされる。コール毎に、少なくとも1つのキー値対を受け取るが、2つ以上を受け取り得る。キー値対は、部分的に順序付けてコールバック関数に送出し得る。後続する呼び出しには、先行するコールに与えられるキー値対後にくるキー値対が与えられることが保証される。複数のキー値対がコールバックの呼び出しに送出されると、そのグループ内で保証される更なる順序付けは存在しないことがあり得る。コールバック関数は、一度に、1個のハッシュとN個のハッシュとの間で与え得、ここで、Nは、単一のハッシュ・テーブル内のキー値対の最大数に上限が設けられる。
図4は、例示的なノード・ヘッダ400を示すブロック図である。トライ・ノード及びハッシュ・テーブルは何れも、オブジェクトのタイプ(トライ・ノード又はハッシュ・テーブル)を識別し、オブジェクトの外部記憶位置を識別し、一貫性チェック機構を提供する役目を担うノード・ヘッダ400で始まる。更に、ノード・ヘッダ400は、オブジェクトとその親との間の関係を表し、オブジェクトに関連付けられた余分な状態を追跡する。
図4に示すように、ノード・ヘッダ400は、CRC(巡回冗長性検査)フィールド410、フラッグ・フィールド420、ノード・タイプ・フィールド430、親連結インデックス・フィールド440、ディスク・アドレス・フィールド450、親アドレス・タイプ・フィールド460、及び親アドレス・フィールド470を含み得る。
フラッグ・フィールド420は、メモリ・キャッシュ状態を追跡するために使用される、「ダーティーな」、「ロックされた」、「キャッシュされた」、「連結された」、「ルートである」などの種々のフラグを表し、記憶し得る。ノード・タイプ・フィールド430は、トライ・ノード又はハッシュ・テーブルとして包含ノードを識別する。親連結インデックス・フィールド440は、親トライ・ノード内のどの「子アドレス」アレイ・エントリがこのノードを指し示しているかを識別するために使用し得る。ディスク・アドレス・フィールド450は、前述のオブジェクトに関連付けられたデータを記憶するディスク上の位置を指定するために使用し得る。親アドレス・タイプ・フィールド460は親アドレス・フィールド470を解釈するために使用し得、親アドレス・タイプ・フィールド460は通常、2つの値(すなわち、「RAM内」及び「ディスク上」)の一方を有し得る。ディスク上に記憶された前述のオブジェクトの複製では、親アドレス・タイプ・フィールド460は「ディスク上」にセットされ、親アドレス・フィールド470は親のディスク・アドレスにセットされる。前述のオブジェクトの複製がRAMに記憶されると、親アドレス・タイプ・フィールド460は、親トライ・ノードも「RAM内」である場合に「RAM内」にセットし、親がディスク上にある場合に「ディスク上」にセットし得る。前述のオブジェクトの複製がRAMに記憶されると、親アドレス・フィールド470は、親もRAM内にある場合に親ノードのRAMアドレスにセットし、親がRAM内にない場合に親のディスク・アドレスにセットし得る。
図5は例示的なトライ・ノード500を示すブロック図である。トライ・ノードは、キーのみのN個のビットのプレフィックスのみをデコードし得るノードであり、ここで、Nは0乃至パラメータ「length_in_bits_of_the_key」(例えば、0乃至256)から選択される。最大length(Key)個のレベルのトライ・ノードが存在し得、ここで、length(Key)はキー内のバイトの数である。図5に示すように、トライ・ノード500は、(図4を参照して上述した)ノード・ヘッダ400、子連結インデックス・フィールド510、アドレス・タイプ・フィールド520、及び子アドレス・フィールド530を含み得る。子連結インデックス・アレイ・フィールド510は、1乃至N個の、子アレイ要素のインデックスを収容し、子アドレス・アレイ内の対応するレコードにキー・プレフィクスを変換するために使用される。指し示される子は、そのプレフィックスを備えたキー全てを収容する。子がハッシュ・テーブルである場合、前述のアレイの多くの(1…Nの)要素はそれを参照し得、その場合、ハッシュ・テーブルは、一致するプレフィクス全てを備えるキー値対を収容する。子は、トライ・ノードである場合、子連結インデックス・アレイからの単一の参照を有し得るに過ぎない。すなわち、純粋なハッシュ・テーブル700は、それを参照する単一のレコードを子連結インデックス・アレイ510に有する一方、ハイブリッド・ハッシュ・テーブル800及び半純粋なハッシュ・テーブル900は、それらを参照する2つ以上のレコードを有する。
アドレス・タイプ・フィールド520は、別々の2つの値(すなわち、「ディスク上」及び「RAM内」)を収容し得る。ノードのディスク複製は、アドレス・タイプ・フィールド520を「ディスク上」にセットさせる。ノードのディスク複製がRAM内にある場合、アドレス・タイプ・フィールド520は、子がRAM内にあるか否かに依存する。よって、子がRAM内にある場合、アドレス・タイプ・フィールド520は「RAM内」である。一方、アドレス・タイプ・フィールド520がディスク上にある場合、アドレス・タイプ・フィールド520は「ディスク上」である。
アドレス・タイプ520及び対応する子アドレス530の各対は子アドレス・レコード540を構成する。子アドレス・レコードのアレイは子アドレス・アレイ550としてみなし得る。
ディスク上にあるノードの複製では、子アドレス530は、子ノードのディスク上アドレスにセットされる。RAM内にあるノードの複製においては、子アドレス530は、子ノードもRAM内にある場合、子アドレス530も子のRAMアドレスにセットし得る。更に、子アドレスは、フリーであるとして子ノードにマーキングするために使用される特殊アドレスを収容し得る。
図6は、例示的なハッシュ・テーブル・ノード600を示すブロック図である。ハッシュ・テーブル・ノード600は、リーフ・ノードであり、したがって、子ノードを何ら有しない。ハッシュ・テーブル・ノード600は、キャッシュを意識したハッシュ・テーブル内に構成可能な数のキー値対を収容する。図6に示すように、ハッシュ・テーブル・ノード600は、(図4を参照して上述した)ノード・ヘッダ400と、使用中バケット数フィールド610と、ハッシュ・テーブル・ノードを指し示す親の子連結インデックスにおけるエントリの数に関するフィールド620と、使用中バケット・ビットマップ・フィールド630と、キー・アレイ640と、対応する値のアレイ650とを含み得る。使用中バケット数フィールド410は、現在使用中のハッシュ・バケットの数を表す。バースティングのためにハッシュ・テーブルの「充填度」を追跡し得る。フィールド620は、このハッシュ・テーブル600を指し示す親トライ・ノード内のいくつかの子の数を提供し得る。使用中バケット・ビットマップ・フィールド630では、位置iにおけるセット・ビットは、バケットiが有効なキー及び値を有している旨を示す。クリア・ビットは、バケットが空き/利用可能状態にあることを意味している。キー640及び値650は、ハッシュ・テーブル600に記憶された対応するバケットの一部である。
図7は、例示的な純粋なハッシュ・テーブル700を示すブロック図である。上述したように、純粋なハッシュ・テーブル700に達するために単一のパスのみが存在している。よって、親の参照の数は1である。すなわち、純粋なハッシュ・テーブル700は、フィールド620が1に等しいハッシュ・テーブル600である。更に、ハッシュ・テーブル700に記憶されたキー値対は全て、同じプレフィックスで始まる。バケット660は、0乃至N個のキー値対を含み得る。キーは、例えば、SHA−1、SHA−2、SHA−3、ラビン(Rabin)等などの暗号ハッシュを含み得る。対応する値0乃至Nは、特定のキーに関連付けられたオペーク・データを含み得る。HDBは、値を解釈しないことがあり得、単にそれを記憶し、取り出す。
純粋なハッシュ・テーブル700は、図6を参照して説明したものと同様な使用中バケット数フィールド610及び使用中バケット・ビットマップ・フィールド630を有し得る。
図8は、例示的なハイブリッド・ハッシュ・テーブル800を示すブロック図である。ハイブリッド・ハッシュ・テーブル800には複数のパスが存在し、よって、親の参照の数は2乃至Nであり得る。ハイブリッド・ハッシュ・テーブルはハッシュ・テーブル600のインスタンスであり、ここで、フィールド620は、2乃至Nに等しく、別々のプレフィクスを有する少なくとも2つのキーを収容する。バケット660は、別々のプレフィックスの最後のバイトが同一でないキー値対を含む。
ハイブリッド・ハッシュ・テーブル800は、図6を参照して説明したものと同様な使用中バケット数フィールド610及び使用中バケット・ビットマップ・フィールド630を更に有し得る。更に、上述したように、ハイブリッド・ハッシュ・テーブル800に記憶されたキー値対は全て、別々のプレフィックスで始まり得る。キーは、例えば、SHA−1、SHA−2、SHA−3、ラビン(Rabin)等などの暗号ハッシュを含み得る。
図9は、例示的な半純粋なハッシュ・テーブル900を示すブロック図である。半純粋なハッシュ・テーブル900への複数のパスが存在しており、したがって、親の参照の数は2乃至Nであり得る。バケット660に記憶されたキー値対は全て、同一の対を有していなければならず、さもなければテーブルはハイブリッド・ハッシュ・テーブルとなる。同様に、半純粋なハッシュ・テーブル900は、図6を参照して説明したものと同様な使用中バケット数フィールド610及び使用中バケット・ビットマップ・フィールド630を更に有し得る。
更に、純粋なハッシュ・テーブル900に記憶されたキー値対は全て、同じプレフィックスで始まる。
上述したように、キーは暗号ハッシュを含み得る。暗号ハッシュの例には、SHA−1、SHA−2、SHA−3、ラビン等が含まれる。
半純粋なハッシュ・テーブル900は、2つ以上のプレフィックスを有する少なくとも1つのキーを収容すると直ちにハイブリッド・ハッシュ・テーブル800に変換することが可能である。半純粋なハッシュ・テーブル900が0個又は1個のキーを有する場合、純粋なハッシュ・テーブルに変換することが可能である。
図10は、新たな暗号キー値データベースを生成する方法1000を示すフローチャートである。方法1000は、多数のキー値対を効率的に記憶し、サーチし、修正し、削除する機能を備えた新たな、空き状態の永続性データベースを作成する。キー値対の数は、下にある永続性記憶媒体のサイズによってのみ制限される。各データベース・ルートは、キーに関連付けられた単一の値を記憶することが可能である。入力の1つであるnum_rootsパラメータは、特定のHDBインスタンスがサポートする独立したキー空間の数を規定する。方法1000は、空きのトライ・ノードを作成する。方法1000は、プレフィックス及びサフィックスにキーを分けることが可能である。プレフィックスは、子を選択するために使用される。子がトライ・ノードである場合、サフィックスは、新たなプレフィックス及びサフィックスに分けられ、選択は新たなプレフィックスで反復する。(ハッシュ・テーブルである)リーフに達すると、方法1000は終了する。方法1000は、例として、動作1002乃至1028を参照して示す。
図11は、新たなキー値対をHDBへ挿入する方法1100を示すフローチャートである。方法1100は、(ハッシュ・テーブルである)リーフが見つかるまで実行し得る。ハッシュ・テーブルが見つからなかった場合、新たなハッシュ・テーブルが作成され、適切な親ノードに取り付けられる。その後、新たなキー値対が新たなハッシュ・テーブルに挿入される。方法1100は、リーフがハッシュ・テーブルであるか否かを判定し得る。リーフがハッシュ・テーブルである場合、ハッシュ・テーブルをサーチすることが可能である。キーが見つかった場合、2つの選択肢(すなわち、旧い値を新しい値と置き換えること、及びエラーを返すこと)が存在し得る。キーが見つからず、かつ、ハッシュ・テーブルが新たなキー値対用の空間を有する場合、方法1100は新たなキー値をハッシュ・テーブルに挿入し得る。一方、キーが見つからず、ハッシュ・テーブルが新たなキー値対用の空間を有していない場合、方法1100は、新たなトライ・ノード、及び新たなトライ・ノードの子の2つ以上のハッシュ・テーブルへの、ハッシュ・テーブルのバースティングを行い、確実に、新たなハッシュ・テーブルの1つが新たなキー値対に収まることができるようにし得る。
上述したバースティング機構は、旧いハッシュ・テーブルをトライから取り外し、その代わりに、新たなトライ・ノードを取り付け、新たなトライ・ノードの子として少なくとも2つの新たなハッシュ・テーブルを作成し、旧いハッシュ・テーブルからのキー値対を、正しい新たなハッシュ・テーブルに移動させ、新たなキー値対を正しい新たなハッシュ・テーブルに挿入し、旧いハッシュ・テーブルを解放し得る。他のHDB手法(例えば、削除及びサーチ)は同様である。方法は、データセットが、利用可能なRAMに収まらず、よって、制限された、記憶装置に対するI/O帯域幅及び記憶装置のIOPSを効率的に使用する一方で、特定の動作を実行するために方法が必要とし得る部分とともにRAMにロードしなければならないということによって複雑になり得る。このことは、RAM内に効果的なキャッシュを維持し、更に、方法が必要とするデータが既にRAMにある訳でないか、又は、新たなデータを読み込むための空間を作るために若しくは電源喪失の場合になんらかの類の一貫性を方法が保証する必要があることが理由で何かを書き出さなければならない場合に、下にある記憶装置の最適な使用のために方法を調節することを意味する。方法1100は、例として、動作1102乃至1145を参照して示す。
図12は、HDBの高レベル・バースティングのための方法1200を示すフローチャートである。特に、方法1200は、図11上の動作1128からコールされるにつれ、トライ・ノードのバースティングを行うために使用される。方法1200は、どのタイプのハッシュ・テーブル(純粋、ハイブリッド、又は半純粋)のバースティングを行い、ハッシュ・テーブル・タイプ毎にバースティングを行う対応するアルゴリズムをコールする必要があるかを判定する(図13、図14、図15、及びそれらの対応する説明参照)。
方法1200は単純な形態で説明しているが、実際の実現形態では、まれな場合にリソース集約的動作であり得、よって、可能な場合に避けられるプレフィックスの同等性についての別個のサーチなしで、ハッシュ・テーブルが半純粋なハッシュ・テーブルであるかハイブリッド・ハッシュ・テーブルであるかについての先験的知識によって生じる最適化が存在し得る。方法1200は、例として、動作1202乃至1214を参照して示す。
図13は、純粋なバースティングのための方法1300を示すフローチャートである。図示したように、(動作1330までの)上部は新たなサブトライを作成し、後半(動作1330乃至1346)は旧いハッシュ・テーブルを切断し、その代わりに新たなサブトライを連結し、旧いハッシュ・テーブルをキー値対から退出させて新たなサブトライに移動させ、最終的に、空き状態のハッシュ・テーブルを廃棄する。
方法1300が完了した後、ブロック1308に示す整数パラメータ「NUM_HTAB_TO_BURST_INTO」が1よりも大きい限り、呼び出し元には、サブトライに、一致するプレフィックスを有する新たなキーを適合させることができることが保証される。パラメータは、性能、並びにメモリ及びディスク利用度に対する影響を与える、新たに作成されたハッシュ・テーブルのデフォルト疎性を変えるよう利用することが可能である。一般に、方法1300は、親トライからハッシュ・テーブルを切断し、その代わりに新たなサブトライを連結させ、旧いhtabからキー値対全てを退出させ、新たなサブトライに移動させ、(今は空きの)ハッシュ・テーブルを廃棄する動作を行う。方法1300は、例として、動作1302乃至1346を参照して示す。
図14は、半純粋なバースティングのための方法1400を示すフローチャートである。開始時には、ハッシュ・テーブル内のキーは全て、単一のプレフィックスを有する一方、親は、2つ以上の子に連結させたこのハッシュ・テーブルを有する(すなわち、少なくとも2つの別々のキー・プレフィックスのデスティネーションである一方、ハッシュ・テーブル内のキーは全て、同じプレフィックスを有する)。方法1400は、新たなハッシュ・テーブルを作成し、新たな、空き状態のハッシュ・テーブルを指し示すよう、ハッシュ・テーブル内のキー全てが始まる単一のプレフィックス以外はプレフィックス全てを移動させる。これは、ハッシュ・テーブルを純粋なハッシュ・テーブルに変換し、新たなハッシュ・テーブルを純粋なハッシュ・テーブル又は半純粋なハッシュ・テーブルに変換する。方法1400は、例として、動作1402乃至1418を参照して示す。
図15は、ハイブリッド・バースティングのための方法1500を示すフローチャートである。方法1500は、ハッシュ・テーブルに新たなキー値対を入れるよう空間を解放し得る。一致するキー・スライス(「kslice」)値を有するキー値対は全て、ハッシュ・テーブルにおいて維持される一方、他のkslice値を有するキー値対は除去の候補である。図示したような方法1500は、より高価かつ複雑な選択肢の一部を無視し得る。例えば、方法1500が、別のksliceを有するキー値対を見つけた場合、既に作成されたものが多すぎない限り、それをその中に移動させるその新たな純粋なハッシュ・テーブルを作成することを試行する。(場合によっては、別のハッシュ・テーブルのバースティング、又はトライを辿ることをもたらすので)このキー値対を移動させることが高価すぎる場合、方法1500は、前述のkslice値を有するキー値対全てを飛ばし得る。
ハイブリッド・ハッシュ・テーブルはそれを指し示す子を少なくとも2つ有しているので、より高度な最適化なしでも、一致するキー値対を移動させるための少なくとも1つの新たな純粋なハッシュ・テーブルの作成が保証される。ハイブリッド・ハッシュ・テ―ブルが、キー・スライスに一致する同一のキー・プレフィックスを有するキー値対で満杯である場合に、このルールに対する唯一の例外が生じる。方法1500が、それを移動させることができなくなるからであるが、前述の状況は、半純粋なハッシュ・テーブルを表し、そういうものとして、呼び出し元によって取り扱われる(図12)。最大数の新たなハッシュ・テーブルが、メモリ及びディスクの利用度と、性能に影響を及ぼす調節可能なパラメータである。方法1500は、例として、動作1502乃至1542を参照して示す。
図16は、空き状態である新たなトライ・ノードを作成する方法1600の作成を示すフローチャートである。方法1600は、例として、動作1602乃至1622を参照して示す。
図17は、新たなハッシュ・ノードを作成する方法1700を示すフローチャートである。方法1700は、特定の親トライ・ノードに連結された新たな、空き状態のハッシュ・テーブルを作成する。親の子連結インデックス・アレイ要素は何れもこの新たなハッシュ・テーブルを参照せず、前述の連結は呼び出し元によって作成される。方法1700は、例として、動作1702乃至1726を参照して示す。
図18は、キーがデータベース内に存在しているかを判定し、キーがデータベース内に存在している場合、キーに関連付けられた値を判定する方法1800を示すフローチャートである。すなわち、複数のデータベース・ルートが存在している場合、このルーチンは、単一のルートをサーチし、そのルート内の値を返し、見つからなかった場合、NILを返す。方法1800は、例として、動作1802乃至1834を参照して示す。
図19は、キー及びその関連付けられた値のハッシュ・テーブルからの削除のための方法1900を示すフローチャートである。方法1900は、例として、動作1902乃至1932を参照して示す。
図20は、ハッシュ・テーブル内の特定のキーの新たな値を挿入する方法2000を示すフローチャートである。ハッシュ・テーブルが特定のキーの値を既に含んでいる訳でない場合に、方法2000を使用し得る。方法2000は、線形探索による、オープン・アドレス指定されたハッシュ・テーブルを示しているが、他の手法も好適に機能し得る。前述のタイプの表現は、ディスク/SSDへの直列化を、RAM内でキャッシュ高効率にするとともに高速及び単純にし得る。
キーは、実質的に乱数である暗号ハッシュであり、好適に分布している。よって、動作2006におけるハッシュ関数は、暗号ハッシュ、又は該ハッシュの部分集合を使用し、それにより、非常に低コストである(すなわち、高速である)ハッシュ・アルゴリズム(実質的に、単一整数剰余演算のコスト)がもたらされる。
ハッシュ関数2006は、コンピュータが処理する効率的なネーティブ容量に打ち切られた暗号ハッシュのスライスを返す。例えば、それは32ビットの数字であり、バケットの数でMODをとると、好適な分布を維持する。方法2000は、例として、動作2002乃至2014を参照して示す。
図21は、キー及び対応する値をハッシュ・テーブルから削除する方法2100を示すフローチャートである。方法2100は、例として、動作2102乃至2122を参照して示す。
図22は、ハッシュ・テーブル内の旧い値を新たな値で置き換える方法2200を示すフローチャートである。ハッシュ・テーブルが既に特定のキーについて旧い値を含んでいると分かれば、方法2200は旧い値を新しい値で置き換える。ハッシュ・テーブル探索モデルは、値をハッシュ・テーブルに挿入することと同様である。方法2200は、例として、動作2202乃至2222を参照して示す。
図23は、キャッシュ・キューを見つける方法2300を示すフローチャートである。クリーンなノードは削除の対象となり得るが、最近アクセスされているか、又は、多くの子を有するクリーンなノードは、削除の好適な候補でない。子を有するノードを削除することは、子ノードも削除しなければならない(。さもなければ、子ノードは到達不能となり、よって、それに対してRAMを費いやす理由は存在しない。)ハッシュ・テーブルは、子を何ら有しておらず、ノードの圧倒的過半数であるので、大半の削除済ノードは、最長期間の間、使用されていないハッシュ・テーブルとなる。ロックされたノードは、キャッシュから削除すべきでないノードである。現在の動作に必要であるからである。変更されているが、変更がディスクにまだ書き込まれていないため、ダーティーなノードは削除すべきでない。ルート・ノードは削除すべきでない。データベース動作は全て、ルートで始まるゆえ、直後の動作がもう一度ルートを必要とすることになるので、ルート・ノードを削除することは不必要な無駄となる。しかし、これは単に最適化であり、適切な動作にとって厳密な要件でない。
クリーンなキューは、トライ・ノードの考えられる数の子毎に1つのキューが存在しているようなサイズのキューのアレイである。例として、トライ・ノード毎の256個の子は、256個のクリーンなキューをもたらす。これは厳密な要件でない。同等に可能性が高いシナリオは、子の数の範囲を、細粒度がより高いバケットにまとめるものである。方法2300は、例として、動作2302乃至2328を参照して示す。
図24は、キャッシュにノードを挿入する方法2400を示すフローチャートである。方法2400は、余地を与えるために1つ又は複数の旧いノードを場合によっては削除して、動作2402において与えられたノードをキャッシュに入れる。方法2400は、例として、動作2402乃至2418を参照して示す。
図25は、キャッシュからノードを削除する方法2500を示すフローチャートである。方法2500は、例として、動作2502乃至2514を参照して示す。
図26は、ディスクからノードをロードし、それをキャッシュへ追加する方法2600を示すフローチャートである。方法2600は、例として、動作2602乃至2618を参照して示す。
図27は、修正されているとして、動作2702において与えられたノードにマーキングし、それをクリーンなキャッシュからダーティーなキャッシュに移動させる方法2700を示すフローチャートである。方法2700は、例として、動作2702乃至2714を参照して示す。
図28は、ノードを、ロックされたキャッシュに移動させることにより、削除することができないとしてノードをロックする方法2800を示すフローチャートである。方法2800は、削除することができないとしてノードにマーキングすることが可能である。多くのデータベース動作は、2つ以上のノードを処理するので、このことは、より多くの空間が必要な場合に、処理されているノードが削除されないことを確実にする。方法2800は、例として、動作2802乃至2816を参照して示す。
図29は、ロックされたキャッシュから退出させてもう一度適切なクリーンなキャッシュに移動させることにより、ノードをロック解除する方法2900を示すフローチャートである。方法2900は、ノードを、ロックされたキャッシュから退出させて、それがその時点で属する何れかのキャッシュ(ルート・キャッシュ、ダーティーなキャッシュ、又はクリーンなキャッシュ)にもう一度移動させ得る。方法2900は、例として、動作2902乃至2914を参照して示す。
図30は、ロックされたキャッシュのノード全てをもう一度、それらそれぞれのキャッシュに移動させる方法3000を示すフローチャートである。方法3000は、ノード全てを、ロックされたキャッシュから退出させて、それらがその時点で属する何れかのキャッシュ(ルート・キャッシュ、ダーティーなキャッシュ、又はクリーンなキャッシュ)に移動させる。方法3000は、例として、動作3002乃至3014を参照して示す。
図31は、キャッシュから1つ又は複数の、クリーンな、ロックされていない非ルート・ノードを除去し、関連付けられたRAMを自由プールに戻すことにより、新たなノード用に空間を作る方法3100を示すフローチャートである。必要な空間を規定するパラメータは、少なくとも1つの新たなノード用に空間を作るのに十分大きくなければならない一方、一度により多くの自由空間を作るためにより大きいものであり得る。方法3100は、例として、動作3102乃至3126を参照して示す。
図32は、再帰的に、特定のノード及びその子全てをキャッシュから除去し、任意的には、データベースからのノード、特定のノード及びその子全てを完全に除去する方法3200を示すフローチャートである。方法3200は、再帰的に、特定のノード及びその子全てに関連付けられたRAMをキャッシュから除去し、解放する。ノードは全て、クリーンであり、ロックされていない状態にあるべきである。更に、この要件を満たさないエラー処理は示していない。ディスクからの解放が必要な場合、方法3200は、更に、ディスク上の複製を削除し、自由プールに返し得る。方法3200は、例として、動作3202乃至3236を参照して示す。
図33は、修正されたノードをディスクに書き込み、それにより、クリーンなノードを作成する方法3300を示すフローチャートである。方法3300は、ダーティーなノード全てをディスクに書き込み、その過程でそれらを、クリーンなノードにする。方法3300は、例として、動作3302乃至3328を参照して示す。
図34は、本明細書及び特許請求の範囲記載の方法論の何れか1つ又は複数をマシンに行わせるための命令の組を実行することが可能なコンピュータ・システム3400の例示的な電子的形態におけるマシンのコンピューティング装置の模式図表現を示す図である。種々の例示的な実施形態では、マシンはスタンドアロン装置として動作するか、又は他のマシンに接続(例えば、ネットワーキング)することが可能である。ネットワーク化された展開では、マシンは、クライアントサーバ・ネットワーク環境におけるサーバ又はクライアント・マシンとして、又は、ピアツーピア(若しくは分散)ネットワーク環境におけるピア・マシンとして動作することが可能である。マシンは、サーバ、パソコン(PC)、タブレットPC、セットトップ・ボックス(STB)、PDA,セルラ電話機、ディジタル・カメラ、ポータブル音楽プレイヤ(例えば、動画像専門家グループ・オーディオ層3(MP3)プレイヤなどのポータブル・ハード・ディスク・オ―ディオ装置)、ウェブ家電製品、ネットワーク・ルータ、スイッチ、ブリッジ、又は、当該マシンによって行う対象の動作を規定する(シーケンシャルの、又はそれ以外の)命令の組を実行することができる何れかのマシンであり得る。更に、単一のマシンのみを示しているが、「マシン」の語は更に、本明細書及び特許請求の範囲記載の方法論の何れか1つ又は複数を行うための命令の組(若しくは複数の組)を個々に、又は一緒に実行するマシンの何れかの収集物を含むと解される。
例示的なコンピュータ・システム3400は、バス3402を介して互いに通信し合う1つ又は複数のプロセッサ3402、ハード・ディスク・ドライブ3404、主メモリ3406、及びスタティック・メモリ3408を含む。コンピュータ・システム3400は更に、ネットワーク・インタフェース装置3412を含み得る。ハード・ディスク・ドライブ3404は、本明細書及び特許請求の範囲記載の方法論又は機能の何れか1つ又は複数を実施するか、又は上記何れか1つ又は複数によって利用される命令3420の1つ又は複数の組を記憶するコンピュータ読み取り可能な媒体3420を含み得る。命令3422は更に、コンピュータ・システム3400によるその実行中、主メモリ3406内、及び/又はエンジン3402内に完全に、若しくは少なくとも部分的に存在し得る。主メモリ3306及びエンジン3402は更に、マシン読み取り可能な媒体を構成する。
コンピュータ読み取り可能な媒体3420が単一の媒体であるとして例示的な実施形態に示しているが、「コンピュータ読み取り可能な媒体」の語は、命令の1つ又は複数の組を記憶する単一の媒体又は複数の媒体(例えば、中央データベース若しくは分散データベース、並びに/又は関連付けられたキャッシュ及びサーバ)を含むと解されるものとする。「コンピュータ読み取り可能な媒体」の語は更に、マシンによる実行のための命令の組を記憶し、コード化し、若しくは収容することができ、又は、本出願の方法論の何れか1つ又は複数をマシンに行わせ、又は、前述の命令の組によって利用され、若しくは、前述の命令の組に関連付けられるデータ構造を記憶し、コード化し、若しくは収容することができる何れかの媒体を含むよう解されるものとする。「コンピュータ読み取り可能な媒体」はよって、ソリッドステート・メモリ、光媒体、及び磁気媒体に限定されないが、前述の媒体は更に、限定列挙でないが、ハード・ディスク、フロッピー(登録商標)・ディスク、NAND又はNORフラッシュ・メモリ、ディジタル・ビデオ・ディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)等を含み得る。
本明細書及び特許請求の範囲記載の例示的な実施形態は、コンピュータ上に、ハードウェアに、又はソフトウェア及びハードウェアの組み合わせにインストールされたコンピュータ実行可能な命令(例えば、ソフトウェア)を備える動作環境において実現することが可能である。コンピュータ実行可能な命令は、コンピュータ・プログラミング言語で記述することが可能であり、又は、ファームウェア・ロジックで実施することが可能である。認知された標準に準拠したプログラミング言語で記述された場合、前述の命令は、種々のハードウェア・プラットフォーム上、及び種々のオペレーティング・システムとのインタフェースに対して実行することが可能である。限定列挙でないが、本願の方法を実現するためのコンピュータ・ソフトウェア・プログラムは、例えば、C、ゴー(Go)、パイソン(Python)若しくは他のコンパイラ、アセンブラ、インタープリタ、又は他のコンピュータの言語若しくはプラットフォームなどの何れかの数の適切なプログラミング言語で記述することが可能である。
このようにして、バースティングされたトライベースの階層データ構造を生成し、管理するコンピュータによって実現される方法及びシステムを説明している。実施形態を特定の例示的な実施形態を参照して説明してきたが、本出願のより広い趣旨及び範囲から逸脱しない限り、種々の修正及び変更を前述の例示的な実施形態に対して行うことが可能である。よって、明細書及び添付図面は、制限的意味合いというよりもむしろ例証的意味合いでとらえられるものとする。

Claims (38)

  1. キー値データベースのハッシュ・テーブルのバースティングを行う、コンピュータによって実現される方法であって、
    キー、及び前記キーに関連付けられた値を受け取る工程と、
    プレフィックス及びサフィックスに前記キーを再帰的に分けることにより、前記キー値データベースのトライ・ノードをルート・ノードからリーフ・ノードまで辿る工程であって、全ての反復により、前記サフィックスに関連付けられた値が前記キーに帰され、前記キーが前記キー値データベースの現在のノードの値と比較される工程と、
    前記キー値データベースの前記リーフ・ノードに達する工程であって、前記リーフ・ノードが前記ハッシュ・テーブルである工程と、
    前記キーが前記ハッシュ・テーブルに記憶されていないことを判定する工程と、
    前記ハッシュ・テーブルが、前記キー及び前記値を記憶することができないことを判定する工程と、
    前記ハッシュ・テーブルを除去する工程と、
    新たなトライ・ノードを親トライ・ノードと関連付ける工程と、
    2つ以上の新たなハッシュ・テーブルを前記新たなトライ・ノードと関連付ける工程であって、前記2つ以上の新たなハッシュ・テーブルの1つが前記キー及び前記値を記憶することができる工程と、
    前記ハッシュ・テーブルからのキー及び関連付けられた値全てを前記2つ以上の新たなハッシュ・テーブルの1つに移動させる工程と、
    前記キー及び前記関連付けられた値を前記2つ以上の新たなハッシュ・テーブルの1つに挿入する工程と
    を含む、コンピュータによって実現される方法。
  2. 請求項1記載のコンピュータによって実現される方法であって、更に、前記除去されたハッシュ・テーブルを前記新たなトライ・ノードと関連付けし直し、別のハッシュ・テーブル・ノードに属するキー値対を離す工程を更に含む、コンピュータによって実現される方法。
  3. 請求項1記載のコンピュータによって実現される方法であって、各キーが固定長暗号ハッシュである、コンピュータによって実現される方法。
  4. 請求項3記載のコンピュータによって実現される方法であって、各固定長暗号ハッシュ値が一意の値を有している可能性を最大にする暗号ハッシュ関数を使用して、前記固定長暗号ハッシュが導き出される、コンピュータによって実現される方法。
  5. 請求項3記載のコンピュータによって実現される方法であって、ハッシュ値の明白なグルーピングが存在しないような、ハッシュのランダム分布をもたらす暗号ハッシュ関数を使用して前記固定長暗号ハッシュが導き出される、コンピュータによって実現される方法。
  6. 請求項1記載のコンピュータによって実現される方法であって、前記キーは、平文にわたって暗号化アルゴリズムを実行させることによって生成され、前記キーに関連付けられた前記値は前記平文を表す情報を提供し、前記キーに関連付けられた前記値は任意のコンテンツを含む、コンピュータによって実現される方法。
  7. 請求項1記載のコンピュータによって実現される方法であって、前記キー値データベースは、ハッシュ・テーブル及びトライ・テーブルの1つ又は複数を含む、コンピュータによって実現される方法。
  8. 請求項1記載のコンピュータによって実現される方法であって、各トライ・ノードは、更なるトライ・ノードへの、又はハッシュ・テーブルへの1つ又は複数のポインタを含む、コンピュータによって実現される方法。
  9. 請求項1記載のコンピュータによって実現される方法であって、前記ハッシュ・テーブルは、共通のプレフィックスを備えた1つ又は複数のキー値対を含む、コンピュータによって実現される方法。
  10. 請求項1記載のコンピュータによって実現される方法であって、前記ハッシュ・テーブルは、純粋なハッシュ・テーブル、ハイブリッド・ハッシュ・テーブル、及び半純粋なハッシュ・テーブルを含む群から選択される、コンピュータによって実現される方法。
  11. 請求項10記載のコンピュータによって実現される方法であって、前記純粋なハッシュ・テーブルは単一のプレフィックスによって到達可能であり、前記純粋なハッシュ・テーブルに記憶されたキー値対全てのキーはこの同じプレフィックスで始まる、コンピュータによって実現される方法。
  12. 請求項10記載のコンピュータによって実現される方法であって、前記ハイブリッド・ハッシュ・テーブルは複数のプレフィックスによって到達可能であり、前記ハイブリッド・ハッシュ・テーブルに記憶されたキー値対全てのキーはこの同じ複数のプレフィックスで始まる、コンピュータによって実現される方法。
  13. 請求項10記載のコンピュータによって実現される方法であって、前記半純粋なハッシュ・テーブルは複数のプレフィックスによって到達可能であり、前記半純粋なハッシュ・テーブルに記憶されたキー値対全てのキーは同じプレフィックスで始まる、コンピュータによって実現される方法。
  14. 請求項1記載のコンピュータによって実現される方法であって、複数のキー値データベースは、複数のルート・ノードを追跡することにより、下にある同じ永続性記憶装置を共有する、コンピュータによって実現される方法。
  15. 請求項14記載のコンピュータによって実現される方法であって、前記複数のルート・ノードのいくつかが初期化の時点で構成される、コンピュータによって実現される方法。
  16. 請求項14記載のコンピュータによって実現される方法であって、複数のルートの1つ又は複数は実行時に追加することが可能である、コンピュータによって実現される方法。
  17. 請求項14記載のコンピュータによって実現される方法であって、複数のルートの1つ又は複数は実行時に削除することが可能である、コンピュータによって実現される方法。
  18. 請求項1記載のコンピュータによって実現される方法であって、単一のキーは複数の値を有し得、前記単一のキーに関連付けられた各値は2つ以上の別々のキー値データベースに記憶される、コンピュータによって実現される方法。
  19. 請求項1記載のコンピュータによって実現される方法であって、前記キー値データベースが1つ又は複数の不揮発性記憶装置内に作成され、それにより、利用可能なランダム・アクセス・メモリ(RAM)をいくつかのキーが超える場合に効率的な実行を可能にする、コンピュータによって実現される方法。
  20. 請求項19記載のコンピュータによって実現される方法であって、前記不揮発性記憶装置は電源なしで、記憶された情報を維持するコンピュータ・メモリを含む、コンピュータによって実現される方法。
  21. 請求項1記載のコンピュータによって実現される方法であって、前記キー値データベースのオブジェクトに関連付けられたメモリ位置を追跡するための効率的なキャッシング手法を利用する工程を更に含む、コンピュータによって実現される方法。
  22. 請求項21記載のコンピュータによって実現される方法であって、前記効率的なキャッシング手法は、最近最も使用されていないキャッシング・アルゴリズムである、コンピュータによって実現される方法。
  23. 請求項21記載のコンピュータによって実現される方法であって、前記効率的なキャッシング手法は、階層LRUキャッシング・アルゴリズムである、コンピュータによって実現される方法。
  24. 請求項23記載のコンピュータによって実現される方法であって、前記階層LRUキャッシング・アルゴリズムに関連付けられた階層は、一次的に子の数から導き出され、二次的にLRUキャッシング・アルゴリズムにより、各レベル内で導き出される、コンピュータによって実現される方法。
  25. 請求項1記載のコンピュータによって実現される方法であって、ハッシュ・テーブルには、より多くのハッシュ・テーブルを削除する前に、1つ又は複数の子を有するトライ・ノードが削除されるような特定の最小量のキャッシュ空間が保証される、コンピュータによって実現される方法。
  26. 請求項25記載のコンピュータによって実現される方法であって、トライ・ノードの前記削除により、対応する関連付けられた子ノード全ても削除される、コンピュータによって実現される方法。
  27. 請求項1記載のコンピュータによって実現される方法であって、前記ハッシュ・テーブル内のレコードのサイズはキャッシュ・ライン・サイズの整数の倍数である、コンピュータによって実現される方法。
  28. 請求項1記載のコンピュータによって実現される方法であって、前記トライ・ノード及びハッシュ・テーブルのサイズは、下にある装置が読み出し・修正・書き込みサイクルを行わないように選ばれる、コンピュータによって実現される方法。
  29. 請求項1記載のコンピュータによって実現される方法であって、前記キー値データベースのハッシュ・テーブルはオープン・アドレス法モデルを使用してサーチされる、コンピュータによって実現される方法。
  30. 請求項1記載のコンピュータによって実現される方法であって、線形探索アルゴリズム、二次探索アルゴリズム、ダブル・ハッシング・アルゴリズム、及び複数ハッシング・アルゴリズムの1つ又は複数による、ハッシュ・バケット衝突の解決を更に含む、コンピュータによって実現される方法。
  31. 請求項30記載のコンピュータによって実現される方法であって、前記ダブル・ハッシング・アルゴリズム又は前記複数ハッシング・アルゴリズムは、暗号ハッシュをセグメント化し、各セグメント・インデックスをハッシュ・アルゴリズムとして使用することによって使用される、コンピュータによって実現される方法。
  32. 請求項1記載のコンピュータによって実現される方法であって、キーを表す暗号ハッシュのプレフィックスをとり、整数の数として前記プレフィックスを扱い、バケットの数で前記値を除算した場合の剰余をとることにより、バケットを選ぶことにより、一次ハッシュ・バケットを選ぶ工程を更に含む、コンピュータによって実現される方法。
  33. キー値データベースのハッシュ・テーブルのバースティングを行う、コンピュータによって実現されるシステムであって、
    キー、及び前記キーに関連付けられた値を受け取るよう構成された通信モジュールと、
    プレフィックス及びサフィックスに前記キーを再帰的に分けることにより、前記キー値データベースのトライ・ノードをルート・ノードからリーフ・ノードまで辿る機能と、
    前記キー値データベースの前記リーフ・ノードに達する機能であって、前記リーフ・ノードが前記ハッシュ・テーブルである機能と、
    前記キーが前記ハッシュ・テーブルに記憶されていないことを判定する機能と、
    前記ハッシュ・テーブルが、前記キー及び前記値を記憶することができないことを判定する機能と、
    前記ハッシュ・テーブルを除去する機能と、
    新たなトライ・ノードを、前記ハッシュ・テーブルの親トライ・ノードと関連付ける機能と、
    2つ以上の新たなハッシュ・テーブルを前記新たなトライ・ノードと関連付ける機能と、
    前記ハッシュ・テーブルからのキー及び関連付けられた値全てを前記2つ以上の新たなハッシュ・テーブルの1つに移動させる機能と、
    前記キー及び前記関連付けられた値を前記2つ以上の新たなハッシュ・テーブルの1つに挿入する機能
    とを行うよう構成された処理モジュールと
    を備える、コンピュータによって実現されるシステム。
  34. 請求項33記載のコンピュータによって実現されるシステムであって、前記処理モジュールは、前記固定長暗号ハッシュを導き出すよう更に構成された、コンピュータによって実現されるシステム。
  35. 請求項33記載のコンピュータによって実現されるシステムであって、前記処理モジュールは、純粋なハッシュ・テーブル、ハイブリッド・ハッシュ・テーブル、及び半純粋なハッシュ・テーブルを含む群からハッシュ・テーブルを選択するよう構成された、コンピュータによって実現されるシステム。
  36. 請求項33記載のコンピュータによって実現されるシステムであって、前記処理モジュールは初期化の時点で前記複数のルート・ノードのいくつかを構成するよう構成された、コンピュータによって実現されるシステム。
  37. 請求項33記載のコンピュータによって実現されるシステムであって、前記処理モジュールは、オープン・アドレス法モデルを使用して前記キー値データベースのハッシュ・テーブルをサーチするよう更に構成された、コンピュータによって実現されるシステム。
  38. 1つ又は複数のコンピュータによって実行されると、前記1つ又は複数のコンピュータに、
    キー、及び前記キーに関連付けられた値を受け取る工程と、
    プレフィックス及びサフィックスに前記キーを再帰的に分けることにより、前記キー値データベースのトライ・ノードをルート・ノードからリーフ・ノードまで辿る工程と、
    前記キー値データベースの前記リーフ・ノードに達する工程であって、前記リーフ・ノードが前記ハッシュ・テーブルである工程と、
    前記キーが前記ハッシュ・テーブルに記憶されていないことを判定する工程と、
    前記ハッシュ・テーブルが、前記キー及び前記値を記憶することができないことを判定する工程と、
    前記ハッシュ・テーブルを除去する工程と、
    新たなトライ・ノードを、前記ハッシュ・テーブルの親トライ・ノードと関連付ける工程と、
    2つ以上の新たなハッシュ・テーブルを前記新たなトライ・ノードと関連付ける工程と、
    前記ハッシュ・テーブルからのキー及び関連付けられた値全てを前記2つ以上の新たなハッシュ・テーブルの1つに移動させる工程と、
    前記キー及び前記関連付けられた値を前記2つ以上の新たなハッシュ・テーブルの1つに挿入する工程と
    を行わせる命令を記憶させた、コンピュータ読み取り可能な媒体。
JP2015504768A 2012-04-06 2013-04-08 暗号ハッシュ・データベース Active JP5996088B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/441,715 US8868926B2 (en) 2012-04-06 2012-04-06 Cryptographic hash database
US13/441,715 2012-04-06
PCT/US2013/035673 WO2013152357A1 (en) 2012-04-06 2013-04-08 Cryptographic hash database

Publications (2)

Publication Number Publication Date
JP2015512604A true JP2015512604A (ja) 2015-04-27
JP5996088B2 JP5996088B2 (ja) 2016-09-21

Family

ID=49293261

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015504768A Active JP5996088B2 (ja) 2012-04-06 2013-04-08 暗号ハッシュ・データベース

Country Status (4)

Country Link
US (1) US8868926B2 (ja)
EP (1) EP2834943A4 (ja)
JP (1) JP5996088B2 (ja)
WO (1) WO2013152357A1 (ja)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9460129B2 (en) * 2013-10-01 2016-10-04 Vmware, Inc. Method for tracking a schema in a schema-less database
US9628438B2 (en) 2012-04-06 2017-04-18 Exablox Consistent ring namespaces facilitating data storage and organization in network infrastructures
US9454556B2 (en) * 2012-10-15 2016-09-27 Apple Inc. Indexing using a lockless burst trie
US9069807B2 (en) * 2012-11-30 2015-06-30 Facebook, Inc. Method and system for implementing an array using different data structures
US9536016B2 (en) * 2013-01-16 2017-01-03 Google Inc. On-disk multimap
US9552382B2 (en) 2013-04-23 2017-01-24 Exablox Corporation Reference counter integrity checking
WO2014201270A1 (en) 2013-06-12 2014-12-18 Exablox Corporation Hybrid garbage collection
WO2014205286A1 (en) 2013-06-19 2014-12-24 Exablox Corporation Data scrubbing in cluster-based storage systems
US9934242B2 (en) 2013-07-10 2018-04-03 Exablox Corporation Replication of data between mirrored data sites
US10248556B2 (en) 2013-10-16 2019-04-02 Exablox Corporation Forward-only paged data storage management where virtual cursor moves in only one direction from header of a session to data field of the session
CN103593477A (zh) 2013-11-29 2014-02-19 华为技术有限公司 一种哈希数据库的配置方法和装置
US9985829B2 (en) 2013-12-12 2018-05-29 Exablox Corporation Management and provisioning of cloud connected devices
US20150170508A1 (en) * 2013-12-16 2015-06-18 Alcatel-Lucent Usa Inc. System and method for managing data center alarms
US9774582B2 (en) 2014-02-03 2017-09-26 Exablox Corporation Private cloud connected device cluster architecture
JP2017504924A (ja) 2014-02-04 2017-02-09 エグザブロックス・コーポレーション ファイルシステムのコンテンツベースの編成
US9935831B1 (en) * 2014-06-03 2018-04-03 Big Switch Networks, Inc. Systems and methods for controlling network switches using a switch modeling interface at a controller
US20160103858A1 (en) * 2014-10-13 2016-04-14 Freescale Semiconductor, Inc. Data management system comprising a trie data structure, integrated circuits and methods therefor
US9846642B2 (en) * 2014-10-21 2017-12-19 Samsung Electronics Co., Ltd. Efficient key collision handling
US9531547B2 (en) * 2015-04-06 2016-12-27 Vmware, Inc. Host-based digital signature verification for guest components
US10474654B2 (en) 2015-08-26 2019-11-12 Storagecraft Technology Corporation Structural data transfer over a network
CN105117471A (zh) * 2015-08-31 2015-12-02 北京金山安全软件有限公司 一种读写操作方法及装置
US11341136B2 (en) * 2015-09-04 2022-05-24 Pure Storage, Inc. Dynamically resizable structures for approximate membership queries
US9846553B2 (en) 2016-05-04 2017-12-19 Exablox Corporation Organization and management of key-value stores
US11249970B2 (en) * 2016-05-05 2022-02-15 Mastercard International Incorporated Method and system for distributed data storage with eternal integrity guarantees
EP3376407B1 (en) 2017-03-15 2020-09-16 censhare AG Efficient use of trie data structure in databases
US10817196B2 (en) * 2017-07-07 2020-10-27 Sap Se Page list based crash recovery
US11030714B2 (en) 2018-01-27 2021-06-08 Microsoft Technology Licensing, Llc. Wide key hash table for a graphics processing unit
US11416549B2 (en) * 2018-03-25 2022-08-16 British Telecommunications Public Limited Company Efficient data object storage and retrieval
CN110800255B (zh) * 2019-03-04 2023-03-31 创新先进技术有限公司 更新区块链世界状态默克尔帕特里夏字典树子树
CN112463214B (zh) * 2019-09-09 2023-11-03 北京京东振世信息技术有限公司 数据处理方法及装置、计算机可读存储介质以及电子设备
US11468030B2 (en) 2019-10-31 2022-10-11 Hewlett Packard Enterprise Development Lp Indirect block containing references to blocks of a persistent fingerprint index
US11354289B2 (en) 2019-10-31 2022-06-07 Hewlett Packard Enterprise Development Lp Merging buffered fingerprint index entries
US11403020B2 (en) 2019-10-31 2022-08-02 Hewlett Packard Enterprise Development Lp Increasing sizes of buckets of a fingerprint index
US11307788B2 (en) 2019-10-31 2022-04-19 Hewlett Packard Enterprise Development Lp Sampling fingerprints in bins
CN116547655A (zh) * 2020-09-03 2023-08-04 Flc技术集团股份有限公司 带有预加扰器的散列函数
US20220092046A1 (en) * 2020-09-18 2022-03-24 Kioxia Corporation System and method for efficient expansion of key value hash table

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060083247A1 (en) * 2004-10-14 2006-04-20 Sun Microsystems, Inc. Prefix lookup using address-directed hash tables
US7043494B1 (en) * 2003-01-28 2006-05-09 Pmc-Sierra, Inc. Fast, deterministic exact match look-ups in large tables
JP2008533570A (ja) * 2005-03-11 2008-08-21 ロックソフト リミテッド 低冗長記憶システムで索引を行う方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7596704B2 (en) * 2003-10-10 2009-09-29 Jing-Jang Hwang Partition and recovery of a verifiable digital secret
US8356021B2 (en) * 2005-03-11 2013-01-15 Ross Neil Williams Method and apparatus for indexing in a reduced-redundancy storage system
US8296550B2 (en) * 2005-08-29 2012-10-23 The Invention Science Fund I, Llc Hierarchical register file with operand capture ports
WO2008024971A1 (en) * 2006-08-25 2008-02-28 University Of Florida Research Foundation Inc. Recursively partioned static ip router tables
US7827218B1 (en) * 2006-11-18 2010-11-02 X-Engines, Inc. Deterministic lookup using hashed key in a multi-stride compressed trie structure
US8397051B2 (en) * 2009-02-23 2013-03-12 Autonomy, Inc. Hybrid hash tables
US8495093B2 (en) * 2010-08-18 2013-07-23 International Business Machines Corporation Multiway trie data structure that dynamically adjusts node sizes in a manner that reduces memory footprint and improves access speed
US9455996B2 (en) * 2011-10-03 2016-09-27 New York University Generating progressively a perfect hash data structure, such as a multi-dimensional perfect hash data structure, and using the generated data structure for high-speed string matching

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7043494B1 (en) * 2003-01-28 2006-05-09 Pmc-Sierra, Inc. Fast, deterministic exact match look-ups in large tables
US20060083247A1 (en) * 2004-10-14 2006-04-20 Sun Microsystems, Inc. Prefix lookup using address-directed hash tables
JP2008533570A (ja) * 2005-03-11 2008-08-21 ロックソフト リミテッド 低冗長記憶システムで索引を行う方法

Also Published As

Publication number Publication date
JP5996088B2 (ja) 2016-09-21
US8868926B2 (en) 2014-10-21
WO2013152357A1 (en) 2013-10-10
EP2834943A4 (en) 2015-09-23
EP2834943A1 (en) 2015-02-11
US20130268770A1 (en) 2013-10-10

Similar Documents

Publication Publication Date Title
JP5996088B2 (ja) 暗号ハッシュ・データベース
US10579683B2 (en) Memory system including key-value store
TWI719281B (zh) 用於串流選擇之系統、機器可讀媒體、及機器實施之方法
US9471500B2 (en) Bucketized multi-index low-memory data structures
US20210133208A1 (en) Counter-based compaction of key-value store tree data block
EP3864519A1 (en) Key-value store tree data block spill with compaction
US20140195551A1 (en) Optimizing snapshot lookups
CN111832065A (zh) 使用电路实现的软件和用于密钥-值存储的方法
CN113535670B (zh) 一种虚拟化资源镜像存储系统及其实现方法
US11169968B2 (en) Region-integrated data deduplication implementing a multi-lifetime duplicate finder
US11392314B2 (en) Sequentially writing metadata into a solid state disk by redirect-on-write
CN109407985B (zh) 一种数据管理的方法以及相关装置
CN112148217B (zh) 全闪存储系统的重删元数据的缓存方法、装置及介质
Liu et al. A High Performance Memory Key-Value Database Based on Redis.
KR20230026946A (ko) 해싱을 사용하는 키 밸류 스토리지 장치 및 그것의 동작 방법
US20170083537A1 (en) Mapping logical identifiers using multiple identifier spaces
JP5646775B2 (ja) key−valueストア方式を有するメモリシステム
JP5833212B2 (ja) key−valueストア方式を有するメモリシステム
US20200272424A1 (en) Methods and apparatuses for cacheline conscious extendible hashing
CN111881064A (zh) 一种全闪存储系统中访问请求的处理方法、装置及设备
JP2016021264A (ja) メモリシステムのデータ管理方法
Kuan et al. Space-efficient index scheme for PCM-based multiversion databases in cyber-physical systems
Yang et al. An efficient dynamic hash index structure for NAND flash memory
US20240070135A1 (en) Hash engine for conducting point queries
CN107066624B (zh) 数据离线存储方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150420

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160226

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160329

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160628

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160823

R150 Certificate of patent or registration of utility model

Ref document number: 5996088

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250