下面是我正在使用的表模式。 Cassandra版本是2.1
CREATE TABLE metadata (
customerid int,
user text,
messageid text,
subject text,
PRIMARY KEY ((customerid, user), messageid) )
WITH CLUSTERING ORDER BY (messageid ASC)
AND compaction = {'class':'org.apache.cassandra.db.compaction.LeveledCompactionStrategy', 'sstable_size_in_mb' : '4'} AND gc_grace_seconds = 172800 ;
对于相同的(customerid,user)记录将连续插入。插入时我们设置的TTL最少为14天,并且总是大于gc_grace_seconds。
没有更新或删除。
对于相同的(customerid,user),我们可以在多个SSTable文件中包含数据。
当LCS压缩运行时,即使其他未压缩的SSTable文件具有相同分区键的数据,它是否会丢弃已经过的记录。在我读过的一个cassandra邮件档案中,
“如果正在压缩的SSTables中包含该行的所有片段,那么Tombstones将通过Minor Compaction过期。”
这适用于带TTL的数据吗?
答案 0 :(得分:0)
您将为表格"元数据"插入整行。正如您所提到的,没有更新和手动删除,整个行应该只驻留在一个SSTable中。因此,在进行轻微压缩时,相应的行将从SSTable中删除。
仅供参考,您的TTL为14天。您的数据将在14天后标记为墓碑。你的gc_grace_seconds是172800(2天)。所以墓碑将在未来2天内存在。因此,一旦从开始到期16天,下一个次要或主要压缩将删除数据。