ETS有序集和有效分页
我将 {Key, Value}
数据保存在 ETS ordered_set
中,其中 Key
是日期时间。选择给定时间内部[From, To]
内的所有项目非常容易。
类似这样的:
ets:select(Tab, [{{'$1', '$2'}, [{'>=', '$1', From}, {'=<', '$1', To}], ['$2']}])
我们在 select()
函数中有 Limit
参数,因此我们能够限制要选择的项目数量。但我如何指定偏移量呢?
作为输入,我的模块接收时间间隔和页码。我的目标是返回指定时间间隔和页面的项目。页面大小(Limit
)是一个常量。我可以计算偏移量,因为
Offset = Limit * PageNumber - Limit
问题是如何有效地仅为给定页面选择项目?
我知道 select()
函数可以接收 Continuation
参数,但我没有之前选择的状态。我只有页码。
可能,我必须使用其他数据结构。请推荐更好的解决方案。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
即使您的第一次选择也无效,因为 ets 匹配不够智能。请关注此讨论。
Even your first select is not effective because ets matching is not smart enough. Follow this discussion.