先說下背景,服務端記錄玩家行為,數(shù)據(jù)入庫oracel,用于分析,記錄玩家id、tm、action以及其它一批需要用到的數(shù)據(jù),大概長這樣:

運營的設想是這樣的,每次游戲登陸服務器記錄一條login,每次退出游戲記錄一條logout,然后可以通過logout-login來統(tǒng)計每次游戲長,再按天或按生命周期去累加數(shù)次游戲時長;
然而事情并不是這樣的,聽我一一道來:
并不是這樣子之一:
同一秒內(nèi),竟然出現(xiàn)多條login和logout,這樣我只能根據(jù)入庫時間來判斷哪條action在前,結(jié)果并不科學,因為我們是通過redis入庫,壓根不可控;

應對方案:
修改login記錄的時機,修改為登陸網(wǎng)關(guān)時記錄,同時排查bug,修復同一秒內(nèi)記錄多條action的問題;
并不是這樣子之二:
多條login對應1條logout,說白了,就是某些原因?qū)е耹ogout沒有正常記錄到(比如閃退啥的);

應對方案:
改bug唄,還能怎么樣;
并不是這樣子之三:
跨天的情況怎么辦?今天23:50分login,明天2:00才logout,全局統(tǒng)計似乎并沒有問題,可是分天統(tǒng)計不是亂套了么;
應對方案:
1、以每天24點為節(jié)點吧,默認為在當天23:59:59logout了,用這個時間減去當天最后一次login,形成一一對應,計算在線時長,這樣就能保證當天的數(shù)據(jù)正常了;
2、那跨天的第二天呢?每天0點對所有在線玩家強制寫一條login吧(當然別一次性寫,如果在線高會對服務器產(chǎn)生影響),這樣就不會出現(xiàn),跨天時只有l(wèi)ogout,沒有l(wèi)ogin的情況了;
并不是這樣子之四:
腫么某個時間段大批玩家只有l(wèi)ogin沒有l(wèi)ogout呢,原來是服務器重啟了或者停服維護造成的;
應對方案:
服務器重啟和停服前數(shù)據(jù)存檔的過程中給所有在線玩家加一條logout吧
tips:
這兩條action還是很重要的,至少對于我們游戲來說,統(tǒng)計活動、留存、游戲時長都依賴于斯,所以需要慎重慎重,不能出差錯;