-
-
[原创]数据存储系统的优化之路
-
发表于:
2020-3-17 22:49
4870
-
大家在玩鹅厂系游戏的时候应该看到过xxxRpcs.dll TCJ.dll ProbePolicy.dll 这样的dll,会上报一些游戏内和游戏外的数据。游戏内的数据比如游戏的某个函数被call了多少次,call的参数有没有被人为修改,调用来源是否合法...甚至键盘某个键按下了多少次(对比正常玩家和开挂玩家之间的数据差异来抓外挂)。游戏外的数据比如你开了哪些进程,开了哪些窗口,如果是不认识的进程是不是要hash一下把hash也上报服务器。这些数据大多都是“
时序数据
”。
时序数据有什么特点?百度上面的解释太多了,我用我自己的话描述一下:
1、写入(insert)量非常大、更删查(update delete select)很少甚至没有
2、数据之间没有关联性,用搞web的话说就是没有join
3、数据一般不会永久保留,XX天之后就会删除(也就是说有按日期批量删除的需求)
据不可靠消息来源,鹅厂TP的外挂数据存储是mysql(你信吗?我反正不信)
笔者四年前开发外挂数据存储时第一次用的就是mysql,写入性能捉鸡,上报用户数量一多,mysql的cpu使用率就暴涨,没一会儿mysql自己卡死,上层服务就全挂掉了
4核8G内存mysql顶多只能写入几百一千条/s,这还是开了TRANSACTION的情况下的,要是一条一条裸奔INSERT,那效率惨不忍睹....
而且当每天增长几GB数据、不得不面临加硬盘/清理旧数据的选择的时候
加硬盘?more money please
清理旧数据?delete from XXX where time < YYY 然后锁表慢慢跑去吧...没个七八个小时别想跑完
后来调研了一波当时市面上存在的写入性能比较好的数据库,相中了mongodb,但是也是撑死只能做到
16核32G 3000条/s,最高峰维持在40%CPU使用率(如果降低到8核的话业务最高峰99%使用率瞬间爆炸)。
随之而来的是每个月10K+ RMB的数据库费用...
而且更坑爹的是,mongodb在当前业务中完美继承了mysql的那些缺点:
删数据=锁表
锁表就算了,我整个表直接drop
偶尔的查字符串$regex:{xx:'yyy'} = 漫长的等待
我打完字符串查询语句,去泡了杯茶
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!