Различия между set и order_set в Mnesia? - PullRequest
3 голосов
/ 11 июня 2009

В чем различия между таблицей типа set и таблицей типа order_set? Меня интересуют различия в производительности чтения / записи, на чем основан порядок, эффекты на распределенных узлах и т. Д.

Ответы [ 2 ]

7 голосов
/ 24 июля 2009

Упорядочение основано на первичном ключе, что означает, что таблицы order_set намного быстрее выполняют итерацию соответствия / выбора с использованием сложных первичных ключей. Например, если ваша запись выглядит как {{Key, Val1}, Val2}, вы можете сопоставить или выбрать Key, чтобы очень быстро получить Val1 и Val2 для каждого вхождения Key. Кроме этого, я не знаю о существенной разнице в скорости чтения / записи.

Фрагментирование таблиц order_set также возможно, хотя это означает, что итерация будет частично упорядочена, но не полностью упорядочена. Итерации по одному фрагменту упорядочены, но порядок от фрагмента к фрагменту не определен.

1 голос
/ 12 июня 2009

насколько порядок идет от источника:

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 не зависит от процесса и не допускает изменения переменных, эффекты на распределенных узлах должны быть идентичны локальным узлам.

Оговорка:

Я не проводил сравнительный анализ этих двух типов, так что с моей стороны это предположение относительно производительности.

...