CN104899204B - 数据存储方法及装置 - Google Patents
数据存储方法及装置 Download PDFInfo
- Publication number
- CN104899204B CN104899204B CN201410077706.8A CN201410077706A CN104899204B CN 104899204 B CN104899204 B CN 104899204B CN 201410077706 A CN201410077706 A CN 201410077706A CN 104899204 B CN104899204 B CN 104899204B
- Authority
- CN
- China
- Prior art keywords
- data
- bit
- bitmap
- segmented
- stored
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种数据存储方法,包括:获取待存储的数据;根据所述待存储的数据,获取所述待存储的数据对应的分段位图中的比特位;将所述待存储的数据对应的分段位图中的比特位置位为1;将比特位置位后的分段位图进行存储。本发明还公开一种数据存储装置。本发明相对于现有技术的数据存储方式进一步减少了存储空间。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种数据存储方法及装置。
背景技术
现有的数据分析中,一般采用Java、C++、Python等高级语言编写程序进行统计,例如分布式的MapReduce代码等。但是对于独立用户数的统计,目前最简单也是最常用的方式之一,是利用各类高级语言中的Set对象存储账户号码,最后取得Set的长度得到唯一值个数。例如Java语言实现的代码如下:
上述方法虽然简单、代码量少,但是在数据量大的情况下,Set对象将消耗过多的内存,甚至导致内存溢出。
发明内容
本发明实施例的主要目的是提供一种数据存储方法及装置,旨在减小存储空间。
为达到以上目的,本发明实施例提供了一种数据存储方法,包括以下步骤:
获取待存储的数据;
根据所述待存储的数据,获取所述待存储的数据对应的分段位图中的比特位;
将所述待存储的数据对应的分段位图中的比特位置位为1;
将比特位置位后的分段位图进行存储。
本发明实施例还提供了一种数据存储装置,包括:
数据获取模块,用于获取待存储的数据;
位置查找模块,用于根据所述待存储的数据,获取所述待存储的数据对应的分段位图中的比特位;
置位模块,用于将所述待存储的数据对应的分段位图中的比特位置位为1;
存储模块,用于将比特位置位后的分段位图进行存储。
本发明通过将待存储的数据添加到位图的对应分段位图进行存储,相对于现有技术的HashSet方式,占用更小的内存,且更为高效。而且通过序列化压缩方法,进一步减少了占用空间。同时,在将待存储的数据添加到位图中时,已经按统一的运算规则分别添加到有序的段位图中,则整个位图可以很方便地将所有的数据有序导出。因此,本发明采用分段位图的存储方式,既能高效和方便的存储,又使得数据可以有序的取出。
附图说明
图1是本发明数据存储方法所应用的的终端硬件架构示例图;
图2是本发明数据存储方法一实施例的流程示意图;
图3是本发明数据存储方法中分段位图的结构示例图;
图4是本发明数据存储方法中另一实施例存储位图的流程示意图;
图5是本发明数据存储方法中找出每个段位图中最左边的第1个非空闲位与最右边的第1个非空闲位的位图示例图;
图6a是采用本发明数据存储方法中的分段位图方式存储数据时的时间消耗与采用HashSet方式、整段位图方式存储数据时的时间消耗比对示例图;
图6b是采用本发明数据存储方法中的分段位图方式存储数据时的内存消耗与采用HashSet方式、整段位图方式存储数据时的内存消耗比对示例图;
图7是本发明数据存储方法中位图的表示结构示例图;
图8是本发明数据存储方法另一实施例的流程示意图;
图9a是采用本发明数据存储方法中压缩序列化方式存储数据时的序列化时间与采用Java对象序列化、常规序列化方式存储数据的序列化时间比对示例图;
图9b是采用本发明数据存储方法中压缩序列化方式存储数据时的反序列化时间与采用Java对象序列化、常规序列化方式存储数据的反序列化时间比对示例图;
图9c是采用本发明数据存储方法中压缩序列化方式存储数据时的占用空间与采用常规序列化方式存储数据的占用空间比对示例图;
图10是本发明数据存储装置一实施例的功能模块示例图;
图11是本发明数据存储装置中存储模块的功能模块示例图;
图12是本发明数据存储装置另一实施例的功能模块示例图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
以下结合说明书附图及具体实施例进一步说明本发明的技术方案。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供了一种数据的存储方法。该数据存储方法用于数据分析,即存储某种值集合的唯一值个数,并对其进行统计。该数据存储方法可以运行于一个单独的终端中,也可以运行于多个终端组成的系统中。以下将对终端进行相应的描述。
参照图1,提出本发明数据存储方法所应用的终端的结构示例图。该终端可以包括处理器101、存储模块102、输入模块103、通信模块104、显示模块105等部件。本领域技术人员可以理解,图1中示出的终端结构并不构成对该终端的限定,该终端还可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
具体地,该存储模块102可用于存储软件程序以及数据。该终端中全部信息,包括输入的原始数据、软件程序、中间运行结果和最终运行结果都将保存在存储模块102中。处理器101通过运行存储在存储模块102中的软件程序以及数据,从而执行各种功能应用以及数据处理。上述存储模块102可以包括一个或一个以上计算机可读存储介质,而且其不但包括内部存储器,还包括外部存储器。所述内部存储器用来存放处理器当前正在执行的数据和程序,一旦电源关闭,则内部存储器的数据将丢失。外部存储器一般为非易失性存储器,可以长期保存信息。例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
上述输入模块103可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。以目前常用的触摸屏为例,该触摸屏可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器101,并能接收处理器101发来的命令并加以执行。可以理解的是,该输入模块可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示模块105可用于显示由用户输入的信息或提供给用户的信息以及终端的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示模块105可包括显示面板141,例如LCD(Liquid Crystal Display,液晶显示器)、OLED(Organic Light-Emitting Diode,有机发光二极管)。可以理解的是,该输入模块103与显示模块105可以作为两个独立的部件来实现,也可以集成在一起实现输入和输出功能。
上述通信装置104可用于终端与外部通信。该通信装置可包括RF电路、WIFI等等。其中RF电路可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器101处理;另外,将涉及上行的数据发送给基站。通常,RF电路包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM)卡、收发信机、耦合器、LNA(Low Noise Amplifier,低噪声放大器)、双工器等。此外,RF电路还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于GSM(Global System of Mobile communication,全球移动通讯系统)、GPRS(General Packet Radio Service,通用分组无线服务)、CDMA(Code DivisionMultiple Access,码分多址)、WCDMA(Wideband Code Division Multiple Access,宽带码分多址)、LTE(Long Term Evolution,长期演进)、电子邮件、SMS(Short MessagingService,短消息服务)等。WiFi属于短距离无线传输技术,终端通过WiFi可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。可以理解的是,WiFi并不属于终端的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器101是终端的控制中心,利用各种接口和线路连接整个终端的各个部分,通过运行或执行存储在存储模块102内的软件程序,以及调用存储在存储模块102内的数据,执行终端的各种功能和处理数据,从而对终端进行整体监控。优选地,该处理器101可包括一个或多个处理核心,例如处理器101可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器101中。
终端还包括给各个部件供电的电源模块(比如电池),该电源模块可以通过电源管理系统与处理器101逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源模块还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。尽管未示出,终端还可以包括摄像头、蓝牙模块等,在此不再赘述。
基于上述终端的硬件结构,本发明提出的数据存储方法将运行在该终端上,以下将结合上述终端的硬件结构,对数据存储方法进行详细的描述。
实施例一
参照图2,该实施例的数据存储方法包括:
步骤S110、获取待存储的数据;
该待存储的数据为某种值集合的唯一值个数,例如账户号码、邮箱地址、IP地址、机器物理编号等等。由于是通过位图对数据进行存储,所以这里的数据类型必须是数字型。因此,为了保证数据类型均符合要求,本实施例中,在获取待存储的数据时,需判断待存储的数据类型是否为数字型;若待存储的数据类型为数字型,则不做处理,若待存储的数据类型不是数字型,则通过相应的算法将其转换为数字型,例如HASH(哈希)算法。
步骤S120、根据所述待存储的数据值,获取所述待存储的数据对应的分段位图中的比特位;
为了节省空间,将位图顺序切分成若干个段,成为分段位图。每个分段位图由开始值S、结束值E确定,区间长度L则为E-S+1。根据所述待存储的数据值大小,判断其落在哪个段的位图中,然后从该分段位图中找到与待存储的数据值对应的位置。若找不到待存储的数据值大小所属段的位图,则创建该分段位图,然后从该创建的分段位图中找到与待存储的数据值对应的位置。
步骤S130、将所述待存储的数据对应的分段位图中的比特位置位为1;
该分段位图中默认均为0,当找到与待存储的数据值对应的比特位时,在该比特位上置位为1。
步骤S140、将比特位置位后的分段位图进行存储。
最后的位图可以如图3所示,该位图包括多个分段位图,且每个分段位图的长度L均为E0+1,每个分段位图的对应比特位上为“0”或“1”。由于采用分段位图对待存储的数据进行存储,由于不存在的段不用存储,从而可以节省存储空间。
以下将以账户号码为例,对本发明的数据存储过程进行具体描述。首先,将在该客户端上设置数据采集装置,用于采集通过该客户端登录服务器的账户号码,例如“10000”。然后判断该账户号码落在哪个分段位图中。若每个分段位图的长度L为3000,则可以判断该账户号码“10000”落在第4个分段位图中。然后从该第4个分段位图中找到与“10000”对应的位置,即第4个分段位图中的第1000位。因此,在该第4个分段位图中的第1000位中置1。若第4个分段位图不存在,则先创建该第4个分段位图,然后在在该第4个分段位图中的第1000位中置1。该账户号码的存储将用于统计该客户端某段时间用户的活跃度或者登录用户数。以统计客户端某段时间登录的用户数为例,通过遍历该所有的位图,当位图中的位为1时,则进行计数。在该所有的位图遍历完后,计数值则为登录的用户数。
实施例二
考虑到大多数情况下,并非所有分段位图中的所有比特位均被占用。因此本发明还提供了本发明数据存储方法第二实施例。参照图4所示,该实施例的步骤S140包括:
步骤S141、当分段位图的首尾存在空闲比特位时,获取该分段位图中最左边的第1个非空闲比特位,以及该分段位图中最右边的第1个非空闲比特位;
首先,判断该分段位图的首是否存在空闲比特位,若分段位图的首存在空闲比特位时,则获取该分段位图中最左边的第1个非空闲比特位,即最左边的定位针。具体为:从该分段位图最左边开始向右移动,直到找到为“1”的比特位,即为最左边的第1个非空闲比特位。若分段位图的首不存在空闲比特位时,则获取该分段位图中最右边的第1个非空闲比特位,即最右边的定位针。具体为:从该分段位图最右边开始向左移动,直到找到为“1”的比特位,即为最右边的第1个非空闲比特位。
步骤S142、保存分段位图中最左边的第1个非空闲比特位与最右边的第1个非空闲比特位之间的比特位。
如图5所示,找出分段位图中最左边的第1个非空闲比特位与最右边的第1个非空闲比特位后,再对其进行保存,即保存图5所示的分段位图中的灰色位。
本发明实施例在保存位图时,对分段位图中首尾空闲位不存储,从而进一步节省了存储空间。
本发明通过分段位图,对待存储的数据进行位存储,有效减少了哈希值存储的内存开销,避免了内存溢出的风险,而且内存开销变化很小,程序更加稳定。位操作进行查找、新增和统计,也更为高效。
以下将通过对某客户端操作日志中的10.5亿流水进行数十次逐步递增测试:原始记录数从2700万增加到13.5亿;独立用户数从1300万增加到1.46亿;每个账户号码为4字节正整数,最大账户号码一直为4294967196,最小账户号码一直为0。测试语言为Java,JDK1.6.0_23,64-Bit服务器,测试服务器RAM为32G。分别采用HashSet方式、整段位图方式以及分段位图方式进行测试后。如图6a及图6b所示,其测试结果具体为:
(1)采用HashSet方式,虚拟机(JVM)的最大可用堆内存(Heap)为8G。内存消耗从123.8M快速增长,在独立用户数达到6500万左右时,抛出Heap溢出错误;期间统计时间从13.4秒快速增长到80.1秒。
(2)采用整段位图方式,位图总长度为最大无符号整形,即4294967296。内存消耗一直为512M,统计时间从12秒增加到97.6秒。
(3)采用分段位图方式:段长设置为1024K时,内存消耗从301M增加到326.1M,统计时间从5.3秒增加到94.8秒。
由上述测试结果可知,采用分段位图的方式,有效的避免了HashSet方式的内存溢出错误,并且其时间消耗远小于HashSet方式;同时,分段位图方式的内存消耗小于整段位图的方式,数据越小或者越集中时,差距越明显。
实施例三
实际应用中,经常需要对待存储的数据进行存储或者多语言之间共享,故需要将分段位图序列化成通用的数据格式,以便于存储、传输和多语言解析等。序列化的方式有多种,比如Java语言中实现Serializable接口,或者采用Protocol Buffer、Thrift、Avro等序列化工具。而考虑到位图会被频繁修改,以及可移植性等问题,本实施例未采用上述序列化格式定义,而是直接采用格式化的字节流。
本实施例的分段位图由多个唯一整数段编码(ID)标记的段(Segment)组成,而每个段(Segment)又由一个定位针(Pin)和若干个块(Block)组成,可以采用如下简单协议组建字节流:
通过上述结构序列化的位图所占用的存储空间会小于直接对包含Hash位图的对象序列化所占用的存储空间。
由于ID、Pin和Block个数各占4个字节,总共12个字节。而并非所有的分段位图都需要12个字节来存储该3个信息,例如当ID、Pin和Block个数没有超过65536时,则仅需要1或2个字节即可进行存储,从而存储了空间。而为了标识ID、Pin和Block个数分别采用了几个字节,需要再存储一个信息Tag。考虑到整型最长只有4个字节,即采用2个比特即可表示其长度。如下所示:
Tag | Length |
00 | 1 |
01 | 2 |
10 | 3 |
11 | 4 |
也就是说上述3个ID、Pin和Block个数所采用的字节可以通过一个字节来表示。例如,要存储ID=1,Pin=258,Block个数=108这3个长度信息,用5个字节表示即可,如图7所示。由于ID为1,Pin=258,Block个数=108,所以ID用1个字节表示即可,为“00000001”;Pin用2个字节表示即可,为“0000000100000010”;Block个数用1个字节表示即可,为“01101100”。而表示ID、Pin和Block个数分别采用了几个字节的Tag则为“00010000”。因此,上例所述3个4字节的整形,实际只需要用5个字节即可存储,节省了7个字节的空间。
实施例四
由于每个分段位图中可能包含有一些连续空块(Sequential Blank Blocks),如果对其进行合并,则可以大幅减少存储空间。因此,如图8所示,本实施例中步骤S140之前包括:
步骤S150、获取每个分段位图中的连续空块;
步骤S160、将所述连续空块压缩成空快包,且空块包的第1个比特位置位为0,第2到第8个比特位用于表示空块的个数;同时,数据块的第1个比特位置位为1,第2到第8个比特位用于表示被占用的数据。
由于连续空块的合并,则为了区分空块和数据块,可以用每个块的第一个比特位进行区分。例如,数据块的第一个比特位为1,而空块的第一个比特位为0。对连续空块,可以压缩成一个空块包,空块包的第一个比特位为0,第2到第8个比特位则表示空块的个数。如此,一个空块包可以表示连续127个空块。若连续空块超过127个,则新增一个空块包,如此递推。可压缩位图的块定义如下所示:
由于是否采用压缩方式,会影响每个块的存放形式,且设定后不可更改,故整个位图还需要一个是否可压缩的标识,一个字节即可。若标识为压缩时,则空块和数据块的第1个比特位用于标识是空块还是数据块;若标识为不压缩,则数据块的第1个比特位仍然表示被占用的数据。
采用上述方法对分段位图压缩后,整个位图的序列化格式如下:
可以理解的是,上述实施例之间可以单独实施,也可以任意两个或多个相互结合实施,以达到节省存储空间的目的。
以下将采用1,000,000到50,000,000的随机整数填充分段位图,分别采用Java对象序列化、常规序列化和压缩序列化3种方式进行测试,其序列化时间、反序列化时间和占用的内存对比如图9a、图9b及图9c所示。由图9a、图9b及图9c可以看出,数据量小的情况下,压缩序列化方式相比常规序列化方式可以大幅度节省空间,但其序列化的时间会稍长。
综上,本发明数据存储方法相对于现有技术的HashSet方式,占用更小的内存,且更为高效。而且通过序列化压缩方法,进一步减少了占用空间。同时,用于待存储的数据添加到位图中时,已经按统一的运算规则分别到有序的段位图中,则整个位图可以很方便地将所有的数据导出,因此分段位图方式是一种非常高效和方便的存储方法。
对应地,本发明还提供了一种数据存储装置。如图10所示,该数据存储装置包括:
数据获取模块110,用于获取待存储的数据;
位置查找模块120,用于根据所述待存储的数据值,获取所述待存储的数据对应的分段位图中的比特位;
置位模块130,用于在所述待存储的数据对应的分段位图中的比特位置位为1;
存储模块140,用于对比特位置位后的分段位图进行存储。
由于是通过位图对数据进行存储,所以这里的数据类型必须是数字型。因此,为了保证数据类型均符合要求,本实施例中,在数据获取模块110获取待存储的数据时,需判断待存储的数据类型是否为数字型;若待存储的数据类型为数字型,则不做处理,若待存储的数据类型不是数字型,则通过相应的算法将其转换为数字型,例如HASH算法。
为了节省空间,将位图顺序切分成若干个段,成为分段位图。每个段由开始值S、结束值E确定,区间长度L则为E-S+1。位置查找模块120根据所述待存储的数据值大小,判断其落在哪个段的位图中,然后从该分段位图中找到与待存储的数据值对应的比特位。若找不到待存储的数据值大小所属段的位图,则创建该分段位图,然后从该创建的分段位图中找到与待存储的数据值对应的比特位。
该分段位图中默认均为0,当位置查找模块120获取到与待存储的数据值对应的比特位时,上述置位模块130将其置1。然后存储模块140将最后的位图进行存储。由于采用分段位图对待存储的数据进行存储,由于不存在的分段位图不用存储,从而可以节省存储空间。
进一步地,参照图11,上述存储模块140包括:
空闲位查找单元141,用于当分段位图的首尾存在空闲比特位,获取该分段位图中最左边的第1个非空闲比特位,以及该分段位图中最右边的第1个非空闲比特位;
存储单元142,用于保存分段位图中最左边的第1个非空闲比特位与最右边的第1个非空闲比特位之间的比特位。
首先,空闲位查找单元141判断该分段位图的首是否存在空闲比特位,若分段位图的首存在空闲比特位时,则获取该分段位图中最左边的第1个非空闲比特位,即最左边的定位针。具体为:从该分段位图最左边开始向右移动,直到找到为“1”的比特位,即为最左边的第1个非空闲比特位。若分段位图的首不存在空闲比特位时,则获取该分段位图中最右边的第1个非空闲比特位,即最右边的定位针。具体为:从该分段位图最右边开始向左移动,直到找到为“1”的比特位,即为最右边的第1个非空闲比特位。然后存储单元142将分段位图中最左边的第1个非空闲比特位与最右边的第1个非空闲比特位之间的比特位进行存储。
进一步地,本实施例的分段位图由多个唯一整数段编码(ID)标记的段(Segment)组成,而每个段(Segment)又由一个定位针(Pin)和若干个块(Block)组成。由于ID、Pin和Block个数各占4个字节,总共12个字节。而并非所有的段位图都需要12个字节来存储该3个信息,例如当ID、Pin和Block个数没有超过65536时,则仅需要1或2个字节即可进行存储,从而存储了空间。而为了标识ID、Pin和Block个数分别采用了几个字节,需要再存储一个信息Tag。考虑到整型最长只有4个字节,即采用2个比特即可表示其长度。也就是说上述3个ID、Pin和Block个数所采用的字节可以通过一个字节来表示。
进一步地,参照图11,上述数据存储装置还包括:
连续空块获取模块150,用于获取分段位图中的连续空块;
空块压缩模块160,用于将所述连续空块压缩成空快包,且空块包的第一个比特位置位为0,第2到第8个比特位则用于表示空块的个数;
为了区分空块和数据块,可以用每个块的第一个比特位进行区分。例如,数据块的第一个比特位为1,而空块的第一个比特位为0。对连续空块,可以压缩成一个空块包,空块包的第一个比特位仍为0,第2到第8个比特位则表示空块的个数。如此,一个空块包可以表示连续127个空块。若连续空块超过127个,则新增一个空块包,如此递推。可压缩位图的块定义如下所示:
由于是否采用压缩方式,会影响每个块的存放形式,且设定后不可更改,故整个位图还需要一个是否采用压缩的标识,一个字节即可。
采用上述方法对分段位图压缩后,整个位图的序列化格式如下:
本发明通过将待存储的数据添加到位图的对应分段位图中,从而相对于现有技术的HashSet方式,占用更小的内存,且更为高效。而且通过序列化压缩方法,进一步减少了占用空间。同时,在将待存储的数据添加到位图中时,已经按统一的运算规则分别添加到有序的段位图中,则整个位图可以很方便地将所有的数据有序导出。因此,本发明采用分段位图的存储方式,既能高效和方便的存储,又使得数据可以有序的取出。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该数据存储装置将包括若干指令,并存储在上述终端的存储模块102中。该若干指令供上述终端(可以是手机,计算机,服务器,或者网络设备等)的处理器101调用,以执行本发明各个实施例所述的方法。
以上所述仅为本发明的优选实施例,并非因此限制其专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种数据存储方法,其特征在于,包括以下步骤:
获取待存储的数据;
根据所述待存储的数据,将位图切分形成分段位图,确定所述待存储的数据对应的所属段的分段位图,若找不到所述待存储数据对应的所属段的分段位图,则创建对应的分段位图,获取所述待存储的数据在对应的所述分段位图中的比特位;
将所述待存储的数据对应的分段位图中的比特位置位为1;
将比特位置位后的分段位图中最左边的第1个非空闲位与最右边的第1个非空闲位之间的比特位进行存储。
2.如权利要求1所述的数据存储方法,其特征在于,所述将比特位置位后的分段位图中最左边的第1个非空闲位与最右边的第1个非空闲位之间的比特位进行存储包括:
当所述分段位图的首尾存在空闲位,获取该分段位图中最左边的第1个非空闲位,以及该分段位图中最右边的第1个非空闲位;
保存所述分段位图中最左边的第1个非空闲位与最右边的第1个非空闲位之间的比特位。
3.如权利要求1所述的数据存储方法,其特征在于,所述分段位图包括多个段,且每个段包括段编码、定位针、多个块以及表示所述段编码、定位针、块中的字节数的字段标识。
4.如权利要求3所述的数据存储方法,其特征在于,所述将比特位置位后的分段位图中最左边的第1个非空闲位与最右边的第1个非空闲位之间的比特位进行存储之前包括:
获取每个分段位图中的连续空块;
将所述连续空块压缩成空块包,且空块包的第一个比特位置位为0,第2到第8个比特位则表示空块的个数;同时,将数据块的第一个比特位置位为1,第2到第8个比特位则表示被占用的数据。
5.如权利要求1所述的数据存储方法,其特征在于,所述获取待存储的数据之后还包括:
判断待存储的数据类型是否为数字型;
当待存储的数据类型不是数字型时,则将其转换为数字型的数据。
6.一种数据存储装置,其特征在于,包括:
数据获取模块,用于获取待存储的数据;
位置查找模块,用于根据所述待存储的数据,将位图切分形成分段位图,确定所述待存储的数据对应的所属段的分段位图,若找不到所述待存储数据对应的所属段的分段位图,则创建对应的分段位图,获取所述待存储的数据在对应的所述分段位图中的比特位;
置位模块,用于将所述待存储的数据对应的分段位图中的比特位置位为1;
存储模块,用于将比特位置位后的分段位图中最左边的第1个非空闲位与最右边的第1个非空闲位之间的比特位进行存储。
7.如权利要求6所述的数据存储装置,其特征在于,所述存储模块包括:
空闲位查找单元,用于当所述分段位图的首尾存在空闲位,获取该分段位图中最左边的第1个非空闲位,以及该分段位图中最右边的第1个非空闲位;
存储单元,用于保存所述分段位图中最左边的第1个非空闲位与最右边的第1个非空闲位之间的比特位。
8.如权利要求6所述的数据存储装置,其特征在于,所述分段位图包括多个段,且每个段包括段编码、定位针、多个块以及表示所述段编码、定位针、块中的字节数的字段标识。
9.如权利要求8所述的数据存储装置,其特征在于,还包括:
连续空块获取模块,用于获取每个分段位图中的连续空块;
空块压缩模块,用于将所述连续空块压缩成空块包,且空块包的第一个比特位置位为0,第2到第8个比特位用于表示空块的个数;同时,将数据块的第一个比特位置位为1,第2到第8个比特位用于表示被占用的数据。
10.如权利要求6所述的数据存储装置,其特征在于,还包括数据转换模块:判断所获取的待存储的数据类型是否为数字型;当待存储的数据类型不是数字型时,则将其转换为数字型的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410077706.8A CN104899204B (zh) | 2014-03-05 | 2014-03-05 | 数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410077706.8A CN104899204B (zh) | 2014-03-05 | 2014-03-05 | 数据存储方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104899204A CN104899204A (zh) | 2015-09-09 |
CN104899204B true CN104899204B (zh) | 2020-04-07 |
Family
ID=54031872
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410077706.8A Active CN104899204B (zh) | 2014-03-05 | 2014-03-05 | 数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104899204B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105824952B (zh) * | 2016-03-28 | 2019-04-19 | 努比亚技术有限公司 | 一种处理数据的装置和方法 |
CN108269594B (zh) * | 2016-12-30 | 2021-12-17 | 北京纳米能源与系统研究所 | 信息存储介质、装置和存储方法 |
CN108052657A (zh) * | 2017-12-28 | 2018-05-18 | 税友软件集团股份有限公司 | 一种业务标签计算方法、系统、设备及计算机存储介质 |
CN111091343B (zh) * | 2018-10-24 | 2021-03-12 | 北京乐柏信息咨询有限公司 | 一种教学资源检测方法及计算机存储介质 |
CN109558387B (zh) * | 2018-12-11 | 2020-10-30 | 北京锐安科技有限公司 | 身份证号的处理方法、装置、存储介质及终端 |
CN109857740B (zh) * | 2019-01-25 | 2021-06-04 | 上海赜睿信息科技有限公司 | 字符串的存储方法、匹配方法、电子设备及可读存储介质 |
CN109977373B (zh) * | 2019-03-28 | 2020-10-02 | 中科驭数(北京)科技有限公司 | 标识号分配方法、标识号回收方法及装置 |
CN110297836B (zh) * | 2019-07-11 | 2021-07-20 | 杭州云梯科技有限公司 | 基于压缩位图方式的用户标签存储方法和检索方法 |
CN110825521B (zh) * | 2019-10-21 | 2022-11-25 | 新华三信息安全技术有限公司 | 一种内存使用管理方法、装置及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101311931A (zh) * | 2007-05-21 | 2008-11-26 | Sap股份公司 | 基于值的出现的表压缩 |
CN102214360A (zh) * | 2010-04-06 | 2011-10-12 | 腾讯科技(深圳)有限公司 | 一种位图构建方法及装置、求交的方法及装置 |
CN104298680A (zh) * | 2013-07-18 | 2015-01-21 | 腾讯科技(深圳)有限公司 | 数据统计方法及数据统计装置 |
-
2014
- 2014-03-05 CN CN201410077706.8A patent/CN104899204B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101311931A (zh) * | 2007-05-21 | 2008-11-26 | Sap股份公司 | 基于值的出现的表压缩 |
CN102214360A (zh) * | 2010-04-06 | 2011-10-12 | 腾讯科技(深圳)有限公司 | 一种位图构建方法及装置、求交的方法及装置 |
CN104298680A (zh) * | 2013-07-18 | 2015-01-21 | 腾讯科技(深圳)有限公司 | 数据统计方法及数据统计装置 |
Non-Patent Citations (3)
Title |
---|
Redis bitmaps-Fast, easy, realtime metrics;匿名;《GetSpool2008-Jailbreak Tweaks,iOS News》;http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/;20111129;http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/ * |
使用Redis bitmaps进行快速、简单、实时统计;Gary的影响力;《CSDN博客》;https://blog.csdn.net/gaoyingju/article/details/9671283;20130731;https://blog.csdn.net/gaoyingju/article/details/9671283 * |
用Redis bitmap统计活跃用户、留存;guisu,程序人生。 逆水行舟,不进则退;《CSDN博客》;https://blog.csdn.net/hguisu/article/details/9191389;20130627;https://blog.csdn.net/hguisu/article/details/9191389 * |
Also Published As
Publication number | Publication date |
---|---|
CN104899204A (zh) | 2015-09-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104899204B (zh) | 数据存储方法及装置 | |
CN112925661B (zh) | 消息处理方法、装置、计算机设备及存储介质 | |
CN115567589B (zh) | Json数据的压缩传输方法、装置、设备及存储介质 | |
CN115023697A (zh) | 数据查询方法、装置及服务器 | |
CN114175748B (zh) | 通信频率调节方法、装置、电子设备及存储介质 | |
CN113795039A (zh) | 运营商网络切换方法、装置、设备和计算机可读存储介质 | |
CN111859127A (zh) | 消费数据的订阅方法、装置及存储介质 | |
CN109710502B (zh) | 日志传输方法、装置及存储介质 | |
US10762207B2 (en) | Method and device for scanning virus | |
CN112052144B (zh) | 信息管理方法、装置、电子设备及存储介质 | |
CN110032432B (zh) | 实例的压缩方法和装置、实例的解压方法和装置 | |
CN108256017B (zh) | 一种用于数据存储的方法、装置及计算机设备 | |
CN115396518B (zh) | 一种自适应的数据同步方法以及系统 | |
CN109766347B (zh) | 一种数据更新方法、装置、系统、计算机设备及存储介质 | |
CN113190237B (zh) | 数据处理方法、系统和装置 | |
CN112866422B (zh) | 一种数据请求处理方法和装置 | |
CN113946617A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
JP6559313B1 (ja) | 所属地分析用データ構築システム、所属地分析用データ構築プログラム、及び所属地分析システム | |
CN112184027A (zh) | 任务进度更新方法、装置及存储介质 | |
CN112054805A (zh) | 一种模型数据压缩方法、系统及相关设备 | |
CN106648925B (zh) | 移动终端及其字符串信息的获取方法 | |
CN107562553B (zh) | 数据中心管理方法和设备 | |
CN114302425B (zh) | 设备配网方法、装置、存储介质及电子设备 | |
CN108133033B (zh) | 一种用于数据存储的方法、装置及计算机设备 | |
US20170099350A1 (en) | Apparatus and method for transmitting mass data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20201015 Address after: Room 2012, building 12, 13, 15, fangmaoyuan (phase II), 1177 Huanhu Road, Tianding street, Yuelu District, Changsha City, Hunan Province Patentee after: Tencent cloud computing (Changsha) Co., Ltd Address before: Shenzhen Futian District City, Guangdong province 518044 Zhenxing Road, SEG Science Park 2 East Room 403 Patentee before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. |