我正在尝试将所有数据从一个列族(表)移动到另一个列族。由于两个表都有不同的描述,我必须从 table-1 中提取所有数据并为 table-2 创建一个新对象,然后执行批量 aync 插入。我的 table-1 有数百万条记录,因此我无法直接获取数据结构中的所有数据并计算出来。我正在寻找使用 Spring Data Cassandra 和 Java 轻松实现这一点的解决方案。
我最初计划首先将所有数据移动到临时表,然后创建一些复合键关系,然后查询我的主表。然而,这对我来说似乎并不有利。谁能提出一个好的策略来做到这一点?任何线索将不胜感激。谢谢!
我的 table-1 有数百万条记录,因此我无法直接获取数据结构中的所有数据并计算出来。
使用 datastax java 驱动程序,您可以通过以下方式获取所有数据标记范围 https://docs.datastax.com/en/drivers/java/3.1/com/datastax/driver/core/TokenRange.html并计算出每个标记范围的数据。例如:
Set<TokenRange> tokenRanges = cassandraSession.getCluster().getMetadata().getTokenRanges();
for(TokenRange tr: tokenRanges) {
List<Row> rows = new ArrayList<>();
for(TokenRange sub: tr.unwrap()){
String query = "SELECT * FROM keyspace.table WHERE token(pk) > ? AND token(pk) <= ?";
SimpleStatement st = new SimpleStatement( query, sub.getStart(), sub.getEnd() );
rows.addAll( session.execute( st ).all() );
}
transformAndWriteToNewTable(rows);
}
每个令牌范围仅包含所有数据的一部分,并且可以由一台物理机器处理。您可以独立(并行或异步)处理每个令牌范围以获得更高的性能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)