ゲームからのイベント ロギングに bigquery の使用を開始しました。
appengine ノードからイベントを収集し、タスク キューに配置されるチャンクにまとめてエンキューします。
次に、バックエンドがこのキューを処理し、イベントを bigquery にアップロードします。
現在、あるゲームから約 6,000 万件、別のゲームから約 600 万件の毎日のイベントを保存しています。
また、これらのイベントを処理してさまざまなゲーム KPI を収集する cron ジョブも作成しました。(つまり、2 日目のリテンション、アクティブ ユーザーなど)
すべてが順調に進みましたが、ここで厄介な問題に直面します。
======== 質問 1 ======================================= =======
何らかの理由で、キュー タスクの削除が失敗することがあります。それほど頻繁ではありませんが、バーストで発生することがよくあります。
TransientFailureException がおそらく原因です...プロセス イベントをバッチ モードで削除しているため、おそらくそうです。つまり...
List<Boolean> Queue.deleteTask(List<TashHandle> taskstoDelete)
...ということで、タスクの削除に失敗した理由は実際にはわかりません。
本日、失敗した削除を再度削除しようとする再試行コードを追加しました。
この種の問題に対処するためのベスト プラクティスはありますか?
========= 質問 2 ====================================== ================
重複検出
次の SQL は、 または小さいゲームの重複を見つけることに成功しましたが、大きいゲームのリソースを超えています。
SELECT DATE(ts) date, SUM(duplicates) - COUNT(duplicates) as duplicates
FROM (
SELECT ts, eventId, userId, count(*) duplicates
FROM [analytics_davincigameserver.events_app1_v2_201308]
GROUP EACH BY ts, eventId, userId
HAVING duplicates > 1
)
GROUP EACH BY date
より大きなゲームでも重複を検出する方法はありますか? つまり、bigquery が毎日 6,000 万行を処理し、重複を見つけることができるクエリです。
前もって感謝します!