好友存储结构.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
好友存储结构

好友存储结构 存储要解决的问题: 好友关系,分组,邀请记录数量大 查询量大 数据库一致性保证 解决方案: 序列化存储好友关系及分组数据。 前端缓存 数据结构: 好友列表 : UID = array(fid1, fid2, fid3 …); 加自己为好友的名单(判断用户是否热点用户) : UID = array(fid1, fid2, fid3 …); 好友分组 : UID = array( array( ‘gid’ = 1, ‘groupname’ = ‘xxx’, ‘order’ =0, data = array(‘uid’, 2, 3, .. )), array( ‘gid’ = 1, ‘groupname’ = ‘xxx’, ‘order’ =1, data = array(‘uid’, 2, 3, .. )), … ); 好友邀请: UID = array( array( ‘mail’= ‘xxxx@’, accepted=0), array( ‘mail’= ‘xxxx@’, accepted=0), … ); 用户信息(100byte/条): UID= array( ‘fid = xxx, ‘name‘ = xxx, ‘note’, …); 好友列表信息: UID = array( ‘totalcount’ = xx, ‘invite_count’ = 99, ‘request_accepted’ = 88); Mysql 方案: 用户好友,组记录按USERID分表存储。 每用户好友数据: 假设2000(好友总数) × 2 byte = 4k 串行存储 array(email = testuser_123@, name= 用户, note = 还有备注) 需要110k空间,LONGBLOB 最大允许2048k。 存在的问题: 需要频繁取好友数据资料 特殊用户好友数据量大(几w或更多好友),查询效率低 添加删除好友均需取出全部好友列表,好友数越大IO性能越低。 解决方法: memcache缓存所有用户基本资料,增加热点用户缓存过期时间,减少非热点用户缓存时间。 为特殊用户使用独立的数据服务器,hash存储好友列表, 可采用先写入日志、更新缓存后队列处理磁盘数据。 架构图#1 Apache Cassandra 方案 Apache Cassandra是一套开源分布式数据库管理系统。它最初由Facebook开发,用于储存特别大的数据。Facebook目前在使用此系统。 主要特性: 1.灵活的schema,不需要象数据库一样预先设计schema,增加或者删除字段非常方便(on the fly)。 2.支持range查询:可以对Key进行范围查询。 3.高可用,可扩展:单点故障不影响集群服务,可线性扩展。keyspace name=Twitter columnfamily comparewith=UTF8Type name=Statuses/columnfamily columnfamily comparewith=UTF8Type name=StatusAudits/columnfamily columnfamily comparewith=UTF8Type name=StatusRelationships comparesubcolumnswith=TimeUUIDType columntype=Super/columnfamily columnfamily comparewith=UTF8Type name=Users/columnfamily columnfamily comparewith=UTF8Type name=UserRelationships comparesubcolumnswith=TimeUUIDType columntype=Super/columnfamily /keyspace Keyspace = product (friends) Column family = table (单独文件存放) Key = primary key (UUID) 单条记录 Column = field Value = value 接口: interface CassandraIf { public function get($keyspace, $key, $column_path, $consistency_level); public function get_slice($keyspace, $key, $column_parent, $predicate, $consistency_level); public function multiget($keyspac

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档