
56
|
第
4
章
非范式化
数据可以根据需要在写入发件箱表之前进行非范式化。
2.
用发件箱表生成事件的缺点
使用发件箱表生成事件也有一些缺点。
需要变更应用程序代码
必须变更应用程序代码以启用该模式,这需要来自应用程序维护者的开发和测试资源。
影响业务处理性能
对业务工作流的性能影响可能非常大,尤其是通过序列化校验
schema
时
。失败的事务
也会阻止业务操作继续进行。
影响数据存储性能
对数据存储的性能影响可能非常大,尤其是从发件箱表写入、读取和删除大量记录时。
性能影响必须与其他成本保持平衡。例如,一些组织只是简单地解析变更数
据捕获日志来发出事件,而将事后清理工作留给下游团队来处理。这会给下
游团队带来一系列开销,既包括处理和标准化事件的计算成本,也包括解决
不兼容
schema
和处理与内部数据模型强耦合的影响等形式的人力成本
。生
产方节省的成本与消费方处理这些问题所产生的成本相比往往相形见绌。
4.6.4
使用触发器捕获变更数据
与前文讨论过的审计、二进制日志和预写入日志模式相比,触发器出现得更早。许多较旧
的关系型数据库使用触发器作为生成审计表的方法。顾名思义,触发器被设置为在特定条
件下自动发生。如果失败,那么导致触发器执行的命令也将失败,从而确保更新的原子性。
可以使用
AFTER
触发器捕获行级别的变更到审计表中。例如,执行任何
INSERT
、
UPDATE
和
DELETE
命令之后,触发器都会向变更数据表中写入对应的一行数据。这样可以确保对特定
表所做的变更得到相应的跟踪。
考虑图
4-12
所示的例子
。其正在更新插入用户数据到用户表,同时有一个触发器在它们发 ...