社交网站 消息处理
现处理一社交网站,按Boss的要求,用户数量要达到1KW以上,用户与用户之间要能即时通讯,组件应用、系统消息等所有的消息都要通过消息中心来统一处理。
为此,我们简单进行了一下计算,如果每条数据均存储的话,那么按100个组件给10,000,000用户发消息的话,数据量将会达到1,000,000,000条,还不考虑其他的。
在此基础上,需要对消息中心的数据存储来做考虑。
补充,现在公司内部有如下几种处理方式:
1、将消息统一放在一张表内,通过SQL自带的表分区方式来处理数据;
2、采用按用户分组的方式进行分表的方式进行存储,这样可以保证同一表格处理的数据量不会上亿;(该处理方式所产生的表大约有近十万张表,但每表的存储数据可以控制在1KW以内);
3、采用:hadoop+hive的方式来处理,但该方案还没有具体研究:(
请问各位:用何种方法处理要好些?还有没有更好的处理方案?
------解决方案--------------------只能说,很牛.
------解决方案--------------------用第一种吧。分区表还是不错的。
------解决方案--------------------预计数据很多就按第二种
------解决方案--------------------肯定第一种啊,sql 的表分区也可以实现第二种说的按用户分组啊。
------解决方案--------------------如果按照第二种,将一个表拆分为n个表,将来无论是维护还是写查询会麻烦死的!
------解决方案--------------------用户数,与消息数并非一回事.
有一个用户,并不一定会产生一条消息,产生消息的,是在线的用户.你们能做到1KW个用户,未必能做到平均在线有1W个用户.
先考虑同时在线1K个用户吧,以此作为基础,这已经很了不起了.如果你能应付得了1K个用户同时在线,那后续当用户数增加时,于增加硬件投入也来得及.
------解决方案--------------------系统向用户发系统消息时,未在线的用户也会有一条记录的,以便他下次登录时,能看到历史的系统消息
【如果每条数据均存储的话,那么按100个组件给10,000,000用户发消息的话,数据量将会达到1,000,000,000条,】
应该是100条消息记录(msgid,body,when,...字段可能比较复杂)
100x10,000,000条 消息-用户关联 记录(uuid,userid,msgid。字段简单,但是记录数会急速增长。但是适合做分区)
------解决方案--------------------要考虑以后的维护,第一种把。