如何为其他 Cassandra 的远程节点复制 Cassandra 的本地节点?
How do I replicate a Cassandra's local node for other Cassandra's remote node?
我需要使用 SimpleStrategy 将本地节点复制到其他 Cassandra 数据库中的远程节点。有人知道我从哪里开始吗?
这里的主要复杂性是,如果您将数据写入两个集群,如何避免覆盖云中更改的数据晚于本地设置。有几种可能性可以做到这一点:
如果表的结构相同(包括键的名称spaces,如果使用用户定义的类型),那么您可以从本地计算机复制 SSTables到云端,并使用 sstableloader 重播它们 - 在这种情况下,Cassandra 将遵守实际写入时间,并且不会覆盖已更改的数据。此外,如果您正在从表中删除,那么您需要在逻辑删除过期之前复制 SSTables。你可能不会每次都复制所有的 SSTables,只复制自上次数据上传以来发生变化的文件。但是你总是需要从你正在上传的所有节点复制 SSTables。
如果结构不一样,那么您可以考虑使用 DSBulk or Spark Cassandra Connector。在这两种情况下,您还需要使用 writetime 导出数据,然后使用时间戳加载它。请注意,在这两种情况下,如果不同的列具有不同的写入时间,那么您将需要单独加载该数据,因为 Cassandra 允许在 updating/inserting 数据时仅指定一个时间戳。
如果是 DSBulk,您可以按照示例 19.4 从 this blog post, and example 11.3 for loading (from another blog post) 导出数据。所以这可能需要一些 shell 脚本。另外,您需要有磁盘 space 来保存导出的数据(但您可以使用压缩)。
对于 Spark Cassandra 连接器,如果两个节点都可以从 Spark 访问,则无需中间存储即可导出数据。但是您需要使用 RDD or DataFrame API 编写一些 Spark 代码来读取数据。
我需要使用 SimpleStrategy 将本地节点复制到其他 Cassandra 数据库中的远程节点。有人知道我从哪里开始吗?
这里的主要复杂性是,如果您将数据写入两个集群,如何避免覆盖云中更改的数据晚于本地设置。有几种可能性可以做到这一点:
如果表的结构相同(包括键的名称spaces,如果使用用户定义的类型),那么您可以从本地计算机复制 SSTables到云端,并使用 sstableloader 重播它们 - 在这种情况下,Cassandra 将遵守实际写入时间,并且不会覆盖已更改的数据。此外,如果您正在从表中删除,那么您需要在逻辑删除过期之前复制 SSTables。你可能不会每次都复制所有的 SSTables,只复制自上次数据上传以来发生变化的文件。但是你总是需要从你正在上传的所有节点复制 SSTables。
如果结构不一样,那么您可以考虑使用 DSBulk or Spark Cassandra Connector。在这两种情况下,您还需要使用 writetime 导出数据,然后使用时间戳加载它。请注意,在这两种情况下,如果不同的列具有不同的写入时间,那么您将需要单独加载该数据,因为 Cassandra 允许在 updating/inserting 数据时仅指定一个时间戳。
如果是 DSBulk,您可以按照示例 19.4 从 this blog post, and example 11.3 for loading (from another blog post) 导出数据。所以这可能需要一些 shell 脚本。另外,您需要有磁盘 space 来保存导出的数据(但您可以使用压缩)。
对于 Spark Cassandra 连接器,如果两个节点都可以从 Spark 访问,则无需中间存储即可导出数据。但是您需要使用 RDD or DataFrame API 编写一些 Spark 代码来读取数据。