首页 > 解决方案 > Cassandra 截断性能

问题描述

最近有人告诉我,cassandra truncate 性能不佳,而且是反模式。但是,我不知道为什么?

所以,我有两个问题:

卡桑德拉版本:3.x

标签: cassandratruncate

解决方案


来自 cassandra 文档:

注意:TRUNCATE 向所有节点发送 JMX 命令,告诉它们删除保存指定表中数据的 SSTable。如果这些节点中的任何一个已关闭或没有响应,则该命令将失败并输出如下消息

因此,运行 truncate 将删除属于您的 cassandra 表的所有 sstable,这将非常快,但必须得到所有节点的确认。根据您的 cassandra.yml 这将在之前对您的数据进行快照:

auto_snapshot (默认值:true)启用或禁用是否在键空间截断或删除表之前对数据进行快照。为防止数据丢失,强烈建议使用默认设置。如果设置为 false,则会在截断或丢弃时丢失数据。

创建或修改表时,您可以通过设置缓存参数来启用或禁用该表的键缓存(分区键缓存)或行缓存。其他行和键缓存调整和配置选项在全局(节点)级别设置。Cassandra 使用这些设置根据整体工作负载和特定表的使用情况自动为节点上的每个表分配内存。您还可以全局配置这些缓存的保存期限。

对于你的问题:

  • upserts 会慢得多(当您的表中有大量数据时)
  • truncate 根本不写墓碑(相反,它会立即删除所有节点上的所有截断表 sstables)

推荐阅读