目前,我有3个Cassandra节点。
我创建了一个名为events
插入> 40k行后,我在每个节点中执行以下命令。
nodetool -h localhost cfstats
这是其中一个节点
的输出Table: events
SSTable count: 0
Space used (live): 0
Space used (total): 0
Space used by snapshots (total): 43516
Off heap memory used (total): 0
SSTable Compression Ratio: 0.0
Number of keys (estimate): 1
Memtable cell count: 102675
Memtable data size: 4224801
Memtable off heap memory used: 0
Memtable switch count: 1
Local read count: 0
Local read latency: NaN ms
Local write count: 4223
Local write latency: 0.085 ms
Pending flushes: 0
Bloom filter false positives: 0
Bloom filter false ratio: 0.00000
Bloom filter space used: 0
Bloom filter off heap memory used: 0
Index summary off heap memory used: 0
Compression metadata off heap memory used: 0
Compacted partition minimum bytes: 0
Compacted partition maximum bytes: 0
Compacted partition mean bytes: 0
Average live cells per slice (last five minutes): 0.0
Maximum live cells per slice (last five minutes): 0.0
Average tombstones per slice (last five minutes): 0.0
Maximum tombstones per slice (last five minutes): 0.0
令我惊讶的是,Space used (live)
和Space used (total)
为0.其他节点也有0 Space used (live)
和Space used (total)
。
但是,当我执行SELECT时,我可以获得之前插入的多行。
我可以知道,为什么我的Space used (live)
和Space used (total)
0适用于所有节点?
答案 0 :(得分:5)
您的Memtables尚未刷新到磁盘。同花顺通常由以下几点引发:
如果您插入40k行然后什么都不做,只要它们适合放在内存中,它们就会留在内存中。您将看不到这些行的永久磁盘使用情况,因为没有磁盘上的sstable保存它们的值。
这些行的持久性由commit-log保证,它按照磁盘上发生的顺序存储突变,并且可以在节点发生故障时重放。 commit-log是一个滚动日志,因此当commit-log segement即将到期时,Cassandra将刷新将该段中的数据保存到磁盘sstable的memtable。