首页
社区
课程
招聘
[原创]数据存储系统的优化之路
发表于: 2020-3-17 22:49 4870

[原创]数据存储系统的优化之路

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'} = 漫长的等待

我打完字符串查询语句,去泡了杯茶


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 7146
活跃值: (3731)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
asd
2
一个人整一套系统的大佬
2020-3-26 15:07
0
雪    币: 137
活跃值: (1375)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我的方案是redis+MongoDB,用户内存信息之类的数据只保留最新的在没有可疑的内存情况下,用户断开连接或者redis timeout之前都写到redis里面,断开或者time out后再写MongoDB 就是挺耗内存,堆内存就行,其他的没啥问题
2021-2-4 19:45
0
游客
登录 | 注册 方可回帖
返回
//