触发器
触发器的主要作用是,在业务的对源表数据进行修改操作时,根据指定规则,自动生成并执行对目标表数据的修改操作。
主要应用场景
触发器的应用较多,典型的场景有:

实现机制
- 触发器本质是一个从Tcaplus到Tcaplus的缓写,与Tcaplus到MySQL的缓写的核心处理流程是相同的,只不过是在写出时调用的是不同的SDK,写出到不同的目标。
- 触发器是将存储层产生的Binlog(即业务操作)按产生时间的先后顺序,经过映射转换,再写入到另一张Tcaplus表中,从而达到从源表和目标表的数据同步的目的。
- 数据同步的过程中,如果因为网络等原因,导致数据同步失败,服务端会通过重试机制确保Binlog按顺序不间断地同步到目标表。
- 虽然数据同步过程一般不会出现Binlog遗漏的情况,但也可能会因为目标表所在存储服务器的主备故障切换等原因,导致同步到目标表的数据丢失,这个是由Tcaplus当前的主备架构和主备异步同步的机制所决定的,与数据同步本身无关。
数据摘要(已实现)
数据摘要简单来说就是将源表中的部分字段同步到目标表中,源表的增删改,也会同步触发目标表的对应记录的增删改。
例如:业务向用户详情表中插入一条用户数据时,可以通过触发器,将该这条用户数据的摘要信息(如最常读取的字段)同步插入到用户摘要表中,这样业务在需要高频读取用户摘要信息时,直接从用户摘要表中读取,可以降低服务端的CPU/IO等资源消耗。
与业务直接管理详情表和摘要表数据相比,这种方式主要简化了业务操作和事务复杂度,业务只需关注对源表的修改,触发器会保证操作最终会被同步到目标表。
数据简单预聚合(待实现)
数据简单预聚合是指对源表中的数据进行实时统计或累加,并将聚合结果同步到目标表中。源表的更新操作会触发目标表对应聚合数据的更新。
例如:业务需要实时统计用户的登录次数。当用户登录时,用户详情表(User_DB)中的 last_login_time 字段会更新。通过触发器,可以捕获 User_DB 表的更新事件,并自动将用户登录次数累加到用户统计表(User_Info)中对应的 Login_Count 字段。
好友关系维护(待实现)
好友关系维护是指通过触发器机制,在好友关系表(Friend_List)发生变更时,自动处理复杂的业务逻辑,例如维护双向好友关系。
例如:在一个社交应用中,用户A添加用户B为好友时,Friend_List 表会插入一条记录 (User_ID=A, Friend_ID=B)。如果好友关系是双向的,触发器可以捕获到这条插入操作,并自动在 Friend_List 表中插入一条反向记录 (User_ID=B, Friend_ID=A),从而确保好友关系的双向一致性。同理,当用户删除好友时,触发器也能自动处理双向删除。
注意事项:
- 设置触发器,具体创建流程请参考 TcaplusDB OMS控制台 - 设置触发器 文档。
- 触发器是保证最终一致,源表操作同步到目标表,会有毫秒级延迟,如果业务对此比较敏感,在选型需要慎重考虑。
- 创建触发器,并不会将源表的存量数据同步到目标表,如果业务有相关要求,需要先通过其它手段(如数据构造+导入)将存量数据导入到目标表。
- 业务对源表的更新操作会自动触发对目标表的更新操作,服务侧的实际写请求量会高于业务侧的写请求量,在做资源评估时需要将这个因素考虑进去。