为什么空间使用为0虽然我已经插入了> 40k行

时间:2016-03-07 03:49:55

标签: cassandra

目前,我有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适用于所有节点?

1 个答案:

答案 0 :(得分:5)

您的Memtables尚未刷新到磁盘。同花顺通常由以下几点引发:

  • 记忆达到最大阈值
  • 负责该memtable expiring中的数据的提交日志段
  • 用户调用nodetool flush

如果您插入40k行然后什么都不做,只要它们适合放在内存中,它们就会留在内存中。您将看不到这些行的永久磁盘使用情况,因为没有磁盘上的sstable保存它们的值。

这些行的持久性由commit-log保证,它按照磁盘上发生的顺序存储突变,并且可以在节点发生故障时重放。 commit-log是一个滚动日志,因此当commit-log segement即将到期时,Cassandra将刷新将该段中的数据保存到磁盘sstable的memtable。