More databases should be single-threaded
5 months ago
- #database
- #sharding
- #scalability
- 传统SQL数据库面临事务模式(READ COMMITTED可提交读、REPEATABLE READ可重复读、SERIALIZABLE可串行化)导致死锁、竞态条件和扩展瓶颈的问题。
- SQLite等单写入器数据库通过确保每次只有一个写入器来避免写入冲突,但无法扩展到多个写入器。
- 数据库分片有助于扩展,但会带来跨分片查询、复杂基础设施和困难的事务/迁移等挑战。
- 乐观并发控制、Saga模式和两阶段提交可以缓解部分分片问题,但需要权衡取舍。
- 分片式单线程数据库具有概念纯粹性、可串行化事务和水平扩展能力,但需要早期就确定分片方案。
- ScyllaDB和VoltDB等现有解决方案采用每核分片概念,但主要针对高规模应用,普通Web开发者难以采用。
- 一个『基本兼容Postgres』、支持可串行化事务和良好分片的数据库,可以在不彻底改变范式的情况下解决许多常见问题。