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

Glo*_*min 4 cassandra cassandra-2.0 cassandra-2.1 cassandra-3.0

目前,我们有两种选择来备份 Cassandra 键空间中的表数据。我们可以使用用户nodetool命令或使用copy终端命令cqlsh

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

2)哪一个最合适?

3)此外,如果我们用于nodetool进行备份,我们通常会在发出nodetool snapshot command. 所以我的问题是,如果我们使用cqlsh copy

任何帮助表示赞赏。

非常感谢。

Aar*_*ron 5

问题!

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

运行 anodetool snapshot会在请求的键空间上创建到 SSTable 文件的硬链接。这与从 (Linux) 命令行运行相同:

ln {source} {link}
Run Code Online (Sandbox Code Playgroud)

A本质上与在桌子上cqlsh COPY执行 a 相同。SELECT * FROM它将创建一个文本文件,其中包含您指定的格式的表数据。

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

2)哪一个最合适?

这取决于您想要做什么。如果您只需要节点/集群的备份,那么nodetool snapshot就是正确的选择。如果您尝试将数据导出/导入到新表或集群中,那么这COPY是更好的方法。

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

3)如果我们使用复制命令,我们是否应该采用相同的刷新数据技术cqlsh

不,那没有必要。由于cqlsh COPY工作原理与 a 类似SELECT,它将遵循正常的Cassandra 读取路径,该路径将检查RAM 和磁盘上的结构。

  • 我认为还值得补充的是,COPY FROM 命令可用于导入行数少于 200 万的数据集。 (2认同)