主要观点:作为 ORM 维护者,对 SQL 有一些不满但仍可用,认为没必要幻想替换它;关注数据库执行查询的协议,Redis 协议在某些方面优于 PostgreSQL 和 MySQL 协议;讨论了关系数据库协议中的可变状态、安全重试、幂等性键和预处理语句等问题,并提出改进建议。
关键信息:
- Active Record 连接数据库时会执行特定查询的“前奏”,这些设置可在任何时候更改,增加了连接管理的复杂性,且难以从错误中恢复。
- 数据库客户端处理网络错误时,多数情况下不清楚是否可安全重试,SQL 中判断查询是否幂等不易,需要调用者指示。
- 可通过“幂等性键”将非幂等操作转为幂等操作,ValKey 即将实现此功能,这能解决安全重试问题。
- 预处理语句虽能防 SQL 注入和提升性能,但存在会话范围限制、连接关闭时丢失、占用服务器内存等问题,MySQL 和 PostgreSQL 协议可借鉴 Redis 的 EVALSHA 改进。
重要细节: - MySQL 的“前奏”查询示例及 PostgreSQL 的相关设置。
- HTTP 明确允许重试特定动词及 SQL 中判断幂等性的示例。
- Redis 中使用 Lua 脚本及 SCRIPT LOAD 和 EVALSHA 命令的示例。
- Active Record 处理预处理语句的情况及与 MySQL 协议的交互。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。