硬盘一响,黄金万两——上周三,杭州一家电商公司把 MySQL 主库从 2亿行订单表直接干崩,DBA 连夜抢救,最后靠把索引换成 B+ 树才救回来。
我盯着屏幕想:教科书里那七大经典结构,真到 TB级数据面前,怎么就成了纸老虎?
到底哪些“隐藏外挂”在替我们兜底?
先说 B 树。
它长得像一棵矮胖圣诞树,节点里塞满分叉,磁盘一次就能抱走一大把。
数据库最爱它,因为磁盘寻道一次 10 ms,谁都耗不起。
B+树更狠,把数据全赶到叶子,再用链表串成糖葫芦,范围查询像滑滑梯,嗖嗖的。
MySQL 的 InnoDB 就靠它把 2 亿行拆成 3 层,树高不到 4,IO次数直接砍到个位数。
再说路由器里的 Radix Tree。
家用千兆路由背地里存着 50万条前缀规则,要是用哈希表,内存得翻三倍。
Radix 把 192.168.1.x这类公共前缀合并成一条,省下的内存拿去刷抖音不香吗?
最长前缀匹配一次搞定,包转发延迟从毫秒压到微秒,打游戏再也不怕跳ping。
写代码的兄弟都懂,字符串一上 MB 就卡成 PPT。
Emacs 偷偷用 Rope 把 10 万行源码切成小纸条,拼成一棵平衡二叉树。
删一行?
只动局部纸条,整棵树抖一抖就完事,再也不用 memcpy 全量复制。
GitHub 上有人拿 Rope 重写 Markdown 编辑器,打开 200 MB日志文件,风扇都不转。
布隆过滤器更鸡贼。
它不问“在不在”,只答“肯定不在”。
Chrome 用它拦恶意网址,1 亿条黑名单只占 100 MB 内存,误判率 1%。
Cassandra 拿它挡磁盘查找,缓存命中率从 60% 飙到 95%。
计数版还能删数据,广告系统用它实时拉黑作弊设备,一天省几十万次 SSD读写。
最后登场的是布谷鸟哈希。
名字听着像鸟,其实是个暴躁房东:新钥匙来了,直接踹走旧钥匙,旧钥匙再找下家。
最坏情况也只要两次哈希,查找永远 O(1)。
Redis 作者 antirez 在博客里提过,用布谷鸟哈希做缓存槽,多核 CPU不再打架,QPS 翻一倍。
我翻完这些外挂,脑子里只剩一句话:经典数据结构是地基,高级数据结构才是电梯。
地基稳不稳决定房子倒不倒,电梯快不快决定你能爬多高。
下次面试官问“怎么优化”,别再背七大件,直接甩 B+树、Radix、Rope、Bloom、Cuckoo五连击——能不能进大厂,就看你选不选得上这部电梯。