Redis配列とチェーン表の詳細
1.配列とチェーンの基礎知識
配列:
配列はメモリの中で連続的な空間記憶データを開くことができます。データを取得すると、直接に下記の値で対応する要素を取得でき、時間複雑度はO(1)となります。しかし、データが追加されたり削除されたりすると、大量のデータが移動します。時間の複雑さはO(n)です。配列の拡張メカニズムは、配列空間が足りない場合、新しい空間アドレスを開拓し、元の配列を新しい配列にコピーすることです。
チェーン:
リンクテーブルは、すべてのデータをポインタで接続する連続メモリ空間を開く必要がありません。新規または削除する場合は、ポインタが指すアドレスだけを修正すればいいです。時間の複雑さはO(1)です。ただし、クエリの時間複雑度はO(n)である。
2、チェーンメーター
2.1、双方向リンク表
双方向リンク表は、各ノード間の論理関係が双方向である。
双方向リンクテーブルにおけるノードの構成は、
2.2、圧縮チェーン表圧縮チェーンはメモリを節約するために開発されました。 zplistは特別な双方向チェーンテーブルで、双方向ポインタprev nextを維持していません。逆に、前のイベントの長さと現在のイベントの長さを記憶し、次の要素はどこにあるかを長さで推定します。 は、読み取りの性能を犠牲にして、記憶ポインタが記憶entryよりも長く記憶されるため、典型的な時間変換空間である高効率の記憶空間を得る。 2.3、quicklistチェーン表公式サイトの紹介: 紹介: quicklistは双方向リンク表であり、zplistの双方向チェーンテーブルであり、zplist自体はデータ項目の順序を維持するリストであり、データ項目は連続的にメモリブロックに保存されています。
3、比較
3.1、双方向リンク表二二端子チェーンは表の両端でプッシュとpopの操作をしやすいですが、メモリのオーバーヘッドが大きいです。 双端チェーンテーブルは、各ノードに保存するデータ以外に、2つのポインタを追加保存します。 デュアルエンドチェーンの各ノードは個別のメモリブロックであり、アドレスが不連続であり、ノードが多くなり、メモリの断片が発生しやすい。 3.2、圧縮リスト zplistは連続メモリであるため、記憶効率が高い。 zplistは操作を修正するのに不便で、毎回データが変動すると一回のメモリのreallocを誘発します。 zplistの長さが長い場合、一回のreallocは大量のデータのコピーを招き、さらに性能を低下させる可能性があります。 3.3、quicklistチェーン表空間効率と時間効率の折衷。 は、ダブルエンドチェーンと圧縮リストの利点を組み合わせている。 4、まとめ
redis 3.2バージョンの前に使っているのは双方向チェーンと圧縮チェーンの2種類です。双方向チェーンが使っているメモリは圧縮チェーンよりも高いので、チェーンを作る時にまず圧縮チェーンを作成して、適当な時に双方向チェーンに変換します。redis 3.2の後に使用するのはquicklistチェーンです。
この記事はRedis配列とチェーンについて詳しく説明しています。これまでの記事を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。
配列:
配列はメモリの中で連続的な空間記憶データを開くことができます。データを取得すると、直接に下記の値で対応する要素を取得でき、時間複雑度はO(1)となります。しかし、データが追加されたり削除されたりすると、大量のデータが移動します。時間の複雑さはO(n)です。配列の拡張メカニズムは、配列空間が足りない場合、新しい空間アドレスを開拓し、元の配列を新しい配列にコピーすることです。
チェーン:
リンクテーブルは、すべてのデータをポインタで接続する連続メモリ空間を開く必要がありません。新規または削除する場合は、ポインタが指すアドレスだけを修正すればいいです。時間の複雑さはO(1)です。ただし、クエリの時間複雑度はO(n)である。
2、チェーンメーター
2.1、双方向リンク表
双方向リンク表は、各ノード間の論理関係が双方向である。
双方向リンクテーブルにおけるノードの構成は、
prior:
が現在のノードのフロントノードに向けられ、data:
が現在ノードに格納されているデータである。next:
は、現在のノードのバックノードを指す。2.2、圧縮チェーン表
A doubly linked list of ziplists
A generic doubly linked quicklist implementation
3、比較
3.1、双方向リンク表
redis 3.2バージョンの前に使っているのは双方向チェーンと圧縮チェーンの2種類です。双方向チェーンが使っているメモリは圧縮チェーンよりも高いので、チェーンを作る時にまず圧縮チェーンを作成して、適当な時に双方向チェーンに変換します。redis 3.2の後に使用するのはquicklistチェーンです。
この記事はRedis配列とチェーンについて詳しく説明しています。これまでの記事を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。