cassandra在压实过程中做了什么?

时间:2011-10-03 09:17:11

标签: cassandra immutability tombstone stream-compaction

我知道cassandra会合并sstables,row-keys,删除墓碑等等。

  1. 但我真的很想知道它是如何进行压缩的?

  2. 由于sstables是不可变的,它会将所有相关数据复制到新文件中吗?在写入这个新文件时,它会丢弃墓碑标记数据。

  3. 我知道什么是压缩,但想知道它是如何实现的(T)

2 个答案:

答案 0 :(得分:7)

如果您关注其中的所有帖子和评论,我希望此主题有所帮助

http://comments.gmane.org/gmane.comp.db.cassandra.user/10577

AFAIK

Whenever memtable is flushed from memory to disk they are just appended[Not updated] to new SSTable created, sorted via rowkey.
SSTable merge[updation] will take place only during compaction. 
Till then read path will read from all the SSTable having that key you look up and the result from them is merged to reply back,

Two types : Minor and Major

Minor compaction is triggered automatically whenever a new sstable is being created.
May remove all tombstones
Compacts sstables of equal size in to one [initially memtable flush size] when minor compaction threshold is reached [4 by default]. 

Major Compaction is manually triggered using nodetool
Can be applied over a column family over a time
Compacts all the sstables of a CF in to 1

Compacts the SSTables and marks delete over unneeded SSTables. GC takes care of freeing up that space

此致 泰米尔语

答案 1 :(得分:3)

有两种方法可以运行压缩:

A-轻微压实。自动运行。 B-主要压实。跑mannualy。

在两种情况下都需要x个文件(每个CF)并处理它们。在此过程中,将具有过期ttl的行标记为逻辑删除,并删除现有的逻辑删除。用此生成一个新文件。在此压缩中生成的tombostones将在下一次压缩中被删除(如果花费宽限期,则为gc_grace)。

A和B之间的区别是所采用的文件数量和最终文件。 A需要一些类似的文件(大小相似)并生成一个新文件。 B获取所有文件并仅生成一个大文件。