分区密钥更新 使用cassandra 2.2.8
我的挑战如下。在我的数据库中,我们有一堆有数百万行的表。不幸的是,由于松散的设计,很少有表上的分区键以千兆字节的大小增长——这对系统造成了负面压力,jvm内存不足/节点崩溃等问题正在发生 我们需要在几个表上重新设计分区键。我们在表中有需要保留/或迁移到新表的数据 我正在寻找一种解决方案,使我能够将数据从源表导出到目标表,即使用重新设计的复合分区键;我希望这将有助于以更平衡的方式分布分区分区密钥更新 使用cassandra 2.2.8,cassandra,sharding,database-partitioning,Cassandra,Sharding,Database Partitioning,我的挑战如下。在我的数据库中,我们有一堆有数百万行的表。不幸的是,由于松散的设计,很少有表上的分区键以千兆字节的大小增长——这对系统造成了负面压力,jvm内存不足/节点崩溃等问题正在发生 我们需要在几个表上重新设计分区键。我们在表中有需要保留/或迁移到新表的数据 我正在寻找一种解决方案,使我能够将数据从源表导出到目标表,即使用重新设计的复合分区键;我希望这将有助于以更平衡的方式分布分区 我尝试使用COPY[tablenamecolumn1,column2…]命令,但这是在探测节点数,对系统/堆造
我尝试使用COPY[tablenamecolumn1,column2…]命令,但这是在探测节点数,对系统/堆造成压力,即影响应用程序。我在这里寻求如何最好地应对这一挑战的指导-提前感谢您的帮助。由于您有非常大的表,并且已经无法使用COPY,因此您必须手动导出和导入数据。要执行此任务,您需要使用 使用一些小的客户端代码,您可以编写查询来执行完整的表数据提取,例如:
SELECT * FROM mytable WHERE token(pk) >= MIN_TOKEN AND TOKEN(pk) < MIN_TOKEN + QUERY_INTERVAL;
SELECT * FROM mytable WHERE token(pk) >= MIN_TOKEN + QUERY_INTERVAL AND TOKEN(pk) < MIN_TOKEN + 2*QUERY_INTERVAL;
....
SELECT * FROM mytable WHERE token(pk) >= MAX_TOKEN - QUERY_INTERVAL AND TOKEN(pk) < MIN_TOKEN;
其中,MIN_TOKEN和MAX_TOKEN都是集群分区器的常量最小值和最大值,QUERY_INTERVAL是要查询的范围窗口。查询间隔越大,在单个查询中获取的数据越多,越有可能触发超时
请注意,Cassandra从不允许范围运算符>>=仅从文件导入/导出。如果您想重新设计数据模型,最好为您的任务实施专用工具,该工具将:
按部分读取源表中的数据,例如按上文所述的@xmas79标记读取数据
将数据部分转换为新模型
将数据部分写入新表
下面是一个如何使用java和datastax驱动程序的示例Thankyou@xmas79,谢谢您的回复。请原谅我缺乏经验,如果我遗漏了一些明显的东西。在梳理互联网以寻找答案的过程中,我了解到sstableloader是加载大量数据(尤其是链接)的更有效的选择[建议如果我创建sudo network,我可能能够使用sstableloader将数据从一个表迁移到另一个表。我正在寻找工作示例,看看如何使其工作!值得一试,还是我走错了方向?