使用 nodetool 和 cqlsh copy 命令备份的数据有什么区别?

what are the difference between the data back up using nodetool and cqlsh copy command?

目前我们有两个选项可以将数据备份到 Cassandra 键空间中的表中。我们可以使用 nodetool 命令或从 cqlsh 终端使用 copy 命令。

1) 这些命令之间有什么区别?

2) 哪一个最合适?

3) 此外,如果我们使用 nodetool 进行备份,我们通常会在发出 nodetool snapshot command 之前将数据从内存表刷新到 sstables。所以我的问题是,如果我们使用 cqlsh copy 命令,我们是否应该采用相同的刷新数据技术?

感谢任何帮助。

非常感谢。

问题!

1) What are the differences between these commands ?

运行 a nodetool snapshot 在请求的键空间上创建硬 link 到 SSTable 文件。这与从 (Linux) 命令行 运行ning 相同:

ln {source} {link}

A cqlsh COPY 与在 table 上执行 SELECT * FROM 本质上相同。它将以您指定的任何格式创建一个包含 table 数据的文本文件。

就它们与 backup 上下文的区别而言,使用 cqlsh COPY 创建的文件将包含来自所有节点的数据。而 nodetool snapshot 需要在集群中的每个节点上为 运行。在节点数大于复制因子的集群中,每个快照仅对拍摄它的节点有效。

2) Which one is most appropriate ?

这取决于您要做什么。如果您只需要 node/cluster 的备份,那么 nodetool snapshot 是最佳选择。如果您尝试将 export/import 数据放入新的 table 或集群中,那么 COPY 是更好的方法。

同样值得注意的是,cqlsh COPY 需要一段时间才能达到 运行(取决于 table 中的数据量),如果配置不当,可能会超时。 nodetool snapshot 几乎是瞬时的;尽管将快照文件压缩和 SCPing 到集群外实例的过程需要一些时间。

3) Should we employ the same technique of flushing the data if we use the cqlsh copy command ?

不,没有必要。由于 cqlsh COPY 就像 SELECT 一样工作,它将遵循正常的 Cassandra read path,这将检查 RAM 和磁盘上的结构 both

nodetool 快照是处理任何数据量的好方法,它会在 seconds.copy 中创建硬 link 命令将花费很多时间,因为并且取决于数据和集群的大小。对于较少的数据和测试,您可以使用复制命令,但对于生产,建议使用 nodetool 快照。