【问题标题】:Cassandra, why SSTABLE count is 3 for 1 column family (table)Cassandra,为什么 1 个列族(表)的 SSTABLE 计数为 3
【发布时间】:2014-07-21 01:36:39
【问题描述】:

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

示例: 表:message1

SSTable 计数: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:定期 commitlog_sync_period_in_ms: 10000

提交日志同步为 10 秒。但是数据没有传输或刷新到磁盘? Memtable数据大小,字节:38797312

【问题讨论】:

    标签: cassandra cassandra-2.0


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      2) 是表格的每一列吗?

      没有 1-1 映射 b/w 列族和 sstable。每当一个 memtable 刷新到磁盘上时,就会创建一个新的 SSTABLE。

      【讨论】:

        【解决方案3】:

        你应该看看it

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

        我想它会对你有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-07-22
          • 2015-07-25
          • 1970-01-01
          • 2023-03-26
          • 2014-07-25
          • 1970-01-01
          • 2014-05-30
          相关资源
          最近更新 更多