Neway6655 / neway6655.github.com

Neway's technical blog.
http://neway6655.github.io
6 stars 0 forks source link

电商用户标签服务系统建设及演进 #12

Open Neway6655 opened 5 years ago

Neway6655 commented 5 years ago

https://neway6655.github.io/user-profile/2018/04/07/user-profile-tagging-system.html

hookewin commented 5 years ago

你好,看了你的文章,有个问题请教一下,请问这个用户标签的表结构是怎样的?

在MySQL的表结构设计上,没有采用以用户id为主键的方式,主要是考虑到数据的更新是以标签为维度,对用户进行批量更新,而一个用户也可能同时存在多个标签中,以用户id为主键会导致数据的更新逻辑复杂,无法对用户批量更新,数据更新速度慢;因此,同时考虑到数据更新的问题和标签查询的性能,最终采用以标签id为主键,沿用上面bitset的思路,将该标签的用户id构成的逻辑上的一个大bitset,按照顺序等长拆分为多个bitset_segment:

Neway6655 commented 5 years ago

你好,表结构是以标签ID为主键,将bitset按顺序切分成多个固定bit位的segments,每个segment_i做为一列 (i=0,1,2...N);但如果bit位比较大,切分出来列数太多,可以换多行存储,每行形成一个segment_group,最终一个标签可能有M个group,每个group细拆为N个segments。

结构比较抽象/复杂,需要在数据访问层做好操作封装。