前阵子跟一个做电商的朋友吃饭,他正为数据库的事头疼。系统上线才半年,订单表已经快撑不住了,查询越来越慢。他问我:“你说企业一般用什么数据库?网上答案五花八门,越看越糊涂。”这问题其实特别典型,几乎每个技术负责人都会在某个阶段被它卡住。数据库选型不像买手机,参数对得上就行,它更像选房子——地段、户型、预算、未来孩子上学,每一样都得掂量。选错了,轻则性能打折,重则整个业务架构都得推倒重来。

先说说最主流的关系型数据库,这几乎是所有企业的默认起点。MySQL和PostgreSQL是开源阵营的两大扛把子,MySQL胜在生态成熟,网上教程一抓一大把,招人也容易,中小型项目用它基本不会错。PostgreSQL这几年势头很猛,功能更全,对复杂查询和数据分析的支持更强,如果你团队里有人熟悉它,那它其实是比MySQL更稳妥的长线选择。商业数据库里,Oracle和SQL Server依然在金融、政府这类保守行业占据统治地位,但动辄几十万的授权费,加上你得养一个专门伺候它的DBA,小公司真没必要硬上。选关系型数据库的核心逻辑很简单:数据要强一致,事务要可靠,业务逻辑里充满JOIN和复杂查询,那这条路就是你的主航道。
但关系型数据库有个天生短板——扩展性。当你的数据量到了千万级、亿级,单机再牛也扛不住,这时候就得考虑分布式方案。很多人一听分布式就想到分库分表中间件,像ShardingSphere或者MyCat,这确实能救急,但运维复杂度直线上升,每次扩容都像做一次心脏手术。更省心的做法是直接换分布式数据库,比如TiDB或者OceanBase,它们原生支持水平扩展,SQL兼容性做得也不错,迁移成本比想象中低。我见过不少电商、游戏公司,一开始用MySQL,订单量爆发后痛苦地迁到TiDB,虽然过程折腾,但之后几年都睡得安稳。如果你预感到业务会快速增长,与其后期动刀,不如一开始就评估分布式方案。
接下来是NoSQL阵营,这名字听着像“不要SQL”,但它不是来替代关系型数据库的,而是来补位的。最典型的是Redis,这玩意儿几乎是互联网公司的标配,缓存、session、计数器、排行榜,靠它就能扛住高并发。但注意,Redis是内存数据库,数据量受物理内存限制,而且持久化能力弱,你绝不能把核心业务数据只放在Redis里。MongoDB则是文档型数据库的代表,数据结构灵活,字段可以随意增减,特别适合内容管理、用户画像这类字段经常变化的场景。但它的强一致性不如关系型数据库,事务支持也比较弱,你要是拿它存订单、账目,迟早出事。选NoSQL的关键是明白它的边界:它是为特定场景而生的,不是万能的。
说到特定场景,搜索引擎数据库是很多企业容易忽略的一环。业务里的模糊搜索、全文检索、聚合统计,靠MySQL的LIKE语句硬查,数据量一大就慢得像蜗牛。这时候Elasticsearch就该上场了,它天生就是为搜索而设计,分词、排序、高亮、聚合,样样拿手。我认识一个做资讯类App的团队,早期文章量少的时候用MySQL随便查,后来文章上了百万篇,搜索接口直接超时,换了Elasticsearch之后,查询时间从秒级降到了毫秒级。当然,Elasticsearch也有自己的毛病,比如数据一致性偏弱,写入延迟相对高,所以通常的做法是业务数据落在MySQL或PostgreSQL里,再异步同步一份到Elasticsearch供搜索用。这个组合拳几乎是内容型产品的标准答案。
还有一个场景经常被人忽略——时序数据,比如监控指标、IoT设备上报、金融行情。这类数据的特点是写入极其频繁,但很少更新,查询大多是按时间范围做聚合。如果你拿MySQL来存,磁盘占用和写入性能很快会拖垮你。这时就该上时序数据库,比如InfluxDB、TDengine,或者Prometheus(它更多是监控系统,但底层也是时序存储)。我有个做工业物联网的朋友,每秒钟要从上千台设备采集数据,用了MySQL后一周就要清一次表,后来换TDengine,压缩比高、查询快,运维彻底解脱。时序数据库选型时重点看压缩率和聚合查询性能,这两个指标直接决定你的存储成本和系统响应速度。
聊聊图数据库,这个相对小众,但特定场景下威力惊人。社交关系、推荐系统、风控反欺诈、知识图谱,这些场景里数据之间的关联关系比数据本身更重要。传统关系型数据库查多度关系要反复JOIN,性能惨不忍睹,而图数据库比如Neo4j,用原生图存储,查“朋友的朋友的朋友”就是一条遍历指令的事。有个做社交产品的团队跟我分享过,他们用MySQL查三度人脉要几十秒,换成Neo4j后毫秒级返回,体验天差地别。但图数据库不适合做通用存储,你不需要把所有数据都塞进去,只把关系密集的那部分放进去就够了。
说到这儿,你可能会觉得方案太多更纠结了。其实企业数据库选型有个很实用的判断顺序:先看数据模型,是结构化、半结构化还是非结构化;再看访问模式,是事务型、分析型、搜索型还是时序型;然后看数据量和增长预期,决定要不要一开始就上分布式;看团队技术储备,一样优秀的两个方案,选团队更熟的那个,比选“理论最优解”靠谱得多。国内很多公司踩坑,不是选错了技术,而是选了团队不会用的技术。
回到我那个做电商的朋友,我给他的建议是:核心订单和支付用MySQL(如果预期增长快,直接TiDB),商品搜索用Elasticsearch,热点数据缓存用Redis,运营数据分析用ClickHouse或者直接上数据仓库。这个组合不算惊艳,但足够稳。数据库选型从来不是一锤子买卖,而是一个动态调整的过程。你的业务会变,数据特征会变,方案也要跟着变。最忌讳的就是“一招鲜吃遍天”,拿一个MySQL打天下,或者听说哪个新数据库火就盲目上马。搞清楚自己的业务到底在做什么,数据到底长什么样,再结合团队能力做决策,这才是企业数据库选型的正确姿势。


