我必须从 Cassandra 数据库中读取 3 TB 的生产数据。我已经使用 java 驱动程序实现了分页,但该技术使用偏移值,这意味着我正在重新跟踪我的数据以到达特定行,并且此过程使用堆内存,这不是一个好的做法。我想在不使用大量堆内存的情况下读取数据通常,我想批量获取 10000 行,然后再次读取下 10000 行,而无需再次读取前一万次读取我不需要高读取延迟我唯一的问题是在不消耗大量堆内存的情况下读取数据...这是我的部分代码 Statement select = QueryBuilder.select().all().from("demo", "emp");这就是我的寻呼方式List<Row> secondPageRows = cassandraPaging.fetchRowsWithPage(select, 100001, 25000);printUser(secondPageRows);其中 100001 是我想要输出行的起始值,25000 是页面的大小。所以在这里我必须首先达到 100000,然后我将打印第 100001 个值。这导致了我的堆问题,加上在我的情况下,我不想到达一页的末尾以获取另一页的第一条记录。
2 回答
墨色风雨
TA贡献1853条经验 获得超6个赞
仅供参考,以下文档可能会有所帮助,尽管我从未尝试过自己的文档。
https://docs.datastax.com/en/developer/java-driver/3.6/manual/paging/
在这里驱动程序将负责分页。
阿波罗的战车
TA贡献1862条经验 获得超6个赞
我可以想到两种可能的解决方案:
1) 您需要有更好的数据模型来处理此查询。改造您的表以处理此类查询。
2) 使用 spark 作业来处理这样的请求,为此你需要有一个单独的数据中心来处理这个查询,这样就不必担心堆内存。
添加回答
举报
0/150
提交
取消