当前位置:首页 > 焦点

Web数据库

我见过太多人把Web数据库想成云端Excel,据库这实在是据库个天大的误会。上周帮朋友调试一个电商后台,据库他坚持说“数据库就在服务器上,据库直接连就行”,据库结果折腾半天才发现,据库那只是据库个CSV文件被PHP读进来而已。这事儿让我想起一个扎心的据库事实:大多数人连Web数据库的门槛都没摸到。

Web数据库真正的据库核心,是据库HTTP协议和数据库引擎之间那层薄薄的中间层。拿最简单的据库LAMP架构说吧,Apache收到请求,据库PHP脚本解析参数,据库拼成SQL语句丢给MySQL,据库再把结果包装成HTML返回。据库整个过程快则几十毫秒,慢则几秒,但每个环节都可能成为瓶颈。我见过最离谱的案例,某公司把十亿条日志存在MySQL里,查询一次要两分钟,程序员还理直气壮地说“数据库就这样”。

其实换个思路就通了。把高频访问的数据扔进Redis缓存,低频但复杂的关系数据留在MySQL,全文搜索交给Elasticsearch,各干各的活儿。这就像厨房里切菜用菜刀,削皮用削皮器,非要用一把刀干所有事,效率能高才怪。我认识一个做社交产品的哥们儿,他们早期就用MongoDB存用户关系,后来数据量上来了,关系查询慢得要命,最后不得不重构成Neo4j图数据库,那叫一个折腾。

但选型这事儿真不能跟风。前两年NewSQL火得不行,动不动就TiDB、CockroachDB。可你想想,一个日活几千的小网站,用得着分布式事务吗?我见过太多小团队被技术名词忽悠,上了分布式数据库,结果运维成本比开发成本还高。反过来,有些大厂的核心业务还在用Oracle,你问他为什么不换,他说“跑得好好的,动它干嘛”。这话糙理不糙。

真正让我觉得Web数据库有意思的,是那些看不见的细节。比如连接池——你以为开了十个连接就够用,结果高峰期线程一多,数据库直接被拖死。再比如索引,明明加了索引查询还是慢,explain一看,索引没被用到,因为你在where子句里对字段做了函数操作。这些坑,不踩过几回根本记不住。

还有个常被忽略的点:数据库不是只往里存数据,还要考虑怎么把数据删掉。GDPR一出来,欧洲用户要求删除个人数据,你得真的删干净。有些公司图省事,只做了逻辑删除(加个deleted标记),结果被罚得裤子都不剩。这让我想起一句老话:出来混,迟早要还的。

最后说点实在的。如果你正在选型,别光看benchmark,拿你自己的数据跑一遍。也别迷信云厂商的托管服务,RDS虽好,但你要知道它底层还是那套MySQL或PostgreSQL,该优化的SQL一样得优化。Web数据库说白了就是个工具,用得好是利器,用不好是累赘。与其天天追新概念,不如把手头的东西玩明白——至少,先搞清楚你的数据到底存在哪儿,怎么读,怎么写,挂了怎么恢复。这比什么都强。

分享到: