总数据体系1
<p>开发速度快(快),mysql表写入可以异步写入
使用中间件:kingshard
<strong>mysql:</strong>
分库:
A数据库: 用户表、匿名用户表、第三方用户表、登陆记录表、短信验证码、反馈表
B数据库:(按用户拆表)消息表、积分详细表、用户评论表、用户点赞表、
(总表)收藏表、分享表、
(按对象拆表):对象评论表、对象点赞表、对象评论点赞表、</p>
<p>c数据库: 浏览表(按天拆表)、搜索表(按天拆表)、每日对象统计表、每日概念统计表、长期对象统计表、长期概念统计表、<strong>短期兴趣表</strong>、<strong>长期兴趣表</strong>、
(按用户拆表):用户浏览表(用于我的浏览查询)</p>
<ol>
<li>用户表</li>
<li>匿名用户表</li>
<li>第三方用户表(同上)</li>
<li>登陆记录表(一般用户登陆之后,session有效期很长,除非用户主动退出/卸载,一般将永久有效)</li>
<li>短信验证码表(同上)</li>
<li>点赞记录表(使用分表技术记录数据,点赞记录表根据(用户id),初步一个库10个表,经过测试4个进程4个单表,插入数据为0.05s)
6.1 该表主要为写操作
6.2 该表的查询一般为我的点赞记录
6.3 也可以写入在redis中,redis 异步+队列,把数据批量写入数据库
<pre><code>{'Like_List_20181231':
[
{'user_id':'1','obj_key':'','status':'',}
]
}
# 取消点赞
{'Like_Channel_Lish_20181231':
[{'user_id':'1','obj_key':'','status':'',}]
}</code></pre></li>
<li>收藏表(用户收藏行为比点赞行为要少,前期可以只需要一张表,也可以根据用户id进行分表) 和点赞记录表一样,redis 异步+队列,把数据批量写入数据库
<pre><code>{'Collect_List_20181231':
[
{'user_id':'1','url':'','text':'','share_type':'','platform':'','status':''}
]
}
# 取消收藏
{''Collect_Channel_Lish_20181231':
[{'user_id':'1','obj_key':'','status':'',}]
}</code></pre></li>
<li>分享表(用户收藏行为比点赞行为要少,前期可以只需要一张表,也可以根据用户id进行分表)
8.1 和点赞记录表一样,redis 异步+队列,把数据批量写入数据库
<pre><code>{'Share_List_20181231':
[
{'user_id':'1','url':'','text':'','share_type':'','platform':'','status':''}
]
}</code></pre></li>
<li>浏览表(使用分表记录,数据量大(根据用户id分表))
9.1 和点赞记录表一样,redis 异步+队列,把数据批量写入数据库
<pre><code>{'View_List_20181231':
[
{'user_id':'1','obj_key':'','status':'','starttime':'时间戳','endtime':'时间戳'}
]
}</code></pre></li>
<li>用户搜索行为表(使用分库分表记录,数据量大(根据用户id分表))
10.1 和点赞记录表一样,redis 异步+队列,把数据批量写入数据库
<pre><code>{'Search_List_20181231':
[ {'user_id':'1','raw_text':'','segmentation_result':'','sementic_analysis':'','other_data':'','ctime':'时间戳'}
]
}</code></pre></li>
<li>消息表(分表记录)
11.1 和点赞记录表一样,redis 异步+队列,把数据批量写入数据库
<pre><code>{'Message_List_20181231':[
{'user_id':'','obj_key':'','content_id':'','type':'','status':''}
]}</code></pre></li>
<li>积分详细表(分表记录)
12.1 和点赞记录表一样,redis 异步+队列,把数据批量写入数据库
<pre><code>{'Integral_List_20181231':
[
{'user_id':'1','total':'','score':'','data_src':'','data_remarks':'','other':'','ctime':'时间戳'}
]
}</code></pre></li>
<li>评论表(单表)
13.1 和点赞记录表一样,redis 异步+队列,把数据批量写入数据库
<pre><code>{'Comments_List_20181231':
[]
}</code></pre></li>
<li>反馈表(单表)</li>
</ol>
<p><strong>redis</strong></p>
<ol>
<li>用户session信息表 有效期为30天(保存用户名和头像)</li>
<li>发送短信验证码时,会把验证码写入redis中,设置为5分钟有效
使用字符串
<pre><code>{smsmsg_手机号码_Str:12345}</code></pre></li>
<li>对象主键对应的浏览数,
数,点赞数,差评数(需要开发专门的底层接口)
创建概念:浏览、评论、点赞,每个对象默认的数字是0,当对象的浏览数,评论数或点赞数发生变化,对象先解除原来的关系,创建新关系
<pre><code>{'浏览_Object_Number_Table':'主键':0,'主键1':2,}
{'Robject_Table_人物_浏览数_主键':{'主键':10001(关系序号乘以指定值+权重值)}
}
# 存储 对象的点赞数,评论数,浏览数,差评数(使用频率高)
{'Object_主键_Hash':{'view':'浏览数主键','comment':'','good':'','bad':''}}</code></pre></li>
<li>每个对象前N个评论(可以设置有效期2个小时),预先缓存到redis
<pre><code># 记录评论的当前id
{'Comments_Current_Id':12}
# Objects_Comments_对象主键_Soreted中,如果超过10个,则按照点赞数进行按末位淘汰)
{'Objects_Comments_对象主键_Soreted':{
'评论id':12 //点赞数
}
}
# 记录评论信息
{'Objects_Comments_对象主键_Hash':{
'评论id':{'user_id':'用户id','obj_key':'对象组合件','type':'类型','content':'内容','like_num':'点赞数量','status':'状态'}
}
}
# 记录对象点赞用户did
{Objects:Like:{'用户id':'时间戳'}}</code></pre></li>
<li>用户表(因为用的比较多用户名,头像,还有积分)
<pre><code>{'User_用户id':{'username':'用户名','phone':'手机号','avator':'头像','user_score':'',}
}</code></pre></li>
<li>记录每个对象的点赞名单
6.1 有效期只缓存1小时,如果查询时,找不到主键,直接去msql查询,如果从redis找不到,直接返回结果
<pre><code>{'Object_Like_Hash_主键':{
'用户id':'','用户id1':''
}}</code></pre></li>
<li>长期的用户兴趣表
数据加工流程:先从每日用户浏览历史中,提取当天的用户兴趣表数据,然后汇总成长期的用户兴趣表
7.1 对象兴趣表
<pre><code>{'User:Object_用户id_SortedSet':{'主键1':1,'主键2':2}
}</code></pre>
<p>7.2 概念兴趣表</p>
<pre><code>{'User:Concept_用户id_SortedSet':{'概念1':1,'概念2':2}
}</code></pre>
<p>7.3 对象点赞收藏表</p>
<pre><code>{'User:Object:Collect_用户id_SoretedSet':{}}</code></pre></li>
<li>短期的用户兴趣表
8.1 对象兴趣表
<pre><code>{'User:Object_用户id_20190110_SortedSet':{'主键1':1,'主键2':2}
}</code></pre>
<p>8.2 概念兴趣表</p>
<pre><code>{'User:Concept_用户id_20190110_SortedSet':{'概念1':1,'概念2':2}
}</code></pre></li>
</ol>