2.4 亿个域名的自动补全,99% 的按键在松开前就已出结果

8 月 31 日,HN 上 220 分的一篇文章介绍:作者用 2.4 亿个域名做自动补全,99% 的按键在用户松开前结果就已就绪。实现靠内存字符树加 SSD 内存映射块索引。

Ruurtjan Pul 在 8 月 31 日发布于 HN 的文章中介绍,其为域名基础设施查询网站 Wirewiki 实现了 2.4 亿个域名的自动补全,99% 的情况下结果在用户松开按键前就已渲染完成。

数据来源为 Tranco 排名前 100 万的域名,加上 ICANN 中心化域名数据服务(CZDS)提供的 .com、.net、.org 等新通用顶级域全量名单,合计约 2.4 亿个域名,占约 2.5 GB 磁盘空间。

实现采用两层结构:内存中的字符树(trie)存热门域名,每个前缀预计算前 8 个建议,查询时间与输入长度成正比;其余域名排序压缩成固定大小块,用 27 MB 的内存目录做二分查找后线性扫描单个块。

文章给出的压测数据:API 单独响应 p99 约 2 毫秒;经 Nginx 和 Cloudflare 全链路后,每秒 1,600 次请求时 p99 约 15 毫秒。文章同时说明,该延迟目标基于客户端在按下键时预取、松开键时渲染的实现,文中标题的"0 毫秒"指结果在按键松开前就绪,并非服务器响应时间。