set 型のテーブルと、ordered_set 型のテーブルの違いは何ですか? 読み取り/書き込みパフォーマンスの違い、順序付けの基準、分散ノード間の影響などに興味があります。
2 に答える
順序付けは主キーに基づいています。つまり、ordered_set テーブルは、複雑な主キーを使用して一致/選択の反復を行う方がはるかに高速です。たとえば、レコードが のよう{{Key, Val1}, Val2}
に見える場合、一致または選択して、 が出現するたびに非常にKey
迅速に取得できます。それ以外は、読み取り/書き込み速度に大きな違いがあることは認識していません。Val1
Val2
Key
また、ordered_set テーブルのフラグメント化も可能ですが、反復は部分的に順序付けられますが、完全には順序付けられません。単一のフラグメントの反復は順序付けられますが、フラグメントからフラグメントへの順序は未定義です。
ソースからの注文に関する限り:
add_element(E, [H|Es]) when E > H -> [H|add_element(E, Es)];
add_element(E, [H|_]=Set) when E < H -> [E|Set];
add_element(_E, [_H|_]=Set) -> Set; %E == H
add_element(E, []) ->[E].
したがって、順序付けは、要素の単純な < または > 比較のように見えます。
注文以外はセットと全く同じです。したがって、「値」が低い要素のルックアップは、セットよりも平均して高速であると推測できます。しかし、それ以外はわかりません。
Erlang はプロセスに依存せず、変数の変更を許可しないため、分散ノード全体での効果はローカル ノードと同じでなければなりません。
警告:
私は 2 つのタイプでベンチマークを実行していないので、これはパフォーマンスに関する私の推測です。