PostgreSQL 面试题
ACID
- 原子性, 日志实现 (A)
- 持久性, 日志实现 (D)
- 隔离性, 并发控制, 日志 + 锁实现 + MVCC 优化 (I)
- 一致性, 数据库约束实现 (C)
WAL 机制
- 先顺序写入日志
- 异步应用到数据文件
- COMMIT 时, 日志 fsync 确保持久
- 回滚时, 逆向应用日志
- 使用循环缓冲区或 LSM-Tree存储
JSONB
- 存储 JSON 文档
- 将 JSON 文档转换为抽象语法树 -> 每个节点存储 TLKV (Type, Length, Key, Value)
- 每层节点按 Key 的哈希值排序
- 常建立 GIN 索引 (需要回表查询, 存在假阳性)
事务隔离级别
锁
MVCC
索引
- PostgreSQL 支持对所有可确定性表达式建立索引
- 可确定性表达式: 表达式的结果只依赖被查询的数据 (随机数, 会话信息, 子查询反之)