Cassandra,为什么SSTABLE计数为3列1族(表)

时间:2014-05-31 10:39:33

标签: cassandra cassandra-2.0

我是cassandra的新手, 1)为什么单列族有3 sstable。 2)表中的每列(列族)是否存储在一个环中的不同节点中?或完全列族存储在单个节点中(如果我没有设置复制因子)。

例如: 表:message1

SSTable count:3

    Space used (live), bytes: 221521
    Space used (total), bytes: 226349
    SSTable Compression Ratio: 0.2548965072049006
    Number of keys (estimate): 384
    Memtable cell count: 7817866
    Memtable data size, bytes: 38797312
    Memtable switch count: 51
    Local read count: 0
    Local read latency: 0.000 ms
    Local write count: 26539152
    Local write latency: 0.000 ms
    Pending tasks: 0
    Bloom filter false positives: 0

3)

commitlog_sync:periodic commitlog_sync_period_in_ms:10000

Commitlog Sync为10秒。但是数据没有传输或刷新到光盘? 可记忆的数据大小,字节:38797312

3 个答案:

答案 0 :(得分:0)

您应该查看it

据我所知,Cassandra为SSTable创建了三个用于数据的文件,另一个用于布隆过滤器,第三个用于索引。

我认为它会对你有所帮助。

答案 1 :(得分:0)

SSTable是不可变的,因此当发生插入/更新而不是覆盖行时,Cassandra会在另一个SSTable中写入插入或更新数据的新时间戳版本。通过执行压缩,您可以将所有SStable合并为一个SSTable。

Compaction通过分区键合并每个SSTable数据中的数据,根据其时间戳选择最新的存储数据。

http://www.datastax.com/documentation/cassandra/2.0/cassandra/dml/dml_write_path_c.html

答案 2 :(得分:0)

  

1)为什么单列族具有3 sstable?

每当将内存表刷新到磁盘时,都会创建一个新的SSTABLE。冲洗何时发生?当内存表已满或提交日志已满或触发手动刷新时。节点中SSTABLE的数量是有限制的,此限制是可配置的(min_threshold,即,一个节点一次可以存在最大sstable的数量)。超出此限制时,将触发压缩,该压缩将合并SSTABLES并通过分区键使用所有SSTABLES中带有最新时间戳的数据创建新的SSTABLE。

  

2)是表的每一列吗?

没有1-1映射的黑白列族和sstable。每当将内存表刷新到磁盘时,都会创建一个新的SSTABLE。