记录一次项目中遇到的问题。我们项目消费kafka的逻辑大致如下:
if(消息存在){
update(消息);
}else{
add(消息);
}
消息包括消息来源操作时间、操作类型(add/insert)、消息来源表名、消息来源表主键,业务字段等。我们这个表要求”消息来源表名+消息来源表主键“唯一。
但存在当一条消息的update和add数据同时过来,打到不同机器上进行消费,这个时候由于数据库是没有这条消息的,所以就会插入两条,不能保证数据库数据的唯一性。
于是引入一个新表,新表结构与原表一致。操作数据的逻辑变得稍微复杂一点。
if(消息.type == "add"){
旧表.add(消息);
} else{
if(新表.exist(消息)){
新表.update(消息);
} else if(旧表.exist(消息)){
旧表.update(消息);
} else{
新表.add(消息);
}
}
然后通过定时脚本将新表数据同步至旧表中。