CN111309719A - 一种对应HBase数据库的数据规范方法及系统 - Google Patents
一种对应HBase数据库的数据规范方法及系统 Download PDFInfo
- Publication number
- CN111309719A CN111309719A CN202010403883.6A CN202010403883A CN111309719A CN 111309719 A CN111309719 A CN 111309719A CN 202010403883 A CN202010403883 A CN 202010403883A CN 111309719 A CN111309719 A CN 111309719A
- Authority
- CN
- China
- Prior art keywords
- data
- type
- integer
- hbase
- binary
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种对应HBase数据库的数据规范方法及系统,在HBase内部实现数据类型的定义、约束、检查,在创建HBase表时同时定义表中各列的数据类型及相关约束,保障了数据类型的一致性,且不会占用大量额外的存储空间,客户端程序在进行数据读写时,无需进行额外的编写码和类型检查、转换,大大减少了客户端的复杂度和工作量。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种对应HBase数据库的数据规范方法及系统。
背景技术
HBase是一个分布式的、面向列的开源数据库,HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。当客户端程序向HBase写入数据时,首先需要将待写入的数据转换为二进制格式(byte),再通过HBase Client API将输入写入到HBase中。从HBase中读取数据时,客户端程序同样需要做相应的反向转换,将HBase Client API返回的二进制格式的数据转换为实际的数据类型。
同时,HBase本身并不限制具体表和列中存储的数据类型(在HBase底层均以二进制格式对数据进行处理),实际上可以将任意类型的数据存储到同一张表的同一列中。这种不对数据进行规范和检查的存储机制会造成数据类型的混乱,如果客户端事先不知晓每一行数据的具体类型,那么存储在HBase中的数据就是不可用的。HBase数据类型化机制的缺失,导致客户端程序需要做更多的相关工作,或者依赖于程序之外的规范、约定等弱机制,对于结构化数据的存储非常不安全、不友好。
对于以上问题,目前HBase的数据类型化方案主要有两类:一是通过事先的约定、文档规范等做法,对存储在HBase中的数据进行定义,客户端程序遵照约定和规范对数据进行读写和编解码,但应用此方案时,约定、规范等形式的约束力不能直接作用于程序逻辑中,数据的有效性缺乏强有力的保障,当程序未遵循约定、规范,或约定、规范不够全面,仍会导致数据不可用;二是客户端在对数据进行编码时,同时将数据类型的信息加入的数据中,即写入到HBase中的数据实际上是“数据+类型”,客户端在读取数据时,需要将得到的二进制数据根据其类型转换,对于这种方案,将数据类型编码到实际数据中,会占用额外的存储空间,在海量数据规模下,存储成本高,数据的读写性能也会受到比较大的影响,对同一张表的同一列中的数据类型缺少一致性的检查。
发明内容
为解决现有技术的不足,本发明提出一种对应HBase数据库的数据规范方法及系统,在HBase内部实现数据类型的定义、约束、检查,在创建HBase表时同时定义表中各列的数据类型及相关约束,当客户端程序将数据写入到HBase时,不需要做相关的检查和编解码,会自动触发相应的检查和类型转换;在客户端读取数据时,也会自动将数据转换为其对应的类型后再返回到客户端。
为实现以上目的,本发明所采用的技术方案包括:
一种对应HBase数据库的数据规范方法,其特征在于,包括以下步骤:
S1、创建HBase表步骤,具体包括:
S11、定义HBase表的元信息;所述HBase表的元信息包括HBase自身元信息、HBase表中各列的数据类型信息和/或HBase表中各列的约束信息;
S12、检查HBase表的元信息合法性;
S13、在HBase表中创建objects表,并创建表的数据存储目录;
S14、将HBase表的元信息写入objects表中;
S2、向HBase表写入数据步骤,具体包括:
S21、输入原始数据;
S22、从objects表调取数据类型检查和数据类型转换的规则;
S23、数据类型检查;
S24、对原始数据进行编解码以完成数据类型转换,将原始数据转换为二进制的存储数据;
S25、将存储数据写入HBase表;
S3、从HBase表读取数据步骤,具体包括:
S31、输入数据请求;
S32、从objects表调取数据类型转换的规则;
S33、对存储数据进行编解码以完成数据类型转换,将二进制的存储数据转换为需要的输出数据;
S34、发送输出数据。
进一步地,步骤S11所述HBase表中各列的数据类型信息包括列名、数据类型;所述HBase表中各列的约束信息包括列是否为主键、列是否可为空和/或列的默认值;所述HBase自身元信息包括表所属的命名空间、表名称、表的切分方式、列族数量和/或列族名称。
进一步地,所述数据类型包括定长字符串类型、变长字符串类型、大文本对象类型、日期类型、时间戳类型、短整数类型、整数类型、长整数类型、浮点类型、双精度浮点数类型、数值类型、定长二进制类型、变长二进制类型和/或大二进制类型。
进一步地,所述objects表为随HBase初次启动时同步建立的不可删除的表。
进一步地,步骤S12包括检查表所属的命名空间是否存在、表名称是否符合规范、表名称是否已存在、是否定义了列族、各列族名称是否符合规范、列族是否重复、是否定义了主键列、各列名称是否符合规范、列名是否重复和/或各列的数据类型及其约束是否符合逻辑。
进一步地,步骤S13中创建表的数据存储目录包括根据表所属的命名空间、表名称创建相应的数据存储目录。
进一步地,所述步骤S14还包括在将HBase表的元信息写入objects表的过程中采用Procedure V2机制。
进一步地,在步骤S14之后还包括:步骤S15、创建表的后续步骤,具体包括表上线、更新缓存、释放排它锁。
进一步地,步骤S24中对原始数据进行编解码包括以下互相并列的处理子步骤:
S241、定长字符串类型、变长字符串类型、大文本对象类型的编码方案为将字符串UTF-8编码规范将其转换为字节码作为二进制数据;
S242、短整数类型、整数类型、长整数类型的编码方案为取其补码,按每8位为一段进行分段,其中最高的8位与0x80进行异或运算,将各段转为字节作为二进制数据;
S243、浮点类型、双精度浮点数类型的编码方案为先根据IEEE754浮点数布局规范将浮点数转换为无符号整数,将整数右移31位并与0x80000000取或,再与自身异或,变为有符号整数,然后按照整数编码算法进行编码;
S244、数值类型的编码方案为固定编码为64字节,将数值转换为大整数(即去掉精度)后编码,精度S单独按整数编码,然后将两部分进行合并;
S245、日期类型按照整数类型进行编码;
S246、时间戳类型按照长整数类型进行编码;
S247、定长二进制类型、变长二进制类型、大二进制类型不做额外处理。
进一步地,所述步骤S33中对存储数据进行编解码包括以下互相并列的处理子步骤:
S331、定长字符串类型、变长字符串类型、大文本对象类型的解码方案为将二进制数据按UTF-8规范将字节码转换为字符串;
S332、短整数类型、整数类型、长整数类型的解码方案为对二进制数据按每8位一段进行分段,其中最高的8位与0x80进行异,将各段合并后作为数值的补码,将其转换为数值;
S333、浮点类型、双精度浮点数类型的解码方案为将二进制数据解码为整数,整数取反后右移31位并与0x80000000取或,再与自身异或,将无符号整数根据IEEE754浮点数布局规范转换为浮点数;
S334、数值类型的解码方案为先将二进制数据切分为两部分,分别进行解码,将解码后的大整数设置相应的精度,转换为最终的数值;
S335、日期类型按照整数类型进行解码;
S336、时间戳类型按照长整数类型进行解码;
S337、定长二进制类型、变长二进制类型、大二进制类型不做额外处理。
一种实现上述方法的对应HBase数据库的数据规范系统,其特征在于,包括客户端接口模块、数据安全模块、数据转换模块、数据定义模块、数据传输模块、元信息管理模块、数据读写模块、objects表和目标数据表;
所述客户端接口模块连接客户端并接收客户端写入的原始数据和向客户端返回读取数据,所述客户端接口模块接收客户端指令对objects表和/或目标数据表进行定义;
所述数据安全模块通过使用元信息管理模块发送的检查策略对经客户端接口模块接收的原始数据、返回的读取数据进行检查,所述检查策略包括数据类型检查和/或约束信息检查;
所述数据转换模块通过使用元信息管理模块发送的编解码策略将原始数据转换为二进制类型,和,将二进制类型的存储数据转换为所需数据类型的读取数据;
所述数据定义模块检查HBase表的元信息,并将检查通过的元信息通过元信息管理模块存储入objects表;
所述数据传输模块协调系统内各模块之间数据、元信息、策略的传输;
所述元信息管理模块将元信息写入objects表,和,从objects表读取元信息并转换为检查策略或编解码策略发送至需要的模块;
所述数据读写模块向目标数据表写入二进制类型的存储数据,和,从目标数据表读取二进制类型的存储数据;
所述objects表存储元信息;
所述目标数据表存储二进制类型的存储数据。
进一步地,所述客户端接口模块直接接收客户端写入的任意数据类型原始数据,和,所述客户端接口模块直接向客户端返回任意数据类型的读取数据。
本发明的有益效果为:
采用本发明所述对应HBase数据库的数据规范方法及系统,通过在原有HBase表定义信息的基础上增加了对HBase表中各列的数据类型信息和约束信息的定义,保障了数据类型的一致性、安全性、可用性,且不会占用大量额外的存储空间使非关系型数据库能够具有类似于关系型数据库的应用方式,扩展了HBase的应用范围,使其不仅能够存储非结构化、半结构化数据,通过本发明,使HBase适合存储结构化数据,扩展了HBase表的应用范围,使其不仅能够存储非结构化、半结构化数据,还能够适应存储结构化数据;通过在HBase表服务端建立高效的数据类型转换机制,能够处理HBase表可能存储的各种数据类型,使客户端程序在进行数据读写时,无需进行额外的编写码和类型检查、转换,大大减少了客户端的复杂度和工作量,进而使得开发、运维、实施等大数据应用工程的参与人员,面向依赖于HBase的应用程序的全生命周期的运营工作量和成本得到极大的降低。
附图说明
图1为本发明创建HBase表流程示意图。
图2为本发明数据类型检查和数据类型转换流程示意图。
图3为本发明对应HBase数据库的数据规范系统结构示意图。
图4为现有HBase表的第一数据读写机制示意图。
图5为现有HBase表的第二数据读写机制示意图。
具体实施方式
为了更清楚的理解本发明的内容,将结合附图和实施例详细说明。
本发明所述对应HBase数据库的数据规范方法及系统对于HBase数据库使用过程的三个部分进行了针对性的改进,即HBase表的创建、HBase表数据类型及编解码以及HBase表数据读写自动类型检查和转换,体现在数据规范方法上包括本发明所述的三个步骤:S1、创建HBase表;S2、向HBase表写入数据;S3、从HBase表读取数据。
如图1所示为本发明创建HBase表流程示意图,为了能够对表中的数据进行有效的检查和约束,需要在创建表时,定义表中各列的列名、列的数据类型、列的约束。后续在往表中写入数据时很会根据表的定义信息,对待写入的数据进行相应的检查、以及数据类型的转换。创建HBase表的流程由客户端发起,表创建完成后,将状态返回给客户端,具体包括以下步骤:S11、定义HBase表的元信息,所述HBase表的元信息包括HBase自身元信息(包括表所属的命名空间、表名称、表的切分方式、列族数量及列族名称)、HBase表中各列的数据类型信息(例如列名、数据类型)和/或HBase表中各列的约束信息(例如列是否为主键、列是否可为空和/或列的默认值);S12、检查HBase表的元信息合法性,包括检查表所属的命名空间是否存在、表名称是否符合规范、表名称是否已存在、是否定义了列族、各列族名称是否符合规范、列族是否重复、是否定义了主键列、各列名称是否符合规范、列名是否重复和/或各列的数据类型及其约束是否符合逻辑,同时获取排它锁,排它锁用于防止表的创建过程被重复执行,以及防止在表创建完成前有对其的数据读写;S13、在HBase表中创建objects表(即为系统表,或称为系统表objects,用于存储元信息,故也可称为是元数据表),并创建表的数据存储目录(包括根据表所属的命名空间、表名称在HDFS(Hadoop分布式文件系统)中创建相应的数据存储目录,该数据存储目录用于存储表的数据),所述objects表为随HBase初次启动时同步建立的不可删除的表,即objects表只创建一次并不能被从HBase中删除;S14、将HBase表的元信息写入objects表中,并在将HBase表的元信息写入objects表的过程中采用Procedure V2机制(状态机+WAL),保证了建表流程的原子性和一致性,即保证在建表流程中若某一步骤失败可以进行重试,若重试仍然失败则整个系统可以回退建表前的状态,不会造成部分成功、部分失败的情况,也不会有数据不一致或遗留脏数据的情况;S15、创建表的后续步骤,例如通过更新meta表以将表的状态置为可用状态的表上线步骤、将内存中缓存的表状态、元信息进行更新的更新缓存步骤以及在完成上述创建表过程后的释放排它锁步骤。
所述数据类型为下列数据类型中任意类型:
· 定长字符串类型:CHAR(N),其中N为字符串长度;
·变长字符串类型:VARCHAR(N),其中N为字符串最大长度;
·大文本对象类型:CLOB(N),其中N为文本最大长度;
·日期类型:DATE;
·时间戳类型:TIMESTAMP/DATETIME;
·短整数类型:SHORT/SMALLINT/SMALLINTEGER;
·整数类型:INT/INTEGER;
·长整数类型:LONG/BIGINT/BIGINTEGER;
·浮点类型:FLOAT/REAL;
·双精度浮点数类型:DOUBLE;
·数值类型:NUMBER(P,S)/ DECIMAL(P,S),其中P为有效位数,S为精度;
·定长二进制类型:BIN(N)/BINARY(N)/BYTE(N) ,其中N为字节长度;
·变长二进制类型:VARBIN(N)/VARBINARY(N)/VARBYTE(N) ,其中N为字节长度;
·大二进制对象类型:BLOB(N) ,其中N为字节长度;
在创建HBase表的步骤中,本发明在HBase原有的TableDescriptor基础上进行增强,增加列元信息的属性和访问方法,用于支持列的获取和添加列元信息,列元信息的重要属性包括:列的名称、列的数据类型、列的约束。客户端通过TableDescriptor定义好表的各项元信息,将TableDescriptor通过RPC的方式传递到HBase服务端,服务端负责表的实际创建。
在实现步骤S2向HBase表写入数据与步骤S3从HBase表读取数据的过程中,涉及对不同的数据类型进行编解码的操作。本发明所述方法支持多种类型的数据与二进制数据之间进行转换,其特点是保证了数据编解码前后的有序性一致,且编解码(转换)性能优于HBase内置的编解码性能。在本方案中,数据编码是指将非二进制数据(如整数、字符串等)转换为二进制数据,数据解码是指将二进制数据转换为非二进制数据,编码、解码互为逆操作。具体对应不同的数据类型采用以下编解码方法:
·字符串类型(包括CHAR、VARCHAR、CLOB)的编码方案为将字符串按照UTF-8编码规范将其转换为字节码作为二进制数据,解码方案为将二进制数据按UTF-8规范将字节码转换为字符串。例如:
1)原始数据:abc;
2)按UTF-8编码规范转为字节码:616263;
3)字节码转为二进制数据:011000010110001001100011;
4)二进制转为字节码:616263;
5)按UTF-8编码规范转为字符串:abc。
·整数类型(包括SHORT、INT、LONG)的编码方案为取其补码,按每8位为一段进行分段,其中最高的8位与0x80进行异或,将各段转为字节作为二进制数据,解码方案为对二进制数据按每8位一段进行分段,其中最高的8位与0x80进行异或运算,将各段合并后作为数值的补码,将其转换为数值。例如:
1)原始数据:123;
2)取补码:00000000000000000000000001111011;
3)按8位分段:00000000、 00000000、 00000000、01111011;
4)高8位(即第一段)与0x80异或后的值:00000000;
5)合并各段作为二进制数据:00000000000000000000000001111011;
6)按8位分段:00000000、 00000000、 00000000、01111011;
7)高8位(即第一段)与0x80异或:00000000;
8)合并各段作为补码:00000000000000000000000001111011;
9)将补码转换为整数:123。
·浮点类型(包括FLOAT、DOUBLE)的编码方案为先根据IEEE754浮点数布局规范将浮点数转换为无符号整数,将整数右移31位并与0x80000000取或,再与自身异或,变为有符号整数,然后按照整数编码算法进行编码,解码方案为先将二进制数据解码为整数,整数取反后右移31位并与0x80000000取或,再与自身异或,将无符号整数根据IEEE754浮点数布局规范转换为浮点数。例如:
1)原始数据:1.23;
2)按IEEE754规范转为整数:1067282596;
3)将整数右移31位、与0x80000000取或、再与自身异或:-1080201052;
4)按整数类型进行编码:10111111100111010111000010100100;
5)按整数类型进行解码:-1080201052;
6)将整数取反右移31位、与0x80000000取或、再与自身异或:1067282596;
7)按IEEE754规范转为浮点数:1.23。
·数值类型(NUMBER)的编码方案为固定编码为64字节,将数值转换为大整数(即去掉精度)后编码,精度S单独按整数编码,然后将两部分进行合并,解码方案为先将二进制数据切分为两部分,分别进行解码,将解码后的大整数设置相应的精度,转换为最终的数值。
·日期类型(DATE)的编解码方案为用整数来表示日期,如2019年4月6日用整数表示为20190406,即用千万位至万位4位数表示年份,千位百位2位数表示月份,十位个位两位数表示日,日期作为整数进行编解码。例如:
1)原始数据:2019年4月28日;
2)用整数表示日期:20190428;
3)按整数进行编码:10000001001101000001010011011100;
4)按整数进行解码:20190428;
5)将整数转换为日期:2019年4月28日。
·时间戳(TIMESTAMP)的编解码方案为将时间戳转换为长整数(1970年1月1日0点以来的毫秒数,负数为1970年1月1日0点之前),按照长整数进行编解码。
·二进制类型(BIN、VARBIN、BLOB)的编解码方案为按原样输出,不做额外处理。
HBase表原生并不支持数据类型检查和转换,本发明在HBase表中新增了相关的机制形成了全新的Client API(客户端API),并对客户端透明(客户端程序不需要额外的工作)。如图2所示为数据类型检查和数据类型转换流程示意图,在进行步骤S2向HBase表写入数据时,无需对原始数据做编解码,直接通过Client API将数据传递到HBase服务端,即图2所示的通过Client API写入数向Hbase服务端输入原始数据,在Hbase服务端内进行数据类型检查和数据类型转换(数据的类型检查、约束检查、数据类型转换编解码、二进制数据读写);同样在进行步骤S3从HBase表读取数据时通过Client API可直接获取到实际类型的数据,无需再做解码,即图2所示的通过Client API读取数将转换后的数据发送给客户端。全新的Client API与HBase表原生API相比,客户端程序无需关心写入数据的编码方案及底层存储细节,以及无需显式验证数据是否合法(即是否满足约束条件),读取数据时同样无需事先知晓数据类型,通过Client API配合服务端的自动检查、自动转换机制,保障数据安全的工作完全对客户端透明。本发明的数据的类型检查(包括约束的检查)、编写码均在HBase服务端完成。
如图4和图5所示为现有HBase表常用的两种数据读写机制示意图。如图4所示的第一种数据读写机制中,HBase服务端只负责存储二进制数据类型的数据,而不会对数据本身进行任何转换或检查操作,客户端必须负责将原始数据进行检查校对并转换为二进制类型;同时为了保证不同数据类型的原始数据能够被正确识别和转换,必须额外存储一份文档规范约定,用以校对原始数据的正确数据类型,才能够保证正确的进行数据类型转换,客户端操作繁琐工作量大,还需要额外的文档规范约定校对,数据读取效率低,容易出错。如图5所示的第二种数据读写机制中,类似于图4所示的第一种数据读写机制,HBase服务端只负责存储二进制数据类型的数据,而不会对数据本身进行任何转换或检查操作,客户端必须负责将原始数据进行检查校对并转换为二进制类型;区别于第一种,为了保证正确的进行数据类型转换,采用在原始数据中添加表述其类型的额外信息(例如数据类型前缀)用以校对数据类型,不仅增加了需要存储的数据量造成数据冗余,而且加重了客户端编解码工作量。不同于现有的HBase数据存储方式,本发明所述方法中数据的类型检查、约束检查、编解码均在HBase服务端完成。具体的实现是通过HBase提供的协处理器机制,本发明实现了数据的类型检查、约束检查的协处理器,数据类型转换的协处理器,通过对读写流程的拦截,得到待写入数据或待读取数据,并从objects表中获取对应数据表的元信息(即表的定义信息),按照表的定义,对待写入数据进行类型检查、约束检查,检查通过后对待写入数据进行编码,将数据转换为二进制格式,最后写入到目标数据表中,对待读取数据(即从目标数据表获取的二进制数据)根据表的定义将二进制数据转换为其对应的具体类型的数据,将数据返回客户端。
本发明还涉及一种实现上述方法的对应HBase数据库的数据规范系统,其结构如图3所示,具体包括:客户端接口模块、数据安全模块、数据转换模块、数据定义模块、数据传输模块、元信息管理模块、数据读写模块、objects表和目标数据表。所述客户端接口模块连接客户端并接收客户端写入的原始数据和向客户端返回读取数据,特别是所述客户端接口模块直接接收客户端写入的任意数据类型原始数据,和,所述客户端接口模块直接向客户端返回任意数据类型的读取数据,所述客户端接口模块还负责接收客户端指令对objects表和/或目标数据表进行定义。所述数据安全模块通过使用元信息管理模块发送的检查策略对经客户端接口模块接收的原始数据、返回的读取数据进行检查,所述检查策略包括数据类型检查和/或约束信息检查。所述数据转换模块通过使用元信息管理模块发送的编解码策略将原始数据转换为二进制类型,和,将二进制类型的存储数据转换为所需要的其他数据类型的读取数据。所述数据定义模块检查HBase表的元信息,并将检查通过的元信息通过元信息管理模块存储入objects表。所述数据传输模块协调系统内各模块之间数据、元信息、策略的传输。所述元信息管理模块将元信息写入objects表,和,从objects表读取元信息并转换为检查策略或编解码策略发送至需要的模块。所述数据读写模块向目标数据表写入二进制类型的存储数据,和,从目标数据表读取二进制类型的存储数据。该系统包括了元信息处理机制和业务数据处理机制。所述objects表也可称为是元数据表用于存储元信息。所述目标数据表存储二进制类型的存储数据。
下面以一个产品信息的实际数据读写例子进一步说明本发明。
首先客户端定义并创建产品信息表(Products,即目标数据表),表中包含以下数据类型信息和约束信息:
1) 产品编号(ID),8位字符,不可为空,不可重复;
2)产品名称(Name),最多64位字符,不可为空;
3) 产品价格(Price),浮点数,不可为空,不可为负数;
4)生产日期(ProductionDate),日期,不可为空,不可大于当前日期;
5)产品描述(Description),大文本,不可为空。
表的定义(即表的元信息)通过客户端接口模块(ClientAPI)传递给数据定义模块,数据定义模块对表的元信息进行检查,包括:表名、字段名是否复合命名规范、表Products是否已经存在、表Products的字段是否重复、字段数据类型是否合法、字段约束是否有效等。
检查通过后将表Products的元信息通过元信息管理模块存储到objects表中,objects表是始终存在的,在系统启动时会自动创建objects表(若已存在则不会重复创建),并同时创建Products表对应的存储目录。Products表的元信息存储在objects表中,objects表的内容如下(即Products在objects表中是一行记录):
Products表创建完成后,客户端程序通过ClientAPI即可对Products表进行读写,例如向Products表写入产品信息:
ID:P0000001;
Name:XX电池;
Price:3.45;
ProductionDate:2019年12月6日;
Description:10mA/24h/d0.8V条件下为3100mah。
客户端接口模块在接收到上述数据后,通过数据传输模块将数据传递到数据安全模块,数据安全模块在接收到数据时,根据表名(Products)从元信息管理模块中获取相应的检查策略,对数据进行检查:
如ID P0000001是否已存在,是否为空,是否为8位字符,是否重复;
如Price 3.45是否为空,是否是合法的浮点数,是否为负数。
检查通过后将数据传递到数据转换模块,数据转换模块同样会从元信息管理模块中获取数据转换,数据被转换为二进制格式:
如ID P0000001按字符串转换规则转换为二进制数据:
0101000000110000001100000011000000110000001100000011000000110001;
如Price 3.45按浮点数转换规则转换为二进制数据:
11000000010111001100110011001101。
数据转换完成后,将二进制数据传递到数据读写模块,数据读写模块负责将二进制数据写入到目标表Products表中,写入完成后,Products表的内容如下:
产品编号ID | 产品名称Name | 产品价格Price | 生产日期ProductionDate | 产品描述Description |
0101000000110000001100000011000000110000001100000011000000110001 | … | 11000000010111001100110011001101 | … | … |
客户端从Products表中读取数据时,例如读取ID为P0000001的产品的价格(即根据产品编号查询其价格),通过ClientAPI将Table:Products、ID:P0000001传递到数据安全模块,数据安全模块在接收到数据时,根据表名(Products)从元信息管理模块获取检查策略,对表是否存在、ID是否合法进行检查,检查通过后由数据转换模块将ID:P0000001转换为二进制格式,数据读写模块根据二进制的ID从Products表中检索对应的Price,并返回给数据转换模块,数据转换模块将二进制的Price转换为浮点数,最终通过数据传输模块和客户端接口模块将对应的价格3.45返回到客户端。
以上所述仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换等都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
Claims (10)
1.一种对应HBase数据库的数据规范方法,其特征在于,包括以下步骤:
S1、创建HBase表步骤,具体包括:
S11、定义HBase表的元信息;所述HBase表的元信息包括HBase自身元信息、HBase表中各列的数据类型信息和/或HBase表中各列的约束信息;
S12、检查HBase表的元信息合法性;
S13、在HBase表中创建objects表,并创建表的数据存储目录;
S14、将HBase表的元信息写入objects表中;
S2、向HBase表写入数据步骤,具体包括:
S21、输入原始数据;
S22、从objects表调取数据类型检查和数据类型转换的规则;
S23、数据类型检查;
S24、对原始数据进行编解码以完成数据类型转换,将原始数据转换为二进制的存储数据;
S25、将存储数据写入HBase表;
S3、从HBase表读取数据步骤,具体包括:
S31、输入数据请求;
S32、从objects表调取数据类型转换的规则;
S33、对存储数据进行编解码以完成数据类型转换,将二进制的存储数据转换为需要的输出数据;
S34、发送输出数据。
2.如权利要求1所述的方法,其特征在于,步骤S11所述HBase表中各列的数据类型信息包括列名、数据类型;所述HBase表中各列的约束信息包括列是否为主键、列是否可为空和/或列的默认值;所述HBase自身元信息包括表所属的命名空间、表名称、表的切分方式、列族数量和/或列族名称。
3.如权利要求2所述的方法,其特征在于,所述数据类型包括定长字符串类型、变长字符串类型、大文本对象类型、日期类型、时间戳类型、短整数类型、整数类型、长整数类型、浮点类型、双精度浮点数类型、数值类型、定长二进制类型、变长二进制类型和/或大二进制类型。
4.如权利要求1所述的方法,其特征在于,所述objects表为随HBase初次启动时同步建立的不可删除的表。
5.如权利要求1所述的方法,其特征在于,步骤S12包括检查表所属的命名空间是否存在、表名称是否符合规范、表名称是否已存在、是否定义了列族、各列族名称是否符合规范、列族是否重复、是否定义了主键列、各列名称是否符合规范、列名是否重复和/或各列的数据类型及其约束是否符合逻辑。
6.如权利要求1所述的方法,其特征在于,所述步骤S14还包括在将HBase表的元信息写入objects表的过程中采用Procedure V2机制;所述步骤S14之后还包括:步骤S15、创建表的后续步骤,具体包括表上线、更新缓存、释放排它锁。
7.如权利要求1所述的方法,其特征在于,步骤S24中对原始数据进行编解码包括以下互相并列的处理子步骤:
S241、定长字符串类型、变长字符串类型、大文本对象类型的编码方案为将字符串UTF-8编码规范将其转换为字节码作为二进制数据;
S242、短整数类型、整数类型、长整数类型的编码方案为取其补码,按每8位为一段进行分段,其中最高的8位与0x80进行异或运算,将各段转为字节作为二进制数据;
S243、浮点类型、双精度浮点数类型的编码方案为先根据IEEE754浮点数布局规范将浮点数转换为无符号整数,将整数右移31位并与0x80000000取或,再与自身异或,变为有符号整数,然后按照整数编码算法进行编码;
S244、数值类型的编码方案为固定编码为64字节,将数值转换为大整数(即去掉精度)后编码,精度S单独按整数编码,然后将两部分进行合并;
S245、日期类型按照整数类型进行编码;
S246、时间戳类型按照长整数类型进行编码;
S247、定长二进制类型、变长二进制类型、大二进制类型不做额外处理。
8.如权利要求1所述的方法,其特征在于,所述步骤S33中对存储数据进行编解码包括以下互相并列的处理子步骤:
S331、定长字符串类型、变长字符串类型、大文本对象类型的解码方案为将二进制数据按UTF-8规范将字节码转换为字符串;
S332、短整数类型、整数类型、长整数类型的解码方案为对二进制数据按每8位一段进行分段,其中最高的8位与0x80进行异,将各段合并后作为数值的补码,将其转换为数值;
S333、浮点类型、双精度浮点数类型的解码方案为将二进制数据解码为整数,整数取反后右移31位并与0x80000000取或,再与自身异或,将无符号整数根据IEEE754浮点数布局规范转换为浮点数;
S334、数值类型的解码方案为先将二进制数据切分为两部分,分别进行解码,将解码后的大整数设置相应的精度,转换为最终的数值;
S335、日期类型按照整数类型进行解码;
S336、时间戳类型按照长整数类型进行解码;
S337、定长二进制类型、变长二进制类型、大二进制类型不做额外处理。
9.一种实现如权利要求1至8任一项所述方法的对应HBase数据库的数据规范系统,其特征在于,包括客户端接口模块、数据安全模块、数据转换模块、数据定义模块、数据传输模块、元信息管理模块、数据读写模块、objects表和目标数据表;
所述客户端接口模块连接客户端并接收客户端写入的原始数据和向客户端返回读取数据,所述客户端接口模块接收客户端指令对objects表和/或目标数据表进行定义;
所述数据安全模块通过使用元信息管理模块发送的检查策略对经客户端接口模块接收的原始数据、返回的读取数据进行检查,所述检查策略包括数据类型检查和/或约束信息检查;
所述数据转换模块通过使用元信息管理模块发送的编解码策略将原始数据转换为二进制类型,和,将二进制类型的存储数据转换为所需数据类型的读取数据;
所述数据定义模块检查HBase表的元信息,并将检查通过的元信息通过元信息管理模块存储入objects表;
所述数据传输模块协调系统内各模块之间数据、元信息、策略的传输;
所述元信息管理模块将元信息写入objects表,和,从objects表读取元信息并转换为检查策略或编解码策略发送至需要的模块;
所述数据读写模块向目标数据表写入二进制类型的存储数据,和,从目标数据表读取二进制类型的存储数据;
所述objects表存储元信息;
所述目标数据表存储二进制类型的存储数据。
10.如权利要求9所述的系统,其特征在于,所述客户端接口模块直接接收客户端写入的任意数据类型原始数据,和,所述客户端接口模块直接向客户端返回任意数据类型的读取数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010403883.6A CN111309719B (zh) | 2020-05-13 | 2020-05-13 | 一种对应HBase数据库的数据规范方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010403883.6A CN111309719B (zh) | 2020-05-13 | 2020-05-13 | 一种对应HBase数据库的数据规范方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111309719A true CN111309719A (zh) | 2020-06-19 |
CN111309719B CN111309719B (zh) | 2020-08-21 |
Family
ID=71159393
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010403883.6A Active CN111309719B (zh) | 2020-05-13 | 2020-05-13 | 一种对应HBase数据库的数据规范方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111309719B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113297202A (zh) * | 2020-07-09 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 数据类型变更的处理方法及装置 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104715039A (zh) * | 2015-03-23 | 2015-06-17 | 星环信息科技(上海)有限公司 | 基于硬盘和内存的列式存储和查询方法及设备 |
CN105243155A (zh) * | 2015-10-29 | 2016-01-13 | 贵州电网有限责任公司电力调度控制中心 | 一种大数据抽取和交换系统 |
US20170180272A1 (en) * | 2012-10-03 | 2017-06-22 | Tracey Bernath | System and method for accelerating network applications using an enhanced network interface and massively parallel distributed processing |
CN107045534A (zh) * | 2017-01-20 | 2017-08-15 | 中国航天系统科学与工程研究院 | 大数据环境下基于HBase的异构数据库在线交换与共享系统 |
CN107888686A (zh) * | 2017-11-14 | 2018-04-06 | 西南医科大学 | 一种位于HBase客户端的用户数据有效性验证方法 |
CN109241191A (zh) * | 2018-09-13 | 2019-01-18 | 华东交通大学 | 一种分布式数据源异构同步平台及同步方法 |
CN109918425A (zh) * | 2017-12-14 | 2019-06-21 | 北京京东尚科信息技术有限公司 | 一种实现数据导入非关系型数据库的方法和系统 |
CN110019135A (zh) * | 2017-12-27 | 2019-07-16 | 航天信息股份有限公司 | 一种将关系型数据迁移至HBase数据库的方法及装置 |
CN110109894A (zh) * | 2019-03-22 | 2019-08-09 | 新奥特(北京)视频技术有限公司 | 非关系型数据库的实现方法、装置、存储介质和设备 |
CN110162309A (zh) * | 2019-05-28 | 2019-08-23 | 成都四方伟业软件股份有限公司 | 参数校验方法及装置 |
CN110447021A (zh) * | 2017-03-13 | 2019-11-12 | Wan迪斯科公司 | 用于在数据中心之间维持元数据和数据的一致性的方法、装置和系统 |
CN111177234A (zh) * | 2018-11-09 | 2020-05-19 | 西安智盛锐芯半导体科技有限公司 | 一种文档型数据文件快速处理装置及方法 |
-
2020
- 2020-05-13 CN CN202010403883.6A patent/CN111309719B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170180272A1 (en) * | 2012-10-03 | 2017-06-22 | Tracey Bernath | System and method for accelerating network applications using an enhanced network interface and massively parallel distributed processing |
CN104715039A (zh) * | 2015-03-23 | 2015-06-17 | 星环信息科技(上海)有限公司 | 基于硬盘和内存的列式存储和查询方法及设备 |
CN105243155A (zh) * | 2015-10-29 | 2016-01-13 | 贵州电网有限责任公司电力调度控制中心 | 一种大数据抽取和交换系统 |
CN107045534A (zh) * | 2017-01-20 | 2017-08-15 | 中国航天系统科学与工程研究院 | 大数据环境下基于HBase的异构数据库在线交换与共享系统 |
CN110447021A (zh) * | 2017-03-13 | 2019-11-12 | Wan迪斯科公司 | 用于在数据中心之间维持元数据和数据的一致性的方法、装置和系统 |
CN107888686A (zh) * | 2017-11-14 | 2018-04-06 | 西南医科大学 | 一种位于HBase客户端的用户数据有效性验证方法 |
CN109918425A (zh) * | 2017-12-14 | 2019-06-21 | 北京京东尚科信息技术有限公司 | 一种实现数据导入非关系型数据库的方法和系统 |
CN110019135A (zh) * | 2017-12-27 | 2019-07-16 | 航天信息股份有限公司 | 一种将关系型数据迁移至HBase数据库的方法及装置 |
CN109241191A (zh) * | 2018-09-13 | 2019-01-18 | 华东交通大学 | 一种分布式数据源异构同步平台及同步方法 |
CN111177234A (zh) * | 2018-11-09 | 2020-05-19 | 西安智盛锐芯半导体科技有限公司 | 一种文档型数据文件快速处理装置及方法 |
CN110109894A (zh) * | 2019-03-22 | 2019-08-09 | 新奥特(北京)视频技术有限公司 | 非关系型数据库的实现方法、装置、存储介质和设备 |
CN110162309A (zh) * | 2019-05-28 | 2019-08-23 | 成都四方伟业软件股份有限公司 | 参数校验方法及装置 |
Non-Patent Citations (1)
Title |
---|
吴琰等: "基于HBase的分布式空间数据库技术", 《吉林大学学报(理学报)》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113297202A (zh) * | 2020-07-09 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 数据类型变更的处理方法及装置 |
CN113297202B (zh) * | 2020-07-09 | 2024-03-08 | 阿里巴巴集团控股有限公司 | 数据类型变更的处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111309719B (zh) | 2020-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11803336B2 (en) | Efficiently accessing, storing and transmitting data elements | |
US5909570A (en) | Template mapping system for data translation | |
US8510304B1 (en) | Transactionally consistent indexing for data blobs | |
US8402061B1 (en) | Tiered middleware framework for data storage | |
CN107391306B (zh) | 一种异构数据库备份文件恢复方法 | |
US10671585B2 (en) | Storing indexed data to a dispersed storage network | |
US20080024350A1 (en) | Lossless comparative compression and transmission method and system | |
US20110113074A1 (en) | Data export/import from multiple data source to a destination data repository using corresponding data exporters and an importer | |
US20130304746A1 (en) | Retrieving indexed data from a dispersed storage network | |
CN104040542A (zh) | 用于在易失性存储器内保持关系型数据的列向量的技术 | |
CN103944981A (zh) | 一种基于纠删码技术改进的云存储系统及实现方法 | |
WO2005086003A1 (ja) | データベース・システム | |
KR20110014987A (ko) | 개별 액세스 가능한 데이터 유닛의 스토리지 관리 | |
CN111309719B (zh) | 一种对应HBase数据库的数据规范方法及系统 | |
US8832046B2 (en) | Encoded data processing | |
CN111930568A (zh) | 一种基于Avro的结构化数据序列化传输方法及装置 | |
US8688666B1 (en) | Multi-blob consistency for atomic data transactions | |
CN102129873B (zh) | 提高计算机末级高速缓存可靠性的数据压缩装置及其方法 | |
JP2004102926A (ja) | 識別子生成方法、同一性判定方法、識別子送信方法、識別子生成装置、同一性判定装置および識別子送信装置 | |
CN118093946A (zh) | 图数据的存储、读取方法及装置 | |
CN116701325B (zh) | 基于二进制文件缓存加载xbrl分类标准的方法 | |
WO2021013047A1 (zh) | 一种文件管理方法及装置 | |
Liao et al. | Bullion: A Column Store for Machine Learning | |
JP2017027349A (ja) | レプリケーションプログラム | |
WO2022216289A1 (en) | Efficiently accessing, storing and transmitting data elements |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |