大家好,我是数据库小学妹 👋
上个月有运维朋友找我吐槽。月底跑报表卡得要命,领导拍板说"上分布式吧"。他一脸懵:分布式数据库到底是什么?跟MySQL有啥区别?我们真的需要吗?
我跟他说,分布式数据库不是想上就能上的。用对了是利器,用错了能把你团队拖进泥潭。
今天就掰开了说:分布式数据库是什么、什么时候该用、怎么选不踩坑。
一、分布式数据库是什么,一句话讲明白
分布式数据库,说白了就是:把数据切开放在多台服务器上,但你用起来感觉还是一台。
打个比方。你去图书馆借书,以前只有一个总馆,所有书都堆在那儿。分布式数据库相当于开了好几个分馆。每家存一部分书,但只需要一个窗口办手续。不用管书在哪个馆。
技术上讲,它有两个核心特点:
- 数据物理分散:数据被切成多个分片(Sharding),分布到不同节点上存储。
- 逻辑统一访问:应用还是用标准SQL操作,不用管数据在哪台机器。
传统数据库(比如单机MySQL)所有数据都在一台机器上。这叫集中式数据库。分布式打破了单机限制,理论上可以横向加机器来扩容。那分布式和集中式数据库有什么区别?简单说,集中式是"一台机器扛所有"。分布式是"多台机器分着扛"。
但这里有个重点:分布式数据库跟"几台MySQL搭个主从"不一样。主从复制只是做了读写分离,数据还是集中存的。真正的分布式要把数据切片、事务协调、故障转移这些事自己搞定。
二、该不该上分布式,先回答三个问题
我在项目里见过太多"跟风上分布式"最后后悔的案例。
其实判断该不该用分布式,回答三个问题就够了。
第一个问题:单表数据量大到查不动了吗?
单表还在百万、千万级,加索引、做分区就能解决。真到了亿级,查询优化空间就很小了。
第二个问题:高峰期扛不住了吗?单机MySQL扛得住吗?
单机MySQL跑几千QPS通常没问题。到了万级QPS,连接池和缓存都优化过了,还是撑不住。这时候才该考虑分布式。
第三个问题:RTO、RPO要求有多高?
有些系统停机半小时能接受。但有些系统一秒都不能停。如果要求RTO秒级、RPO为零,分布式数据库的多副本机制是必要的。
说实话,我以前也走过弯路。觉得数据量大就该上分布式,后来才想明白。
三个问题里,至少两个回答"是",才值得考虑。否则,集中式数据库够用了。别给自己找麻烦。
三、三种架构路线,各有什么坑
决定上分布式了,接下来要选架构。目前主流的分布式数据库有三种技术路线:
| Share-Nothing(无共享) | 数据水平切片,每个节点独立 | 金仓KES Sharding、TiDB、OceanBase | 海量数据、高并发OLTP |
| 共享存储集群 | 所有节点共享存储,各自计算 | 金仓共享存储集群、Oracle RAC | 不想改应用、平滑替换Oracle |
| 分库分表中间件 | 中间件做路由,底层是独立实例 | ShardingSphere、MyCat | 已有MySQL集群,想低成本扩展 |
Share-Nothing 是最彻底的方案。数据切片后各管各的,加节点就能扩容。但分布式事务是最大的坑。一个事务跨了多个分片,开销不小。跨分片查询也麻烦。比如按用户ID切片后,想查"金额大于1万的订单",每个片都得扫一遍。
共享存储集群 改动最小,应用基本不用改。所有节点看到同一份数据,没有跨分片事务的问题。但扩展上限受存储制约,节点数有天花板。
分库分表中间件 成本最低。在现有MySQL上加一层代理就行。但本质是"拼"出来的分布式。运维复杂度高,跨库JOIN和分布式事务都得自己处理。
选哪条路线,核心看你当前的痛点。数据量大选Share-Nothing,想平滑替换选共享存储集群。预算紧且已有MySQL集群,可以先用中间件过渡。
很多企业不确定未来该选哪种。金仓KES的做法是把集中式和分布式做在同一套代码根上。前期用集中式跑业务,后面数据量涨了再切分布式。不用换产品,省得再做一次迁移。
四、选分布式数据库,最容易踩的四个坑
坑一:把"分布式"当性能银弹
分布式解决的是扩展性问题。不是单次查询的性能问题。如果单条SQL写得烂,分布式也救不了你。相反,分布式引入了网络延迟。单次查询可能比单机还慢。该做SQL优化的还是得做。
坑二:忽略分布式事务的代价
跨节点事务要走两阶段提交(2PC)。每多一个节点就多一轮网络通信。如果业务里大量事务都跨分片,吞吐量反而可能下降。设计阶段就要想好分片键。尽量让高频事务落在同一个分片内。
坑三:运维能力没跟上就急着上
分布式数据库的运维比单机复杂得多。节点扩缩容、数据再均衡、跨机房容灾切换,都得有经验的DBA团队来管。如果运维能力没跟上,先用共享存储集群或主备架构过渡更稳妥。比如金仓的共享存储集群方案,自带完善的监控告警和自动故障切换工具。运维压力小很多。
坑四:选型只看TPC-C跑分
很多人问我:分布式数据库和分库分表到底有什么区别?简单说,分库分表是"手动挡",分布式数据库是"自动挡"。选型时TPC-C分数高不代表适合你的场景。电商的高并发短事务和政务的复杂报表查询,对数据库的要求完全不同。一定要在自己的业务数据上跑POC。用真实SQL去测,而不是看厂商PPT。
五、我的选型建议
回到开头那个朋友的问题。他们公司是典型的中型政务系统。数据量大,月底报表查询并发高。我给他的建议是:
先用共享存储集群替换单机。先把高可用问题解决掉。等数据量再翻倍,再考虑上Share-Nothing的方案。
选型时我让他重点考察了几个维度:
| SQL兼容性 | 现有SQL改动量大不大?存储过程能不能直接跑? |
| 分布式事务能力 | 跨节点事务的延迟和吞吐量实测数据 |
| 平滑迁移成本 | 从现有数据库迁过来,数据校验和回退方案有没有 |
| 运维工具成熟度 | 监控、告警、扩缩容操作是否方便 |
| 信创合规 | 是否通过安全可靠测评,是否有同类行业落地案例 |
他最后选了金仓KES的共享存储集群方案。原因很实际。Oracle兼容性好,现有存储过程基本不用改。共享存储架构对应用侵入小,不用重写业务代码。后续规模上来了,还能直接切换到KES Sharding分布式模式。不用再换产品。
总结
分布式数据库是什么?就是数据放在多台机器上,对外还是一套逻辑的整体。
该不该上?看数据量、看并发、看可用性。至少两个指标到瓶颈了再考虑。
怎么选?根据业务痛点选架构路线。别只看跑分,一定要跑POC。重点关注SQL兼容性、分布式事务能力和运维成熟度。
对信创环境下的企业来说,金仓KES的统一内核、集中式分布式按需切换,是一个值得考虑的选项。前期用集中式降低迁移风险,后续按需扩展到分布式。不需要换产品重新迁移。
最后想问大家:你们公司数据库有遇到过类似的瓶颈吗?是选择硬扛优化,还是已经上了分布式?踩过哪些坑?欢迎在评论区聊聊,互相少走点弯路 👋
我是数据库小学妹,咱们下篇见 👋





