JP2007004801A - アドレス関連テーブル構造を持つスキップ・リスト - Google Patents

アドレス関連テーブル構造を持つスキップ・リスト Download PDF

Info

Publication number
JP2007004801A
JP2007004801A JP2006173240A JP2006173240A JP2007004801A JP 2007004801 A JP2007004801 A JP 2007004801A JP 2006173240 A JP2006173240 A JP 2006173240A JP 2006173240 A JP2006173240 A JP 2006173240A JP 2007004801 A JP2007004801 A JP 2007004801A
Authority
JP
Japan
Prior art keywords
node
nodes
level
index
data structure
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
JP2006173240A
Other languages
English (en)
Other versions
JP4921865B2 (ja
Inventor
Clark Edward Lubbers
エドワード ルッベルス クラーク
Robert M Lester
マイケル レスター ロバート
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Seagate Technology LLC
Original Assignee
Seagate Technology LLC
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 Seagate Technology LLC filed Critical Seagate Technology LLC
Publication of JP2007004801A publication Critical patent/JP2007004801A/ja
Application granted granted Critical
Publication of JP4921865B2 publication Critical patent/JP4921865B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0864Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/31Providing disk cache in a specific location of a storage system
    • G06F2212/311In host system

Landscapes

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

Abstract

【課題】データ記憶アレイ・コントローラ(108)のキャッシュ・メモリ(124)などの、メモリ空間内でデータを効率的に配列し検索するための装置および方法を提供する。
【解決手段】データ構造(200)は正方向ポインタ(210)のアレイを有するノード(206)のスキップ・リストを含む。各ノード(206)はそのノード(206)をメモリ空間内のテーブル(202)内に記憶するためのインデックスから導かれるノード・レベルを有する。ノード(206)の利用可能な総数はインデックスのビット数で表すことができる最大の2の累乗の半分より小さくなるように選択し、またノード(206)はテーブルの偶数インデックスまたは奇数インデックスにだけ記憶される。この場合、ノード(206)のフリー・リストは利用可能なノード(206)を識別するためのカウントおよびインデックスの対のアレイから生成する。
【選択図】図3

Description

本発明は一般にデータ構造の分野に関するもので、より詳しく述べると、ディジタル・コンピュータ・メモリ環境内でアドレス関連テーブル構造を持つノードのスキップ・リストを与える装置および方法に関するものであるが、これに限定されるものではない。
スキップ・リストは、データ記憶装置内のアレイ・コントローラのキャッシュ・メモリなどの、メモリ空間内でデータを配列するための有用なタイプのデータ構造である。スキップ・リストは連結リストの一形式であって、リスト内の各項目(すなわちノード)はランダムな数の特別のあるいは追加の正方向ポインタ(extra forward pointers)を有する。かかるリストの検索(searching)は2進ツリーの検索の実行に似ているが、維持(maintenance)の点で2進ツリーに比べてコストが大幅に低い。
一般に、スキップ・リストは各ノード内のキー・フィールドの比較により決まる順序に維持される。この比較は随意に選択され、昇順または降順、数字または英数字、などでよい。新たなノードをリスト内に挿入するとき、一般に或る手順を用いて正方向ポインタの数を実質的にランダムにそのノードに割り当てる。各ノードに関連する特別のあるいは追加の正方向ポインタの数をノード・レベルと呼ぶ。
スキップ・リストは多くのデータ構造管理アプリケーションで動作できることがわかっているが、メモリの使用および検索の効率を高める改善のニーズが引き続き存在する。本発明は一般にかかる改善に関するものである。
本発明の好ましい実施の形態は一般に、データ記憶アレイ・コントローラのキャッシュ・メモリなどの、メモリ空間内でデータを効率的に配列し検索するための装置および方法に関する。
或る実施の形態では、データ構造はメモリ空間内に常駐し、正方向ポインタのアレイを有するノードのスキップ・リストを含む。スキップ・リスト内の各ノードは、前記ノードに関連するアレイからの正方向ポインタの数に関連するノード・レベル(a node level in relation to a number of forward pointers)を有する。各ノード・レベルはメモリ空間内のテーブル内に記憶されたノードのインデックス(index:索引)から導かれる。
好ましくは、最高のノード・レベルのノード(nodes)がテーブルの利用可能なインデックス(indices)の最低の集合でグループ化されるように、ノードはノード・レベルによりテーブル内に配列される。各ノードのノード・レベルは、好ましくは関連するインデックス内の先行ゼロの数に関連して決定される。更に好ましくは、スキップ・リストのノードの利用可能な総数は、インデックスのビット数で表すことができる最大の2の累乗の半分より小さくなるように選択する(例えば、16ビットのインデックスでは214ノードを用い、32ビットのインデックスでは230ノードを用いる)。
好ましくは、比較的低いノード・レベルのノードはmビットのフォーマット(8バイトなど)で構成し、比較的高いノード・レベルのノードはnビットのフォーマット(16バイトなど)で構成する。ただし、mはnより小さい。
テーブルの利用可能なインデックスは好ましくは順次に偶数および奇数のインデックス(sequentially even and odd indices)を含み、ノードは前記偶数インデックスまたは奇数インデックスの選択された1つにだけ記憶する。この場合、ノードのフリー・リストは好ましくはカウントおよびインデックスの対のアレイからのテーブルから生成する。
更に、このテーブルは好ましくは第1の1次テーブルとして特徴づけてよく、データ構造は更に、好ましくは第1の1次テーブル内の比較的高いノード・レベルのノードの分布が減少したときに追加のノードを記憶するための第2の1次テーブルを備える。1次ノードにより記憶される第1のタイプの情報に関連する第2のタイプの情報を記憶するための2次テーブルも備えてよい。この構造は更に、好ましくはノードのエレベータ検索(elevator search)を容易にするためのアップ・キューおよびダウン・キューを含む。
別の実施の形態の方法は、好ましくは正方向ポインタのアレイを有するノードのスキップ・リストを生成することを含み、スキップ・リスト内の各ノードは前記ノードに関連するアレイからの正方向ポインタの数に関係するノード・レベルを含む。ノードは、最高のノード・レベルのノードがテーブルの利用可能なインデックスの最低の集合でグループ化されるように、メモリ空間内のテーブル内にノード・レベルによりインデクシングされる(indexed)。
好ましくは、インデクシング・ステップ(indexing step:インデクシングするステップ)は、テーブル内の前記ノードのアドレスに関連するインデックス値内の先行ゼロの数に関係して各ノードのノード・レベルを導くことを含む。インデックス値は好ましくは2の累乗(例えば、16ビット、32ビットなど)で構成する。
前と同様に、生成するステップのスキップ・リストのノードの総数は、好ましくはインデクシング・ステップのテーブルをアドレス指定するのに用いられるインデックスフィールドのビット数で表すことができる最大の2の累乗の半分より小さくなるように選択する(例えば、16ビットのインデックスでは214ノードを用い、32ビットのインデックスでは230ノードを用いる)。
生成するステップは更に、好ましくは比較的低いノード・レベルのノードにmビットのフォーマットを与え、比較的高いノード・レベルのノードにnビット・フォーマットを与えることを含む。ただし、mはnより小さい。テーブルの利用可能なインデックスは好ましくは順次に偶数および奇数のインデックスを含み(sequentially even and odd indices)、インデクシング・ステップ中は、ノードは好ましくはフリー・ノード生成ルーチンを用いて前記偶数インデックスまたは奇数インデックスの選択された1つにだけ記憶する。
本発明を特徴づけるかかる機能および利点は、以下の詳細な説明を読みまた関連する図面を参照すれば明らかになる。
本発明の好ましい実施の形態を実施する例示的な環境を与えるために、大容量記憶装置を用いる広域ネットワーク(WAN)として特徴づけられるコンピュータ・ベースのシステム100を図1に示す。
システム100は、それぞれホストA,B,Cで示す多数のホスト・コンピュータ102を含む。ホスト・コンピュータ102は相互に、またファブリック(fabric)106を介して一対(AおよびB)のデータ記憶アレイ104と、相互作用する。ファブリック106は好ましくはファイバ・チャンネル・ベースのスイッチング・ネットワークとして特徴づけられる。ただし、インターネットを含む他の構成を用いてもよい。
各アレイ104は一対のコントローラ108(A1,A2およびB1,B2で示す)と、好ましくはRAIDとして動作するディスク・ドライブとして特徴づけられる一組のデータ記憶装置110とを含む。コントローラ108およびデータ記憶装置110は好ましくは故障許容構成(fault tolerant arrangement)を用いるので、種々のコントローラ108は並列の、冗長な連結を用い、システム100により記憶されユーザ・データの少なくともいくつかはデータ記憶装置110の少なくとも一組内に冗長なフォーマットで記憶される。ホスト・コンピュータ102は、それぞれのアレイ104に物理的に隣接してまたは離れて設けてよい。
図2は選択された1つのコントローラ108の詳細を示す。コントローラ108は単一の集積回路内に、または必要に応じて多数のディスクリート回路の間に分散して、実現してよい。
好ましくは1つ以上のプログラム可能なコンピュータ処理ユニット(CPU)で構成するプロセッサ・ブロック112は、好ましくは不揮発性メモリ114(フラッシュ・メモリなど)およびダイナミック・ランダム・アクセス・メモリ(DRAM)116内に記憶されているプログラミング・ステップおよび処理データに従って制御を行う。好ましくは、プロセッサ・ブロック112は後で説明するインテリジェントな記憶およびキャッシュ管理の機能を行う。
ファブリック・インターフェース(I/F)回路118はファブリック106を介して他のコントローラ108およびホスト・コンピュータ102との通信を容易にし、また装置I/F回路(device I/F circuit)120は記憶装置110との通信を容易にする。I/F回路118,120および経路コントローラ(path controller)122は、キャッシュ・メモリ124を用いるなどして、記憶アレイ104とホスト102との間にコマンドおよびデータを通す通信路を形成する。
動作中、キャッシュ・メモリ124はホスト102と記憶装置110との間のI/O転送に関連するユーザ・データおよびその他の情報を記憶する。装置110から検索された読取りデータ(投機的なデータ(speculative data)を含む)は後で「キャッシュ・ヒット」することを予想してキャッシュ・メモリ124内に一時的に保持されるので、後でデータが要求されたときには装置110とのアクセス動作を計画する必要がなく、データはキャッシュから直接転送される。
同様に、ライト・バック・キャッシュ方式(write−back cache policy)を用いて、装置110に書き込むべきデータをキャッシュに入れ、開始したホスト102に書込み完了コマンドを送り返し、該当する装置110に実際にデータを書き込むよう後で計画することができる。
このように、一般にプロセッサ・ブロック112は、各項目の状態を追跡するなど、キャッシュの内容を正確に制御することが望ましい。かかる制御は、好ましくは本発明の好ましい実施の形態に係るアドレス関係テーブル構造を用いるスキップ・リスト配列により行う。スキップ・リストは好ましくはキャッシュ・メモリ124の一部内に保持するが、必要に応じて他のメモリ空間を用いてもよい。
スキップ・リストの一般化された構造を図3の200で示す。これは図に示すようにインデックス・テーブル202、リスト・ヘッド204、ノード206の母集団(population of nodes 206)(最初の3つを一般にA,B,Cで示す)、ヌル・ポインタ・ブロック208を含む。0からNまでの正方向ポインタ(forward pointers:FP)を一般にライン210で表す。
各ノード206は、好ましくはキャッシュ・メモリ124内の或る量のデータ(a quantum of data)および/または情報(メタデータなど)に関連する。各ノード206は、論理ブロック・アドレス(LBA)値などの個別のキーを有する。各ノード206に関連する正方向ポインタ210の数は、リスト200内に挿入するときに実質的にランダムに割り当てる。ノード毎の追加(extra)の正方向ポインタの数をそのノードのノード・レベルと呼ぶ。
好ましくは、正方向ポインタ210の数はリストのサイズに関係して選択する。表1は多数の種々のノード・レベルのそれぞれにおけるノードの代表的な分布を示す。ここで、Nノードの中の1つはx以上のレベルを有する。
Figure 2007004801
LZ(先行ゼロ)欄の値は一般に、関連するレベルの各ノードをアドレス指定することのできるインデックス値のビット数に対応する(例えば、2ビットはレベル1の4ノードをアドレス指定し、4ビットはレベル2の16ビットをアドレス指定する、など)。
表1は30ビットのインデックスを用いて1,073,741,824(0x40000000)の可能なノードという最大のプールを与える。このサイズのプールは、例えば米国内で発行される「社会保障番号」(SSN)を全てカバーするのに十分である。
好ましい実施の形態では、各ノードのノード・アドレスは好ましくはインデックス値から導かれる。関連するノード・レベルも好ましくはインデックス値から導かれる。ここで、レベルを決定するのにインデックス内の先行ゼロの数を用いる。これについて以下に詳細に説明する。
表1から分かるように、一般に、4ノードの中の1つは「0」より大きなレベルを有する。すなわち、ノードの全母集団の25%は1つ以上の追加の正方向ポインタを有する。逆に、4ノードの中の3つ(75%)は一般に「0」のレベル(追加の正方向ポインタがない)を有する。同様に16ノードの中の3つは一般に「1」のレベルを有し、64ノードの中の3つは「2」のレベルを有する。以下同様である。
このリストが非常に大きくまたポインタの最大数が限られている(bounded)場合は、リストを検索するのに一般に最大レベルで平均約n/2回の比較を必要とする。ただし、nはそのレベルのノードの数である。例えば、ノードの数が16,384に限られかつ最大レベルが5の場合は、平均してレベル5に16ノードある(1024の中の1つ)。したがって、各検索はレベル4での比較に来る前に一般に平均して8回の比較を必要とし、レベル4から0までは平均して2回の比較である。
スキップ・リスト200の検索では一般に、サポートされた最大レベルまでの正方向ポインタ210を識別するリスト・ヘッド204を用いる。ヌル・ポインタ208として特殊の値を用いてよい。これはリストの終わりより先を指すものと解釈される。インデックスからレベルを導くことは、ヌル・ポインタ値が「0」のときにリストがやや不均衡になる(imbalanced)ことを意味する。これは、「0」というインデックスはさもなければ最大レベルにおける特定のノードを参照するからである(an index of “0” would otherwise reference a particular node at the maximum level)。
しかしノードの総数は、好ましくはインデックス・フィールド内のビットの数で表すことのできる最大の2の累乗の半分より小さくなるように選ばれるとみなすことができる。これにより、最高のビット集合を持つ任意の値でヌル・ポインタを表すことができる。例えば、16ビットを用いてインデックスおよび最大32,768ノード(インデックス範囲は0x0000−0x7FFF)を記憶すると、0x8000と0xFFFFの間の任意の値をヌル・ポインタとして用いることができる。
ノード・レベルをノード・アドレスから得ることの利点は、好ましくはメモリの異なるセクション内の所定のノード・レベルの各ノードをグループ化して密に束ねる(densly packing)ことにより、利用可能なメモリを効率的に用いることができることである。図3に示すように、インデックステーブル202は一般に、テーブル内の最大レベルのノードが最小のインデックス(indices)を有し、続いて次のレベルが下にくる(followed by the next level down)というようにノードを配列する。
キャッシュ・ライン(cache lines)に基づいてデータ・キャッシングを用いるCPU(例えば、ブロック112)では、より高いレベルのノードが一般にキャッシュ内に残る傾向がある。また、検索は一般に低いレベルでメモリ参照をトリガする。
ノードの数が16,384で、各「1次」ノードが、4バイトのキー情報および6つの2バイトの正方向ポインタインデックス(FPI)から成る16バイトを占める例を考える。表1から、一般に1024ノード(16の中の1つ)だけが「1」より大きなレベルを有する。かかるノードは好ましくはテーブル202内の16KBという密な領域内に置かれる。32KBのデータ・キャッシュを持つシステムでは、「1」より大きなレベルを持つノードを保持するのにキャッシュの半分が用いられた場合は、レベル「1」まで検索して下るときにはメモリを参照する必要がない。その後で、レベル「1」で2回とレベル「0」で2回の参照を行う。もちろんこれは理想的な場合であるが、これから認識されるように、参照の頻度のために、より高いレベルが一般にキャッシュ内に残る傾向がある。
データ・キャッシングを用いる検索では、テーブル構造を最適化することによりメモリ参照の平均回数を最小にすることが望ましい。しかし、図3の構造は、キャッシングが動作の一部として明示的に用いられる媒体(例えば、図1の記憶装置110)を検索するのにも用いてよいことに注意していただきたい。すなわち、媒体から読み取られたデータはキャッシュに入れてよく、またキーおよびポインタを密に記憶し、大量のノード(または「記録」)データは「2次」テーブル内に記憶するように媒体上のデータを構造化してよい。これらの実施の形態のそれぞれの例を以下に示す。
シーク・キューの例
ここに示すスキップ・リスト構造の第1の例示的な実施の形態について、図2のコントローラ108のシーク・キュー(seek queue)管理に関して以下に説明する。
この例では、シーク・キュー(ノード)の全集合にわたるホスト要求の最大数は16,384(214)とする。ノードの追加および削除がメモリ参照に関して効率的であることが望ましい。なぜなら、この動作はそれぞれのホスト要求を扱うクリティカル・パスにあるからである。また時には、或るキューはほとんど空であるが他のキューは何千もの要求が並んでいるとする。また、スキップ・リストの検索および記憶に用いられるメモリを最小にすることが望ましい。
したがって、各1次ノードは、検索に用いられるキー値と、ノードに関連する正方向ポインタの識別とを少なくとも含むよう形成される。例示的な最小の1次ノード・フォーマットを表2に示す。
Figure 2007004801
このフォーマットは8バイトのノード長を形成し、ノード・レベルが「0」または「1」のときに用いてよい。これはサイズが2の累乗であることに注意していただきたい。レベル「0」から「5」について別の提案されたノード・フォーマットを表3に示す。
Figure 2007004801
このフォーマットは更に長い16バイトのノード長を形成する。検索動作は一般にどのサイズのノードに関するかを考慮する必要はない。なぜなら、比較を行う現在のレベルに基づいてポインタを参照するからである。1次ノードのテーブル202は、好ましくはそのサイズに揃ったメモリのブロック(例えば、128KB)を含む。
表1から、16,384ノードの中の1024(16の中の1つ)はレベル2以上であると一般に予想される。アドレスから導かれたレベルに基づいて、これらのノードにはこれに従ってテーブル202内の0x0000から0x03FFの範囲のインデックスが割り当てられる。
全てのノードが同じサイズ(例えば、表3のフォーマットに従って16バイト)の場合は、インデックスにノード・サイズを掛けて(左に4つシフトして)テーブルのベースを加算するかまたはORを用いる(テーブルが揃っている場合)ことにより、ノード・アドレスはインデックスから導くことができる。しかし、レベルが「0」または「1」のときに小さいノード・フォーマットの表2を用いる場合はかなりの量のメモリを節約することができる(例えば、16,38415/16=122,880バイト)。これにより、或る期間の検索のアマルガム(amalgam of searches)を考慮すると、参照するメモリの量はほぼ半分になる。前と同様に、左シフト+加算の操作を行って、小さなフォーマットを持つ(例えば、表2)ノードのインデックスからノード・レベルを導くことができる。
別の好ましい方法では、テーブル202内の0x0000から0x03FEの範囲内の偶数インデックスだけを用いる。所定の偶数インデックスに対応する奇数インデックスは所定の偶数インデックスを持つノードのすぐ先の同じサイズのノードにマップする。これにより、同じ動作(この場合は、インデックスを左に3つシフト+加算)を用いて両サイズのノードのアドレスが導かれる。なぜなら、偶数インデックスは16バイト・ノードのアドレスを実際に作るからである。または、必要に応じて偶数インデックスの代わりに奇数インデックスだけを選んでよいことが認識される。
しかしこの方法の限界は、高いレベルのノードの数が望ましい数の一般に半分しかないことである。すなわち、一般に「1」より高い各レベルでの比較の平均回数は2ではなく4である。
これは、ノードの「フリー・リスト(free list)」を作ることにより対処することができる。フリー・リストを作る好ましい方法は、一般に図4のフリー・リスト生成ルーチン220により与えられる。ステップ222で、或るレベルをランダムに選択し、ステップ226のカウントおよびインデックスの対のアレイから、ステップ224で、選択されたレベルでの次の利用可能なインデックスを選択する。ステップ228で、識別されたノードがフリー・リストの終わりに連結され、ステップ230で流れは戻る。
ステップ232で、選択されたレベルが空になると、ステップ234でレベルを変える。例えば、次に低いレベルに下がるか、またはうまくゆかない(しかし、別のノードが利用可能である)場合は次に高いレベルに移る。ステップ236で、全てのインデックス値がなくなるまでこれを続けた後、プロセスは終わる(ステップ238)。
表4は上の方法のカウントおよびインデックスの対(ステップ226)の例示的な初期値を示す。0x0000から0x03FFまでの奇数インデックスと値0x0000とを除いて、16,384の初期母集団から全部で15,871の有効なインデックス値が利用できると考えられる。
Figure 2007004801
上の文脈で「選択する(“picking”)」とは生成されたレベルでのカウントをチェックすることを意味することに注意していただきたい。カウントが非ゼロの場合は、選択されたインデックスを取り出し、カウントは減分し、インデックスは、レベルが「0」または「1」の場合は「1」だけ減分し、レベルが「1」より大きい場合は「2」だけ減分する。したがって、図4のルーチン220は15,871のカウントを持つ実行ループ(do−loop)として特徴づけられる。
このことから、ルーチン220はカウントの合計に基づいて正確に15,871のインデックスを生成する。カウントが「0」の場合は現在のレベルは生成されたレベル以下であり、現在のレベルが「0」でない場合はレベルは減分され、プロセスは繰り返される。カウントが「0」でかつ現在のレベルが「0」の場合はレベルは生成されたレベル+1にセットされ、プロセスは繰り返される。カウントが「0」でかつ現在のレベルが生成されたレベルより大きい場合はレベルは増分され、プロセスは繰り返される。このようにして、使用可能である間はインデックスはループ内にある。
この方法を用いると、当業者が認識するように、高いレベルのノードはプロセスのほぼ半ばに空になる。割当てがリストの前の方から行われかつ割当て解除がリストの前の方で行われる場合は、これは必ずしも問題ではない。これは一般に、選択されたレベルのランダムさを保存し、また半分より多くのノードが用いられるまで望ましい分布を作る。
ごく稀な場合だけに、他の半分のノードが要求されるとみなしうる。この場合は性能は低下するが、一般にシステムの通常の重負荷性能の2倍を超えることはない。他方で、軽負荷は一般にシーク要求の比較的小さなキューを有する傾向がある。大きな負荷要求は必ずしも重いベンチマーク負荷を含まない。むしろ、かかる大きな負荷要求は、シーキングのためにシステムが飽和する場合に存在すると考えられる(シーク遅れに伴う量のアイドル・タイムがある)。
各レベルでのノードの分布が実質的に「正常」(確率分布により予測される)のときは、この状態をここで「同等重み(equal weight)」と呼ぶ。他方で、「低い重み(underweight)」の状態は用いられる高いレベルのノードの数が通常より少ないときに起こる。
低い重みの状態は、図5の240で示すような、0x0000から0x03FFの範囲内の奇数インデックスを持つノードを保つように第2の1次テーブル(8KB、すなわち51216など)を割り当てることにより補償することができる。レベルが2より大きくかつインデックスが奇数のときは、ノード・アドレスの計算に第1のベース・アドレスではなく第2のベース・アドレスを用いる。
各ノードのノード・レベルは、好ましくはポインタ(32ビットの数として処理される)の先行ゼロを数え、18を引き、2で割り、レベルを6から5にすることにより導かれる。PowerPCなどのいくつかの市販のプロセッサは値の中の先行ゼロを数える命令を有する(GNUコンパイラは内蔵の関数呼出しにより命令を使用可能にする)ので、この動作は簡単である。インデックス「0」を持つノードを「ヌル・ポインタ」としての使用から外すのが好ましい。なぜなら、「0」の値を検出するのはビットがセットされているかどうか調べるより一般に効率が高いからである。
このシーク・キューの例を続けると、多くの場合に、要求に関する状態情報やイニシエータ(例えば、ホスト102)に返すべき構造へのポインタなどの、キー値(LBA)以外の追加の情報が必要であることが認識される。この情報は、図5の242などの2次テーブル内に配列された追加のデータの量(例えば、4バイト)内に記憶してよい。2次テーブル242は1次インデックス・テーブル202のインデックスを介して参照することができる。2次テーブル242内の全ての項目のサイズが均一の場合は、全テーブル・サイズはやはり2の累乗(例えば、この場合は64KB)である。
再び図3を参照して、各シーク・キューは好ましくは全部で6つの正方向ポインタ210を持つリスト・ヘッド204を有する。各リストは昇順または降順に保ってよい。検索動作は好ましくは現在の順序に基づいて選択される。「のこぎり(saw−tooth)形」方式(「Cスキャン」と呼ぶことがある)を用いるときは、順序は必ず昇順でよい。
効率を高めるためにエレベータ方式を用いるときは、キューの最後の項目を除くときに順序を逆にしてよい。通常、検索動作はリスト内の現在位置の前と後の両方に項目を挿入しながらリスト内を移動する。しかしここで提案する逆の手順では、好ましくはレベル0ポインタを探し出してリスト・ヘッドをゼロにすることにより、リストから残りの項目を取る。次に、レベル0ポインタを介して連結リストの中を移動し、ヘッド204の各項目を挿入することにより、項目を連続的に挿入する。
この動作は簡素化することができる。なぜなら、これはノード206のノード・レベルを決定し、リスト・ヘッド204内のそのレベル以下のポインタ210をノード206にコピーし、そのレベル以下のリスト・ヘッド内のポインタを所定のノードへのポインタにセットすることになるからである。
エレベータ検索方式の逆の手順の好ましい別の方法は、図6の250,252に示すように2つのキューを用いることである。アップ・キュー250は「現在」位置より高い全ての要求を保持して昇順のLBAに維持される。ダウン・キュー252は現在位置より低い全ての要求を保持して降順のLBAに維持される。
このようにして、現在位置からの検索を増分するときはアップ・キュー250を用い、現在位置からの検索を減分するときはダウン・キュー252を用いる。現在位置はキュー250,252の使用中の方の第1の項目を参照する。どちらかのキューで終点に達すると、検索は残りのキューに切替わり、要素を順に取りだす。
要約すると、ここに説明したシーク・キューの例示的な実施の形態は、好ましくはアドレス関係テーブル構造(例えば、テーブル202,240)を持つスキップ・リスト200を用いる。ノード・レベルはアドレスから導かれ、また好ましくは図4に示すようなフリー・リストから導かれるレベル分布が得られる。2次テーブル242は、好ましくは1次ノードに関連する関係(2次)データを連結するのに用いられる。更に、逆の手順を持つエレベータ方式を用いるか、またはアップ・キュー250およびダウン・キュー252を用いるシーク方式が好ましくは用いられる。
メディア・スキップ・リストの例
アドレス関係テーブル構造を持つスキップ・リストの第2の例示的な実施の形態について、メディア(データ記憶装置110)上に保持される比較的大きなデータベースを参照して以下に説明する。この実施の形態では、データベース内の種々のレコードの検索オーバーヘッドを最小にするためにスキップ・リスト200が一般に用いられる。
かかるデータベース内でのレコードの割当ておよび割当て解除に関係する問題は、以下の説明では大部分省略する。ただし、上に説明した方式(例1)を調整して、大きな割当て解除作業を必要としないデータベースの最小メタデータ(すなわち、単なるテーブル)を用いてノードを直接割り当てるように容易にすることができることに注意していただきたい。
前に述べたように、表1は、例えば米国連邦政府が発行した社会保障番号(SSN)全部を処理するのに十分な、10億ノードを超える母集団をサポートする最大のインデックスを与える。今回の例では、データベースは拡張されて最大約40億SSNをサポートする。これは32ビットのインデックス値(すなわち、232=4,294,967,296)を用いることにより容易になる。一般に、2の累乗の値は処理が容易であることが分かっている。したがって、装置110内に記憶されるデータベースは、この説明では約230(1,073,741,824)レコードを含むと考える。
この例のメディア上の各レコードは2キロバイト(KB)を含むと考える。したがって全データベースは装置110の中に約2テラバイト(TB)のディスク空間を必要とする。
この説明を助けるベンチマークとして、アクセス方法はレコード毎に4バイトのポインタの従来のフラット・マップ構造(flat map architecture)を用いてよい。これは一般に、装置110上に4ギガバイト(GB)のディスク空間と、レコード毎にデータを見つけてアクセスするための2つのディスク・アクセスI/O動作(1つのI/Oは関連するレコード自体のデータを検索することである)とを必要とする。
しかし、別の方法として図3−6に係るキャッシュに入れたスキップ・リストを設けて、装置110内のそれぞれのレコードに対応するローカル・メモリ内でノードの母集団を生成することが望ましい。前のように、各ノード・アドレスによりアクセスを行うことができる。
ここで、この例で230(1,073,741,824)の可能な全レコードをサポートするために32ビットのインデックスが選択されたのと同様に、割当て可能なノードの総数より大きくなるようにインデックス値が選択される場合は、特別の処理が必要であることに注意していただきたい。ここで起こる1つの問題は、ノード・レベルを決定するのにインデックス内の先行ゼロの「正しい」数をどのようにして識別するかである。
この例では、同等重み分布は15番目のレベル(0−14を用いるレベル14)の中に0,1,2,3のインデックスを持つ正確に4つのノードを与える。表5はこれらのインデックス値の関連する32ビット表現を示す。
Figure 2007004801
表5から分かるように、先行ゼロ(LZ)の数は一般にLZを定義するのに用いられる規則(convention)に依存する。インデックス値2および3の32ビット表現は明らかにそれぞれ30個の先行ゼロを有する。しかしインデックス値1の32ビット表現は技術的に31個の先行ゼロを有し、インデックス値0の32ビット表現は、LSB(ビット0)をカウントするかどうかに従って先行ゼロは31個または32個である。これらの項目に用いられる2LSB(ビット0−1)をカウントしなければ、全ての項目の先行ゼロは30個だけと見なすこともできる。
混乱を少なくするため、LSB0ビット値をカウントしないで(「0」インデックス値が用いられる場合)、好ましくはインデックス値内の実際の先行ゼロの数を識別して先行ゼロの数を決定するのが好ましいことが理解される。レベル14では、これによりインデックス0および1ではLZ値は31になり、インデックス2および3ではLZ値は30になる。
次にノード・レベルは、好ましくはこのLZ値から、(LZ−2)/2の関係に従い、必要に応じて端数を全て切り捨てて(整数除算)決定される。レベル14では、LZ値が31および30のとき14という値になる((31−2)/2=14.5→14、および(30−2)/2=14)。
これは残りの全てのレベルに同様に適用される。例えば、全てのレベル0ノードはそれぞれのインデックス内に2つまたは3つの先行ゼロを有する。上の式を適用すると((2−2)/2=0、および(3−2)/2=1/2→0)、0に関連するノード・レベルを直ぐ識別することができる。
この例を続けると、「基本」ノードは、全部で16バイトについて、32ビットのキーと3レベル(0−2)の32ビットのポインタとを用いる。1次の基本ノードはメディア上に31.5ミリオン(M)セクタ(15.75GB)を占める。64ノードの中の1つが2より大きなレベルを有するので、これらの値は表1から得ることができる。1ビリオン(G)の16バイト・ノード(KM)では、正確に32M(16M/512)セクタを必要とする。しかし、レベル2より上には基本ノードでない16Mノードがある。したがって、32Mは16M16/512、すなわち512Kだけ減少する。
いわゆる「中間」ノードは基本ノードの2倍のサイズ(すなわち、32バイト)で4つの追加のポインタを有するように選択される。いわゆる「トップ」ノードは中間ノードの2倍のサイズ(すなわち、64バイト)であり、全部で15レベル(0−14)について12の追加のポインタを処理する。
16,384ノードの中の1つ(例えば、65,536、すなわち216ノード)は64バイトのトップ・ノードであることに注意していただきたい。トップ・ノードは4MB(8Kセクタ)を占める。更に全部で16,711,680(224マイナス216)の中間ノードがあり、これは約500MBのセクタを占める。重要であるが、この方式ではセクタ境界を横切るノードはない。
高いレベルのノードに専用の、プロセッサ・ブロック112が利用可能なメモリは128MBよりわずかに多いだけとみなすことができる。中間ノードの3/4は一般にレベル3である。したがって、レベル4からレベル6のノードは全て512MBの1/4(128MB)内に納めることができる。レベル7からレベル14のノードは全て4MB内に納めることができる。一般に、これらのノードのそれぞれのグループは割り当てられたメモリ内で密に束ねられる(packed densly)(また、関連するレコードは同様に装置110内で密に束ねられる)ことが分かる。
この時点で、レベル4から14を持つ全てのノードはメモリ内のキャッシュに入れられる。前に説明したように、同等重み分布であれば、各検索はレベル当たり2回の追加の参照を必要とする。最高のレベルのノード(例えば、レベル11−14)は16K内に納まり、例えば、プロセッサ・データ・キャッシュ内に置かれる。256KのL2キャッシュを用いる場合、レベル9および10はL2プロセッサ・キャッシュ内に置かれる。
レベル4から8では、平均して16回のメモリ参照が一般に必要である。しかし1GBのデータ・キャッシュでは、全てのレベル3のノードは不揮発性のライト・バック(NV WB)キャッシュ内に置いてよい。この場合、最近参照した「1次」ノード(挿入のため)および最近参照した2次データにアクセスするためにキャッシュの半分以上が保持される。
したがって、この実施の形態ではI/Oディスク転送はレベル0から2だけに必要であり、残りのレベルは局所的に検索してよい。装置110の各グループがドライブ当たり250IOPSの能力を有する40ディスク・ドライブのアレイを表す場合は、このシステムは、従来の妥当な価格の装置を用いて、毎秒1425人の異なる人のためのレコードを探して返すことができる。またこのシステムは、それぞれのノード検索の後で、検索されたレコードを処理しまた追加の機能も実行するのに十分なプロセッサ時間の余裕を有する。
ここで認識されるように、本発明の好ましい実施の形態は一般に、データ記憶アレイ・コントローラ(108など)のキャッシュ・メモリ(124など)などの、メモリ空間内でデータを効率的に配列し検索するための装置および方法に関する。
或る実施の形態では、データ構造(200など)はメモリ空間(114,116,124など)内に常駐し、正方向ポインタ(210など)のアレイを有するノード(206など)のスキップ・リストを含み、スキップ・リスト内の各ノードは前記ノードに関連するアレイからの多数の正方向ポインタに関係するノード・レベルを有し、また各ノード・レベルはそのノードをメモリ空間内のテーブル(202など)内に記憶するためのインデックスから導かれる。
好ましくは、最高のノード・レベルのノードがテーブルの利用可能なインデックスの最低の集合でグループ化されるように、ノードはノード・レベルによりテーブル内に配列される。各ノードのノード・レベルは、好ましくは関連するインデックス内の先行ゼロの数に関係して決定される。更に好ましくは、スキップ・リストのノードの利用可能な総数はインデックスのビット数で表すことができる最大の2の累乗の半分より小さくなるように選択する(例えば、16ビットのインデックスでは214ノードを用い、32ビットのインデックスでは230ノードを用いる)。
好ましくは、比較的低いノード・レベルのノードはmビットのフォーマット(表2における8バイトなど)で構成し、比較的高いノード・レベルのノードはnビットのフォーマット(表3における16バイトなど)で構成する。ただしmはnより小さい。
テーブルの利用可能なインデックスは好ましくは順次に偶数および奇数のインデックスを含み、ノードは前記偶数インデックスまたは奇数インデックスの選択された1つ(表4内など)にだけ記憶する。この場合、ノードのフリー・リスト(例えば、200による)は好ましくはカウントおよびインデックスの対(例えば、206による)のアレイから生成されたテーブルから生成する。
更に、このテーブルは好ましくは第1の1次テーブルとして特徴づけてよく、データ構造は更に、好ましくは第1の1次テーブル内の比較的高いノード・レベルのノードの分布が減少したときに追加のノード(additional nodes)を記憶するための第2の1次テーブル(240など)を備える。1次ノードにより記憶される第1のタイプの情報に関連する第2のタイプの情報を記憶するための2次テーブル(242など)も備えてよい。この構造は更に、好ましくはノードのエレベータ検索を容易にするためのアップ・キュー(250など)およびダウン・キュー(252など)を含む。
別の実施の形態の方法は、好ましくは正方向ポインタ(210など)のアレイを有するノード(206など)のスキップ・リスト(200など)を生成するステップを含み、スキップ・リスト内の各ノードは前記ノードに関連するアレイからの正方向ポインタの数に関係するノード・レベルを含み、また、最高のノード・レベルのノードがテーブルの利用可能なインデックスの最低の集合でグループ化されるように、メモリ空間(114,116,124など)内のテーブル(202など)内のノード(例えば、表1による)にノード・レベルによりインデクシングする。
好ましくは、インデクシング・ステップは、テーブル内の前記ノードのアドレスに関連するインデックス値内の先行ゼロの数に関係して各ノードのノード・レベルを導くことを含む。インデックス値は好ましくは2の累乗(例えば、16ビット、32ビットなど)で構成する。
前と同様に、生成するステップのスキップ・リストのノードの総数は、好ましくはインデクシング・ステップのテーブルをアドレス指定するのに用いられる多数のビットのインデックス・フィールドで表すことができる最大の2の累乗の半分より小さくなるように選択する(例えば、16ビットのインデックスでは214ノードを用い、32ビットのインデックスでは230ノードを用いる)。
生成するステップは更に、好ましくは比較的低いノード・レベルのノードにmビットのフォーマットを与え(例えば、表2)、比較的高いノード・レベルのノードにnビットのフォーマットを与える(例えば、表3)ことを含む。ただし、mはnより小さい。テーブルの利用可能なインデックスは好ましくは順次に偶数および奇数のインデックスを含み、インデクシング・ステップ中は、ノードは好ましくはフリー・ノード生成ルーチン(200など)を用いて前記偶数インデックスまたは奇数インデックスの選択された1つにだけ記憶する。
クレームの目的では、前記メモリ空間内でデータを効率的に配列し検索する前記第1の手段は図3−6に示した構造に対応するものと理解される。従来の技術に従ってフォーマットされたスキップ・リストやその他のデータ配列および検索構造(ツリー検索およびフラット・マップなど)は前記第1の手段から除外され、これを構成しない。
理解されるように、これまでの説明において本発明の種々の実施の形態の多くの特徴および利点を、本発明の種々の実施の形態の構造および機能の詳細と共に示したが、この詳細な説明は単なる例示であって、細部について、特にクレームを記述する用語の広い一般的な意味により全面的に示される本発明の原理内の各部の構造および配列に関して、変更を行ってよい。
大容量記憶装置を用いる広域ネットワークとして特徴づけられるコンピュータ・ベースのシステムの機能的ブロック表現である。 図1のアレイ・コントローラの選択された1つの機能的ブロック表現である。 本発明の好ましい実施の形態に係るアドレス関係テーブル構造を持つスキップ・リストを一般的に示す。 本発明の好ましい実施の形態において行われるステップを一般的に示すフリー・リスト生成ルーチンの流れ図である。 図3に示すものとは異なる別のテーブル構造を与える。 好ましい実施の形態に係る検索動作中に用いられるアップ・キューおよびダウン・キューの対を表す。
符号の説明
108 データ記憶アレイ・コントローラ
124 キャッシュ・メモリ
200 データ構造
202 メモリ空間内のテーブル
206 ノード
210 正方向ポインタ

Claims (20)

  1. メモリ空間内に常駐するデータ構造であって、正方向ポインタのアレイを有するノードのスキップ・リストを含み、前記スキップ・リスト内の各ノードは前記ノードに関連する前記アレイからの正方向ポインタの数に関係するノード・レベルを有し、また各ノード・レベルは前記ノードを前記メモリ空間内のテーブル内に記憶するためのインデックスから導かれる、データ構造。
  2. 最高のノード・レベルのノードが前記テーブルの利用可能なインデックスの最低の集合でグループ化されるように、前記ノードはノード・レベルにより前記テーブル内に配列される、請求項1記載のデータ構造。
  3. 各ノードのノード・レベルは前記関連するインデックス内の先行ゼロの数に関係して決定される、請求項1記載のデータ構造。
  4. 前記スキップ・リストのノードの利用可能な総数は多数のビットのインデックスで表すことができる最大の2の累乗の半分より小さくなるように選択する、請求項1記載のデータ構造。
  5. 比較的低いノード・レベルのノードはmビットのフォーマットで構成し、比較的高いノード・レベルのノードはnビットのフォーマットで構成し、mはnより小さい、請求項1記載のデータ構造。
  6. 前記テーブルの利用可能なインデックスは順次に偶数および奇数のインデックスを含み、前記ノードは前記偶数インデックスまたは奇数インデックスの選択された1つにだけ記憶する、請求項1記載のデータ構造。
  7. カウントおよびインデックスの対のアレイから生成されるテーブルからのノードのフリー・リストを更に含む、請求項6記載のデータ構造。
  8. 前記テーブルは第1の1次テーブルとして特徴づけられ、また前記データ構造は前記第1の1次テーブル内の比較的高いノード・レベルのノードの分布が減少したときに追加のノードを記憶するための第2の1次テーブルを更に備える、請求項1記載のデータ構造。
  9. 前記スキップ・リストのノードは第1のタイプの情報を含むものとして特徴づけられ、また前記データ構造は前記第1のタイプの情報に関連する第2のタイプの情報を与えるための2次テーブルを更に含む、請求項1記載のデータ構造。
  10. ノードの検索動作を容易にするためのそれぞれのアップ・キューおよびダウン・キューを更に含む、請求項1記載のデータ構造。
  11. 正方向ポインタのアレイを有するノードのスキップ・リストを生成するステップであって、前記スキップ・リスト内の各ノードは前記ノードに関連する前記アレイからの多数の正方向ポインタに関係するノード・レベルを含む、前記スキップ・リストを生成するステップと、最高のノード・レベルのノードがテーブルの利用可能なインデックスの最低の集合でグループ化されるように、メモリ空間内のテーブル内のノードにノード・レベルによりインデクシングするステップと、を含む方法。
  12. 前記インデクシングするステップは、前記テーブル内の前記ノードのアドレスに関連するインデックス値内の先行ゼロの数に関係して各ノードのノード・レベルを導くことを含む、請求項11記載の方法。
  13. 前記インデクシングするステップのインデックス値は2の累乗である、請求項12記載の方法。
  14. 前記生成するステップの前記スキップ・リストのノードの総数は、前記インデクシングするステップのテーブルをアドレス指定するのに用いられるインデックス・フィールドのビット数により表すことができる最大の2の累乗の半分より小さくなるように選択する、請求項11記載の方法。
  15. 前記生成するステップは、比較的低いノード・レベルのノードにmビットのフォーマットを与え、比較的高いノード・レベルのノードにnビットのフォーマットを与え、mはnより小さい、請求項11記載の方法。
  16. 前記テーブルの利用可能なインデックスは順次に偶数および奇数のインデックスを含み、また前記インデクシングするステップ中は、前記ノードは前記偶数インデックスまたは奇数インデックスの選択された1つにだけ記憶する、請求項11記載の方法。
  17. 前記インデクシングするステップはカウントおよびインデックスの対のアレイからノードのフリー・リストを生成することを更に含む、請求項16記載の方法。
  18. メモリ空間と、前記メモリ空間内のデータを効率的に配列し検索するための第1の手段とを含む装置。
  19. 前記第1の手段は正方向ポインタのアレイを有するノードのスキップ・リストを含み、前記スキップ・リスト内の各ノードは前記ノードに関連するアレイからの正方向ポインタの数に関係するノード・レベルを有し、また各ノード・レベルは前記ノードを前記メモリ空間内のテーブル内に記憶するためのインデックスから導かれる、請求項18記載の装置。
  20. 前記メモリ空間はデータ記憶アレイ・コントローラのキャッシュ・メモリを含む、請求項19記載の装置。
JP2006173240A 2005-06-24 2006-06-23 アドレス関連テーブル構造を持つスキップ・リスト Expired - Fee Related JP4921865B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/166,901 US7831624B2 (en) 2005-06-24 2005-06-24 Skip list with address related table structure
US11/166,901 2005-06-24

Publications (2)

Publication Number Publication Date
JP2007004801A true JP2007004801A (ja) 2007-01-11
JP4921865B2 JP4921865B2 (ja) 2012-04-25

Family

ID=37568840

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006173240A Expired - Fee Related JP4921865B2 (ja) 2005-06-24 2006-06-23 アドレス関連テーブル構造を持つスキップ・リスト

Country Status (2)

Country Link
US (1) US7831624B2 (ja)
JP (1) JP4921865B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101727398B (zh) * 2008-10-31 2012-07-11 西安奇维测控科技有限公司 经信息序列化实现闪存控制器管理数据存储与还原的方法

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7620646B1 (en) * 2006-01-03 2009-11-17 Emc Corporation Real-time construction of a selection representation for items in tree structures
US7574445B2 (en) * 2006-01-03 2009-08-11 Emc Corporation Generating a selection representation for items in tree structures
US7605815B1 (en) 2006-01-03 2009-10-20 Emc Corporation Selection representation methods applied to logical groupings
US7526495B2 (en) * 2006-01-03 2009-04-28 Emc Corporation Real-time construction of a selection representation for items in tree structures
JP2008003976A (ja) * 2006-06-26 2008-01-10 Sony Corp メモリアクセス制御装置および方法、並びに、通信装置
US7664766B2 (en) * 2006-09-12 2010-02-16 International Business Machines Corporation System, method and computer program product for managing data
US8086820B2 (en) * 2007-06-29 2011-12-27 Seagate Technology Llc Data structure for highly efficient data queries
US9329800B2 (en) 2007-06-29 2016-05-03 Seagate Technology Llc Preferred zone scheduling
US8959309B2 (en) * 2009-06-18 2015-02-17 Canon Kabushiki Kaisha Skip list generation
AU2009202442A1 (en) * 2009-06-18 2011-01-13 Canon Kabushiki Kaisha Skip list generation
US9703829B2 (en) * 2011-12-26 2017-07-11 Hitachi, Ltd. Database system and database management method
US20170017414A1 (en) 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Implementing Hierarchical Distributed-Linked Lists For Network Devices
US20170017420A1 (en) 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Enabling High Read Rates To Data Element Lists
US20170017567A1 (en) 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Implementing Distributed-Linked Lists For Network Devices
US20170017419A1 (en) 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Enabling High Read Rates To Data Element Lists
CN106649790A (zh) * 2016-12-28 2017-05-10 华中科技大学 一种多层链接分离的skiplist构造方法及系统
EP3644196B1 (en) * 2018-10-26 2022-05-11 Tata Consultancy Services Limited Systems and methods for storing data in an integrated array and linked list based structure
CN111694989B (zh) * 2020-06-09 2023-03-10 中国民用航空飞行学院 Ae300航空发动机数据日志文件解析方法及设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000112814A (ja) * 1998-10-06 2000-04-21 Canon Inc メモリアロケ―ション方法及びメモリアロケ―ション装置
WO2002052442A1 (en) * 2000-12-22 2002-07-04 Samsung Electronics Co., Ltd Apparatus and method for performing high-speed ip route lookup and managing routing/forwarding tables

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5761501A (en) * 1995-10-02 1998-06-02 Digital Equipment Corporation Stacked skip list data structures
US5991520A (en) 1996-02-02 1999-11-23 Sony Corporation Application programming interface for managing and automating data transfer operations between applications over a bus structure
US6117185A (en) 1997-09-24 2000-09-12 International Business Machines Corporation Skip list data storage during compilation
US6088701A (en) 1997-11-14 2000-07-11 3Dfx Interactive, Incorporated Command data transport to a graphics processing device from a CPU performing write reordering operations
US6457021B1 (en) * 1998-08-18 2002-09-24 Microsoft Corporation In-memory database system
US6321304B1 (en) 1999-01-22 2001-11-20 Apple Computer, Inc. System and method for deleting read-only head entries in multi-processor computer systems supporting cache coherence with mixed protocols
US6246682B1 (en) * 1999-03-05 2001-06-12 Transwitch Corp. Method and apparatus for managing multiple ATM cell queues
US6216199B1 (en) 1999-08-04 2001-04-10 Lsi Logic Corporation Hardware mechanism for managing cache structures in a data storage system
US6671694B2 (en) 2001-06-04 2003-12-30 Hewlett-Packard Development Company, L.P. System for and method of cache-efficient digital tree with rich pointers
US6654760B2 (en) 2001-06-04 2003-11-25 Hewlett-Packard Development Company, L.P. System and method of providing a cache-efficient, hybrid, compressed digital tree with wide dynamic ranges and simple interface requiring no configuration or tuning
US7257711B2 (en) * 2001-11-08 2007-08-14 The Johns Hopkins University Efficient authenticated dictionaries with skip lists and commutative hashing
US7613796B2 (en) * 2002-09-11 2009-11-03 Microsoft Corporation System and method for creating improved overlay network with an efficient distributed data structure

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000112814A (ja) * 1998-10-06 2000-04-21 Canon Inc メモリアロケ―ション方法及びメモリアロケ―ション装置
WO2002052442A1 (en) * 2000-12-22 2002-07-04 Samsung Electronics Co., Ltd Apparatus and method for performing high-speed ip route lookup and managing routing/forwarding tables
JP2004517519A (ja) * 2000-12-22 2004-06-10 サムスン エレクトロニクス カンパニー リミテッド 高速インターネットプロトコルルートルックアップ遂行及びルーティング/フォワーディングテーブル管理のための装置及び方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101727398B (zh) * 2008-10-31 2012-07-11 西安奇维测控科技有限公司 经信息序列化实现闪存控制器管理数据存储与还原的方法

Also Published As

Publication number Publication date
US7831624B2 (en) 2010-11-09
US20060294118A1 (en) 2006-12-28
JP4921865B2 (ja) 2012-04-25

Similar Documents

Publication Publication Date Title
JP4921865B2 (ja) アドレス関連テーブル構造を持つスキップ・リスト
JP5524144B2 (ja) key−valueストア方式を有するメモリシステム
US8868926B2 (en) Cryptographic hash database
JP6356675B2 (ja) 集約/グループ化動作:ハッシュテーブル法のハードウェア実装
KR100529995B1 (ko) 데이터베이스에 엘리먼트를 저장하는 방법
US7962700B2 (en) Systems and methods for reducing latency for accessing compressed memory using stratified compressed memory architectures and organization
US6415375B2 (en) Information storage and retrieval system
US20080059728A1 (en) Systems and methods for masking latency of memory reorganization work in a compressed memory system
CN108984420A (zh) 管理非易失性存储器(nvm)中的多个名称空间
KR20040036681A (ko) 데이터 베이스
JPH08185275A (ja) ディスクアレイのための領域割り当て方法およびディスクアレイアクセス方法
JPS62113234A (ja) レコ−ドセツト分類方法
JP6258436B2 (ja) メモリシステムのローカルコントローラ
JP5646775B2 (ja) key−valueストア方式を有するメモリシステム
Li et al. Multi-copy cuckoo hashing
JP5833212B2 (ja) key−valueストア方式を有するメモリシステム
US20200019539A1 (en) Efficient and light-weight indexing for massive blob/objects
CN111338569A (zh) 一种基于直接映射的对象存储后端优化方法
JP6034467B2 (ja) システム
JP4349803B2 (ja) データベースのデータの編成
CN109871355B (zh) 一种快照元数据存储方法、装置及设备、介质
CN116737664B (zh) 一种面向对象的嵌入式数据库高效索引组织方法
WO2013035287A1 (ja) データベース管理装置、データベース管理方法、及びプログラム
JP2004021338A (ja) ディスク記憶領域割当方法およびディスク記憶領域割当装置

Legal Events

Date Code Title Description
RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20070917

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090623

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20100526

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110825

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110906

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111124

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120203

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150210

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees