Triggers cassandra触发器创建vs更新

Triggers cassandra触发器创建vs更新,triggers,cassandra,Triggers,Cassandra,我需要在java中实现一个cassandra触发器,它将对插入和更新操作采取不同的操作 我已经了解了如何在问题中识别删除操作,但是我在ColumnFamily对象中看不到允许代码区分插入和更新的任何方法,有没有办法实现这一点?从概念上讲,插入和更新之间没有任何区别。事实上,插入和更新只是变异。Cassandra给它们起了不同的名字,这样来自关系数据库的人就有了熟悉的概念,如前所述,并且只根据插入操作更新行时间戳(LivenessInfo)。 对于其他操作,此时间戳不更新,且等于Long.MIN_

我需要在java中实现一个cassandra触发器,它将对插入和更新操作采取不同的操作


我已经了解了如何在问题中识别删除操作,但是我在ColumnFamily对象中看不到允许代码区分插入和更新的任何方法,有没有办法实现这一点?

从概念上讲,插入更新之间没有任何区别。事实上,插入和更新只是变异。Cassandra给它们起了不同的名字,这样来自关系数据库的人就有了熟悉的概念

,如前所述,并且只根据插入操作更新行时间戳(LivenessInfo)。 对于其他操作,此时间戳不更新,且等于Long.MIN_值

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

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;
    }
}
公共类CustomTrigger实现ITrigger{
@凌驾
公共集合扩充(分区){
checkQueryType(分区));
返回集合。emptyList();
}
私有void checkQueryType(分区){
UnfilteredRowIterator it=partition.unfilteredIterator();
while(it.hasNext()){
未过滤未过滤=it.next();
行=(行)未过滤;
如果(isInsert(世界其他地区)){
//实现插入相关逻辑
}
}
}
专用布尔值isInsert(行){
返回row.primaryKeyLivenessInfo().timestamp()!=Long.MIN_值;
}
}

谢谢您的回复。我知道从数据库的角度看没有区别,但我希望有一种方法可以在触发器中进行区分,因为特定的应用程序关心是创建了新行还是更新了现有行。存储引擎中有一个技巧可以区分插入还是更新。插入操作始终创建行标记。我不知道您是否可以从触发器API访问此信息