実際にKPI集計時に発生した問題と解決方法のご紹介

皆様お久しぶりです。CCSプログラマの吉村と申します。

突然ですが、皆様KPIはご存知でしょうか?

KPIとは・・・重要業績評価指標(じゅうようぎょうせきひょうかしひょう)
”企業などの組織において、個人や部門の業績評価を定量的に評価するための指標。達成すべき目標に対し、どれだけの進捗がみられたかを明確にできる指標が選択される。これをもとに、日々の進捗把握や業務の改善などが行われる。”

上記説明にあるように、ソーシャルゲームを運営していく上でもKPIは、
そのアプリの方向性を決めるほど重要なものになります。

今回はそのKPIの集計を行った際に、
実際に発生した問題点解決策をいくつか紹介したいと思います。

1.GROUP_CONCATで取得した値が欠落

まず初めに、ユーザの集計を行う際に、ある条件に合致したユーザIDの一覧を取得する必要がありました。
そこで使用したのが、mysqlのGROUP_CONCATになります。
GROUP_CONCATを使用すると複数レコードを1行にまとめて、取得出来るようになり、
その取得した値をIN句などで使用すれば、指定したユーザから情報を取得出来るようになります。
それにより、条件に一致したユーザIDを取得し、そのユーザIDを対象にした情報を集計する処理を作成しました。
ですがここで、一点問題が発生しました。
それは、集計された値が明らかに少ないというものでした。
原因を調査した所、GROUP_CONCATには、文字数制限があり、デフォルトでは1024に設定されている為、上限を超えた場合、途中で文字が切り捨てられてしまいます。
その為、本来集計するはずのユーザ数より少ないユーザから集計を行う事となり、
情報が欠落してしまっていました。

■解決策 group_max_lenの設定を変更
GROUP_CONCATの文字数制限は、group_max_lenの設定を変更する事で変更する事が出来ます。
取得するデータの文字数がオーバーしてしまいそうな場合は、あらかじめ上限を変更しておくようにしましょう。

2.集計時のメモリ不足

集計をバッチにより、毎朝一定の時間に集計されるよう、設定していたのですが、
ある日、一部集計のみ行われていないという問題が発生しました。
原因を調査した所、phpのメモリ不足により、集計処理が途中で失敗しているという事が判明しました。

解決策 メモリの上限を変更
phpでは、ini_setを使用する事により、メモリの上限値を変更する事が出来ます。
メモリオーバーが発生しそうな場合は、メモリの上限を変更しておきましょう。
また、無駄な変数などは、unsetを使用し、メモリの節約を行いましょう。

3.まとめ

いかがでしたでしょうか?
今回紹介した2つの問題は、どちらも基本的な設定が原因でした。
ですが、基本的な事だからこそ、重要な箇所でもあります。
皆様も設定については、同じ失敗が起きないよう、十分に注意して行いましょう。

採用情報

クラウドクリエイティブスタジオではプログラマを募集しております。
一緒に面白いゲームを作っていきましょう!

コメント