Webアプリケーションで使用したい約2,000万行のCSVファイルがあります。データは、郵便番号と実際の住所を次の形式でマッピングしたものです。
[zip_or_postal_code] [street_number] [street_name] [city] [state_or_province] [country]
私の目標は、ルックアップ(郵便番号/郵便番号で検索)を200ミリ秒未満に保つことです。
これが違いを生むかどうかはわかりませんが、私は次のことを計画していました。
- 、、、および列を独自のテーブルに移動し
state/province
、プライマリテーブルの列を参照して、不要な肥大化を回避します。country
city
- 一部の郵便番号は複数の番地と住所をカバーしているため、データを統合して1つの郵便番号を取得し、varcharなどに複数の住所を格納します。これにより、テーブルから数百万行が削減されます。
ルックアップ速度を向上させるために行うことができるいくつかの最適化は何ですか?例として、Googleの逆ジオロケーションAPIは、HTTPオーバーヘッドを含めて300ミリ秒未満の結果を返します。どうやってやっているの?
また、私は他のデータベースを使用することもできますが、すでにMySQLを使用しているので、それが望ましいでしょう。
編集:検索は常に郵便番号/郵便番号で行われるため、例として:郵便番号12345を指定すると、通り番号/名前、都市、州、国を返す必要があります。ただし、通りの番号/名前は単一の文字列フィールドとして保存されるため、私のアプリがそれらの解析を処理します。