关闭。这个问题是基于意见的。它目前不接受答案。**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。
去年关门了。改进这个问题我需要知道哪一个更适合性能触发器| | ttl?或者哪一种更方便使用。
9bfwbjaz1#
所以,虽然“更好”绝对是主观的,但我在这里要做的是讨论在cassandra中启用ttl和触发器需要做些什么。那你自己决定吧。要实现ttl,需要修改 default_time_to_live 属性设置为一个值(以秒为单位),该值从写入时间开始到应该删除该数据的时间。默认为零( 0 ),这将有效地禁用该表的ttl。以下cql将设置7天的ttl:
default_time_to_live
0
ALTER TABLE my_keyspace_name.my_table_name WITH default_time_to_live = 604800;
请注意,ttl的数据仍然会创建墓碑,所以要小心。它最适用于时间序列用例,其中数据由 timestamp / timeUUID 在 DESC 结束顺序。降序部分是关键,因为它使您的逻辑删除保持在分区的“底部”,所以查询最新数据时不应该遇到它们。实现触发器要复杂一些。首先,您需要编写一个 implements 这个 ITrigger 接口。该类还需要重载 augment 方法,如下所示:
timestamp
timeUUID
DESC
implements
ITrigger
augment
public class MyTrigger implements ITrigger { public Collection<RowMutation> augment(ByteBuffer key, ColumnFamily update)
在该方法中,您需要从 update 元数据,构建 DELETE 声明:
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/ 目录。然后(是的,还没有完成)需要将触发器类添加到表中:
$CASSANDRA_HOME/lib/triggers/
CREATE TRIGGER myTrigger ON my_table_name USING 'com.yourcompany.packagename.MyTrigger';
虽然你可以自由选择最适合你的,但我强烈建议使用ttl。在cassandra中实现触发器是一件非常困难的事情。
1条答案
按热度按时间9bfwbjaz1#
所以,虽然“更好”绝对是主观的,但我在这里要做的是讨论在cassandra中启用ttl和触发器需要做些什么。那你自己决定吧。
要实现ttl,需要修改
default_time_to_live
属性设置为一个值(以秒为单位),该值从写入时间开始到应该删除该数据的时间。默认为零(0
),这将有效地禁用该表的ttl。以下cql将设置7天的ttl:请注意,ttl的数据仍然会创建墓碑,所以要小心。它最适用于时间序列用例,其中数据由
timestamp
/timeUUID
在DESC
结束顺序。降序部分是关键,因为它使您的逻辑删除保持在分区的“底部”,所以查询最新数据时不应该遇到它们。实现触发器要复杂一些。首先,您需要编写一个
implements
这个ITrigger
接口。该类还需要重载augment
方法,如下所示:在该方法中,您需要从
update
元数据,构建DELETE
声明:…以及一些逻辑来获取要删除/移动的键值以及您需要在此处执行的任何其他操作。
接下来,需要将该类构建到jar中并将其复制到
$CASSANDRA_HOME/lib/triggers/
目录。然后(是的,还没有完成)需要将触发器类添加到表中:
虽然你可以自由选择最适合你的,但我强烈建议使用ttl。在cassandra中实现触发器是一件非常困难的事情。