住所から国土地理院の緯度経度取得APIを使って、テーブルへ格納するバッチ処理がようやく終了した。全国550万件のデータに対して、およそ1か月かかった。まあ、10万件単位で実行するバッチで、さらにチャンクで分割したうえで、1件1秒スリープをいれて、途中からは都道府県単位のオプションをつけての実行にして、おわっていたら、続きからコマンドをたたくということを日課というか、1日に何回かをやるという日々がおわった。
人間というものははじめると終わりを求め、終わりを迎えると、なぜか寂しい。だからといってこんなことを何のためにやっていたのかと言えば、理論値550万秒の処理は、いったいどれくらいでおわるのか試したかったのである。1日というのは60秒x60分x24時間であるので、86400秒。計算上は63.6574074日。あれ2か月かかるやん。
usleep(100000); // 0.1秒スリープ(API負荷抑制)
おお、1秒ではなくて、0.1秒で実施していたのだ。6.4日で終わる処理を1か月かけてしまったのである。
その理由は、次の通り。
最初メモリ確保が適切でなかった。
これは、実行時にメモリサイズを指定することで改善された。
php -d memory_limit=1524M artisan corporates:geocode-gsi
そして、緯度経度が取得できずにセットできなかった対象を、毎回処理してエラーを出すという、愚かな仕組みになっていたので、毎回コマンド再実行時は同じエラーを出すための時間となっていた。
北海道からはじまり、まあ、東京あたりまでくるときには、いいかげん、この最初の繰り返し表示される緯度経度が取得できませんでしたという、人生のエンドロールのような繰り返し文にいやけがさして、そうだ!都道府県オプションつけて実行できるようにしたら、この無駄な時間がいらなくなる。
php -d memory_limit=1524M artisan corporates:geocode-gsi --prefecture=千葉県
オプションは大事だよ。
コマンドの作り方は、オプションの指定の仕方が重要。
センスがわかるだろ。