卡桑德拉触发器创建与更新



我需要在java中实现一个cassandra触发器,它将对INSERT vs UPDATE操作采取不同的操作。

我已经看到了如何在问题 Cassandra 示例触发器中识别 DELETE 操作以获取已删除的行和列值,但我在 ColumnFamily 对象中看不到任何允许代码区分插入与更新的方法,有没有办法实现这一点?

INSERTUPDATE 之间在概念上没有任何区别。事实上,插入和更新只是突变。Cassandra给了他们不同的名字,以便来自关系数据库的人有熟悉的概念。

正如@doanduyhai提到的,根据Casssandra的消息来源,只有INSERT操作更新行时间戳(LivenessInfo(。对于其他操作,此时间戳不会更新,等于 Long.MIN_VALUE。

检查插入操作的自定义触发器

public class CustomTrigger implements ITrigger {
    @Override
    public Collection<Mutation> augment(Partition partition) {
        checkQueryType(partition));
        return Collections.emptyList();
    }
    private void checkQueryType(Partition partition) { 
        UnfilteredRowIterator it = partition.unfilteredIterator();
        while (it.hasNext()) {
            Unfiltered unfiltered = it.next();
            Row row = (Row) unfiltered;
            if (isInsert(row)) {
                // Implement insert related logic
            }
        }
    }
    private boolean isInsert(Row row) {
        return row.primaryKeyLivenessInfo().timestamp() != Long.MIN_VALUE;
    }
}

最新更新