【问题标题】:How to load/read data from cassandra by partition by partition using java8?如何使用java8按分区从cassandra加载/读取数据?
【发布时间】:2020-02-09 05:55:58
【问题描述】:

我正在使用 spring-boot 、 datastax-java-cassandra-connector_2.11-2.4.1.jar 和 java8。

我有需要从 C* 表读取/加载数据的情况,但是 此表可能有数百万条记录。

我需要从 C* 表中加载这些数据,无论如何在 java/spring-boot 使用 datastax-java-cassandra-connector API 我可以 逐个分区拉取数据?

【问题讨论】:

  • SELECT * FROM table? Java 驱动程序(它使用)返回一个迭代器,该迭代器在迭代时会延迟获取数据。

标签: spring-boot cassandra datastax-enterprise datastax-java-driver spark-cassandra-connector


【解决方案1】:

虽然select * from table 可能有效,但更有效的方法可能是使用select * from table where token(part_key) > beginRange and token(part_key) <= endRange 之类的查询按令牌范围读取数据。 Spark Cassandra 连接器的工作方式相同 - 它获取所有可用令牌范围的列表,然后从每个令牌范围获取数据,但将其直接发送到保存此令牌范围的节点(与检索所有令牌范围的 select * from table 相反)数据通过协调节点)。

在计算令牌边界时需要小心,尤其是对于整个范围的开始和结束。你可以找到example of the Java code in my repository(这里太长了,贴不上去)。

【讨论】:

  • 范围信息的存储方式取决于版本,尽管您可以从系统表中提取它,但最好从知道如何为不同版本的 Cassandra 读取它的 Metadata 类中获取它。
  • 该架构也可以工作 - 它真的在很大程度上取决于您的业务需求
猜你喜欢
  • 2015-03-25
  • 2014-03-26
  • 1970-01-01
  • 2018-04-12
  • 2018-05-27
  • 1970-01-01
  • 2016-08-06
  • 2016-07-19
  • 1970-01-01
相关资源
最近更新 更多