I keep {Key, Value}
data in ETS ordered_set
where Key
is a datetime. It is pretty easy to select all items in the given time internal [From, To]
.
Something like that:
ets:select(Tab, [{{'$1', '$2'}, [{'>=', '$1', From}, {'=<', '$1', To}], ['$2']}])
We have Limit
parameter in select()
function so we are able to limit a number of items to be selected. But how can I specify an offset?
As an input, my module receives time interval and page number. My goal is to return items for the specified time interval and page. Page size (Limit
) is a constant. I can calculate an offset as
Offset = Limit * PageNumber - Limit
The question is how can I effectively select items for the given page only?
I know that select()
function can receive Continuation
parameter, but I have no state from the previous selection. I only have a page number.
Possible, I have to use other data structure. Please, recommend better solution.
Even your first select is not effective because ets matching is not smart enough. Follow this discussion.