减少数据库存储容量的数据存储方法转让专利

申请号 : CN201711270332.1

文献号 : CN108038158B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王华勇

申请人 : 北京百度网讯科技有限公司

摘要 :

本发明涉及一种数据库的数据存储方法,包括:S101:接收待存入的数据表或者数据表的分片;S102:对所述数据表或数据分片中的数据进行模式识别,匹配到多个预设的模式之一;S103:按照与所述多个预设的模式分别相对应的编码方式,对所述数据进行编码;和S104:将编码的结果写入数据库的存储器中。

权利要求 :

1.一种数据库的数据存储方法,包括:

S101:接收待存入的数据表或者数据表的分片;

S102:对所述数据表或数据分片中的数据进行模式识别,匹配到多个预设的模式之一,其中,数据的模式是所述数据表或数据分片中的数字和/或字符串序列中的数字和/或字符串之间的排列格式;

S103:按照与所述多个预设的模式分别相对应的编码方式,对所述数据进行编码;和S104:将编码的结果写入所述数据库的存储器中;

其中在对所述数据进行模式识别之前,将所述表或者分片中的数据按照列的方式组织;

所述多个预设模式包括以下模式的任意组合:

模式1:单个数字;存储格式:类型码+数字;

模式2:多个重复的数字;存储格式:类型码+复数字的个数+重复的数字;

模式3:多个以固定间距递增或者递减的数字;存储格式:类型码+数字的个数+间距+起始数字;

模式4:没有规律的一串数字;存储格式:类型码+数字的个数+罗列每个数字;

模式5:一个基本数字串反复出现;存储格式:类型码+总共数字的个数+一个数字基本串包含的数字的个数+罗列每个数字;

模式6:一个基本数字串包含若干相同的数字,该基本数字串反复出现,每次出现递增或者递减一个固定的间距;存储格式:类型码+总共数字的个数+间距+一个数字基本串包含的数字的个数+第一个基本串中的数字;

模式7:一个无规律的基本串按间距递增或递减重复出现;存储格式:类型码+总共数字的个数+间距+一个数字基本串包含的数字的个数+罗列第一个基本串中的数字。

2.根据权利要求1所述的数据存储方法,其特征在于,所述数据库是云数据库。

3.一种数据库的数据读取方法,包括:

S201:从数据库的存储器中读取一段数据的模式类型码和长度;

S202:根据所述一段数据的长度,读取所述长度的数据;

S203:根据与所述模式类型码相对应的编码方式,计算出所述一段数据对应的用户数据,所述用户数据是数据表或数据分片;和S204:将所述用户数据返回给用户,

其中,所述模式类型码对应的模式是所述数据表或数据分片中的数字和/或字符串序列中的数字和/或字符串之间的排列格式;所述模式类型码对应的模式包括以下模式的任意组合:模式1:单个数字;存储格式:类型码+数字;

模式2:多个重复的数字;存储格式:类型码+复数字的个数+重复的数字;

模式3:多个以固定间距递增或者递减的数字;存储格式:类型码+数字的个数+间距+起始数字;

模式4:没有规律的一串数字;存储格式:类型码+数字的个数+罗列每个数字;

模式5:一个基本数字串反复出现;存储格式:类型码+总共数字的个数+一个数字基本串包含的数字的个数+罗列每个数字;

模式6:一个基本数字串包含若干相同的数字,该基本数字串反复出现,每次出现递增或者递减一个固定的间距;存储格式:类型码+总共数字的个数+间距+一个数字基本串包含的数字的个数+第一个基本串中的数字;

模式7:一个无规律的基本串按间距递增或递减重复出现;存储格式:类型码+总共数字的个数+间距+一个数字基本串包含的数字的个数+罗列第一个基本串中的数字。

4.根据权利要求3所述的数据读取方法,其特征在于,所述数据库是云数据库。

5.一种计算机可读存储介质,包括存储于其上的计算机可执行指令,所述可执行指令在被处理器执行时实施如权利要求1-2中任一项所述的数据存储方法。

6.一种数据库的写入装置,包括:

接收单元,所述接收单元配置成接收待存入的数据表或者数据表的分片;

模式识别单元,所述模式识别单元配置成对所述数据表的或者分片的数据进行模式识别,匹配到多个预设的模式之一,其中,数据的模式是所述数据表或数据分片中的数字和/或字符串序列中的数字和/或字符串之间的排列格式;

编码单元,所述编码单元配置成按照与所述多个预设的模式分别相对应的编码方式,对每一列数据进行编码;和写入单元,所述写入单元配置成将编码的结果写入云数据库的存储器中;

其中在对所述数据进行模式识别之前,将所述表或者分片中的数据按照列的方式组织;

所述多个预设模式包括以下模式的任意组合:

模式1:单个数字;存储格式:类型码+数字;

模式2:多个重复的数字;存储格式:类型码+复数字的个数+重复的数字;

模式3:多个以固定间距递增或者递减的数字;存储格式:类型码+数字的个数+间距+起始数字;

模式4:没有规律的一串数字;存储格式:类型码+数字的个数+罗列每个数字;

模式5:一个基本数字串反复出现;存储格式:类型码+总共数字的个数+一个数字基本串包含的数字的个数+罗列每个数字;

模式6:一个基本数字串包含若干相同的数字,该基本数字串反复出现,每次出现递增或者递减一个固定的间距;存储格式:类型码+总共数字的个数+间距+一个数字基本串包含的数字的个数+第一个基本串中的数字;

模式7:一个无规律的基本串按间距递增或递减重复出现;存储格式:类型码+总共数字的个数+间距+一个数字基本串包含的数字的个数+罗列第一个基本串中的数字。

7.根据权利要求6所述的写入装置,其特征在于,所述数据库是云数据库。

说明书 :

减少数据库存储容量的数据存储方法

技术领域

[0001] 本发明大致涉及计算机网络技术领域,尤其涉及一种减少数据库存储容量的数据存储方法和装置,特别适用于云数据库。

背景技术

[0002] 云计算涉及到大量数据的存储,如果能够有效的减少数据所需的存储大小,可以带来多种好处。首先,降低成本。小的存储需要投入少的硬件。其次,服务性能提高。小的数据可以提高Cache的利用率,同样大的Cache可以装入更多的东西。再次,查询数据的速度可以提高,有利于读操作。
[0003] 目前云数据库的例子包括Google BigTable,Microsoft Azure Table,百度云计算事业部的Table服务等。云数据库是云计算系统的重要组成部分,其重要性不言而喻。下面介绍云数据库的总体实现架构以及现有技术。
[0004] 图1是在一个云服务器节点上实现写操作的示意图。第一步把写操作存入日志。第二步把写入的数据存入内存中的内存数据表(Memory Table)。第三步由后台线程把内存数据表的内容存入永久存储之中(比如磁盘)。
[0005] 图2是在一个云服务器节点上实现读操作的示意图。第一步把Checkpoint文件读入内存中的缓存。第二步把缓存中的内容和内存数据表合并后返回给客户端。
[0006] 如图1和2所示,写入的数据在内存数据表中短暂保存,然后被转移到checkpoint文件中,checkpoint文件一般都在永久存储上,比如磁盘。出于可靠性的考虑,一般会多存储几份。而在读的时候,checkpoint文件中的内容部分的装入内存,以供查找的需要。
[0007] 目前checkpoint文件的存储方式为行存储或者列存储,再辅以压缩技术。其中压缩技术和本发明是正交关系,在运用完本发明后亦可继续采用压缩技术,所以压缩技术和本发明不够成替代关系。本发明主要是针对行或者列存储的改进。以下用一个虚拟磁盘的例子来说明现有技术。
[0008] 假设现有一个文件FileABC,长度是5120字节,分成10个扇区,每个扇区512字节。每个扇区有些描述信息,描述信息固定长度10个字节,分别存放在File0,File1和File2中。
如下所示。
[0009] FileABC(总长度5120字节,包含10个扇区)
[0010]
[0011] File0(描述信息)
[0012]
[0013] File1(描述信息)
[0014]
[0015] File2(描述信息)
[0016]
[0017] 现在用数据库中的一张表记录下来每个扇区的位置及其描述信息的位置。将此表称为扇区表。
[0018] 表一 扇区表
[0019]
[0020]
[0021] 以第一行为例,扇区0存放在FileABC中偏移量0的位置,它的描述信息(10字节)存放在File0中偏移量0的位置。因此扇区表很容易理解。
[0022] 现有技术1—行存储。按照行存储,扇区表会被存储如下。每个整数假设4字节(4B)。字符串的长度包括其结尾的0,所以FileABC长度是8B。各行在一个连续的存储空间依次展开,先存第一行,然后第二行,以此类推。为了阅读方面,对应不同行的内容用粗体和下划线区分开。
[0023] 0(4B) FileABC(8B) 0(4B) File0(6B) 0(4B) 1(4B) FileABC(8B) 512(4B) File1(6B) 0(4B) 2(4B) FileABC(8B) 1024(4B) File2(6B) 0(4B) 3(4B) FileABC(8B) 1536(4B) File0(6B) 10(4B) 4(4B) FileABC(8B) 2048(4B) File1(6B) 10(4B) 5(4B) FileABC(8B) 2560(4B) File2(6B) 10(4B) 6(4B) FileABC(8B) 3072(4B) File0(6B) 20(4B) 7(4B) FileABC(8B) 3584(4B) File1(6B) 20(4B) 8(4B) FileABC(8B) 4096(4B) File2(6B) 20(4B) 9(4B) FileABC(8B) 4608(4B) File0(6B) 30(4B)
[0024] 总共算下来,一行需要26B,这个表需要存储空间260B。
[0025] 现有技术2--行存储+字符串表。行存储可以利用字符串表来减少存储空间。基本思想是相同的字符串只存储一份。FileABC多次出现,不如单独把它放在一个地方(即字符串表),后续出现该字符串的地方直接引用这个字符串表。
[0026] 字符串表
[0027] FileABC(8B)
[0028] 行存储
[0029] 0(4B) 0(4B) 0(4B) File0(6B) 0(4B) 1(4B) 0(4B) 512(4B) File1(6B) 0(4B) 2(4B) 0(4B) 1024(4B) File2(6B) 0(4B) 3(4B) 0(4B) 1536(4B) File0(6B) 10(4B) 4(4B) 0(4B) 2048(4B) File1(6B) 10(4B) 5(4B) 0(4B) 2560(4B) File2(6B) 10(4B) 6(4B) 0(4B) 3072(4B) File0(6B) 20(4B) 7(4B) 0(4B) 3584(4B) File1(6B) 20(4B) 8(4B) 0(4B) 4096(4B) File2(6B) 20(4B) 9(4B) 0(4B) 4608(4B) File0(6B) 30(4B)[0030] 和现有技术1相比,现有技术2中变化的部分用粗体和下划线标出。标出的部分中0表示字符串表中的偏移量为0的位置,即字符串FileABC的起始地址。偏移量是一个整数,只需要4B。
[0031] 总共算下来,一行需要22B,这个表需要存储空间220B+8B=228B(其中8B为字符串表的开销)。现有技术2比,现有技术1少了32B。
[0032] 现有技术3--列存储。按照列存储,先存储第一行第一列,再存储第二行第一列,再存储第三行第一列,依次类推。第一列存完以后,再存储第一行第二列,第二行第二列,第三行第二列,等等。为阅读方便,属于不同列的内容用粗体和下划线区别开。
[0033] 0(4B) 1(4B) 2(4B) 3(4B) 4(4B) 5(4B) 6(4B) 7(4B) 8(4B) 9(4B) FileABC(8B) FileABC(8B) FileABC(8B) FileABC(8B) FileABC(8B) FileABC(8B) FileABC(8B) FileABC(8B) FileABC(8B) FileABC(8B) 0(4B) 512(4B) 1024(4B) 1536(4B) 2048(4B) 2560(4B) 3072(4B) 3584(4B) 4096(4B) 4608(4B) File0(6B) File1(6B) File2(6B) File0(6B) File1(6B )File2(6B) File0(6B) File1(6B) File2(6B) File0(6B) 0(4B) 0(4B) 0(4B) 10(4B) 10(4B) 10(4B) 20(4B) 20(4B) 20(4B) 30(4B)
[0034] 列存储改变了数据排列的顺序,但是没有减少数据的大小。所以现有技术3和现有技术1一样,需要260B来存储扇区表。
[0035] 现有技术4–列存储+字符串表。现有技术2中的字符串表也可以用在列存储中。如下。
[0036] 字符串表:
[0037] FileABC(8B)
[0038] 列存储:
[0039] 0(4B) 1(4B) 2(4B) 3(4B) 4(4B) 5(4B) 6(4B) 7(4B) 8(4B) 9(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 512(4B) 1024(4B) 1536(4B) 2048(4B) 2560(4B) 3072(4B) 3584(4B) 4096(4B) 4608(4B) File0(6B) File1(6B) File2(6B) File0(6B) File1(6B) File2(6B) File0(6B) File1(6B) File2(6B) File0(6B) 0(4B) 0(4B) 0(4B) 10(4B) 10(4B) 10(4B) 20(4B) 20(4B) 20(4B) 30(4B)
[0040] 现有技术4和现有技术3比变化部分用粗体和下划线标出。标出的区域中0表示字符串表中偏移量为0的位置,即字符串FileABC的起始地址。偏移量是一个整数,只需要4B。
[0041] 和现有技术2比,现有技术4只是改变了数据排列顺序,所以存储大小依然是228B。
[0042] 以上内容仅是发明人所知晓的技术情况,并不当然代表构成本发明的现有技术。

发明内容

[0043] 本发明提出一种数据存储的方案,可以实现上述目的中的一个或多个。本发明可以运用于大多数数据库,例如云数据库,比如百度云计算事业部的TafDB和Table服务。
[0044] 为解决现有技术的问题中的一个或多个,本发明提供一种数据库的数据存储方法,包括:S101:接收待存入的数据表或者数据表的分片;S102:对所述数据表或数据分片中的数据进行模式识别,匹配到多个预设的模式之一;
[0045] S103:按照与所述多个预设的模式分别相对应的编码方式,对所述数据进行编码;和S104:将编码的结果写入所述数据库的存储器中。
[0046] 根据本发明的一个方面,所述数据存储方法还包括:在对所述数据进行模式识别之前,将所述表或者分片中的数据按照列的方式组织。
[0047] 根据本发明的一个方面,所述多个预设模式包括以下模式的任意组合:
[0048] 模式1:单个数字;存储格式:类型码+数字;
[0049] 模式2:多个重复的数字;存储格式:类型码+复数字的个数+重复的数字;
[0050] 模式3:多个以固定间距递增或者递减的数字;存储格式:类型码+数字的个数+间距+起始数字;
[0051] 模式4:没有规律的一串数字;存储格式:类型码+数字的个数+罗列每个数字;
[0052] 模式5:一个基本数字串反复出现;存储格式:类型码+总共数字的个数+一个数字基本串包含的数字的个数+罗列每个数字;
[0053] 模式6:一个基本数字串包含若干相同的数字,该基本数字串反复出现,每次出现递增或者递减一个固定的间距;存储格式:类型码+总共数字的个数+间距+一个数字基本串包含的数字的个数+第一个基本串中的数字;
[0054] 模式7:一个无规律的基本串按间距递增或递减重复出现;存储格式:类型码+总共数字的个数+间距+一个数字基本串包含的数字的个数+罗列第一个基本串中的数字。
[0055] 根据本发明的一个方面,所述数据库是云数据库。
[0056] 本发明还提供一种数据库的数据读取方法,包括:S201:从数据库的存储器中读取一段数据的模式类型码和长度;S202:根据所述一段数据的长度,读取所述长度的数据;S203:根据与所述模式类型码相对应的编码方式,计算出所述一段数据对应的用户数据;和S204:将所述用户数据返回给用户。
[0057] 根据本发明的一个方面,所述多个编码方式包括以下模式的任意组合:
[0058] 模式1:单个数字;存储格式:类型码+数字;
[0059] 模式2:多个重复的数字;存储格式:类型码+复数字的个数+重复的数字;
[0060] 模式3:多个以固定间距递增或者递减的数字;存储格式:类型码+数字的个数+间距+起始数字;
[0061] 模式4:没有规律的一串数字;存储格式:类型码+数字的个数+罗列每个数字;
[0062] 模式5:一个基本数字串反复出现;存储格式:类型码+总共数字的个数+一个数字基本串包含的数字的个数+罗列每个数字;
[0063] 模式6:一个基本数字串包含若干相同的数字,该基本数字串反复出现,每次出现递增或者递减一个固定的间距;存储格式:类型码+总共数字的个数+间距+一个数字基本串包含的数字的个数+第一个基本串中的数字;
[0064] 模式7:一个无规律的基本串按间距递增或递减重复出现;存储格式:类型码+总共数字的个数+间距+一个数字基本串包含的数字的个数+罗列第一个基本串中的数字。
[0065] 根据本发明的一个方面,所述数据库是云数据库。
[0066] 本发明还提供一种计算机可读存储介质,包括存储于其上的计算机可执行指令,所述可执行指令在被处理器执行时实施如上所述的数据读取方法。
[0067] 本发明还提供一种数据库的写入装置,包括:接收单元,所述接收单元配置成接收待存入的数据表或者数据表的分片;模式识别单元,所述模式识别单元配置成对所述数据表的或者分片的数据进行模式识别,匹配到多个预设的模式之一;编码单元,所述编码单元配置成按照与所述多个预设的模式分别相对应的编码方式,对所述每一列数据进行编码;和写入单元,所述写入单元配置成将编码的结果写入云数据库的存储器中。
[0068] 根据本发明的一个方面,所述数据库是云数据库。

附图说明

[0069] 附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
[0070] 图1是在一个云服务器节点上实现写操作的示意图;
[0071] 图2是在一个云服务器节点上实现读操作的示意图;
[0072] 图3是根据本发明一个实施例的云数据库的数据写入方法的流程图;
[0073] 图4是根据本发明一个实施例的云数据库的数据读取方法的流程图;
[0074] 图5是根据本发明一个实施例的云数据库的数据写入装置的示意图;和
[0075] 图6是依照本发明的至少一些实施例布置的计算机程序产品的框图。

具体实施方式

[0076] 在下文中,仅简单地描述了某些示例性实施例。正如本领域技术人员可认识到的那样,在不脱离本发明的精神或范围的情况下,可通过各种不同方式修改所描述的实施例。因此,附图和描述被认为本质上是示例性的而非限制性的。
[0077] 在本发明的描述中,需要理解的是,术语"中心"、"纵向"、"横向"、"长度"、"宽度"、"厚度"、"上"、"下"、"前"、"后"、"左"、"右"、"坚直"、"水平"、"顶"、"底"、"内"、"外"、"顺时针"、"逆时针"等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语"第一"、"第二"仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有"第一"、"第二"的特征可以明示或者隐含地包括一个或者更多个所述特征。在本发明的描述中,"多个"的含义是两个或两个以上,除非另有明确具体的限定。
[0078] 在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语"安装"、"相连"、"连接"应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接:可以是机械连接,也可以是电连接或可以相互通讯;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
[0079] 在本发明中,除非另有明确的规定和限定,第一特征在第二特征之"上"或之"下"可以包括第一和第二特征直接接触,也可以包括第一和第二特征不是直接接触而是通过它们之间的另外的特征接触。而且,第一特征在第二特征"之上"、"上方"和"上面"包括第一特征在第二特征正上方和斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征"之下"、"下方"和"下面"包括第一特征在第二特征正上方和斜上方,或仅仅表示第一特征水平高度小于第二特征。
[0080] 下文的公开提供了许多不同的实施方式或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本发明。此外,本发明可以在不同例子中重复参考数字和/或参考字母,这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施方式和/或设置之间的关系。此外,本发明提供了的各种特定的工艺和材料的例子,但是本领域普通技术人员可以意识到其他工艺的应用和/或其他材料的使用。
[0081] 以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
[0082] 本发明例如在现有技术4的基础上改进而来。本发明例如可用于在数据库中存储字符串或者数字,这些都在本发明的保护范围内。以下以数字为例进行说明。本领域技术人员能够理解,本发明的技术方案既可以适用于云数据库,也可以适用于其他的数据库,例如本地数据库或者局域网中的数据库,本发明的保护不限于特定类型的数据库,这些都在本发明的保护范围内。下文以云数据库为例进行说明。
[0083] 图3是根据本发明一个实施例的云数据库的数据写入方法100的流程图。下面详细描述该数据写入方法100。
[0084] 在步骤S101,接收待存入的数据表或者数据表的分片。
[0085] 在步骤S102,对所述数据表或数据分片中的数据进行模式识别,匹配到多个预设的模式之一。
[0086] 根据本发明的优选实施例,所述预设模式可包括以下七种模式或者其中任意的组合,例如模式3-7。
[0087] 模式1:单个数字
[0088] 存储格式:类型码(1)+数字(4B)
[0089] 比如只要存储数字100,本方法需要5B,第一个Byte存储类型码1,后面四个Byte存储数字100。也就是1(1B) 100(4B)。
[0090] 模式2:多个重复的数字
[0091] 存储格式:类型码(2)+重复数字的个数+重复的数字
[0092] 比如需要存储10个0,本方法需要9个Byte。第一个Byte存储类型码2;后面4个Byte存储数字10,表示重复出现10次;最后4个Byte存储数字0,表示数字0被重复出现了10次。也就是2(1B) 10(4B) 0(4B)
[0093] 模式3:多个以固定间距递增或者递减的数字
[0094] 存储格式:类型码(3)+数字的个数+间距+起始数字
[0095] 比如需要存储数字0,1,2,3,4,5,6,7,8,9,本方法需要13个Byte。第一个Byte存储类型码3;第2到第5Byte存储10,表示这个序列中总共有10个数字;第6到第9Byte存储1,表示该序列中每个数字都比其前一个大1(即间距);第10到13个Byte存储0,表示该序列中第一个数字是0。也就是3(1B) 10(4B) 1(4B) 0(4B)。模式3也可以存储递减的数字,间距可以为负数。
[0096] 模式4:没有规律的一串数字
[0097] 存储格式:类型码(4)+数字的个数+罗列每个数字
[0098] 比如要存储100,20,8,99,245这5个数字,它们毫无规则。本方法需要25个Byte。第一个Byte存储类型码4;第2到第5Byte存储5,表示该序列中总共有5个数字;后面20个Byte分别存储100,20,8,99,245这5个数字。也就是:4(1B) 5(4B) 100(4B) 20(4B) 8(4B) 99(4B) 245(4B)
[0099] 模式5:一个基本数字串反复出现
[0100] 存储格式:类型码(5)+总共数字的个数+一个数字基本串包含的数字的个数+罗列每个数字
[0101] 比如要存储1,3,7,1,3,7,1,3,7这9个数字,本方法存储为:5(1B) 9(4B) 3(4B) 1(4B) 3(4B) 7(4B),共需21B。其中第一个Byte是类型码5;后面的数字是9,表示该序列总共有9个数字;再后面的数字是3,表示一个基本数字串包含3个数字;最后3个数字是基本数字串1,3,7。这个例子是说基本数字串1,3,7被反复出现了3次,形成了共计9个数字的序列:1,3,7,1,3,7,1,3,7。
[0102] 注意,模式5中“总共数字的个数”不一定是“一个数字基本串包含的数字的个数”的倍数。比如要存储1,3,7,1,3,7,1,3,7,1这10个数字。模式5可存储如下:5(1B) 10(4B) 3(4B) 1(4B) 3(4B) 7(4B),与前面9个数字的序列对比,不同之处以加粗和下划线标出。换句话说,模式5会把基本串(1,3,7)无限重复展开,即:
[0103] 1,3,7,1,3,7,1,3,7,1,3,7,…
[0104] 然后取前10个,正好就是:
[0105] 1,3,7,1,3,7,1,3,7,1,…
[0106] 模式6:一个基本数字串包含若干相同的数字,该基本数字串反复出现,每次出现递增或者递减一个固定的间距
[0107] 存储格式:类型码(6)+总共数字的个数+间距+一个数字基本串包含的数字的个数+第一个基本串中的数字
[0108] 比如要存储0,0,0,10,10,10,20,20,20这9个数字。模式6存储为:6(1B) 9(4B) 10(4B) 3(4B) 0(4B),共需17B。第一个Byte是类型码6;第二个数字9表示该序列总共9个数字,第三个数字10表示间距是10;第4个数字3表示一个基本串长度为3;最后的0表示第一个基本串中包含3个0。该例子中,可以如下恢复原始数字序列。首先可以得到3个0,作为第一个基本串:0,0,0。这是由最后的3和0决定的。然后对该基本串中的数字加个间距10,得到第二个基本串:10,10,10。依次类推,得到第3个基本串:20,20,20。这样总共得到了9个数字:0,0,0,10,10,10,20,20,20,满足了总共9个数字的要求。同理模式5,模式6中“总共数字的个数”不一定是“一个数字基本串包含的数字的个数”的倍数。同理模式3,间距可以为负数。
[0109] 模式7:一个无规律的基本串按间距递增或递减重复出现
[0110] 存储格式:类型码(7)+总共数字的个数+间距+一个数字基本串包含的数字的个数+罗列第一个基本串中的数字
[0111] 比如要存储1,3,7,11,13,17,21,23,27这9个数字。模式7存储为:7(1B) 9(4B) 10(4B) 3(4B) 1(4B) 3(4B) 7(4B),共需25B。第一个Byte是类型码7;第二个数字9表示该序列总共9个数字;第三个数字10表示间距是10;第4个数字3表示一个基本串长度为3;最后的1,3,7表示第一个基本串是1,3,7。该例子中,可以如下恢复原始数字序列。首先可以得到第一个基本串:1,3,7。然后对该基本串中的数字加个间距10,得到第二个基本串:11,13,17。
依此类推,得到第3个基本串:21,23,27。这样总共得到了9个数字:1,3,7,11,13,17,21,23,
27,满足了总共9个数字的要求。同理模式5,模式7中“总共数字的个数”不一定是“一个数字基本串包含的数字的个数”的倍数。同理模式3,间距可以为负数。
[0112] 在步骤S103,按照与所述多个预设的模式分别相对应的编码方式,对所述数据进行编码。
[0113] 在步骤S104,将编码的结果写入云数据库的存储器中。
[0114] 对于一串数字,上面列举了7种模式,涵盖了数据库中常见的可能。每种模式都是由一个模式类型码开始,所以这些模式彼此可以区分。类型码是1B,所以支持最多255种类型。本发明中假定存储的数字是4B大小。本领域技术人员能够理解,普通技术人员也可以构思出其他的模式,使用其他长度的位空间来标识类型码和数字,这些都在本发明的保护范围内。
[0115] 注意,本发明的步骤S101-S104可以通过软件实现,也可以通过硬件实现。例如,步骤S103可以通过专用硬件(ASIC)来实现。具体来说,在目前计算机的磁盘控制器中嵌入一块专用硬件电路,把数据写入磁盘时,该专用电路对数据进行模式匹配,如果发现本发明所描述的模式,就对数据进行编码,然后把编码结果存入磁盘。
[0116] 根据本发明的一个优选实施例,所述方法100还包括在对所述数据进行模式识别之前,将所述表或者分片中的数据按照列的方式组织。
[0117] 需要说明:上述各个模式中的数字排列可以颠倒顺序,且每个数字的长度也可以变化,比如整数不一定就是4B。另外,除了数字序列以外,这些模式也可以表示字符串序列。不一一罗列,但这些变化皆属本专利的保护范围。
[0118] 重新比较背景技术部分“现有技术4–列存储+字符串表”中,扇区表存储如下。
[0119] 字符串表:
[0120] FileABC(8B)
[0121] 列存储:
[0122] 0(4B) 1(4B) 2(4B) 3(4B) 4(4B) 5(4B) 6(4B) 7(4B) 8(4B) 9(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 0(4B) 512(4B) 1024(4B) 1536(4B) 2048(4B) 2560(4B) 3072(4B) 3584(4B) 4096(4B )4608(4B) File0(6B) File1(6B) File2(6B) File0(6B) File1(6B) File2(6B) File0(6B) File1(6B) File2(6B) File0(6B) 0(4B) 0(4B) 0(4B) 10(4B) 10(4B) 10(4B) 20(4B) 20(4B) 20(4B) 30(4B)
[0123] 首先看第一列0,1,2,…,9。用模式3表示如下:
[0124] 类型码(3)+数字的个数+间距+起始数字
[0125] 3(1B) 10(4B) 1(4B) 0(4B)
[0126] 再看第二列是10个0。用模式2表示如下:
[0127] 类型码(2)+重复数字的个数+重复出现的数字
[0128] 2(1B) 10(4B) 0(4B)
[0129] 再看第三列是0,512,…,4608。用模式3表示如下:
[0130] 类型码(3)+数字的个数+间距+起始数字
[0131] 3(1B) 10(4B) 512(4B) 0(4B)
[0132] 再看第四列是File0,File1和File2重复出现。用模式5表示如下:
[0133] 类型码(5)+总共数字的个数+一个数字基本串包含的数字的个数+罗列每个数字[0134] 5(1B) 10(4B) 3(4B) File0 File1 File2
[0135] 最后看第5列,它是基本串0,0,0按间距10递增,用模式6存储如下:
[0136] 类型码(6)+总共数字的个数+间距+一个数字基本串包含的数字的个数+第一个基本串中的数字
[0137] 6(1B) 10(4B) 10(4B) 3(4B) 0(4B)
[0138] 汇总起来就是本发明的数据写入和存储方法(模式存储):
[0139] 字符串表:
[0140] FileABC(8B)
[0141] 模式存储:
[0142] 3(1B) 10(4B) 1(4B) 0(4B) 2(1B) 10(4B) 0(4B) 3(1B) 10(4B) 512(4B) 0(4B)5(1B) 10(4B) 3(4B) File0(6B) File1(6B) File2(6B) 6(1B) 10(4B) 10(4B) 3(4B) 0(4B)
[0143] 总共需要79B(包含字符串表)。
[0144] 需要强调的是,本专利的方法中,存储的尺寸不随扇区表的行数而递增,即当行数是10000行时,仍然只需要79B。
[0145] 另外,本发明的实施例有助于查找。现有技术1~4中,无论是行或者列存储,都需要通过二分查找之类的算法去查找某一行。其查找时间随扇区表中的行数递增而增加。当表中有很多行时,查找就会较慢。但是使用本发明的方法,查找时间是常数,不随行数增加而增长。比如在表一中,要查找“扇区号=5”的行,按照本发明的存储方式,第一列扇区号采用模式3表示:
[0146] 类型码(3)+数字的个数+间距+起始数字
[0147] 3(1B)10(4B)1(4B)0(4B)
[0148] 直接计算就可以得到满足条件是第5行,计算方法如下:
[0149] (要查找的扇区号(5)-起始数字(0))/间距(1)=5
[0150] 查找时间是常数,与行数无关。这就表明查询性能可以提升到常数级。
[0151] 本发明适用于列数据存在规律的情况。如果列数据没有规律(比如扇区分散在不同文件中,因此文件名各不相同),也可以采取调整的方法来解决,即将分散的内容集中拷贝到一个文件的连续区域,从而使列数据产生规律。这种调整无需频繁使用,只当列数据的无规律性带来存储空间极大消耗时启用。因此对系统资源整体利用率的浪费是可控的。
[0152] 经过试验,在一些实际应用的场合,使用本发明的技术,可以使Checkpoint文件从几百兆缩减为几KB,从而显著降低存储压力,提高缓存利用率,并使得查找变快。预期的结果是,采用本技术后,针对一些重要应用,云数据库的性能能够接近In-Memory数据库,这将是一个质的飞跃。
[0153] 目前现有的一些云数据库(Google BigTable,Microsoft Azure Table)依然使用现有技术1~4中的方法,加上压缩的技术。但是即使使用压缩,也无法达到本发明的结果,而且压缩需要对应的解压缩,只会进一步降低查找速度。
[0154] 图4示出了根据本发明另一个实施例的一种云数据库的数据读取方法,包括:
[0155] 在步骤S201:从云数据库的存储器中读取一段数据的模式类型码和长度;
[0156] 在步骤S202:根据所述一段数据的长度,读取所述长度的数据;
[0157] 在步骤S203:根据与所述模式类型码相对应的编码方式,计算出所述一段数据对应的用户数据;和
[0158] 在步骤S204:将所述用户数据返回给用户。
[0159] 图5示出了根据本发明另一实施例的一种云数据库的写入装置300,包括:
[0160] 接收单元301,所述接收单元配置成接收待存入的数据表或者数据表的分片;
[0161] 模式识别单元302,所述模式识别单元配置成对所述数据表的或者分片的数据进行模式识别,匹配到多个预设的模式之一;
[0162] 编码单元303,所述编码单元配置成按照与所述多个预设的模式分别相对应的编码方式,对所述每一列数据进行编码;和
[0163] 写入单元304,所述写入单元配置成将编码的结果写入云数据库的存储器中。
[0164] 本发明是关于如何在checkpoint file中存储数据。运用本发明,可以明显的减少checkpoint file的体积,因此减少了永久存储空间的压力,同时提高了Cache的利用率,最终的结果是提高了读操作的性能,减少了读操作的延迟。
[0165] 本发明的方法可称为模式存储。模式存储和现有技术不同,存储扇区表如下:
[0166] 字符串表:
[0167] FileABC(8B)
[0168] 模式存储:
[0169] 3(1B) 10(4B) 1(4B) 0(4B) 2(1B) 10(4B) 0(4B) 3(1B) 10(4B) 512(4B) 0(4B) 5(1B) 10(4B) 3(4B) File0(6B) File1(6B) File2(6B) 6(1B) 10(4B) 10(4B) 3(4B) 0(4B)
[0170] 总共需要79B(包含字符串表)。
[0171] 和现有技术对比,本发明的其中一些实施例优点有三:
[0172] 所需的存储空间明显小于现有技术。
[0173] 存储空间的大小不随扇区表中的行数增长而线性增长。
[0174] 搜索速度高于现有技术。
[0175] 图6是依照本发明的至少一些实施例布置的计算机程序产品600的框图。信号承载介质602可以被实现为或者包括计算机可读介质606、计算机可记录介质608、计算机通信介质610或者它们的组合,其存储可配置处理单元以执行先前描述的过程中的全部或一些的编程指令604。这些指令可以包括例如用于使一个或多个处理器执行如下处理的一个或多个可执行指令:接收待存入的数据表或者数据表的分片;对所述数据表或数据分片中的数据进行模式识别,匹配到多个预设的模式之一;按照与所述多个预设的模式分别相对应的编码方式,对所述数据进行编码;和将编码的结果写入所述数据库的存储器中。
[0176] 虽然前面的详细说明已经通过框图、流程图和/或示例的使用阐述了装置和/或过程的各个示例,但是这样的框图、流程图和/或示例包含一项或多项功能和/或操作,本领域技术人员将理解的是,可以通过各种各样的硬件、软件、固件或几乎其任意组合来单独地和/或统一地实现这样的框图、流程图或示例内的每个功能和/或操作。在一个示例中,本文所描述的主题的若干部分可经由专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它集成形式来实现。然而,本领域技术人员将理解的是,本文公开的示例的一些方面可以整体地或部分地被等同地实现在集成电路中、实现为在一个或多个计算机上运行的一个或多个计算机程序(例如,实现为在一个或多个计算机系统上运行的一个或多个程序)、实现为在一个或多个处理器上运行的一个或多个程序(例如,实现为在一个或多个微处理器上运行的一个或多个程序)、实现为固件、或实现为以上的几乎任何组合,并且根据本公开的内容,针对所述软件和/或固件设计电路和/或编写代码将在本领域技术人员的技能范围内。例如,如果使用者判定速度和精度重要,则使用者可以选择主硬件和/或固件媒介物;如果灵活性重要,则使用者可以选择主软件实施方式;或者,另外可选地,使用者可以选择硬件、软件和/或固件的某组合。
[0177] 另外,本领域技术人员将理解的是,本文所描述的主题的机制能够作为各种形式的程序产品被分发,并且不管实际上用于实施分发的信号承载介质的具体类型如何,本文所描述的主题的说明性示例都适用。信号承载介质的示例包括但不限于以下:可记录型介质,诸如软盘、硬盘驱动器、压缩盘(CD)、数字视频盘(DVD)、数字带、计算机存储器等;以及传输型介质,诸如数字和/或模拟通信介质(例如,光纤光缆、波导、有线通信链路、无线通信链路等)。
[0178] 本领域技术人员将理解的是,在本领域内常见的是以本文阐述的方式来描述装置和/或过程,此后利用工程实践将这样描述的装置和/或过程集成到数据处理系统中。也即,本文所描述的装置和/或过程的至少一部分可以通过合理量的实验集成到数据处理系统中。本领域技术人员将理解的是,典型的数据处理系统通常包括如下中的一种或多种:系统单元壳体、视频显示装置、诸如易失性和非易失性存储器的存储器、诸如微处理器和数字信号处理器的处理器、诸如操作系统的计算实体、驱动器、图形用户接口、和应用程序、诸如触摸板或触摸屏的一个或多个交互装置、和/或包括反馈环和控制电动机(例如,用于感测位置和/或速度的反馈;用于移动和/或调整部件和/或量的控制电动机)的控制系统。典型的数据处理系统可利用任何适合的市售部件来实现,诸如在数据计算/通信和/或网络计算/通信系统中常见的部件。
[0179] 本文所描述的主题有时说明了包含在不同的其它部件内的不同部件或与不同的其它部件连接的不同部件。应理解的是,这些所描绘的体系结构仅是示例,并且实际上可以实施实现相同功能的许多其它体系结构。在概念意义上,实现相同功能的部件的任何布置有效地“相关联”,使得实现期望功能。因此,在此处组合以实现特定功能的任何两个部件可视为彼此“相关联”,使得实现期望功能,而不管体系结构或中间部件如何。同样,任意两个如此关联的部件还可视为彼此“可操作地连接”、或“可操作地耦合”以实现期望的功能,并且能够如此关联的任意两个部件还可视为彼此“能够可操作地耦合”以实现期望功能。能够可操作地耦合的具体示例包括但不限于能够物理地结合和/或物理地交互的部件和/或能够无线地交互和/或无线地交互的部件和/或逻辑上交互和/或能够逻辑上交互的部件。
[0180] 最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。