1) 用户名
具有唯一性,由用户在注册时由用户自己确定,如各类邮箱用户名; 或者由系统分配,如QQ号。
2) 用户ID
也具有唯一性,用户在注册时由系统分配。
3) 用户属性
用来描述用户的,如性别、年龄等。
4) 用户行为
对用户活动的记录,如最近一个月的淘宝消费记录。
一般方案的有点是实现简单,效率还不错,内存性价比不高。
数据组织的目的是为了更高效更经济的提供数据服务。可以达到O(1)查找,和无锁化查询更新。
数据的组织采取经典的“image+editlog(也可叫binlog)”。离线处理放在每天访问量最小的时间段。
显然,取得用户ID后的后续操作都是O(1),这样具备极佳的性能。基于数组,还可以实现无锁化查询。
按用户ID垂直切片,如切分成100片。20台机器时,每台加载5片;共10台机器时,每台加载10片。如此多集群服务,即可实现上亿同时在线服务。
数组化是新方案的核心。基于数组,不但提供了最快的查询,而且不浪费内存,“image+editlog”使得数据更新高效简单,且不需要中断服务。