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 не достаточно умен. Следите за этим обсуждением.