最近有人告诉我,cassandra truncate没有性能,它是反模式的。但是,我不知道为什么?所以,我有两个问题:是不是所有记录的插入都比截断更有效?截断操作是否创建逻辑删除?Cassandra版本:3.x
vc6uscn91#
来自Cassandra文件:注意:truncate向所有节点发送一个jmx命令,告诉它们从指定表中删除包含数据的sstables。如果这些节点中的任何一个关闭或没有响应,则该命令将失败并输出如下消息因此,运行truncate将删除属于您的cassandra表的所有sstable,这将非常快,但必须得到所有节点的确认。根据您的cassandra.yml,这将在以下时间之前快照您的数据:auto\ u snapshot(默认值:true)启用或禁用在键空间截断或删除表之前是否对数据进行快照。为防止数据丢失,强烈建议使用默认设置。如果设置为false,则截断或删除时将丢失数据。创建或修改表时,可以通过设置caching参数来启用或禁用该表的键缓存(分区键缓存)或行缓存。其他行和键缓存优化和配置选项在全局(节点)级别设置。cassandra使用这些设置根据总体工作负载和特定的表使用情况为节点上的每个表自动分配内存。还可以全局配置这些缓存的保存周期。对于你的问题:upserts会慢得多(当表中有重要数据时)truncate根本不写逻辑删除(相反,它将立即删除被截断表sstables的所有节点上的所有逻辑删除)
1条答案
按热度按时间vc6uscn91#
来自Cassandra文件:
注意:truncate向所有节点发送一个jmx命令,告诉它们从指定表中删除包含数据的sstables。如果这些节点中的任何一个关闭或没有响应,则该命令将失败并输出如下消息
因此,运行truncate将删除属于您的cassandra表的所有sstable,这将非常快,但必须得到所有节点的确认。根据您的cassandra.yml,这将在以下时间之前快照您的数据:
auto\ u snapshot(默认值:true)启用或禁用在键空间截断或删除表之前是否对数据进行快照。为防止数据丢失,强烈建议使用默认设置。如果设置为false,则截断或删除时将丢失数据。
创建或修改表时,可以通过设置caching参数来启用或禁用该表的键缓存(分区键缓存)或行缓存。其他行和键缓存优化和配置选项在全局(节点)级别设置。cassandra使用这些设置根据总体工作负载和特定的表使用情况为节点上的每个表自动分配内存。还可以全局配置这些缓存的保存周期。
对于你的问题:
upserts会慢得多(当表中有重要数据时)
truncate根本不写逻辑删除(相反,它将立即删除被截断表sstables的所有节点上的所有逻辑删除)