位置情報を扱うならば、PostGISを選ぶしかない
紹介されたのは、株式会社スポットライトが提供している来店検知プラットフォーム「スマポ」におけるPostgreSQLの活用状況だ。スポットライトのCTOである高橋三徳氏は、「スマポは、顧客が来店するだけでポイントを獲得できるサービスです」と言う。ポイントを起点にユーザーの来店を促し、店舗そのものの認知度を向上してもらうサービスだ。
スマポでは、スマートフォンのGPS機能を来店検知に使っていない。独自開発の超音波ビーコンを利用することで、スマートフォンのアプリケーションを立ち上げ、マイクで超音波を感知し自動で顧客の来店を検知する。現状、国内100ブランド、700店舗でスマポは利用できる。多くの人が利用している自分の居場所にチェックインするサービスの「Foursquare」などでは、来店検知にGPS機能を利用している。しかしながら、GPSは精度がそれほど高くない。実際に入店していなくても、付近にいるだけで来店と判断してしまうのだ。これが、スマポなら、確実に来店したことが分かるという。
スマポは、独自開発の超音波ビーコンとロケーションベースの仕組みを組み合わせ、確実に来店を検知する。このスマポの開発は、2011年8月から開始された。当初はデータベースにMySQLやMongoDBを利用していたが、GIS機能が充実していることからPostgreSQLに切り替えたとのこと。利用しているのは、PostgreSQLのGIS機能であるPostGISだ。「じつは、サービスのリリース48時間前に、PostGISを使うことにしました」と、高橋氏は驚くようなことを言う。リリース直前までの他のデータベースを使って開発していたのに、まさに突然データベースを変更したのだ。時間がほとんどない状況でも、PostGISを使うメリットがあると高橋氏は判断した。
そのPostGISは、PostgreSQLで地理空間情報を扱うための拡張だ。GNU General Public Licenseのオープンソースソフトウェアとして配布されており、地理情報データをSQLで扱うことが可能になる。地理情報の演算もできるので、面積、距離などを簡単に算出できるのも特長だ。スマポでは、現在地周辺の店舗を検索する機能の実現などで、PostGISを利用している。単に地点に近い店舗を検出するだけでなく、店舗を近い順にソートし、その結果をさらにユーザープロファイルとマッチングさせるために、ユーザー属性データのテーブルとJoin処理も行っている。
PostGISがいかに地理情報を扱うのに向いているかを確認するため、スポットライトでは他のデータベースのGIS機能と比較も行った。
「MySQLやMongoDBにくらべ、PostGISには圧倒的に機能があります。パフォーマンス面でも、クライアント数が増えても線形にスケールする検証結果も出ています」(高橋氏)
PostgreSQLは、PostGISの利用をきっかけに使い始めた。とはいえ、それ以外にも便利な機能があると高橋氏は言う。たとえば、「hstore」を使うと、PostgreSQLがNoSQLデータベース的に使える。行データの形式が固定的ではなくが変化するような際には、柔軟なデータ構造が撮れるドキュメント型データベースのMongoDBを使うという選択肢もあるが、このhstoreを使えばPostgreSQLだけで同様の使い勝手が得られるのだ。
また、ホットスポットでは、独自開発の仕組みでPostgreSQLをメッセージキューの代わりにも使っているとのこと。
「このキューの仕組みは、PostgreSQLがベースなので信頼性面でも高いものがあります。コスト的にも、他のキューの仕組みを入れなくて済んでいるは、大きなメリットです」(高橋氏)
同期処理の必要のないものを、このキューの仕組みで処理している。分散処理もできるので、処理が重くなっても拡張性が確保できるようになっている。このキューの仕組みついては、Pythonライブラリーとして公開もしている。