BaseCNPJでは、企業名を入力し始めると、6,200万を超える事業所のデータベースの中から候補がその場で表示されます。利用する側から見れば当たり前のことのようですが、エンジニアリングの側から見れば、公開データのインデックス化と正規化という古典的な課題です。ここでは、Meta Dadosがどのようにそれを解決しているかを要約します。
課題:6,200万件のレコードに対するオートコンプリート
「as-you-type(入力しながら)」の検索は数十ミリ秒で応答しなければならず、そうでなければ候補が次のキー入力よりも後に届いてしまいます。これを6,200万行のテーブルに対するワイルドカード付きのLIKEで行うのは、確実に遅くなる道です。キーを打つたびにデータベース全体を走査することになるからです。
前方一致検索のためのインデックス化
解決策は、生のデータを検索するのではなく、検索のためにデータを準備しておくことです。正規化済みの商号および屋号に対して、前方一致および語単位のマッチングに最適化されたインデックス層を維持します。ユーザーが発行するクエリは、小さくその目的のために作られたインデックスに当たり、トランザクション用のテーブル全体には当たりません。
正規化:連邦国税庁のデータは汚れている
連邦国税庁(Receita Federal)のオープンデータは、アクセント記号の不統一、大文字小文字のばらつき、略語、ノイズを含んだ状態で届きます。インデックス化の前に正規化を行います。アクセント記号の除去、大文字小文字の統一、一般的な用語の処理です。この正規化によって、ユーザーが入力の仕方を気にすることなく、「padaria sao joao」が「PADARIA SÃO JOÃO LTDA」に一致するようになります。
正確な住所によるジオロケーション
ここにこそ、他社にはほとんどない差別化があります。私たちは市区町村単位で止まりません。専用サーバー上にセルフホストされた自社製ジオコーダーが、登録上の完全な住所を座標(緯度・経度)へと解決し、エンティティ単位でキャッシュします。すでに2,750万を超える地点がジオロケーション済みで、ジオコーディング可能な母集団の99.7%をカバーしています。残りは海外に本拠を置く企業であり、無視するのではなく、特定され限定されています。これにより、近接・半径による検索、業種別の密度、そして真の意味での地域カバレッジ——市の中心点による近似ではなく——が可能になります。
鮮度:連邦国税庁のサイクルごとに再インデックス化
連邦国税庁は月次サイクルでデータを公開します。サイクルごとにデータベースは再処理され、インデックスは再構築されます——公開前に完全性の検証を行います。そしてMetabaseが、顧客ごとの検索およびAPIの利用状況そのものを追跡し、エンジニアリングとビジネスの間のサイクルを閉じます。
よくある質問
データベースに負荷をかけずに、ユーザーが入力している間に企業を提案するにはどうすればよいですか?
鍵は、キーを打つたびにトランザクション用のテーブルを検索しないことです。正規化済みのフィールドに対する前方一致マッチング用に準備されたインデックス層が、ミリ秒単位で応答し、本番環境の負荷から検索を切り離します。メインのデータベースは、それが最も得意とする処理に集中できます。
ジオロケーションは各企業の正確な座標によるものですか?
はい。専用サーバー上で稼働する自社製ジオコーダーが、登録上の完全な住所を座標(緯度・経度)へと解決し、エンティティ単位でキャッシュします——2,750万を超える地点、ジオコーディング可能な母集団の99.7%のカバレッジです。ジオコーディングしていないもの(海外に本拠を置く企業)は、隠すのではなく、特定され限定されています。