亚马逊云科技近日宣布,Aurora DSQL 现已支持外键约束,应用程序可以直接在数据库中强制执行参照完整性,包括 CASCADE、SET NULL 及其他参照操作。这一功能弥补了用户长期以来指出、阻碍其采用该数据库的缺失环节。
Aurora DSQL 是一款无服务器、分布式且兼容 PostgreSQL 的 SQL 数据库,专为高可用、高可扩展应用设计。据文档说明,该服务通过事务期间的快照验证与提交时的冲突检测来执行参照完整性:无需锁定表,即可基于一致性事务快照校验外键关系并支持并发操作;提交时使用隐式 KEY SHARE 检查检测冲突变更,任何可能违反约束的事务都会因序列化错误被拒绝。应用需实现重试逻辑,因为并发冲突会导致事务失败而非进入等待状态。
亚马逊云科技副总裁兼杰出工程师 Marc Brooker 表示,Aurora DSQL 利用 Adjudicator 与 PostgreSQL 的 KEY SHARE 机制,在提交时检测相关行的变更且不阻塞并发读取,非外键读取的扩展性不受影响,在工作负载分布均衡时外键约束具有出色的扩展性。对于被频繁引用的行,官方建议保持被引用键稳定,将变化的值移至非键列,以减少事务冲突。
荷兰国家铁路公司首席工程师、AWS News Feed 创建者 Luc van Donkersgoed 评论称,外键约束的缺失曾是 DSQL 与普通 Postgres 之间最大的差距,阻碍了许多迁移工作,此次改动使 DSQL 在现有系统环境中更加可行。社区反应总体积极,但也有用户质疑该功能可能显著降低运行速度。亚马逊云科技提示,为维护参照完整性,对被引用或引用表执行的所有 DML 操作都会产生额外读取,客户在添加外键约束前应先对工作负载进行基准测试。