浅谈按位存储

毕业季,浪了好久。。。过了这个六月,就正式踏入社会啦。。。总感觉还没准备好。。。。。。。。。。 特大转折。。。记录一下最近的一些知识。。。

按位存储的概念

在数据库存储中,可以使用一种类二进制字符串来保存多个值,当这个二进制值是由0和1组成的时候,就可以按照从右到左,每个位按照2^n计算值相加进而换算成为一个十进制数,从而实现一个十进制值保存多种情况的目的。

举个栗子

现在3种不同的css样式,可以应用于不同的一些地方,如app、pc、小程序等。

按值存储的话,分别用1-3代表3种样式(styleType),分别用1-3代表支持类型app、pc、小程序(supportType),然后存储的时候应该是按这种方式:

styleType supportType
1 1,3
2 1,2,3
3 1
... ...

显然,这样的话,supportType这个字段就要存储多个styleType代表值。

那么,按位存储是怎样的呢。用3位的类二进制字符串来表示,从左到右每一位分别对应样式1-3,1代表支持该样式,0代表不支持该样式。如要代表支持样式1,3的话,就用101来表示,第一、三位为1,其他位置0.那我们存储的时候,是不是就存储这么一个3位的字符串呢。并不是,要存储的是转换后的一个十进制的数值。因为每一个位按照2^n转换之后相加得到的十进制必然可以反解,这样就可以知道这个值代表的是哪些样式了。

按位存储的话,应该是这样存的:

styleType supportType
1 5
2 7
3 1
... ...

实际应用

①场景一,在app环境中,过滤样式,即只把支持app的样式过滤出来显示。

应用原理:数值相与,只有1与1结果为1。

也就是说,我们如果要过滤出支持app的样式,也就是过滤styleType中第一位为1时对应的样式,即1**,也就是十进制数值中包含4这个数的。

js中,十进制数可以直接相与,所以遍历过滤时代码可以直接这样判断:

(item.supportType & 4 == 4)?‘对应的styleType支持‘:‘对应的styleType不支持‘    //注意,==优先级比&大,所以要加括号

②场景二,修改supportType

因为保存到数据库中的是一个十进制的数组,所以才修改对应关系的时候,必须知道改的是哪个位置,并改变相应位置上的值,类二进制表示就是0变为1或1变为0的过程,但是改变十进制的数组则是改变对应的位的2^n的增加减少过程。

如:

    var supportType = { //按位编码,预留3位
        ‘app‘:4,
        ‘pc‘:2,
        ‘mini‘:1
    }
  var supportVal = 0;
  i f(obj.supportmini == 1){ //支持小程序
     supportVal= supportVal+supportType .mini;
   }
  if(obj.supportPc == 1){ //支持pc
     supportVal= supportVal+ supportType .pc;
  }
  obj.supportVal= supportVal;

最后,把对应的十进制存到数据库中即可。

更多场景参考这里。  

  

时间: 2024-10-10 07:08:00

浅谈按位存储的相关文章

浅谈python字符串存储形式

http://blog.csdn.net/zhonghuan1992 钟桓 2014年8月31日 浅谈python字符串存储形式 记录一下自己今的天发现疑问并且给出自己现有知识有的回答.长话短说,用过python的人对于 == 和 is 应该不陌生,但是这里我还是介绍一下. ==是用来判断两个东西是否相等,比如: a = 10: b = 10: print(a == b): 输出是true: 再看一个例子: a = [1,2,3]; b = [1,2,3]; c = [1,2,4]; print

浅谈JS数据类型存储问题

背景 一个经典的问题,先抛出来给大伙看看: var a = "黑MAO"; var b = a; var c = new Object(); var d = c; a = "新黑MAO"; c.age = 24; //打印出结果是怎么样的呢? console.log(a, b, c, d); 上面先把问题出来,经过本文的梳理,之后再回头看看这个过程. JS有哪些数据类型? JS包含量大数据类型,一种是基本数据类型(String.Number.Boolean.unde

浅谈32位和64位操作系统与内存的关系

比如说有这样一个场景,你在书房里面看书 你代表--支持32位的CPU和64位的CPU 书桌代表--内存 书架代表--硬盘 你从书架取出32本书放在书桌上面,书桌只能同时铺开放32本书,你可以同时看这32本书获取信息,看完以后,你将这32本书放到书架,然后从书架再房32本书继续上面的操作:过了一段时间你觉得看书速度比较慢,你又买了一个可以同时铺开放64本书的大书桌,然后你通过神秘的训练让你可以同时看64本书,然后这样你的速度大大的提高了. 在训练过后你如果同时看32本书,这也是可以的.

浅谈MySql的存储引擎(表类型) (转)

什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等等.根据数据库如何存储数据和如何操作数据的实现机制不同,这些数据库之间即有区别又有共同点. MySql数据库是开放源代码的关系型数据库.目前,它可以提供的功能有:支持sql语言.子查询.存储过程.触发器.视图.索引.事务.锁.外

浅谈MySql的存储引擎(表类型)

来源:http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合.    我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等等.根据数据库如何存储数据和如何操作数据的实现机制不同,这些数据库之间即有区别又有共同点

浅谈利用SQLite存储离散瓦片的思路和实现方法

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在多个项目中涉及到互联网地图的内网显示,通过自制工具完成了互联网地图的瓦片下载.但是此种方法存在如下几个问题: a.瓦片均是离散型图片,远程部署非常耗时. b.瓦片下载中,涉及到将互联网瓦片下载至内存,然后建立对应文件夹,然后保存至本地的过程,效率不高. 除了以上两个问题外,还有存储占用比较多等等缺点.是否有类似于ArcGIS的Bundle型瓦片组织格式来解决

浅谈Windows Azure 存储服务

我们现在正处于一个数据爆炸的年代,大数据.开放数据炒的如火如荼,表明数据给我们带来了不可估量的价值. 对于企业来说,保存.管理和维护数据已经成为一项重要的挑战.大量存储设备的采购.部署.数据规模的不断增长,对于需要为其数据使用可伸缩的.持久的且具有高可用性的存储的应用程序,云计算使其有了新的方案可供选择,这正是 Microsoft 开发 Azure 存储服务的原因. Azure存储服务包括Blob存储.表存储.队列存储和文件存储.这些服务都包含在每个存储账户中. 那么存储账户是一个唯一的命名空间

浅谈个人对存储区域网络SAN的理解

存储区域网络SAN,是一种通过将网络存储设备和服务器连接起来的网络,提供计算机和存储设备间的数据传输.其中,SAN是独立于服务器系统之外的,拥有近乎无限的存储能力,通过利用光纤作为传输媒介,实现了高速共享,它主要由服务器,外部存储设备,服务器适配器,集线器,交换机和网络,存储管理工具等组成.SAN的优点都体现在以下几点: (1)管理方便 可通过一台SAN给多个服务器提供存储,存储管理方便. (2)扩展性强 SAN由多个磁盘组成,用户可自由增加磁盘,服务器等,可提供海量空间.而逻辑上,它又可以被分

浅谈存储重删压缩技术(一)

浅谈重删压缩技术(一) <喜欢更多内容可以关注微信公众号"围炉煮酒论IT"> 作为一个做企业存储市场的存储人,最近两年我不断被重删压缩撩拨着.对于重删压缩这个技术的好坏,真实需求还是伪需求大家看法不一.今天我就只能谈谈我个人的看法. 重删压缩是什么? 重删和压缩时完全不同的两种技术,解决不同的问题. 重删:就是说有很多分相同的数据,我只存储其中一份,其他的重复数据块我保留一个地址引用到这个唯一存储的块即可. 压缩:将一个大字符串中的子串用一个很简短的数字来标记,然后检索该字