cassandra触发创建vs更新

时间:2016-02-15 22:11:08

标签: triggers cassandra

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

我已经看到如何在问题Cassandra sample trigger to get the deleted row and column values中识别DELETE操作,但我无法在ColumnFamily对象中看到允许代码区分INSERT的任何方法vs UPDATE,有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:0)

概念上 INSERT UPDATE 之间没有任何区别。实际上,INSERT和UPDATE只是变异。 Cassandra给了他们不同的名字,以便来自关系数据库的人有熟悉的概念

答案 1 :(得分:0)

提及@doanduyhai并且根据Casssandra sources INSERT 操作更新行时间戳(LivenessInfo)。 对于其他操作,此时间戳不会更新,并且等于Long.MIN_VALUE。

自定义触发器,用于检查 INSERT 操作

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;
    }
}