我有一张带有太字节数据的Cassandra表(Cassandra版本是2.0),这里是架构的样子
"my_table" (
key ascii,
timestamp bigint,
value blob,
PRIMARY KEY ((key), timestamp)
)
我想删除一些数据,但在想要估算它将回收多少磁盘空间之前。
不幸的是,JMX指标的统计数据仅在过去两周内可用,因此不太有用。
有没有办法检查某些数据集使用了多少空间(例如时间戳<1000)?
我还想知道是否有办法检查查询结果集大小,以便我可以执行select * from my_table where timestamp < 1000
之类的操作,并查看结果占用的字节数。
答案 0 :(得分:1)
没有机制可以从数据中查看磁盘上的大小,它可以远离请求的协调器以及影响它的影响级别,如压缩和多个sstables,这将使其变得困难。
另请注意,发出删除不会立即减少磁盘空间。 C *不删除数据,sstables是不可变的,不能更改。相反,它会在gc_grace_seconds消失后写入一个墓碑条目。当sstables被合并时,墓碑+数据将合并为墓碑。超过gc_grace_seconds后,在压缩过程中将不再复制墓碑。
gc_grace是为了防止在分布式系统中丢失删除,因为直到修复(应该安排〜每周),并不能绝对保证所有副本都能看到删除。如果副本没有看到删除并删除了逻辑删除,则数据可以返回。
答案 1 :(得分:1)
不,不是真的。
使用sstablemetadata
,您可以在mc-####-big-data.db
文件中找到逻辑删除丢弃时间,最小时间戳和最大时间戳。
此外,如果您的硬盘空间不足,请考虑nodetool cleanup
,nodetool clearsnapshot
,然后再考虑nodetool repair
。