我们已开始使用bigquery从我们的游戏中记录事件。
我们从appengine节点收集事件,然后将它们分块,然后将它们放在任务队列中。
后端正在处理此队列并将事件上传到bigquery。
今天我们在其中一个游戏中存储了大约6千万个日常活动,而在另一个游戏中存储了600万个。
我们还制作了cron作业来处理这些事件以收集各种游戏KPI。 (即第二天保留,活跃用户等)
一切都很顺利但我们现在面临着一个棘手的问题!
========问题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将能够破坏我们每天6000万行并找到重复的行。
提前致谢!
答案 0 :(得分:1)
对于问题#2(我更喜欢他们是单独的问题,跳过这一步和混淆的机会):
内部查询或外部查询?
上的资源已用完这有用吗?
SELECT ts, eventId, userId, count(*) duplicates
FROM [analytics_davincigameserver.events_app1_v2_201308]
GROUP EACH BY ts, eventId, userId
HAVING duplicates > 1
降低基数怎么样?我猜你正在按时间戳分组,可能有太多不同的桶要分组。这会更好吗?
SELECT ts, eventId, userId, count(*) duplicates
FROM [analytics_davincigameserver.events_app1_v2_201308]
WHERE ABS(HASH(ts) % 10) = 1
GROUP EACH BY ts, eventId, userId
HAVING duplicates > 1