Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
即使从cassandra db中删除键空间并进行压缩,也无法释放磁盘空间_Cassandra - Fatal编程技术网

即使从cassandra db中删除键空间并进行压缩,也无法释放磁盘空间

即使从cassandra db中删除键空间并进行压缩,也无法释放磁盘空间,cassandra,Cassandra,我在其中创建了一个键空间和一个表(columnfamily)。 比如说“ks.cf” 在columnfamilycf中输入了几十万行之后,我使用df-h查看了磁盘使用情况 然后,我使用cqlsh中的DROP keyspace ks命令删除了键空间 同样在删除后,磁盘使用量保持不变。我也做了nodetool compact,但运气不好 有谁能帮我配置这些东西,以便在删除数据/行后释放磁盘使用量吗?如果您只是尝试删除行,那么您需要让删除步骤通过通常的删除周期(删除行->创建墓碑->压缩实际上删除行)

我在其中创建了一个键空间和一个表(columnfamily)。 比如说
“ks.cf”

在columnfamily
cf
中输入了几十万行之后,我使用
df-h
查看了磁盘使用情况

然后,我使用
cqlsh
中的
DROP keyspace ks
命令删除了键空间

同样在删除后,磁盘使用量
保持不变
。我也做了nodetool compact,但运气不好


有谁能帮我配置这些东西,以便在删除数据/行后释放磁盘使用量吗?

如果您只是尝试删除行,那么您需要让删除步骤通过通常的删除周期(删除行->创建墓碑->压缩实际上删除行)

现在,如果您完全想删除键空间,请检查您的cassandra数据文件夹(它应该在yaml文件中指定)。在我的例子中,它是“/mnt/cassandra/data/”。在该文件夹中,每个键空间(即ks)都有一个子文件夹。您可以完全删除与密钥空间相关的文件夹


如果您想保留该文件夹,最好知道cassandra会在删除键空间之前创建键空间的快照。基本上是所有数据的备份。您只需进入“ks”文件夹,找到快照子目录。进入snapshots子目录并删除与键空间放置相关的快照。

最近遇到此问题。删除表后,将创建快照。如果不打算这样做,此快照将允许您回滚此操作。但是,如果您确实想要回硬盘空间,则需要运行:

nodetool-h localhost-p 7199 clearnapshot

在适当的节点上。此外,您还可以在cassandra.yml中使用
auto_snapshot:false
关闭快照


编辑:拼写/语法

nodetool cleanup
从磁盘中删除不再需要的所有数据,即节点不负责的数据。(
clearnapshot
将清除所有快照,这可能不是您想要的。)

当您删除表或键空间时,Cassandra不会自动清除快照。如果在cassandra.yaml中启用了auto_snapshot,则每次删除表或键空间时,cassandra都会捕获该表的快照。如果不是错误地执行此操作,此快照将帮助您回滚此表数据。如果确实从磁盘中清除了这些表数据,则需要在下面运行clearnapshot命令以释放空间

nodetool-u XXXX-pw XXXXX clearnapshot-t快照名称


您可以随时在cassandra.yaml中禁用此自动快照功能。

Yup!!它维护可以手动删除的快照。但我仍然看到使用df-h时的磁盘空间是相同的,但当我再次将数据推入cassandra时,磁盘空间并没有增加。也许OS或Cassandra做了某种缓存或磁盘空间管理,我不知道。记住,对于所有Cassandra写操作,数据首先保存在内存中,直到Cassandra决定以SStable的形式将其刷新到磁盘。您可以通过“nodetool flush”手动将其刷新到磁盘。哦,好的!!然后必须有一些配置参数来决定何时刷新以及刷新多少数据。这些配置参数是什么?我会在卡桑德拉官方文档中找到它吗?是的-memtable_total_space_in_mb。。。这里是官方文档中的链接:非常感谢:)我将在我的应用程序中看看我能用这些参数做些什么。我使用了相同的方法,但即使在clearsnapshot之后仍然有空目录。我的猜测是删除这些是安全的。有人吗?@gubble是的,由于强迫症,我最终手动移除了它们。如果有相似的表,请将散列排列起来。
nodetool cleanup
触发应用于所有或特定键空间/表的特殊类型的压缩。如果桌子掉了,那么卡桑德拉就不再关心它了,所以不会发生压缩。。。