“标”的作用是为了标示一个用户特性,例如“卖家标”的作用就是标示这个用户是卖家;这种标需求很广,但是这种标有个特性就是只有2种状态:有或者没有,在计算机中就是0或者1;这就好办了,在表中增加整数型字段,整数的每个二进制bit位就可以作为一个标,这样大大节省了空间,例如long型整数就可以为63个标所用(java中long整型有64位)。
怎么打标:打标就是把标对应字段的某个bit位 置为1;将某个标(tag)定义为一个特定数字,数字为2的n次方,例如1024(2的10次方),要打这个标的话实际进行“或”操作:tag= tag|1024,这样tag字段的第11位就变成了1,对其它bit位没影响。
怎么去标:去标就是把标对应字段的某个bit位置为0,只要进行的操作为:tag=tag&~1024,这样就把第11位置为0了,对其它bit位没影响。
怎么读标:读标的操作就是判断标对应的bit位是否为1,判断tag字段是否有1024标(具体这个数字对应哪种状态,记录在数据字典中),tag&1024==1204?有标:没有标。
PS.如果63个标还不够怎么办?再增加个tag字段呗。由于这种打标方式,简单高效,可封装成接口addTag(String tagColumn ,int tag), removeTag(String tagColumn ,int tag)。