当前位置: 首页 > 知识库问答 >
问题:

对ignite缓存进行分页的正确方法是什么?

段干英杰
2023-03-14

我使用apache ignite缓存作为数据存储。想知道是否有方法从客户端对大型数据集合进行分页。我不需要或希望数百万的记录从服务器转移到我的网络/移动客户端。

private final ClientCache<UUID, Account> accounts;

public List<Account> getAll(int offset, int limit) 
{
    return accounts.query(new ScanQuery<UUID, Account>()
            .setLocal(false))
            .getAll()
            .stream()
            .skip(offset)
            .limit(limit)
            .map(entity -> entity.getValue())
            .collect(Collectors.toList());
}

这是一个有效的方法吗?

我看过使用游标,但API仅限于迭代器...

共有1个答案

裘安阳
2023-03-14

我在代码中看到getall()。它使所有的数据都被传送到调用方。这正是你想避免的。

迭代器避免了这个问题,因为数据是按需批量加载的。因此,在运行查询时,不必将所有内容加载到单个节点的内存中。可以通过设置ScanQuery#PageSize属性来配置页面大小。默认情况下,它等于1024。可以通过调用querycursor.Iterator()方法获取迭代器。因此,不需要保留偏移量,而是需要保留迭代器。

指定了限制和偏移量的SQL SELECT查询也是一个选项。但是如果您有多个节点,那么在执行过程中,限制+偏移记录将从每个节点加载到reducer。你应该考虑到这一点。

 类似资料:
  • 这听起来像是一个新手问题,但我想知道用HAL格式呈现分页资源的最佳方式是什么?现在我正在使用Spring HATEOAS API将对象转换为资源

  • 问题内容: 据我所知,可以在一个单元内进行调试。 但是,我有多个单元格之间的函数调用。 例如, 我试过的 我试图在cell-1的第一行中设置。但是它甚至在执行单元2之前就立即进入调试模式。 我试图在代码之前添加该行。但是,代码永远运行,永不停止。 在ipython笔记本中设置断点的正确方法是什么? 问题答案: 使用 ipdb 通过安装 用法: 用于逐行执行和进入函数使用,并退出调试提示使用。 有关

  • 问题内容: 我最近从Angular转到了ReactJs。我正在使用jQuery进行API调用。我有一个API,该API返回要打印在列表中的随机用户列表。 我不确定如何编写我的API调用。最佳做法是什么? 我尝试了以下操作,但未得到任何输出。如果需要,我愿意实现替代API库。 下面是我的代码: 问题答案: 在这种情况下,您可以在中进行ajax调用,然后进行更新

  • 我已经问了谷歌先生几天,但没有找到任何合适的解决方案。我希望有人能在这里帮助我。很抱歉,如果我的问题不清楚或遗漏了一些东西,因为这是我第一次在这里发帖。谢谢!

  • 问题内容: 我要进行Flask + Nginx + Gunicorn部署。我已经安装并正在运行Nginx,并且按照文档中的说明运行gunicorn: 但是,当我注销服务器时,gunicorn进程退出了吗?确保Nginx保持连接状态并在崩溃时重新启动的正确方法是什么? 问题答案: 运行Gunicorn时使用选项。例:

  • 问题内容: 我有mongodb和NodeJs。通过mongoosejs完成连接。 开发Ajax Infinity滚动的最佳方法是什么?我应该使用极限和偏移量吗? 问题答案: 当您对数据集进行分页时,“跳过并限制”方法不是很有效。它实际上是Shlemiel Painter的算法 。 范围查询效率更高(当索引支持时)。例如,假设您正在显示推文。您的页面大小是20,您在第1000页上,并且想要加载第10