卡桑德拉截断表现

Bik*_*wal 2 truncate cassandra

我最近被告知,cassandra truncate不是高效的,而且是反模式.但是,我不知道为什么?

所以,我有两个问题:

  • 拥有所有记录然后进行截断是否更高效?

  • 截断操作是否会创建墓碑?

卡桑德拉版本:3.x

Man*_*nke 5

来自cassandra文档:

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

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

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

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

对于你的问题:

  • upserts会慢很多(当你的表中有重要数据时)
  • 截断不写在所有的墓碑(相反,它会删除所有所有节点立即为您的截断的表sstables)