博客 · 6 min 阅读

在 6200 万个 CNPJ 上实现即时搜索:BaseCNPJ 背后的工程

一输入,即出现。在庞大的数据库中于毫秒间推荐出正确的企业,靠的是索引工程,而非运气。
作者 · 发布于

BaseCNPJ 中,您开始输入一家企业的名称,建议便会即时出现——而这背后是一个超过 6200 万家机构的数据库。从使用者的角度看似乎稀松平常;从工程的角度看,这是一个经典的公共数据索引与归一化问题。以下是 Meta Dados 的解决方案概要。

挑战:在 6200 万条记录上实现自动补全

“边输入边搜索”(as-you-type)必须在数十毫秒内响应,否则建议还没出现,用户就已经按下了下一个键。若在一张 6200 万行的表上用带通配符的 LIKE 来实现,注定会缓慢:每按一个键都要扫描整个数据库。

面向前缀搜索的索引

出路在于为搜索预先准备数据,而不是在原始数据中检索。我们维护一层针对前缀匹配与词项匹配优化的索引,建立在已归一化的企业名称与商号之上。用户触发的查询命中的是这层索引——它小巧且专为此而设——而非整张事务表。

用户输入“pad...”前缀索引归一化名称建议(毫秒)RFB 地址完整地理编码器自研 · 专用坐标2750 万个点
搜索命中的是建立在归一化名称之上的前缀索引(毫秒级),而非那张 6200 万行的表;地址则通过自研地理编码器转为坐标。

归一化:联邦税务局的数据是脏的

巴西联邦税务局(Receita Federal)的开放数据在到手时带有不一致的重音符号、大小写混乱、缩写和噪声。在建立索引之前,我们先做归一化:去除重音、统一大小写、处理常见词项。正是这道归一化,让“padaria sao joao”能够匹配到“PADARIA SÃO JOÃO LTDA”,而用户无需在意自己是怎么输入的。

按精确地址进行地理定位

这里就是少有人具备的差异化优势:我们不止步于市镇一级。一个自研的、在专用服务器上自托管的地理编码器,会将完整的登记地址解析为坐标(经度/纬度),并按实体缓存。目前已有超过 2750 万个已地理定位的点,覆盖可地理编码人口的 99.7%——余下的是注册于境外的企业,已被明确标注并加以限定,而非被忽略。这真正实现了按邻近度与半径查询、行业密度分析和区域覆盖分析——而不是以城市中心作近似。

时效性:随联邦税务局每个周期重建索引

联邦税务局按月度周期发布数据。每个周期,数据库都会被重新处理,索引也随之重建——上线前会进行完整性校验。而 Metabase 则按客户跟踪搜索与 API 自身的使用情况,闭合了工程与业务之间的循环。

我们在此集成的系统

常见问题

如何在用户输入时推荐企业,同时又不给数据库带来过重负担?

关键在于不要每按一个键就去查询事务表。一层建立在已归一化字段之上、专为前缀匹配准备的索引,能在毫秒间响应,并将搜索与生产负载隔离开来。主数据库则得以腾出手来,专注于它最擅长的事情。

地理定位是按每家企业的精确坐标进行的吗?

是的。一个自研的、运行在专用服务器上的地理编码器,会将完整的登记地址解析为坐标(经度/纬度),并按实体缓存——超过 2750 万个点,可地理编码人口覆盖率达 99.7%。我们未能地理编码的部分(注册于境外的企业)已被明确标注并加以限定,而非被隐藏。

免费开始

拥有一个需要变得可搜索、可视化的庞大数据库?48 小时免费诊断。

我们梳理您现有的系统,指出最大的瓶颈,并交付按风险×工作量排序的方案。无论是否选择 Meta Dados,您都能获得清晰的方向。

获取我的诊断 → 通过 WhatsApp 联系 无需承诺,无需信用卡。
我们将在 2 个工作小时内回复。
←  Voltar para Blog