JP7345482B2 - 動的キーレンジを有するkvストアにおけるシャードの維持 - Google Patents

動的キーレンジを有するkvストアにおけるシャードの維持 Download PDF

Info

Publication number
JP7345482B2
JP7345482B2 JP2020541341A JP2020541341A JP7345482B2 JP 7345482 B2 JP7345482 B2 JP 7345482B2 JP 2020541341 A JP2020541341 A JP 2020541341A JP 2020541341 A JP2020541341 A JP 2020541341A JP 7345482 B2 JP7345482 B2 JP 7345482B2
Authority
JP
Japan
Prior art keywords
store
level
low
key
sub
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020541341A
Other languages
English (en)
Other versions
JP2020536341A (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 JP2020536341A publication Critical patent/JP2020536341A/ja
Application granted granted Critical
Publication of JP7345482B2 publication Critical patent/JP7345482B2/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/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • 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/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/278Data partitioning, e.g. horizontal or vertical partitioning
    • 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/221Column-oriented storage; Management thereof
    • 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/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing

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)

Description

この発明は、キーバリューストアに関し、特に複数のトランザクションを単一のキーバリューストアに維持することに関する。
キーバリューストア(KV)は、単一のデータベースとして見ることができる。表およびカラムにデータを配列する構造化紹介言語(SQL)データベースとは異なり、KVストアは、単なるキーバリューペアの集合である。キーは、任意の、例えば、整数またはストリングであり得る。唯一の要件は、KVストアが任意の2つのキーをどのように比較するかを知っていることである。バリューは、また、任意であり得、KVストアは、それをバイナリ・ラージ・オブジェクト(BLOB)として取り扱う。唯一の要件は、KVストアがバリューのサイズを知っているので、それをディスクに記憶することができることである。
典型的に、KVストアは、トランザクションによって動作する。新しいトランザクションは、新しいアプリケーションが、KVストアに対して何らかの変更、例えば、新しいキーを挿入したいとき開かれる。後で、このトランザクションのために更なる変更を行うことができる。ある時点で、KVストアは、実行中のトランザクションが十分な変更を累積したことを判断する。次に、KVストアは、実行中のトランザクションをコミットし、そのためにすべての変更がディスク上に保持(persist)される。これで、新しいトランザクションを開くことができる。各トランザクションは、或る種のトランザクションID、例えば、単調に増加する整数を有する。
トランザクションに参加しているアプリケーションスレッドが依然としてあるとき、トランザクションは、コミットすることができない。すべてのアプリケーションがトランザクションからデタッチされると、コミットを開始することができる。典型的に、アプリケーションスレッドは、非常に短い時間トランザクションにアタッチされ、KVストアに対するメモリ内変更のみを実行する。
KVストアは、Bツリー(例えば、B+ツリー)としてインプリメントすることができる。Bツリーは、いくつかのレベルで階層化されたツリーブロックで構成されている。ツリーブロックは、リーフノードとインデックスノードを含む。リーフノードは、KVストアが管理するキーとバリューを含む。インデックスノードは、他のインデックスノードまたはリーフノードであり得る、より低いレベルのツリーブロックへのポインタを含む。
Bツリーに記憶されたすべてのキーバリューペアは、典型的に昇べきの順に記憶される。これは、ツリーの「左」部分のインデックスノードとリーフノードは、ツリーの「右」部分のインデックスノードとリーフノードよりも低いキーを保持することを意味する。リーフノード内では、キーバリューペアは、またキーによりソートされる。インデックスノードは、キーでソートされた子ポインタも有する。
Bツリー内のキーバリューペアのサーチは、ルートノードからスタートし、関連するインデックスノードをたどって、最終的に、必要なキーとバリューが配置されている可能性がある、関連するリーフノードに到達する。各ツリーブロックは、ディスク上に配置されているので、より低いレベルへ「ジャンプ」する度に、関連するツリーブロックをディスクから読む必要がある。
Bツリーは、典型的に、レベルが非常に少ないので、非常に広い、すなわち、各インデックスノードは、多数の子ブロックを有する。その結果、キーの検索は、非常に少数のツリーブロックを横断するため、キーを見つけるために必要なディスク読み取りの量は、非常に少なくなる。ツリーブロックのサイズは、典型的に数キロバイト(KBs)、例えば、4KB、16KB、32KBである。
この開示の1つまたは複数の例では、KVストアは、いくつかのロウレベルストア(ここでは、「サブKVストア」)、およびトップレベルストア(以下、「サブKVストアのルート」)として構築される。各サブKVストアは、特定のレンジのキーを担当する。
各サブKVストアは、独自の実行中のトランザクションを有する。サブKVストアのルートも、独自の実行中のトランザクションを有する。サブKVストアのルートは、サブKVストアのスーパーブロックを追跡する。サブKVストアのスーパーブロックは、ディスク上のサブKVストアのコンテンツを配置し、構文解析し、正当化するための情報、例えば、ディスク上のサブKVストアのコンテンツの座標、コンテンツの長さ、コンテンツのチェックサム、およびサブKVストアのトランザクションIDを保持する。
KVストアにおいて、変更は、サブKVストアに対して累積される。サブKVストアは、十分な変更が蓄積されたときに変更をコミットするかどうかを個別に決定するため、KVストア全体で変更がパーシストされることによる書き込みの増幅やその他のオーバーヘッドを回避することができる。
アプリケーションの観点から、唯1つのKVストアがある。アプリケーションは、サブKVストアによりハンドリングされる、より小さなレンジへのキーレンジの内的分離に気が付かない。この開示の1つまたは複数の例において、サブKVストアは、キーバリューペアがKVストアに挿入されるか、または除去されると、動的に作成されおよび削除される。キーバリューの挿入によって、上限しきい値を超えるキー数が、サブKVストアにより維持されると、サブKVストアは、キーのほぼ半分を有する2つのサブKVストアに分割される。キーバリューの削除により、隣接するサブKVストアにより維持されるキーの合計数が、下限しきい値を下回るとき、隣接サブKVストアは、1つのサブKVストアにマージされる。いくつかの例において、隣接サブKVストアは、1つのサブKVストアからキーバリューペアを取り、それを他のサブKVストアにマージし、空のサブKVストアを削除することにより、マージされる。
この開示のいくつかの例におけるストレージシステムである。 この開示の例において、KVストアをアプリケーション118に提供するために、図1のキーバリュー(KV)データベースマネージメントシステム(DBMS)に関する方法のフローチャートである。 この開示の例におけるサブKVストアに関するダイナミックキーレンジをインプリメントする図1のKV DBMSを示す。 この開示の例におけるサブKVストアに関するダイナミックキーレンジをインプリメントする図1のKV DBMSを示す。 この開示の例におけるサブKVストアに関するダイナミックキーレンジをインプリメントする図1のKV DBMSを示す。 この開示の例におけるサブKVストアに関するダイナミックキーレンジをインプリメントする図1のKV DBMSを示す。 この開示の例において、サブKVストアを動的に作成し、削除するための図1のKV DBMSの方法のフローチャートである。 この開示の例において、図7の方法を示す。 この開示の例において、図7の方法を示す。 この開示の例において、図7の方法を示す。 この開示の例において、図7の方法を示す。 この開示の例において、図7の方法を示す。 この開示の例において、図7の方法を示す。 この開示の他の例における、図7の方法を示す。 この開示の他の例における、図7の方法を示す。 この開示の他の例における、図7の方法を示す
異なる図面における同じ参照符号の使用は、類似または同一のエレメントを示す。Xランダムキーが、KVストア内の新しいバリューで更新されると仮定すると、リーフノードAは、キーバリューペアの多くが更新されるが、リーフノードBは、キーバリューペアの1つのみが更新されるということが起こり得る。さらに、KVストアは、実行中のトランザクションをコミットするように判断すると仮定する。このトランザクションコミットの一部として、すべての変更されたツリーブロック(リーフノードとインデックスノードの両方)は、ディスクに書き込む必要がある。したがって、リーフノードAとリーフノードBの両方は、コンテンツが変更されたので、ディスクに書き込まれる。しかしながら、リーフノードBをディスクに書き込むことは、非効率である。なぜならば、たった1つのキーバリューが変更されてもリーフ全体をディスクに書き込まなければならないからである。リーフノードAの書き込みは効率的である。なぜならば、変更されないキーバリューよりも変更されたキーバリューの方が多いからである。
アプリケーションにより変更される数十億のキーバリューペアを保持する大きなKVストアを考える。トランザクションコミットは、多数の変更されたリーフノードをディスクへ書き込む必要があるが、各変更されたリーフノードは、多くは、変更されていないということが起こり得る。残念なことに、トランザクションコミットの一部として大量のストリームのディスクへの書き込みが起こり得るという結果になる。KVストアの一部、すなわち、「十分な」コミットを累積した部分のみをコミットすることができることが望ましい。上述した方法では、これは、可能ではない。何故ならば、トランザクションは、特定のツリーブロックにおける変更の量に関係なく、すべての変更されたツリーブロックを、ディスクにパーシスト(persist)しなければならないからである。
この開示の1つまたは複数において、KVストアは、いくつかのロウレベルKVストア(以下、「サブKVストア」)およびトップレベルKVストア(以下、「サブKVストアのルート」)として構造化される。各サブKVストアは、特定のレンジのキーおよびその独自の実行中のトランザクションを担当する。例えば、左端のKVストアは、0乃至9999を担当し、次のサブKVストアは、10000乃至19999を担当する等々である。キーレンジの、より小さなレンジへの、そのような分離は、「シャーディング(sharding)」と呼ばれ、各サブレンジと対応するサブKVストアは、「シャード(shard)」と呼ばれる。
サブKVストアのルートは、独自の実行中のトランザクションを有する。サブKVストアのルートは、各サブKVストアについて以下の情報(スーパーブロック)を追跡する。
1)サブKVストアの最小キー。これはサブKVストアが担当するキーのレンジを定義することである。
2)このサブKVストアに関して最後にコミットしたトランザクション。
3)ディスク上のサブKVストアのルートブロックのロケーション。
スーパーブロックは、サブKVストアのルートブロックのチェックサムのような、特定のインプリメンテーションにより必要とされる追加の情報を含むことができる。図1は、この開示のいくつかの例におけるデータベースシステム102である。システム100は、プロセッサ102、メイン(非パーシステント)メモリ104、および二次(パーシステント)メモリ106を含む。
メインメモリ104(例えば、ランダムアクセスメモリ)は、二次メモリ106に記憶されたKVストア110を管理するKVデータベースマネージメントシステム(DBMS)108のためのプログラム命令とデータを記憶する。KVストア110は、サブKVストア112のルートと、サブKVストア114-0、114-1・・・104-i(集合的に、「サブKVストア114」または一般的に個別「サブKVストア114」)のような多数のサブKVストアを包含する。サブKVストア112とサブKVストア114のルートは、Bツリー、レッド・ブラックツリー、AVLツリー、またはスキップリスト構造であり得る。さらに、サブKVストア114は、リンクリストまたはシンプルソートアレイ(simple sorted array)であり得る。KV DBMS108は、サブKVストア112およびサブKVストア114のルートに関して実行中のトランザクションを追跡する。「KV DBMS」と「KVストア」は、互換的に使用され、しばしば一緒にして1つのエンティティとしてみなされる。オプションとして、メインメモリ104は、KVストア110をアクセスするアプリケーション118のためのプログラム命令とデータを記憶する。あるいは、アプリケーション118は、KVストア110にアクセスするための、ネットワークによってストレージシステム100に接続された別のシステムに配置することができる。
二次メモリ106(例えば、ディスク)は、サブKVストア112およびサブKVストア114のルートを形成するデータを含む、KVストア110を形成するデータを記憶する。あるいは、サブKVストア112とサブKVストア114のルートを形成するデータは、異なる二次メモリに配置することができる。プロセッサ102、メインメモリ104、および二次メモリ106は、シングルサーバまたはプロセッサ103であり得、メインメモリ104は、ストレージエリアネットワーク(SAN)、またはネットワークアッタチストレージ(NAS)のようなストレージシステムである、二次メモリ106にネットワークを介してアクセスするサーバであり得る。
図2は、この開示の例におけるアプリケーション118(図1)にKVストア110(図1)を提供するための、KV DBMS108(図1)のための方法のフローチャートである。ここに記載した方法200および他の方法は、1つまたは複数のブロックにより説明される、1つまたは複数の動作、機能、またはアクションを含むことができる。ブロックは、シーケンシャルな順番に説明されているけれども、これらのブロックは、また、並列に実行することができ、および/またはここに記載した順番とは異なる順番で実行することができる。また、種々のブロックは、より少ない数のブロックに結合することができ、さらなるブロックに分割したり、および/または所望のインプリメンテーションに基づいて削除したりすることができる。方法200は、ブロック202で開始することができる。
ブロック202において、KV DBMS108は、サブストア112(図1)のルート、およびKVストア110を形成する、1つ又は複数のサブKVストア114(図1)を提供する。KV DBMS108は、異なる実行中のトランザクション116(図1)を各ストアに割り当てる。各サブKVストア114は、特定のキーレンジを担当する。各サブキーストア114は、多数のキーバリューペアを格納する。例えば、各サブKVストア114は、各々がキーバリューペアを格納する、1つまたは複数のリーフノードを有するB+ツリーであり得る。キーバリューペア内のバリューは、実際のデータまたは実際のデータに対するポインタであり得る。
サブKVストア112のルートは、サブKVストア114のスーパーブロックを追跡する。例えば、サブKVストア112のルートは、ゼロまたは複数のインデックスノードおよび1つまたは複数のリーフノードであって各リーフノードは、異なるサブKVストアについての情報(スーパーブロック)を記憶するリーフノードを有するB+ツリーであり得る。この情報は、サブKVストア114の最小キー、サブKVストアのための最後にコミットされたトランザクション(ジャーナルを用いたリカバリに使用される)、およびサブKVスコアに対するポインタ(例えば、二次メモリ106内のサブKVストアのルートノード/ブロックに対するロケーション)を含む。ブロック202の次にブロック206が続く。
ブロック204において、KV DBMS108は、任意のサブKVストア114が十分な変更(例えば、所定数の書き込み)を累積したかどうかを判断する。そうであるなら、ブロック204の次にブロック206に進むことができる。そうでなければ、ブロック204の次に、ブロック210に進むことができる。
ブロック206において、KV DBMS108は、十分な変更を累積した特定のサブKVストア114の実行中のトランザクションをコミットする。KV DBMS108は、実行中のトランザクションの期間に、このサブKVストア114になされた変更を、二次メモリにパーシストして、サブKVストアの最後にコミットされたトランザクションを更新することにより、実行中のトランザクションをコミットする。上述したように、サブKVストアの最後にコミットしたトランザクションは、二次メモリ106上のサブKVストア112のルート(例えば、サブKVストア112のルートのリーフノード)により維持される、対応するスーパーブロックに記憶される。ブロック206の次に、ブロック208に進む。
ブロック208において、KV DBMS108は、この特定のサブKVストア114に関する新しいトランザクションを開く。ブロック206と208は、十分な変更を累積した各サブKVストアに関して反復することができる。ブロック208の次にブロック210に進むことができる。ブロック210において、KV DBMS108は、サブKVストア112のルートが十分な変更を累積したかどうかを判断する。そうであるなら、ブロック210の次に、ブロック212に進む。そうでなければ、ブロック210は、ブロック204にループバックする。
ブロック212において、KV DBMS108は、サブKVストア112のルートの実行中のトランザクションをコミットする。KV DBMS108は、二次メモリに対する実行中のトランザクションの期間にサブKVストア112のルートに対してなされた変更を永続化し、サブKVストアのルートのスーパーブロック内の最後にコミットされたトランザクションを、サブKVストアのルートの実行中のトランザクションで更新することにより実行中のトランザクションをコミットする。サブKVストア112のルートのスーパーブロックは、最後にコミットされたトランザクションを含み、典型的に、二次メモリ106上の固定されたロケーションに記憶された、サブKVストアのルートの構文解析と検証を可能にする情報を保持する。ブロック212の次に、ブロック214に進む。
ブロック214において、KV DBMS108は、サブKVストア112のルートに関する新しいトランザクションを開く。ブロック214は、ブロック204に戻り、十分な変更を累積した任意のストアの実行中のトランザクションをコミットし続ける。以下の例は方法200を示す。サブKVストア114-0(図1)は、[0、9999]のキーレンジを担当し、実行中のトランザクションT0を有し、サブKVストア114-1(図1)は、レンジ[10000、19999]のキーレンジを担当し、実行中のトランザクションT1を有する。アプリケーション118(図1)は、レンジ[0、9999]内の1000キーと、レンジ[10000、19999]内の10キーを変更する。この時点において、KV DBMS108(図1)は、サブKVストア114-0が、実行中のトランザクションT0に関して十分な変更を累積したと決定する。KV DBMS108は、実行中のトランザクションT0をコミットし、サブKVストア114-0内の変更されたブロックを二次メモリ106(図1)に書き込む。KV DBMS108は、サブKVストア112(図1)のルートを、最後にコミットしたトランザクションのようなサブKVストア114-0についての新しい情報で更新する。しかしながら、KV DBMS108は、サブKVストア114-1の実行中のトランザクションT1を長時間開いたままにすることができる。このようにして、本開示の例は、さもなければ少量の変更を運ぶサブKVストア114-1書き込みノードから生じる可能性がある、潜在的な書き込み増幅(write amplification)を回避する。
サブKVストア114は、静的キー範囲を有することができ、各サブKVストア114には、全キー範囲の一部が割り当てられる。典型的にキーレンジは非常に大きい。たとえば、キーが48ビットの符号無し整数の場合、キーの範囲は[0、281474976710655]になる。キー範囲全体が統計的にシャーディング(sharding)され、各シャード(shard)が10000キーに制限されている場合、KVストアは、最終的に280億を超えるシャードになる。一方KVストアが常に管理すると予想される、キーと値のペアの最大数は、通常、キー範囲全体のキーの数よりもはるかに少なくなる。例えば、KVストアは、最大160億キーを管理することが期待され得る。このような状況で、全キー範囲に対して28億の静的シャードを作成することは、ほとんどのサブKVストアが空になるため、実用的ではない。
この開示の例において、KV DBMS108は、キーバリューペアが挿入され、除去されるので、サブKVストアを動的に作成し削除する。KV DBMS108は、ある制限内にある、各サブKVストアのキーの量を維持する。KV DBMS108は、サブKVストアを作成および削除して、これらの制限を遵守し、シャードの総数を制御する。
図3乃至6は、この開示の例において、サブKVストア114(図1)に関する動的キーレンジをインプリメントするKV DBMS108(図1)を示す。図3では、KVストア110が空であるとき、KV DBMS108は、 キーの範囲全体[0、MAX_KEY]を担当し、それゆえ、0の最小のキーを有する、空のサブKVストア114-0(例えば、リーフノード302を指すリーフ)につながる情報(スーパーブロック)を有する、サブKVストア112のルートを作成する。
図4において、サブKVストア114-0は、上限しきい値に到達するので、KV DBMS108は、サブKVストア114-0を2つのサブKVストア(既存のサブKVストア114-0と新しいサブKVストア114-1)に分割し、各サブKVストアは、サブKVストアにもともとあったキーの約半分のキーを有する。したがって、サブKVストア114-0は、ある範囲のキー[0、X]を担当し、最小キーは0であり、サブKVストア114-1は、ある範囲のキー[X+1、MAX_KEY]を担当し、X+11の最小キーを有する。サブKVストア112のルートがB+ツリーとしてインプリメントされると、1つのリーフノード302は、サブKVストア114-0と114-1の両方に導く情報(スーパブロック)を有することができるか、あるいは、各々が、2つのサブKVストアの1つに導く情報(スーパブロック)を有することができる。言い換えれば、B+ツリー内のリーフは、いくつかのスーパーブロックについての情報を保持することができる。
図5において、より多くのキーバリューの挿入は、さらなるサブKVストア114を分割させる。たとえば、サブKVストア114-1は、2つのサブKVストアに分割され、各々は、サブKVストア114-1にもともとあったキーの約半分のキーを有する。サブKVストア114-1は、ある範囲のキー[X+1乃至Y]を担当することになるが、X+1の最小キーを継続して有する。新しいサブKVストアが作成されると、KV DBMS108は、サブKVストア112のルート内のスーパーブロックを更新する。
キーバリューを削除することにより、サブKVストア114は、低減された数のキーを有することができる。図6において、サブKVストアと、その隣接するサブKVストア(右または左)のキーの合計数が下限しきい値未満(例えば、サブKVストア114-0と114-1)であり、KV DBMS108は、一方のサブKVストア(例えば、右サブKVストア114-1)のキーバリューペアを取ることにより、2つのサブKVストアをマージし、他方のサブKVストア(例えば、左のサブKVストア114-1)へ、それらをマージすると仮定する。サブKVストア114-0は、ある範囲のキー[0乃至Y]を担当するが、最小キーは引き続き0である。コンスタントな分割とマージにより、KV DBMS108は、サブKVストア114の数が、所定のキー範囲に対して定義された値を超えないようにする。KVストア110のキーと値のペアの、予想最大数に基づいて、シャードの最大数は、ユーザーが手動で、またはKV DBMS108が自動的にターゲットにすることができる。シャードの数がシャードのターゲット最大数に近づくと、KV DBMS108は、ターゲット数をオーバシュートしないようにシャードを、より積極的にマージすることができる。例えば、KV DBMS108は、より低いしきい値を上げて、より早くシャードをマージすることができる。
図7は、この開示の例において、サブKVストア114(図1)を作成し、削除するためのKV DBMS108(図1)に関する方法700のフローチャートである。方法700は、ブロック702で開始する。ブロック702において、KV DBMS108は、サブKVストア112(図1)のルートとサブKVストア(例えば、図1のサブKVストア114-0)を提供する。サブKVストア112のルートは、サブKVストア114-0に導く情報(例えば、リーフノードに記憶されたスーパーブロック)を有する。情報(スーパーブロック)は、サブKVストア114-0の最小キー、サブKVストアに関する最後にコミットされたトランザクション、およびサブKVストアへのポインタ(例えば、二次メモリ106内のサブKVストアのルートノード/ブロック)を含む。サブKVストア114-0は、初めに全レンジのキー[0、MAX_KEY]を担当し、0の最小キーを有する。ブロック702の次にブロック704に進む。
ブロック704において、KV DBMS108は、キーバリューペアをKVストア110(図1)に挿入するための要求を受信する。ブロック704の次に、ブロック706に進む。ブロック706において、サブKVストア(複数の場合もある)114についての情報に基づいて、KV DBMS108は、キーバリューペアを、キーバリューペア内のキーを含む、ある範囲のキーに割り当てられたサブKVストア114に挿入する。例えば、KV DBMS108は、サブKVストア112のルート内の各サブKVストア114に関する情報(例えば、スーパーブロック)を維持し、各スーパーブロックは、サブKVストアの最小数、およびサブKVストアへのポインタを記憶する。サブKVストア112のルートが、B+ツリーとしてインプリメントされると、KV DBMS108は、サブKVストアのルートのリーフノードにスーパーブロックを記憶し、サブKVストアのルートにツリーブロックを作成し、各サブKVストア114のスーパーブロックを追跡する。サブKVストア112のルートをトラバースすることにより、KV DBMS108は、適切なサブKVストア114を見つけて、キーバリューペアを挿入する。ブロック706の次に、ブロック708に進む。
ブロック708において、KV DBMS108は、キーバリュー挿入を受信したサブKVストア114内のキーの数が、上限しきい値より大きいかどうかを判断する。そうであるなら、ブロック708の次にブロック710に進む。そうでなければ、ブロック708の次にブロック716に進む。ブロック710においてKV DBMS108は、新しいサブKVストア114を作成する。ブロック710の次に、ブロック712に進む。オプションのブロック712において、KV DBMS108は、約半分のキーバリューペアを、新しいサブKVストア114に移動することにより、上限しきい値を超えるサブKVストア114を分割する。オプションのブロック712は、キーが単調に増加するとき、および新しいキーバリューペアが、新しく作られたサブKVストア114に挿入されるときは、使用されない。オプションのブロック712の次にブロック714が続く。
ブロック714において、KV DBMS108は、サブKVストア112のルートに、新しいサブKVストア114についての情報を記憶する。例えば、サブKVストア112のルートが、B+ツリーとしてインプリメントされると、KV DBMS108は、サブKVストアのルートにリーフノードを作り、新しいサブKVストア114の最小キー、新しいサブKVストアに関する最後にコミットされたトランザクション、および新しいサブKVストアへのポインタを記憶する。サブKVストア114が分割されると、新しいサブKVストア114のための最小キーは、新しいサブKVストアの第1のキーとなる。キーを単調に増加すると、新しいサブKVストア114に関する最小キーは、上限しきい値を超えるサブKVストア114内の最後のキーに続くキーとなる。KV DBMS108は、またサブKVストア112のルート内の上位ツリーノードも更新する。例えば、新しいサブKVストアの最小キーをペアレントインデックスノードにプロモート(promoting)し、および必要に応じてペアレントノードを分割する。ブロック714の次にブロック716に進む。
ブロック716において、KV DBMS108は、2つの隣接するサブKVストア114のキーの合計数が、下限しきい値未満であるかどうか判断する。そうであるなら、ブロック716の次にブロック718に進む。さもなければ、ブロック716は、ブロック704に戻り、任意のさらなるキーバリュー挿入を処理する。ブロック718において、KV DBMS108は、2つの隣接するサブKVストア114を一方のサブKVストア114にマージし、他方のサブKVストア114を削除する。例えば、KV DBMS108は、右側のサブKVストア114からのキーバリューペアを、左のサブKVストア114に移動し、右側のサブKVストア114を削除する。サブKVストア112のルートが、B+ツリーとしてインプリメントされると、KV DBMS108も、サブKVストアのルート内の削除されたサブKVストア114に関するリーフノードを削除し、サブKVストアのルート内の上位ツリーノードを更新する。例えば、削除されたサブKVストアの最小キーをペアレントインデックスノードから削除し、ペアレントノードを、必要に応じて他のペアレントノードとマージする。ブロック718は、ブロック704に戻り、任意のさらなるキーバリュー挿入を処理する。
図8乃至13は、この開示の一例における方法700を示す。各サブKVストアが10個のキーに限定され、各キーは、32ビットの符号なしの整数であると仮定する。図8において、KV DBMS108は、サブKVストア112のルートを有する、空のKVストア110を提供し、サブKVストア114-0は、キーレンジ全体をカバーする。サブKVストア112のルートは、サブKVストア114-0の最小キーと、サブKVストア114-0へのポインタ804を記憶するリーフノード802(ルートノードでもある)を有する。簡単のために、サブKVストア114のツリー構造は、図示されていない。
以下の10個のキーペアバリュー(単にそれらのキーにより表される)がKVストア110に挿入されると仮定する:20779、15、220、3292、40132、42710、4000、20111、21222、および41222。図9において、KV DBMS108は、10個のキーバリューペアを、サブKVストア140-0に挿入し、それらは、サブKVストア114-0においてシーケンシャルに配列される。さらに、5個のキーバリューペア(単にそれらのキーにより表される)がKVストア110に以下の順番で挿入されると仮定する。31142、6469、25000、6754、33732。キー31142がサブKVストア114-0に挿入されると、上限しきい値より大きくなる。この結果、図10において、KV DBMS108は、新しいサブKVストア114-1を作ることにより、サブKVストア114-0を、2つのサブKVストアに分割し、サブKVストア114-0内のキーバリューペアの約半分を、新しいサブKVストア114-1に移動する。特に、KVDBMS108は、21222、31142、40132、41222、42710を、新しいサブKVストア114-1に移動する。KV DBMS108はまた、サブKVストア114-1の最小キー21222と、サブKVストア11k4-1へのポインタ1004を記憶する新しいリーフノード1002を作ることにより、サブKVストア112のルートを更新する。KVDBMS108はまた、最小キー21222、0以上で最小キー21222未満のキーに関するサブKVストア114-0へのポインタ1008、および最小キー21222以上のキーに関するサブKVストア114-1へのポインタ1010を記憶するインデックスノード(ルートノードでもある)を作ることができる。インデックスノード1006では、最小キー21222は、ポインタ1008の右に記憶され、ポインタ1010は、最小キー21222の左に記憶される。
図11において、KV DBMS108は、残りの4つのキーを挿入し続け、キー6469と6754を、サブKVストア14-0に挿入し、キー25000および33732をサブKVストア114-1に挿入する。さらに7つのキーバリューペア(単にそれらのキーにより表される)が以下の順番で、KVストア110に挿入されると仮定する。25811、26902、37458、35121、33949、30325。キー25811、26902、37458、35121は、サブKVストア114-1に挿入されると、上限しきい値(10)より大きくなる。この結果、図12において、KV DBMS108は、新しいサブKVストア114-2を作ることにより、サブKVストア114-1を2つのサブKVストアに分割し、サブKBストア114-1内のキーバリューペアの約半分を、新しいサブKVストア114-2に移動する。特に、KV DBMS108は、キー35121、37458、40132、41222、42170を、新しいサブKVストア114-2に移動する。KV DBMS108は、また、サブKVストア114-2の最小キー35121を記憶する新しいリーフノード1202と、サブKVストア114-2へのポインタを作ることにより、サブKVストア112のルートを更新する。KV DBMS108は、また、最小キー35121とポインタ1206を最小キー35121以上のキーに関するサブKVストアに加算することにより、インデックスノード1006を更新する。ポインタ1010は、今、最小キー21222以上で最小キー35121未満であるキーを指示することに留意する必要がある。インデックスノード1006では、最小キー35121は、ポインタ1010の右に記憶され、ポインタ1206は、最小キー35121の右に記憶される。
今、7個のキーバリューペア(単にそれらのキーで表される)が削除されると仮定する。30325、26902、15、4000、25811、33949、21222。これらのキーが削除されると、サブKVストア114-0と114-1内のキーの合計数は、下限しきい値未満になる(例えば、10個のキー)。図13において、KV DBMS108は、サブKVストア11401からのキー25000、31142、33732を、サブKVストア114-0に移動することによりサブKVストア114-0と114-1をマージする。KV DBMS108は、また、リーフノード1002、および最小キー21222とポインタ1010をインデックスノード1006から削除することにより、サブKVストア112のルートを更新する。インデックスノード1006において、最小キー35121は、ポインタ1008の右に記憶され、ポインタ1206は、最小キー35121の右に記憶される。
図14乃至16は、キーが単調に増加する、この開示の一例における方法700を示す。各サブKVストアは、10個のキーに限定され、各キーは、32ビットの符号なし整数であると仮定する。図14において、KV DBMS108は、サブKVストア112のルートを有するKVストア110を提供し、サブKVストア114-0は、キーレンジ全体をカバーする。簡単のために、サブKVストア112とサブKVストア114のルートのツリー構造は、図示されていない。
10個のキーペアバリュー(単にそれらのキー0乃至9による表される)が、KVストア110に挿入されると仮定する。KVDBMS108は、サブKVストア114-0においてシーケンシャルに配列された10個のキーバリューペアを、サブKVストア114-0に挿入すると仮定する。10個のさらなるキーペアバリュー(単にキー10乃至19により表される)がKVストア110に挿入されると、仮定する。図15において、KV DBMS108は、新しいサブKVストア114-1を作り、さらなる10個のキーバリューペアを、サブキーストア114-1に挿入し、それらは、サブキーストア114-1において、シーケンシャルに配列される。さらなる10個のキーペアバリュー(単に、20乃至29により表される)がKVストア110に挿入されると仮定する。図16において、KV DBMS108は、新しいサブKVストア114-1を作り、さらなる10個のキーバリューペアをサブKVストア114-2に挿入し、それらは、サブKVストア114-2においてシーケンシャルに配列される。
例え、キーバリューペアが単調に増加するキーで挿入されたとしても、キーバリューペアがKVストア110から除去される特定の順番は、ないと仮定される。それゆえ、サブKVストア114のマージンは、上述した例に記載されるように生じる。開示した実施形態の特徴の種々の他の適応および組み合わせは、この発明の範囲内である。多くの実施形態が以下の特許請求の範囲により包含される。

Claims (20)

  1. キーバリュー(KV)ストアを、アプリケーションに提供するためのKVストアデータベースマネージメントシステムのためのコンピュータによって実行される方法であって、
    以下のステップのためのプログラム命令を実行するハードウェアプロセッサを使用し、
    上層のトップレベルストアと下層の少なくとも1つのロウレベルストアを含む、パーシステントメモリに格納された2層の階層データ構造を維持するステップであって、前記トップレベルストアは、第1のロウレベルストアについての第1の情報を備え、前記第1の情報は、前記第1のロウレベルストアの最小キーと、ロケーションを含む、ステップと、
    キーバリューペアを、前記KVストアに挿入するための要求を、受信するステップと、
    前記第1の情報に基づいて、前記キーバリューペアを、前記第1のロウレベルストアに挿入するステップと、
    前記キーバリューペアを、前記第1のロウレベルストアに挿入した後で、前記第1のロウレベルストアのキー数が、上限しきい値を超えたかどうか判断するステップと、
    前記第1のロウレベルストアのキー数が、上限しきい値を超えると、
    前記少なくとも1つのロウレベルストアの第2のロウレベルストアを作るステップと、
    前記トップレベルストアに、前記第2のロウレベルストアについての第2の情報を記憶するステップであって、前記第2の情報は、前記第2のロウレベルストアの最小キーと、ロケーションを含む、ステップと、
    を備え、
    ここで、前記2層の階層データ構造を維持するステップは、
    前記トップレベルストアの実行中のトランザクションを累積するステップと、
    前記トップレベルストアの実行中のトランザクションをコミットするステップと、
    前記少なくとも1つのロウレベルストアのそれぞれについて、それぞれ実行中のトランザクションを累積するステップと、
    前記少なくとも1つのロウレベルストアのそれぞれについて前記それぞれ実行中のトランザクションをコミットするステップであって、前記ロウレベルストアのそれぞれについて前記それぞれ実行中のトランザクションをコミットすることは、前記トップレベルストアについて前記実行中のトランザクションをコミットすることから独立して行われ、前記少なくとも1つのロウレベルストアの他のものに対する前記それぞれ実行中のトランザクションをコミットすることからも独立して行われる、ステップと、
    を備えた方法。
  2. 前記ハードウェアプロセッサが、前記第1のロウレベルストアのキー数が、前記上限しきい値を超えると、前記第1のロウレベルストア内の、前記キーバリューペアの約半分を、前記第2のロウレベルストアに移動するためのプログラム命令をさらに実行する、請求項1に記載のコンピュータによって実行される方法。
  3. 前記ハードウェアプロセッサが、新しいキーバリューペアを、前記第2のロウレベルストア内の前記KVストアに挿入する要求を受信するステップであって、前記新しいキーバリューペアは、単調に増加するキーを備える、ステップと、
    前記新しいキーバリューペアを、前記第2のロウレベルストアに記憶するステップと、
    をさらに実行する請求項1に記載のコンピュータによって実行される方法。
  4. 前記ハードウェアプロセッサが、前記第1のロウレベルストアと、前記第2のロウレベルストア内の合計キー数が、キーバリュー削除からの下限しきい値未満であるかどうかを判断するステップと、
    前記第1のロウレベルストアと、前記第2のロウレベルストアのキーの合計数が、前記下限しきい値未満であるとき、前記第1と第2のロウレベルストアを、マージするステップと、
    をさらに実行する、請求項1に記載のコンピュータによって実行される方法。
  5. 前記マージは、前記第2のロウレベルストアからのキーバリューペアを、前記第1のロウレベルストアに移動し、前記第2の情報を削除するステップを備える、請求項4に記載のコンピュータによって実行される方法。
  6. 前記トップレベルストアの第1のリーフノードは、前記第1及び第2の情報を含む、請求項1に記載のコンピュータによって実行される方法。
  7. 前記トップレベルストアの第1のリーフノードは、前記第1の情報を含み、
    前記トップレベルストアの第2のリーフノートは、前記第2の情報を含み、
    前記コンピュータによって実行される方法は、前記トップレベルストアの、前記第1および第2のリーフノードに関するペアレントノードを作ることをさらに備える、請求項1に記載のコンピュータによって実行される方法。
  8. 下層に格納された第1のロウレベルKVストアと、
    上層に格納され、前記第1のロウレベルKVストアについての、第1の情報を備えるトップレベルKVストアであって、前記第1の情報は、前記第1のロウレベルKVストアの最小キーと、ロケーションを含むトップレベルKVストアと、
    を備える、パーシステントメモリに格納され、前記上層と前記下層を有する2層の階層データ構造(110)として維持されるKVストアと、
    キーバリューペアを、前記KVストアに挿入する要求を受信し、
    前記第1の情報に基づいて、前記キーバリューペアを、前記第1のロウレベルKVストアに挿入し、
    前記第1のロウレベルKVストアのキー数が、上限しきい値を超えると、新しい第2のロウレベルKVストアを前記下層に作り、
    前記トップレベルKVストアに、前記第2のロウレベルKVストアについての、第2の情報を記憶することであって、前記第2の情報は、前記第2のロウレベルKVストアの、最小キーと、ロケーションを含む、第2の情報を記憶する、
    ように構成されたKVストアデータベースマネージメントシステム(DBMS)と、
    を備え、
    前記KVストアデータベースマネージメントシステム(DBMS)は、
    前記トップレベルKVストアの実行中のトランザクションを累積し、
    前記トップレベルKVストアの実行中のトランザクションをコミットし、
    少なくとも1つのロウレベルKVストアのそれぞれについて、それぞれ実行中のトランザクションを累積し、
    前記少なくとも1つのロウレベルKVストアのそれぞれについて前記それぞれ実行中のトランザクションをコミットするように構成され、前記ロウレベルKVストアのそれぞれについて前記それぞれ実行中のトランザクションをコミットすることは、前記トップレベルKVストアについて前記実行中のトランザクションをコミットすることとは独立して行われ、前記少なくとも1つのロウレベルKVストアの他のものに対する前記それぞれ実行中のトランザクションのコミットからも独立して行われる、
    データベースシステム。
  9. 前記KVストアDBMSは、前記第1のロウレベルKVストアのキー数が、前記上限しきい値を超えると、前記前記第1のロウレベルKVストアの、前記キーバリューペアの約半数を、前記第2のロウレベルKVストアに、移動するようにさらに構成される、請求項8に記載のシステム。
  10. 前記KVストアDBMSはさらに、
    新しいキーバリューペアを、前記第2のロウレベルKVストア内の、前記KVストアに挿入する要求を受信することであって、前記新しいキーバリューペアは、単調に増加するキーを備える、受信することと、
    前記新しいキーバリューペアを、前記第2のロウレベルKVストアに記憶することと、
    を実行するようにさらに構成される、請求項8に記載のシステム。
  11. 前記KVストアDBMSは、前記第1のロウレベルKVストアと、前記第2のロウレベルKVストア内のキーの合計数が、キーバリュー削除からの下限しきい値未満であるかどうか判断し、
    前記第1のロウレベルKVストアと、前記第2のロウレベルKVストア内のキーの前記合計数が、前記下限しきい値未満であるとき、前記第1と第2のロウレベルKVストアをマージする、
    ようにさらに構成される、請求項8に記載のシステム。
  12. 前記マージは、前記第2のロウレベルKVストアからのキーバリューペアを、前記第1のロウレベルKVストアに移動し、前記第2の情報を削除することを備える、請求項11に記載のシステム。
  13. 前記トップレベルKVストアの、第1のリーフノードは、前記第1および第2の情報を含む、請求項8に記載のシステム。
  14. 前記トップレベルKVストアの、第1のリーフノードは、前記第1の情報を記憶し、
    前記トップレベルKVストアの、第2のリーフノードは、前記第2の情報を記憶し、
    前記KVストアデータベースマネージメントシステム(DBMS)はさらに、前記トップレベルKVストアの、前記第1および第2のリーフノードのための、ペアレントノードを作るように構成されている、請求項8に記載のシステム。
  15. キーバリュー(KV)ストアを、アプリケーションに提供するためのKVストアデータベースマネージメントシステム(DBMS)をインプリメントするように、プロセッサにより実行可能な命令で符号化されたコンピュータ可読記憶媒体において、前記命令は、
    上層のトップレベルストアと下層の少なくとも1つのロウレベルストアを含む、パーシステントメモリに格納された2層の階層データ構造を維持することであって、前記トップレベルストアは、前記少なくとも1つのロウレベルストアの第1のロウレベルストアについての第1の情報を備え、前記第1の情報は、前記第1のロウレベルストアの最小キーと、ロケーションを含む、2層の階層データ構造を維持することと、
    キーバリューペアを、前記KVストアに挿入する要求を受信することと、
    前記第1の情報に基づいて、前記キーバリューペアを、前記第1のロウレベルストアに挿入することと、
    前記キーバリューペアを、前記第1のロウレベルストアに挿入した後で、前記第1のロウレベルストアのキー数が、上限しきい値を超えたかどうかを判断することと、
    前記第1のロウレベルストアのキー数が上限しきい値を超えると、
    前記少なくとも1つのロウレベルストアの第2のロウレベルストアを作ることと、
    前記トップレベルストアに、前記第2のロウレベルストアについての、第2の情報を記憶することであって、前記第2の情報は、前記第2のロウレベルストアの最小キーと、ロケーションを含む、第2の情報を記憶することと、
    を備え、
    前記2層の階層データ構造を維持することは、
    前記トップレベルストアの実行中のトランザクションを累積することと、
    前記トップレベルストアの実行中のトランザクションをコミットすることと、
    前記少なくとも1つのロウレベルストアのそれぞれについて、それぞれ実行中のトランザクションを累積することと、
    前記少なくとも1つのロウレベルストアのそれぞれについて前記それぞれ実行中のトランザクションをコミットすることであって、前記ロウレベルストアのそれぞれについて前記それぞれ実行中のトランザクションをコミットすることは、前記トップレベルストアについて前記実行中のトランザクションをコミットすることから独立して行われ、前記少なくとも1つのロウレベルストアの他のものに対する前記それぞれ実行中のトランザクションをコミットすることからも独立して行われる、コミットすることと、
    を備える、非一時的コンピュータ可読記憶媒体。
  16. 前記命令はさらに、前記第1のロウレベルストアのキー数が、前記上限しきい値を超えると、前記第1のロウレベルストア内の、前記キーバリューペアの、約半数を前記第2のロウレベルストアに移動することをさらに備えた、請求項15に記載の非一時的コンピュータ可読記憶媒体。
  17. 前記命令はさらに、
    新しいキーバリューペアを、前記第2のロウレベルストア内の前記KVストアに、挿入する要求を受信することであって、前記新しいキーバリューペアは、単調に増加するキーを備える、受信することと、
    前記新しいキーバリューペアを、前記第2のロウレベルストアに記憶することと、
    をさらに備えた請求項15に記載の非一時的可読記憶媒体。
  18. 前記命令はさらに、
    前記第1のロウレベルストア、前記第2のロウレベルストア内のキーの合計数が、キーバリュー削除からの下限しきい値未満であるかどうかを判断することと、
    前記第1のロウレベルストアと、前記第2のロウレベルストア内のキーの合計数が前記下限しきい値未満であるとき、前記第1および第2のロウレベルストアをマージすることと、
    を備えた、請求項15に記載の非一時的コンピュータ可読記憶媒体。
  19. 前記トップレベルストアの第1のリーフノードは、前記第1及び第2の情報を含む、請求項15に記載の非一時的コンピュータ可読記憶媒体。
  20. 前記トップレベルストアの第1のリーフノードは、前記第1の情報を含み、
    前記トップレベルストアの第2のリーフノードは、前記第2の情報を含み、
    前記命令は、前記トップレベルストアの、前記第1のリーフノードと、前記第2のリーフノードのためのペアレントノードを作ることをさらに備えた、請求項15に記載の非一時的コンピュータ可読記憶媒体。
JP2020541341A 2017-10-05 2018-09-25 動的キーレンジを有するkvストアにおけるシャードの維持 Active JP7345482B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/726,192 US11269915B2 (en) 2017-10-05 2017-10-05 Maintaining shards in KV store with dynamic key range
US15/726,192 2017-10-05
PCT/US2018/052545 WO2019070449A1 (en) 2017-10-05 2018-09-25 MAINTAINING FRAGMENTS IN A KV MEMORY WITH DYNAMIC KEY RANGE

Publications (2)

Publication Number Publication Date
JP2020536341A JP2020536341A (ja) 2020-12-10
JP7345482B2 true JP7345482B2 (ja) 2023-09-15

Family

ID=64564952

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020541341A Active JP7345482B2 (ja) 2017-10-05 2018-09-25 動的キーレンジを有するkvストアにおけるシャードの維持

Country Status (4)

Country Link
US (1) US11269915B2 (ja)
EP (1) EP3692454A1 (ja)
JP (1) JP7345482B2 (ja)
WO (1) WO2019070449A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11360863B2 (en) * 2018-10-26 2022-06-14 Hewlett Packard Enterprise Development Lp Key-value store on persistent memory
JP7237782B2 (ja) * 2019-09-13 2023-03-13 キオクシア株式会社 ストレージシステム及びその制御方法
US11954345B2 (en) 2021-12-03 2024-04-09 Samsung Electronics Co., Ltd. Two-level indexing for key-value persistent storage device

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013061739A (ja) 2011-09-12 2013-04-04 Fujitsu Ltd データ管理装置、データ管理システム、データ管理方法、及びプログラム
JP2015069461A (ja) 2013-09-30 2015-04-13 日本電気株式会社 情報処理装置
JP2016062609A (ja) 2014-09-18 2016-04-25 アンプリデータ エヌブイ コンピュータ実装された動的シャーディング方法

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6792432B1 (en) * 1998-03-31 2004-09-14 Sybase, Inc. Database system with methods providing high-concurrency access in B-Tree structures
US6298478B1 (en) * 1998-12-31 2001-10-02 International Business Machines Corporation Technique for managing enterprise JavaBeans (™) which are the target of multiple concurrent and/or nested transactions
US6457065B1 (en) * 1999-01-05 2002-09-24 International Business Machines Corporation Transaction-scoped replication for distributed object systems
US7039646B2 (en) * 2002-12-18 2006-05-02 International Business Machines Corporation Method and system for compressing varying-length columns during index high key generation
US7941401B2 (en) * 2005-05-09 2011-05-10 Gemstone Systems, Inc. Distributed data management system
US7809759B1 (en) * 2006-08-18 2010-10-05 Unisys Corporation Dynamic preconditioning of A B+tree
US9626398B2 (en) * 2012-05-22 2017-04-18 Hewlett Packard Enterprise Development Lp Tree data structure
US8996563B2 (en) * 2010-04-06 2015-03-31 Tokutek, Inc. High-performance streaming dictionary
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
US9740762B2 (en) 2011-04-01 2017-08-22 Mongodb, Inc. System and method for optimizing data migration in a partitioned database
US10262050B2 (en) * 2015-09-25 2019-04-16 Mongodb, Inc. Distributed database systems and methods with pluggable storage engines
US8924365B2 (en) * 2011-02-08 2014-12-30 Wavemarket, Inc. System and method for range search over distributive storage systems
US20130110767A1 (en) * 2011-10-26 2013-05-02 Nec Laboratories America, Inc. Online Transaction Processing
US9075710B2 (en) * 2012-04-17 2015-07-07 SanDisk Technologies, Inc. Non-volatile key-value store
US9003162B2 (en) * 2012-06-20 2015-04-07 Microsoft Technology Licensing, Llc Structuring storage based on latch-free B-trees
US9330158B1 (en) * 2013-05-20 2016-05-03 Amazon Technologies, Inc. Range query capacity allocation
US9471657B1 (en) * 2013-05-20 2016-10-18 Amazon Technologies, Inc. Range query capacity allocation
US9235611B1 (en) * 2013-06-06 2016-01-12 Amazon Technologies, Inc. Data growth balancing
US9330271B1 (en) * 2013-10-15 2016-05-03 Amazon Technologies, Inc. Fine-grained access control for synchronized data stores
US10019382B2 (en) * 2015-10-20 2018-07-10 Sap Se Secondary data structures for storage class memory (scm) enables main-memory databases
US10783186B2 (en) * 2017-08-31 2020-09-22 Micron Technology, Inc. Heterogenous key-value sets in tree database

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013061739A (ja) 2011-09-12 2013-04-04 Fujitsu Ltd データ管理装置、データ管理システム、データ管理方法、及びプログラム
JP2015069461A (ja) 2013-09-30 2015-04-13 日本電気株式会社 情報処理装置
JP2016062609A (ja) 2014-09-18 2016-04-25 アンプリデータ エヌブイ コンピュータ実装された動的シャーディング方法

Also Published As

Publication number Publication date
US11269915B2 (en) 2022-03-08
EP3692454A1 (en) 2020-08-12
US20190108267A1 (en) 2019-04-11
WO2019070449A1 (en) 2019-04-11
JP2020536341A (ja) 2020-12-10

Similar Documents

Publication Publication Date Title
EP3159810B1 (en) Improved secondary data structures for storage class memory (scm) enabled main-memory databases
CN105117415B (zh) 一种优化的ssd数据更新方法
US11693830B2 (en) Metadata management method, system and medium
US9626398B2 (en) Tree data structure
US8626717B2 (en) Database backup and restore with integrated index reorganization
JP7345482B2 (ja) 動的キーレンジを有するkvストアにおけるシャードの維持
US9684663B2 (en) SWAT command and API for atomic swap and trim of LBAs
EP3814930B1 (en) System and method for bulk removal of records in a database
US20190095457A1 (en) Write-optimized nested trees
JP6361223B2 (ja) トランザクションシステム
WO2015152830A1 (en) Method of maintaining data consistency
JP5949937B2 (ja) トランザクションシステム
US11514010B2 (en) Deduplication-adapted CaseDB for edge computing
US10489356B1 (en) Truncate and append database operation
US20160085796A1 (en) Swat command and api for atomic swap and trim of logical pages
JP7297772B2 (ja) 単一kvストア内の複数のトランザクション
KR20130064379A (ko) 지연 갱신을 수행하는 b-트리를 사용하여 플래시 메모리 내에 데이터를 저장하는 장치 및 방법
US9824105B2 (en) Adaptive probabilistic indexing with skip lists
US11836090B2 (en) Cache management for search optimization
US12079209B1 (en) Checkpoints management by a memory controller
Shu Key-Value Stores
CN116774931A (zh) 一种元数据存储方法、系统、设备及存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210916

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20221019

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20221122

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230523

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230728

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230905

R150 Certificate of patent or registration of utility model

Ref document number: 7345482

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150