位置データにマッピングされた IP アドレス範囲のテーブルの形式で、ジオロケーション サービス用に提供された生データがあります。
アドレスはバイトパックされた整数 (バイトごとに 1 つのドット付きクワッド) として提供されるため、格納と比較が容易になるため、このテーブルの各行は、範囲の下位アドレス、範囲の上位アドレス、およびいくつかのテキスト位置フィールドを提供します。CIDR を使用する必要はありません/使用できません。
テーブルは数百万レコードです。
私は強力な SQL チョップを持っていません。私が継承したコードは、単純に次のような sql 呼び出しを行います。
SELECT location FROM geodata WHERE lookup_address >= range_low AND lookup_address =< range_high
パフォーマンスはひどいです。私の理解では、これは一致するレコードの線形検索を行うだけです。これを一時的に回避するために、クライアント キャッシュをツリー マップにまとめて、これをログ パフォーマンスに落とし込みました。今まさに取り組みたい。
この問題は、アドレス、電話番号などの SQL の世界で時々発生するようです。少なくともログ パフォーマンスを取得できるように、SQL テーブル内の範囲を整理してインデックスを付ける「標準的な」方法はありますか。直接SQLクエリの?