Предоставляет ли Erlang Mnesia select в ordered_set список в порядке терминов Erlang?

#select #erlang #mnesia #ordered-set

#выберите #erlang #mnesia #упорядоченный набор

Вопрос:

В документации мне не ясно, нужно ли мне перебирать по порядку с помощью next или, возможно, foldl (упоминается, что foldr идет в порядке, противоположном ordered_set, поэтому предварительно foldl идет в том же порядке), или я могу использовать select и полагаться на его упорядоченность (предполагая, что ordered_setтаблица)

Ответ №1:

могу ли я использовать select и полагаться на его упорядоченность (при условии, что таблица ordered_set)

ets:select/2:

Для таблиц типа ordered_set объекты посещаются в том же порядке, что и при первом / следующем обходе. Это означает, что спецификация соответствия выполняется для объектов с ключами в первом / следующем порядке, и соответствующий список результатов находится в порядке этого выполнения.

ets:первый / 1:

Возвращает первый ключ Key на вкладке table. Для таблицы ordered_set возвращается первый ключ в порядке терминов Erlang.

Обход таблицы:

При обходах с использованием match select функций и может не потребоваться сканирование всей таблицы в зависимости от того, как указан ключ. Шаблон соответствия с полностью связанным ключом (без каких-либо переменных соответствия) оптимизирует операцию для поиска по одному ключу без какого-либо обхода таблицы вообще. Для ordered_set частично связанный ключ ограничит обход только сканированием подмножества таблицы на основе порядка терминов.

Для меня не имело бы смысла, чтобы таблица типа ordered_set возвращала результаты поиска в случайном порядке.