哪个更好>触发器还是ttl

hmae6n7t  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(398)

关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。

去年关门了。
改进这个问题
我需要知道哪一个更适合性能触发器| | ttl?
或者哪一种更方便使用。

9bfwbjaz

9bfwbjaz1#

所以,虽然“更好”绝对是主观的,但我在这里要做的是讨论在cassandra中启用ttl和触发器需要做些什么。那你自己决定吧。
要实现ttl,需要修改 default_time_to_live 属性设置为一个值(以秒为单位),该值从写入时间开始到应该删除该数据的时间。默认为零( 0 ),这将有效地禁用该表的ttl。以下cql将设置7天的ttl:

ALTER TABLE my_keyspace_name.my_table_name WITH default_time_to_live = 604800;

请注意,ttl的数据仍然会创建墓碑,所以要小心。它最适用于时间序列用例,其中数据由 timestamp / timeUUIDDESC 结束顺序。降序部分是关键,因为它使您的逻辑删除保持在分区的“底部”,所以查询最新数据时不应该遇到它们。
实现触发器要复杂一些。首先,您需要编写一个 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中实现触发器是一件非常困难的事情。

相关问题