cassandra使用java驱动程序读取大量数据

xesrikrc  于 2021-06-15  发布在  Cassandra
关注(0)|答案(2)|浏览(393)

我必须从cassandra数据库读取3 tb的生产数据。
我已经使用java驱动程序实现了分页,但是这种技术使用了偏移量值,这意味着我要再次跟踪我的数据,以到达一个特定的行,而这个过程使用的是堆内存,这不是一个好的做法。我想在不使用大量堆内存的情况下读取数据
通常,我想批量获取10000行,然后再次读取下一个10000行,而不读取前10000行
我不需要高的读取延迟我唯一的问题是读取数据而不消耗大量堆内存。。。
这是我的部分代码 Statement select = QueryBuilder.select().all().from("demo", "emp"); 我就是这样传呼的

List<Row> secondPageRows = cassandraPaging.fetchRowsWithPage(select, 100001, 25000);
printUser(secondPageRows);

其中100001是要输出行的起始值,25000是页面大小。所以在这里,我必须首先达到100000,然后我将打印100001st值。这导致了堆问题,而且在我的例子中,我不想在一个页面的末尾获取另一个页面的第一条记录。

mhd8tkvw

mhd8tkvw1#

仅供参考,下面的文件可以帮助虽然从来没有尝试过我自己的。
https://docs.datastax.com/en/developer/java-driver/3.6/manual/paging/
在这里,驱动程序将负责分页。

jslywgbw

jslywgbw2#

我可以想出两种可能的解决办法:
1) 您需要一个更好的数据模型来处理这个查询。重新设计表以处理此类查询。
2) 使用spark job来处理这样的请求,为此您需要有一个单独的数据中心来处理这个查询,这样就不必担心堆内存了。

相关问题