我们有一个多余的列,我们想从我们的Cassandra数据库(版本2.1.15)中删除。这是一个文本列,代表磁盘上的大多数数据(15个节点X每个节点1.8 TB)。
最简单的选择似乎是更改表以删除该列,然后让Cassandra压缩处理事务(还运行Cassandra Reaper来管理维修)。但是,考虑到我担心的数据集的大小,我将通过大量删除来删除群集。
我考虑过的其他选项是一个通过键空间将值设置为null的过程,但是我认为这与删除列具有相同的效果,但是更多地处于不可控制的范围内(但还需要编写一些内容为此)。
有人会对如何解决这个问题有任何建议吗?
谢谢!
答案 0 :(得分:1)
删除列的确会将删除的值标记为逻辑删除。列值立即变得不可用,并且在下一个压缩周期中将删除列数据。
如果要在进行压缩之前加快删除列的速度,可以在使用 ALTER TABLE 命令后运行 nodetool upgradesstables 删除数据。更改列的元数据。
请参阅文档: https://docs.datastax.com/en/cql/3.1/cql/cql_reference/alter_table_r.html
答案 1 :(得分:0)
如果我没记错的话,drop of column并不会真正用逻辑删除标记删除的值,而是将相应的条目插入system.dropped_columns
表中,然后进行编码,例如SerializationHelper和{{3 },可以即时执行过滤。压缩时将删除数据。
将值显式设置为null不会使情况变得更好,因为您将向表中添加数据。
我建议在小型集群上测试删除并检查其行为。