卡桑德拉截断性能

时间:2019-01-07 09:11:05

标签: cassandra truncate

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

所以,我有两个问题:

  • 对所有记录进行高位插入然后进行截断是否更有表现?

  • 截断操作是否会创建逻辑删除?

Cassandra版本:3.x

1 个答案:

答案 0 :(得分:5)

来自cassandra文档:

  

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

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

  

auto_snapshot (默认值:true)启用或禁用快照是否为   在键空间截断或删除表之前获取的数据。至   为避免数据丢失,强烈建议使用默认设置。如果   设置为false时,您将因截断或丢弃而丢失数据。

     

在创建或修改表时,启用或禁用键缓存   (分区键缓存)或该表的行缓存,方法是设置   缓存参数。其他行和键缓存的调优和配置   选项在全局(节点)级别设置。卡桑德拉使用这些   设置以自动为节点上的每个表分配内存   根据总体工作量和特定的表使用情况。你也可以   全局配置这些缓存的保存期限。

对您的问题:

  • upserts将慢得多(当表中有大量数据时)
  • truncate根本不写入逻辑删除(相反,它将立即为截断的表sstables删除所有节点上的 all