目前,我们有两种选择来备份 Cassandra 键空间中表的数据。我们可以使用 nodetool
命令或使用 cqlsh
终端中的 copy
命令。
1) 这些命令之间有什么区别?
2)哪一个最合适?
3)此外,如果我们使用nodetool
进行备份,我们通常会在发出nodetool快照命令
之前将数据从mem表刷新到sstables。所以我的问题是,如果我们使用 cqlsh copy 命令,我们是否应该采用相同的技术来刷新数据?
感谢任何帮助。
非常感谢。
最佳答案
很好的问题!
1) What are the differences between these commands ?
运行nodetool快照
会在请求的键空间上创建指向SSTable文件的硬链接(hard link)。这与从 (Linux) 命令行运行相同:
ln {source} {link}
cqlsh COPY
本质上与在表上执行 SELECT * FROM
相同。它将创建一个文本文件,其中包含您指定的格式的表数据。
就其与备份上下文的区别而言,使用cqlsh COPY
创建的文件将包含来自所有节点的数据。而nodetool snapshot
需要在集群中的每个节点上运行。在节点数大于复制因子的集群中,每个快照仅对拍摄该快照的节点有效。
2) Which one is most appropriate ?
这取决于您想要做什么。如果您只需要节点/集群的备份,那么 nodetool snapshot
就是最佳选择。如果您尝试将数据导出/导入到新表或集群中,那么 COPY
是更好的方法。
还值得注意的是,cqlsh COPY
需要一段时间才能运行(取决于表中的数据量),如果配置不正确,可能会超时。 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 和磁盘上的结构。
关于cassandra - 使用nodetool和cqlsh copy命令备份数据有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53709650/