我需要将带有 SimpleStrategy 的本地节点复制到其他 Cassandra 数据库中的远程节点。有谁知道我从哪里开始?
1 回答
如果您将数据写入两个集群,这里的主要复杂性是如何避免在本地设置之后覆盖云中已更改的数据。有几种可能性可以做到这一点:
如果表的结构相同(如果使用用户定义的类型,则包括键空间的名称),那么您只需将 SSTables 从本地计算机复制到云端,并使用sstableloader重放它们 - 在这种情况下,Cassandra将遵守实际的写入时间,并且不会覆盖更改的数据。此外,如果您要从表中删除,那么您需要在墓碑过期之前复制 SSTable。您可能不会每次都复制所有 SSTables,只复制自上次数据上传以来已更改的文件。但是你总是需要从你上传的所有节点复制 SSTables。
如果结构不一样,那么您可以考虑使用DSBulk或Spark Cassandra Connector。在这两种情况下,您还需要使用 writetime 导出数据,然后还使用时间戳加载它。请注意,在这两种情况下,如果不同的列具有不同的写入时间,那么您将需要单独加载该数据,因为 Cassandra 允许在更新/插入数据时仅指定一个时间戳。
对于 DSBulk,您可以按照示例 19.4 导出此博客文章中的数据,并按照示例 11.3 进行加载(来自另一篇博客文章)。所以这可能需要一些shell脚本。另外,您需要有磁盘空间来保存导出的数据(但您可以使用压缩)。
在 Spark Cassandra 连接器的情况下,如果两个节点都可以从 Spark 访问,您可以在没有中间存储的情况下导出数据。但是您需要编写一些 Spark 代码来使用RDD或DataFrame API 读取数据。