如何复制卡桑德拉&x27;s其他Cassandra的本地节点';s远程节点?

如何复制卡桑德拉&x27;s其他Cassandra的本地节点';s远程节点?,cassandra,cassandra-4.0,Cassandra,Cassandra 4.0,我需要使用SimpleStrategy将本地节点复制到其他Cassandra数据库中的远程节点。有人知道我从哪里开始吗?如果要将数据写入两个集群,这里的主要复杂性在于如何避免在本地设置之后覆盖云中更改的数据。有几种可能做到这一点: 如果表的结构相同(如果使用用户定义的类型,则包括键空间的名称),则您可以将SSTables从本地计算机复制到云中,并使用来重播它们-在这种情况下,Cassandra将遵守实际的写入时间,并且不会覆盖更改的数据。此外,如果要从表中删除,则需要在逻辑删除过期之前复制SS

我需要使用SimpleStrategy将本地节点复制到其他Cassandra数据库中的远程节点。有人知道我从哪里开始吗?

如果要将数据写入两个集群,这里的主要复杂性在于如何避免在本地设置之后覆盖云中更改的数据。有几种可能做到这一点:

  • 如果表的结构相同(如果使用用户定义的类型,则包括键空间的名称),则您可以将SSTables从本地计算机复制到云中,并使用来重播它们-在这种情况下,Cassandra将遵守实际的写入时间,并且不会覆盖更改的数据。此外,如果要从表中删除,则需要在逻辑删除过期之前复制SSTables。您不可能每次都复制所有SSTABLE,只复制自上次数据上载以来更改的文件。但是,您始终需要从进行上载的所有节点复制SSTables

  • 如果结构不同,那么您可以使用或。在这两种情况下,您还需要使用writetime导出数据,然后使用时间戳加载数据。请注意,在这两种情况下,如果不同的列具有不同的写入时间,则需要分别加载该数据,因为Cassandra只允许在更新/插入数据时指定一个时间戳

对于DSBulk,可以按照示例19.4从导出数据,按照示例11.3从加载数据。因此,这可能需要一些shell脚本。另外,您需要有磁盘空间来保存导出的数据(但可以使用压缩)


对于Spark Cassandra连接器,如果可以从Spark访问两个节点,则可以导出数据,而无需中间存储。但您需要编写一些Spark代码,以便使用或API读取数据。

它们是否在不同的集群中?是的,它们是。一个在本地机器上运行,另一个在云中运行。卡桑德拉的云将接收比卡桑德拉的本地节点更多的数据。例如,我有两个应用程序在cassandra的本地节点上运行,每个月我都需要为cassandra的云复制该节点。云cassandra也会收到写操作吗?还是只读的?你有关于数据的TTL吗?云cassandra在本地节点数据复制之外接收写和读。我们还没有关于数据的TTL。还有一个问题表结构是相同的吗?分区键等?非常感谢您的解释!结构是一样的。我将考虑一种将数据与复制和“正常”写入分离的方法。如果结构相同,则使用sstableloader进行流式传输可能是最简单的方法-记住在逻辑删除过期之前复制数据