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

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

目前,我们有两种选择来备份 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/

相关文章:

cassandra - 应用程序容器到 cassandra 节点 - 一对一还是?

amazon-web-services - AWS 多区域 VPC 中的 Cassandra 集群

java - 删除 Cassandra 中的查询

Cassandra DB 误解分区键和主键

java - Cassandra 的 EmbeddedCassandraService 抛出 InvalidRequestException : unconfigured table schema_keyspaces

hadoop - 运行配置单元脚本 "am_stats_analyzer_163"cassandra 时出现 WSO2 BAM 错误

javascript - Thrift JS 与 Cassandra 的兼容性(JSON 协议(protocol))

go - 关于使用 DCAwareRoundRobinPolicy,另请阅读在远程主机上搜索

centos - 在 CentOS 6.5 64 位和 Cassandra PDO 上安装 thrift

cassandra - 确定 Cassandra 中分区的节点