Write Transactions Are a Footgun with Rust's SQLx and SQLite
3 months ago
- #Rust
- #Database
- #SQLite
- 在SQLx中使用SQLite进行事务写入可能导致锁饥饿和性能问题
- SQLite是单写入器模式,写入需要获取EXCLUSIVE锁,这会导致资源争用
- SQLx中的异步事务可能在await点之间持有锁,从而阻塞其他写入操作
- 批量写入可以通过减少写入操作次数来缓解锁饥饿问题
- 对多表的原子写入操作需要使用原始SQL,这会带来SQL注入风险
- SQLx可以利用Rust的类型系统来防止在await期间持有写锁
- 建议更新文档并开展社区讨论以提高对该问题的认知