PHP+SQLite で郵便番号から住所を自動入力する
PHP+SQLite で郵便番号から住所を自動入力するパーツを開発中です。入力フォームに、いちいち住所を入力しなくても、郵便番号をいれれば、都道府県、市区町村まで自動的に入力できるようにするための、バックエンドの仕組みです。
まずは、設計です。
データを管理する方法を考えました。
(1)CSV (テキスト)
(2)MySQL
(3)SQLite
今回、1つだけ、データを取り出せればOK。
CSV だと、ランダムアクセスが不可なので、先頭から順番にシーケンシャル処理して、見つかったら終了するというアルゴリズムになるので、非効率的です。
MySQL を郵便番号だけのために構築するのは、おっくう。
そこで、(2)案に決定。
SQLite は、簡易 RDB です。
MySQL との大きな違いは、データベースの管理が不要なこと。
本格的な RDB を使う場合、プログラムとは別にデータベース定義をする必要がありますが、SQLite はその必要がありません。
SQLite のエンジン部分が、内部的にサーバ上にバイナリファイルを作り、ブラックボックスで管理してくれます。
しかし、MySQL と比べると、速度の面で劣る、ドキュメントが少ないという欠点もあります。
特に INSERT は遅い。localhost でテストしたら、約8000件で数分かかっても終らない。SQLite の公式サイトみると、どうやらトランザクション処理にヒントがあるらしい。
http://www.sqlite.org/lang_transaction.html
速度面は、トランザクションを使えば、劇的に速くなりました。
まずは、設計です。
データを管理する方法を考えました。
(1)CSV (テキスト)
(2)MySQL
(3)SQLite
今回、1つだけ、データを取り出せればOK。
CSV だと、ランダムアクセスが不可なので、先頭から順番にシーケンシャル処理して、見つかったら終了するというアルゴリズムになるので、非効率的です。
MySQL を郵便番号だけのために構築するのは、おっくう。
そこで、(2)案に決定。
SQLite は、簡易 RDB です。
MySQL との大きな違いは、データベースの管理が不要なこと。
本格的な RDB を使う場合、プログラムとは別にデータベース定義をする必要がありますが、SQLite はその必要がありません。
SQLite のエンジン部分が、内部的にサーバ上にバイナリファイルを作り、ブラックボックスで管理してくれます。
しかし、MySQL と比べると、速度の面で劣る、ドキュメントが少ないという欠点もあります。
特に INSERT は遅い。localhost でテストしたら、約8000件で数分かかっても終らない。SQLite の公式サイトみると、どうやらトランザクション処理にヒントがあるらしい。
http://www.sqlite.org/lang_transaction.html
速度面は、トランザクションを使えば、劇的に速くなりました。