【问题标题】:Cassandra 3 trigger on delete operationCassandra 3 触发删除操作
【发布时间】:2017-08-06 11:29:15
【问题描述】:

我正在尝试在 Cassandra 3 上实现一个触发器,以通过实现来捕获特定表上的删除操作

 public Collection<Mutation> augment(Partition partition)

ITrigger 接口上,但我无法区分更新和删除操作。

我怎样才能知道该操作是删除操作?

【问题讨论】:

    标签: triggers cassandra


    【解决方案1】:

    以下是捕获所有类型删除的方法

    public Collection<Mutation> augment(Partition partition) {
        if(partition.partitionLevelDeletion().isLive()) {
            UnfilteredRowIterator it = partition.unfilteredIterator();
            while (it.hasNext()) {
                Unfiltered unfiltered = it.next();
                switch (unfiltered.kind()) {
                    case ROW:
                        Row row = (Row) unfiltered;
    
                        if (!row.deletion().isLive()) {
                            // Row deletion
                        }
    
                        for (Cell cell : row.cell()) {
                            if (cell.isTombstone() {
                                // Cell deletion
                            } else {
                                // Insert or Update
                            }  
                        }
                        break;
                    case RANGE_TOMBSTONE_MARKER:
                        // Range Deletion
                        break;
                }
            }
        } else {
            // Partition Level Deletion
        }
    }
    

    假设我们有桌子:

    CREATE TABLE kv (
        pk int,
        ck int,
        d int,
        PRIMARY KEY (pk, ck)
    );
    

    这里pk是分区键,ck是集群键

    分区级删除:

    DELETE from kv WHERE pk = 1;
    

    范围删除:

    DELETE from kv WHERE pk = 1 AND ck > 10;
    

    行删除:

     DELETE from kv WHERE pk = 1 AND ck = 10;
    

    和单元格删除:

    DELETE d from kv WHERE pk = 1 AND ck = 10;
    

    【讨论】:

    • 感谢 Ashraful。当我运行命令“delete from my_table where id=22”时会调用哪个
    • id是分区键吗?如果是,则将是分区级别删除
    • 您的意思是在这种情况下会调用 else "else { // Partition Level Deletion }" ?并且“else”也会调用更新操作吗?
    • 只有删除代码else { // Partition Level Deletion }才会调用
    • 对于插入或更新或范围或删除(当您指定集群键或空插入时)操作首先如果将调用
    猜你喜欢
    • 2019-07-02
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    相关资源
    最近更新 更多