ETS order_set и эффективная нумерация страниц - PullRequest
1 голос
/ 03 ноября 2011

Я храню {Key, Value} данные в ETS ordered_set, где Key - дата и время. Довольно просто выбрать все элементы за заданное время внутри [From, To].

Примерно так:

ets:select(Tab, [{{'$1', '$2'}, [{'>=', '$1', From}, {'=<', '$1', To}], ['$2']}])

У нас есть параметр Limit в функции select(), поэтому мы можем ограничить количество элементов, которые будут выбраны. Но как я могу указать смещение?

В качестве входных данных мой модуль получает интервал времени и номер страницы. Моя цель - вернуть товары за указанный промежуток времени и страницу. Размер страницы (Limit) является константой. Я могу рассчитать смещение как

Offset = Limit * PageNumber - Limit

Вопрос в том, как эффективно выбрать элементы только для данной страницы?

Я знаю, что функция select() может принимать параметр Continuation, но у меня нет состояния из предыдущего выбора. У меня есть только номер страницы.

Возможно, мне нужно использовать другую структуру данных. Пожалуйста, порекомендуйте лучшее решение.

1 Ответ

0 голосов
/ 04 ноября 2011

Даже ваш первый выбор не эффективен, потому что ets matching недостаточно умный Следуйте этому обсуждению .

...