gpt4 book ai didi

java - 分页点燃缓存的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-02 10:37:59 24 4
gpt4 key购买 nike

我使用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 仅限于迭代器...

谢谢。

最佳答案

我在您的代码中看到了 getAll() 。它使所有数据都传输到调用方。这正是您想要避免的。

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

SQL SELECT指定 LIMIT 和 OFFSET 的查询也是一个选项。但如果有多个节点,则在执行过程中,LIMIT + OFFSET 记录将从每个节点加载到 reducer 。你应该考虑到这一点。

关于java - 分页点燃缓存的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53139060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com