Cassandra使用Java驱动程序读取大量数据

时间:2018-10-11 10:55:31

标签: java apache-spark cassandra driver cassandra-driver

我必须从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,然后再打印100001st值。 这导致我出现堆问题,而且就我而言,我不想到达一页的末尾来获取另一页的第一条记录。

2 个答案:

答案 0 :(得分:0)

我可以想到两种可能的解决方案:

1)您需要具有更好的数据模型来处理此查询。重塑表以处理此类查询。

2)使用spark作业来处理此类请求,为此,您需要一个单独的数据中心来处理此查询,以免打扰堆内存。

答案 1 :(得分:0)

仅供参考,尽管从未尝试过自己的尝试,但下面的文档可能会有所帮助。

https://docs.datastax.com/en/developer/java-driver/3.6/manual/paging/

驾驶员将分页。