ETS order_set и эффективная нумерация страниц

Я держу {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 ответ

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

Другие вопросы по тегам