私のRyzenマシンの空調ファンがうねりをあげている。空冷式であり、かつでかいファンが4つもついている。CPU温度が50度近くを保っているので、冷却効果がなければもっと高いのであろう。いつからかCPUはコア数をあげることであげるようになってきた。さらにCPUだけでなく、グラフィックを担うGPUの高性能化、高速化がゲームや映像を中心とした世界を牽引している。
ゴールデンウイーク中からはじめた法人データ550万件に対しての緯度経度付与のバッチは、いよいよ西へ。いま広島県を処理しています。
膨大な量のデータに対して、処理を行うためには、いくつか考えなければならないことがある。
まず、1度に取り扱う処理対象件数。まさか550万件のループとかできるメモリ量があるマシンで処理できればそれでもよいが、処理始まるまでにどんだけ無駄時間かかるのか。現実的には、サーバ側で処理する場合のメモリ量をどれだけ確保して実行するのかというところでもある。
今どきは自分のマシンは64GBメモリであるが、この処理を行うサーバ側のメモリは4GBです。
そのうえ、PHP+Laravelのバッチとしてつくられていて、制限として512MBというリミッターをつけてあったので、このバッチをを実行する時には、オプションでより大きなメモリ量をプロセスが使いますよと要求するようにしている。そのサイズは3倍の1.5GB。
対象を抽出して処理をするときには、すでに処理したものは対象外にしたうえで、1度の処理件数は10万件としている。さらにそれをチャンクで分割している。
オプションで、都道府県も指定できるようになっているので、バッチが終了したときには、次の実行は、その終了している都道府県を再度実行することで、開始までの時間短縮を見込んでいる。また、これはその都道府県の処理残りがないことも判定できる。
緯度経度がふられていないものを対象に処理するので、あたまから再度やると、毎回ふられていない法人に対して、緯度経度が取得できないとなる。ここは、処理しないようにというTODO。
これとは、別に、鉄道路線の駅に対しての都道府県判定と緯度経度をふるというバッチも動いている。この話は、また別な機会に。
なんなんだ。バッチ屋か。