存储是整个游戏后端架构中最重要的之一,以下是一种可用于全区全服,或者分区分服的一种做法。
大家普遍使用mysql,对于分区分服,基本上没问题,普通的单实例mysql可以胜任(合服可能是个例外?);
对于全区全服,可能就有问题了,单实例的mysql,目前各云平台,包括腾讯自研的,给出的iops普遍是最高2w+,
人数特别多的时候,基本上扛不住,即使使用了redis做优化,这时候仍然要使用mysql
1)为什么以要使用mongodb?
* 场景特别适合,目前服务器是把mysql当成kv存储的,用户间的数据没有关联;
* 如果用mysql,用户数据分散到多张表,一次load要读n张表,相当耗时,如果用户数据存成一个mongodb里的文档,那么可能只需要读一次;
* mongodb的性能不差,合理使用下,与mysql相当,甚至强过mysql;
* mongodb比较方便的做到高可能(replica set),可以方便的水平扩容(shard),水平扩容
2) mongodb怎么用?
用户数据就每人一个document存到mongodb,用户数据整体是一个大集合;
其他业务数据也存成各个集合;
要特别关注单doc大小限制(16MB),要先跟策划敲定各个用户数据的大小限制,比如有n封邮件,n个道具,n条流水;
3)运营流水数据怎么记?
* 我们是使用友商的方案的,使用hadoop来存数据?
4)排行榜
* 排行榜使用redis(单实例高可用)来实现,几千万人的排行榜是没啥问题的,以5000万人计,每人32byte的uid+8byte的分数,计40byte,5000w*40 = 2Gbyte;












网友评论