ETS有序集和有效分页

发布于 2024-12-14 01:21:41 字数 663 浏览 0 评论 0原文

我将 {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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

北城挽邺 2024-12-21 01:21:41

即使您的第一次选择也无效,因为 ets 匹配不够智能。请关注此讨论

Even your first select is not effective because ets matching is not smart enough. Follow this discussion.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文