В чем разница между таблицей набора типов и таблицей типа ordered_set? Меня интересуют различия в производительности чтения/записи, о том, на чем основан заказ, о влиянии на распределенные узлы и т. Д.Различия между set и ordered_set в Mnesia?
ответ
Заказ основан на первичном ключе, что означает, что таблицы tables_set намного быстрее при выполнении сопоставления/выбора итерации с использованием сложных первичных ключей. Например, если ваша запись выглядит как {{Key, Val1}, Val2}
, вы можете совместить или выбрать на Key
, чтобы очень быстро получить Val1
и Val2
за каждый случай Key
. Помимо этого, я не знаю существенной разницы в скорости чтения/записи.
Возможно также фрагментация таблиц упорядоченных_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 является агностическим процессом и не позволяет изменять переменные, эффекты через распределенные узлы должны быть идентичны локальным узлам.
Оговорка:
Я не запускать какие-либо бенчмаркинга на два типа, так что это мое предположение о производительности.
ОК, так что, очевидно, я недостаточно внимательно изучил вопрос. это касается таблиц mnesia, а не самого типа данных. Не стесняйтесь меня переубеждать. –
Я предполагаю, что вам нужен опыт реального мира, так как документация по модулю объясняет различия довольно хорошо? –
Да, но можете ли вы ссылаться на документацию, о которой вы говорите? Документы, которые я читал, не вникают в большую глубину. – mindeavor