我需要知道哪一个性能更好 触发器|| TTL?
或者它们当中哪个更方便使用。
答案 0 :(得分:2)
因此,尽管“更好”绝对是主观的,但我在这里要做的是谈论在Cassandra中同时启用TTL和触发器所需要做的事情。然后,您可以自己决定。
要实现TTL,您需要将表上的default_time_to_live
属性修改为一个值(以秒为单位),该值从写入时间到应删除该数据的时间开始。它的默认值为零(0
),有效地禁用了该表的TTL。以下CQL将TTL设置为7天:
ALTER TABLE my_keyspace_name.my_table_name WITH default_time_to_live = 604800;
请注意,TTL数据仍然会创建逻辑删除,因此请注意这一点。它最适合于时间序列用例,在这些情况下,数据按timestamp
结束顺序按timeUUID
/ DESC
进行聚类。降序部分是关键,因为这会将您的墓碑保持在分区的“底部”,因此对最近数据的查询永远都不会遇到它们。
实施触发器要复杂一些。对于初学者,您需要编写一个implements
ITrigger
接口的类。该类还需要重载augment
方法,如下所示:
public class MyTrigger implements ITrigger {
public Collection<RowMutation> augment(ByteBuffer key, ColumnFamily update)
在该方法中,您需要从update
元数据中获取表和键空间名称,并构建DELETE
语句:
{
String keyspace = update.metadata().ksName;
String table = update.metadata().cfName;
StringBuilder strCQLHeader = new StringBuilder("DELETE FROM ")
.append(keyspace)
.append(".")
.append(table)
.append(" WHERE ");
...还有一些逻辑来获取要删除/移动的键值以及您在此处需要执行的其他任何操作。
接下来,您需要将该类构建到JAR中,并将其复制到$CASSANDRA_HOME/lib/triggers/
目录中。
然后(是,尚未完成),您需要将该触发器类添加到表中:
CREATE TRIGGER myTrigger ON my_table_name USING 'com.yourcompany.packagename.MyTrigger';
尽管您可以自由选择最适合自己的一个,但我强烈建议您使用TTL。在Cassandra中实现触发器是那些往往处于“疯狂”难度下的事情之一。