数据库协议令人失望

主要观点:作为 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 协议的交互。
阅读 11
0 条评论