Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分区密钥更新 使用cassandra 2.2.8_Cassandra_Sharding_Database Partitioning - Fatal编程技术网

分区密钥更新 使用cassandra 2.2.8

分区密钥更新 使用cassandra 2.2.8,cassandra,sharding,database-partitioning,Cassandra,Sharding,Database Partitioning,我的挑战如下。在我的数据库中,我们有一堆有数百万行的表。不幸的是,由于松散的设计,很少有表上的分区键以千兆字节的大小增长——这对系统造成了负面压力,jvm内存不足/节点崩溃等问题正在发生 我们需要在几个表上重新设计分区键。我们在表中有需要保留/或迁移到新表的数据 我正在寻找一种解决方案,使我能够将数据从源表导出到目标表,即使用重新设计的复合分区键;我希望这将有助于以更平衡的方式分布分区 我尝试使用COPY[tablenamecolumn1,column2…]命令,但这是在探测节点数,对系统/堆造

我的挑战如下。在我的数据库中,我们有一堆有数百万行的表。不幸的是,由于松散的设计,很少有表上的分区键以千兆字节的大小增长——这对系统造成了负面压力,jvm内存不足/节点崩溃等问题正在发生

我们需要在几个表上重新设计分区键。我们在表中有需要保留/或迁移到新表的数据

我正在寻找一种解决方案,使我能够将数据从源表导出到目标表,即使用重新设计的复合分区键;我希望这将有助于以更平衡的方式分布分区


我尝试使用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将数据从一个表迁移到另一个表。我正在寻找工作示例,看看如何使其工作!值得一试,还是我走错了方向?