当前位置:首页 > 问答 > 正文

重回那个数据库还没那么复杂的年代,聊聊技术怎么一步步变得这么牛逼

(开头引自一位老程序员的博客回忆:“那时候的数据库,说白了就是个高级点的文件柜。”)

记得我第一次接触数据库,是在2003年的大学计算机课上,老师抱着一本厚厚的《数据库系统概念》走进教室,翻开第一页就说:“同学们,今天起我们要学习怎么让数据不再是一盘散沙。”那时候的Oracle 9i和SQL Server 2000已经是“庞然大物”,但和今天比起来,简直像老式收音机对比智能手机。

“文件柜”时代:一切从混乱开始 (参考自《软件史记》中对早期数据管理的描述) 其实在关系型数据库普及之前,程序员的日常就是和文件搏斗,想象一下,你要管理一个图书馆的借阅记录,每本书的借还信息都写在单独的txt文件里,有人还书了,你得同时修改“图书库存.txt”“借阅记录.txt”“用户借阅数.txt”三个文件——万一改到一半断电,数据就彻底乱套了,这种窘境被程序员们戏称为“踢翻文件柜”(来源:90年代程序员社区轶事)。

SQL的魔法:给数据立规矩 (灵感来自《编码:隐匿在计算机软硬件背后的语言》中对抽象层的解释) 转折点出现在有人发明了“事务”这个概念,就像银行转账,必须保证A账户扣款和B账户入账同时成功或失败,IBM研究员埃德加·科德在1970年提出的关系模型,让数据像Excel表格一样规整,突然之间,程序员只需要写一句“UPDATE账户SET余额=余额-100 WHERE用户名=‘张三’”,就不用担心数据错乱了,当时《计算机世界》杂志评价:“这好比从手工作坊进入了流水线时代。”

互联网的冲击:数据库开始“拆家” (根据高可用架构公众号对Web 2.0技术演进的复盘) 但好景不长,到了2005年前后,淘宝、eBay这类网站发现,每秒几万人同时抢购时,再好的关系数据库也会瘫掉,工程师们被逼出各种“野路子”:有人把热门商品库存提前加载到内存里(这就是缓存的雏形),有人把数据库拆成十个小数据库(分库分表),最经典的是2007年亚马逊工程师发明的Dynamo数据库(参考AWS技术白皮书),它干脆放弃了一致性保证,换来永不宕机——这种“糙快猛”的思路,彻底动摇了关系数据库的权威。

大数据与云时代:数据库变成“水电煤” (借鉴《浪潮之巅》中关于云计算本质的论述) 2010年后,故事走向更戏剧化,谷歌发表了三篇论文,分别讲如何用廉价电脑组成超级计算机(MapReduce)、如何设计能吞下整个互联网的数据库(BigTable)、如何统一调度数万台机器(Borg),这三篇“圣经”(来源:硅谷技术圈俗称)直接催生了Hadoop和Spark,让小型创业公司也能处理TB级数据。

而最近十年,云厂商把数据库做成了“自助餐”,以前需要DBA折腾一周的数据库集群,现在点击鼠标5分钟就能开通,阿里云工程师在一次访谈中调侃:“现在年轻人可能都没见过服务器长什么样,就像00后没见过磁带一样。”

尾声:技术越简单,问题越复杂 (呼应开头的老程序员博客) 有趣的是,当年用文件柜时,我们愁的是怎么不乱;用了关系数据库,愁的是怎么不快;到了分布式时代,愁的是怎么不丢数据,每一步都在解决老问题,却催生新挑战,或许正如MySQL创始人迈克尔·维德纽斯所说:“数据库的进化史,就是人类试图用逻辑征服混沌的永恒博弈。”

重回那个数据库还没那么复杂的年代,聊聊技术怎么一步步变得这么牛逼