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

时间:2018-12-10 16:22:49

标签: cassandra cassandra-2.0 cassandra-3.0 cassandra-2.1

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

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

2)哪一个最合适?

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

感谢您的帮助。

非常感谢。

2 个答案:

答案 0 :(得分:3)

GREAT 问题!

  

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

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

ln {source} {link}

cqlsh COPY与在表上进行SELECT * FROM基本相同。它将以您指定的格式创建一个包含表数据的文本文件。

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

  

2)哪一个最合适?

这取决于您要执行的操作。如果您只需要为节点/群集备份,则可以使用nodetool snapshot。如果您尝试将数据导出/导入到新表或集群中,那么COPY是更好的方法。

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

  

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

不,那不是必需的。由于cqlsh COPY的工作方式与SELECT相同,因此它将遵循正常的Cassandra read path,后者将检查RAM和磁盘上的结构两者

答案 1 :(得分:1)

nodetool快照是处理大量数据的好方法,它会在几秒钟内创建一个硬链接。copy命令将花费大量时间,因为它取决于数据和群集的大小。对于较少的数据和测试,您可以使用copy命令,但建议使用生产节点工具快照。