我们已经开始使用 bigquery 来记录我们游戏中的事件。
我们从 appengine 节点收集事件,并时不时地将它们放入块中,然后将其放入任务队列中。
然后后端处理此队列并将事件上传到 bigquery。
今天,我们存储了大约 6000 万个来自我们一款游戏的每日事件和 600 万个来自另一款游戏的事件。
我们还制作了 cron 作业来处理这些事件,以收集各种游戏 KPI。(即第二天的留存率、活跃用户数等)
一切都很顺利,但我们现在确实面临一个棘手的问题!
======== 问题1 ========================================= =======
由于某种原因,队列任务的删除有时会失败。不是很频繁,但它经常发生并且经常爆发。
TransientFailureException 可能是原因......我说可能是因为我们正在批处理模式下删除进程事件。IE ...
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 将能够破坏我们每天 6000 万行并定位重复项的查询。
提前致谢!