当前,我们有两个选项可以将数据备份到Cassandra键空间中的表中。我们可以使用nodetool
命令,也可以使用copy
终端上的cqlsh
命令。
1)这些命令之间有什么区别?
2)哪一个最合适?
3)同样,如果我们使用nodetool
进行备份,则通常在发出nodetool snapshot command
之前将数据从内存表刷新到sstables。因此,我的问题是,如果使用cqlsh copy
命令,是否应该采用相同的刷新数据技术?
感谢您的帮助。
非常感谢。
答案 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命令,但建议使用生产节点工具快照。