きっかけは,前回も書いたが,FreeBSD の ports ツリーから,「Geo::IP」用のエントリーが削除されたことに始まる。 Geo-IP は MaxMind 社のデータベースを使うためのモジュールで,これまで無料で使える精度のあまり高くない「GeoLite」データベースを使うのに利用していた。 しかし,MaxMind 社がデータベースの構造を変えたみたいで,今後は「GeoIP2」を使え,というメッセージが出てきたので「GeoIP2」を使ってみた。それ自体はいいのだが,なにせデータの読み出しが遅い。ほんとに複数件の IP アドレスの住所情報を調べると,無限に時間がかかる感じがした。
これをネットで調べると,どうも「MaxMind::DB::Readers::XS」を使うといいと出てくる。 前回も書いたが,GeoIP2 をインストールすると,下記のようなものが一緒にインストールされる。
・GeoIP2 ・GeoIP2::Database::Reader ・GeoIP2::Model::City ・/usr/local/lib/libmaxminddb.soなどがインストールされ,さらに
MaxMind::DB::Readerがインストールされる。
この,最後の,「MaxMind::DB::Reader」が実際にデータベースから情報を取出している。 この「MaxMind::DB::Reader」を見ると,さらに「MaxMind::DB::Reader::PP」を読み出している。 ここの「PP」は,PurePerl を意味し,Perl のルーチンのみで書かれている。 そのため読み出しが非常に遅くなっているみたい。 しかし,「MaxMind::DB::Reader」では「MaxMind::DB::Reader::PP」の代わりに「MaxMind::DB::Reader::XS」というのがあれば,そちらを優先的に読み込む,と書いてある。
そこで,FreeBSD の ports を探してみると,ちゃんとあった。
/usr/ports/net/p5-MaxMind-DB-Reader-XS/当初,meta::cpan からインストールしないといけない,と思って探したのだが,なかなか見つからなくて,困ってしまった。 GeoIP2 というのが入ってないので,わからなかったみたい。 MaxMind というキーワードで探すとすぐに見つかった。
で,インストールすると,「MaxMind-DB-Reader-XS」は下記のディレクトリにインストールされていた。
/usr/local/lib/perl5/site_perl/mach/5.28/auto/MaxMind/DB/Reader/XS/XS.so /usr/local/lib/perl5/site_perl/mach/5.28/MaxMind/DB/Reader/XS.pm /usr/local/lib/perl5/site_perl/man/man3/MaxMind::DB::Reader::XS.3ここで,XS.so は外部ライブラリで,これを使うから速いみたい。
ちなみに「MaxMind-DB-Reader-PP」は下記にインストールされている。
/usr/local/lib/perl5/site_perl/MaxMind/DB/Reader/PP.pm他にも「/usr/local/lib/perl5/site_perl/MaxMind/DB/」の下にいくつかインストールされていた。
0 件のコメント:
コメントを投稿