我需要在java中实现一个cassandra触发器,它将对INSERT和UPDATE操作采取不同的操作。
我已经看到如何在问题Cassandra sample trigger to get the deleted row and column values中识别DELETE操作,但我无法在ColumnFamily对象中看到允许代码区分INSERT的任何方法vs UPDATE,有没有办法实现这个目标?
答案 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;
}
}