请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

19-3 标签存储设计 连续值类型标签 bitmap

19-3 标签存储设计 ,这一节中提到的连续值类型标签,[0, 100]区间内每个值X,构建>=X的bitmap,如果连续值范围特别大,比如1亿,这样会构建大量的bitmap,是否会有问题?

正在回答 回答被采纳积分+3

1回答

叁金 2023-07-20 09:12:16

给你的思考点赞哈~

如果你的连续值很大,需要构建数十万个Bitmap,这种方式当然是不可取的了。 所以我们要换一种设计方式。

比如,针对数值,我们可以分为个 十 百 千 万 ... 等,每位取值范围都是是0-9。

所以如果为每位构建bitmap则需要10个bitmap,那么一个亿需要90个bitmap则能存储。

比如,我们有一个用户的id为256,对id拆分后,在个位数为6、十位数为5、百位数为2的bitmap中都存储了该id。

当我们查找uid=256的用户的时候,则为bitmap(200) and bitmap(50) and bitmap(6)

当我们查找uid<256的用户的时候,则为百分位之上全部为0的用户 and 百分位小于2的所有用户 and 百分位等于2十分位小于5的所有用户 and 百分位等于2,十分位=5,个分位小于6的用户。

百分位之上全部为0的用户:bitmap(亿=0) and bitmap(千万=0) and bitmap(百万=0) and bitmap(十万=0) and bitmap(万=0) and bitmap(千=0)

百分位小于2的用户:bitmap(百=0) or bitmap(百=1) 

百分位=2,十分位小于5的用户:bitmap(百=2) and (bitmap(十=0) or bitmap(十=1) or bitmap(十=2) or bitmap(十=3) or bitmap(十=4) )  

百分位=2,十分位=5,个分为小于6的用户:bitmap(百=2) and bitmap(十=5) and (bitmap(个=0) or bitmap(个=1) or bitmap(个=2) or bitmap(个=3) or bitmap(个=4) or bitmap(个=5) or bitmap(个=6))

以上取and即可。


相比而言,这种方式bitmap变少了,但是整体的计算逻辑要比连续值模式复杂一些。 具体选择那种设计方式还是要根据数据的情况进行。

1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号