一种数据库的数据处理方法及装置与流程

文档序号:26004733发布日期:2021-07-23 21:22阅读:68来源:国知局
一种数据库的数据处理方法及装置与流程

本发明涉及数据库的数据处理方法,具体涉及一种在64位数据库里实现128位和256位数据类型的数据处理方法。



背景技术:

在密码学等领域经常要做128位和256位的数据计算和存储,并且随着大数据、物联网的快速发展,现有64位的数据结构有时不能满足业务需求。

目前只有少数的编程语言提供原生的128位数据类型,绝大部分编程语言是用软件算法模拟大数计算。

对数据库来说,目前市面上没有128位、256位数据库,现有的64位数据库只提供了8位、16位、24位、32位、64位的整数和无符号整数数据类型,以及32位、64位浮点数,并未提供128位和256位的整数、无符号整数、浮点数这几种常用数据类型。

因此用户在数据库里无法直接存储128位或256位的数据,也不能直接对128位或256位数据进行计算。



技术实现要素:

本发明的目的,就是克服现有技术的不足,提供一种数据库的数据处理方法解决现有64位数据库不支持128位和256位的数据计算和存储的问题。

为了达到上述目的,本发明提供了一种数据库的数据处理方法,包括以下步骤:一种数据库的数据处理方法,其特征在于,包括以下步骤:

a1:加载数据处理装置到数据库引擎,所述数据处理装置创建自定义数据类型,并创建和注册与之对应的自定义sql函数、自定义sql操作符;

a2:数据库引擎对用户输入的sql语句进行语法树解析得到语法树解析结果,所述语法树解析结果包含sql关键字、sql操作符、sql函数、字面量;

a2.1:当语法树解析结果里存在数据处理装置创建的自定义sql操作符时,则数据库引擎将其解析为与之对应的自定义sql函数;

a3:当数据库引擎调用了数据处理装置里的自定义sql函数时,则数据库引擎动态分配一块动态内存,将自定义sql函数所需的参数从语法树解析结果中复制到该动态内存内,并将该动态内存的地址作为sql函数的参数,在调用时以只读的方式传递给数据处理装置里的sql函数;

a4:所述数据处理装置里的自定义sql函数通过参数的动态内存地址,获取到所要处理的参数,并在执行前对参数进行判断:

a4.1当参数为文本数据类型时,数据库引擎调用数据处理装置的文本输入函数,判断参数能否被转换为对应的128位或256位的有符号整数、无符号整数、浮点数(例如参数里有非法字符、负数不能转换位无符号整数、数值超过大的数据类型的范围),如果能正确转换则调用将文本数据转换为128位或256位二进制数据的类型转换函数,如果不能正确转换则报错退出;

a4.2:当参数为二进制类型时,数据库引擎调用数据处理装置的二进制输入函数,判断参数是否合法,例如做除法时被除数不能为0,如果参数合法则执行数据计算,如果参数不合法则不执行计算过程、报错退出;

a5:判断计算结果是否合法,例如是否会出现上溢出、下溢出,如果计算结果不合法则报错退出;

a6:数据处理装置的自定义sql函数对参数进行处理,得到计算结果,然后分配一块动态内存,将计算结果复制到动态内存里,并将动态内存的地址返回给数据库引擎,由数据库引擎负责对该动态内存进行后续使用和释放。

进一步的,所述自定义数据类型包括128位有符号整数、128位无符号整数、128位浮点数、256位有符号整数类型、256位无符号整数、256位浮点数数据类型。

进一步的,所述自定义sql函数包括接收文本输入的文本输入函数、输出文本格式数据的文本输出函数、接收二进制输入的二进制输入函数、输出二进制格式数据的二进制输出函数、四则运算函数、科学计算函数、逻辑运算函数、位运算函数、类型转换函数、聚合函数、比较运算函数、哈希函数。

进一步的,所述自定义函数还有与之对应的自定义sql操作符,所述自定义sql操作符包括四则运算操作符、逻辑运算操作符、位运算操作符、类型转换操作符、比较运算函数操作符。

进一步的,所述自定义数据类型还创建有与之对应的b树索引操作符及哈希索引操作符,所述b树索引操作符及哈希索引操作符用于创建自定义数据类型b树索引及创建自定义数据类型哈希索引。

进一步的,所述数据处理装置为自定义数据类型,分别定义了文本输入函数、二进制输入函数、文本输出函数、二进制输出函数,在数据处理装置加载时注册分别定义的文本输入函数、二进制输入函数、文本输出函数、二进制输出函数,并由数据库引擎针对参数的数据类型选择相应的函数。

进一步的,所述数据库引擎为关系型数据库的数据库引擎。

一种数据库的数据处理装置,其特征在于包括

数据输入输出模块,数据输入输出模块,包括用于获取数据库引擎的语法树解析结果及向数据库引擎输出计算结果的文本输入函数、文本输出函数、二进制输入函数、二进制输出函数;

运算模块,由支持128位数据类型的c语言编译器编译而成,用于对自定义数据类型进行计算;

异常判断模块,用于判断sql语句数据类型的数值长度是否符合自定义数据类型所限定的长度、判断数据处理装置对sql语句进行数据处理后的数据是否符合自定义数据类型所限定的长度和和参数是否能被类型转换;

内存存储模块,用于存储动态内存数据;

所述数据处理装置在数据库引擎启动或数据库引擎启动后执行自定义数据类型运算时自动加载至数据库引擎。

进一步的,所述运算模块包括四则运算函数单元、科学计算函数单元、逻辑运算函数单元、位运算函数单元、类型转换函数单元、聚合函数单元、比较运算函数单元、哈希函数单元,用于对自定义数据类型进行四则运算、科学计算、逻辑运算、位运算、类型转换、聚合函数运算、比较运算、哈希运算;所述运算模块还包括与所述四则运算函数单元、科学计算函数单元、逻辑运算函数单元、位运算函数单元、类型转换函数单元、比较运算函数单元对应的四则运算操作符单元、科学计算操作符单元、逻辑运算操作符单元、位运算操作符单元、类型转换操作符单元、比较运算操作符单元、b树索引操作符单元。

本发明的有益效果是:通过在64位数据库里创建128位有符号整数、128位无符号整数、128位浮点数、256位有符号整数类型、256位无符号整数、256位浮点数这6种原生的数据类型,为这些数据类型分别实现了输入、输出、存储、计算、索引等功能;

数据处理装置在数据库里以插件的方式运行对数据库无侵入性,不修改数据库的代码;也无需修改数据库的驱动程序,客户端按照使用默认数据类型的方式使用新的数据类型。

当用户的应用程序不支持128位、256位计算时,可以通过sql命令在加载有数据处理装置的数据库里读写相关数据,完成新数据类型和各种数据类型之间的计算,通过动态内存的机制和数据库引擎交换数据,获取最终的计算结果,解决现有64位数据库不支持128位和256位的数据计算和存储的问题。

附图说明

为了易于说明,本发明由下述的较佳实施例及附图作以详细描述。

图1是本发明所述一种数据库的数据处理方法及装置原理图

图2是本发明所述一种数据库的数据处理方法流程图;

图3是本发明所述一种数据库的数据处理装置示意图;

图4是本发明所述一种数据库的数据处理装置数据输入输出流程示意图;

图5是本发明所述一种数据库的数据处理装置运算模块示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的长度,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的长度。

本说明书实施例提供了一种数据库的数据处理方法及装置,通过加载在数据库引擎里以插件的方式运行,实现在64位数据库中实现128位和256位的数据计算和存储的技术问题。

实施例如图1、2所示,一种数据库的数据处理方法包括以下步骤:其特征在于,包括以下步骤:

加载数据处理装置到数据库引擎,所述数据处理装置创建自定义数据类型,并创建和注册与之对应的自定义sql函数、自定义sql操作符;所述数据处理装置在数据库引擎启动或数据库引擎启动后执行自定义数据类型运算时自动加载至数据库引擎;自定义数据类型包括128位有符号整数、128位无符号整数、128位浮点数、256位有符号整数类型、256位无符号整数、256位浮点数数据类型;

数据库引擎对用户输入的sql语句进行语法树解析得到语法树解析结果,所述语法树解析结果包含sql关键字、sql操作符、sql函数、字面量;

数据库引擎对sql语句进行语法解析,数据处理装置通过读写指针将经数据库引擎语法解析后的参数传递给数据处理装置,所述参数包括关键字、数据类型、sql函数及sql操作符;

当数据库引擎调用了数据处理装置里的自定义sql函数时,则数据库引擎动态分配一块动态内存,将自定义sql函数所需的参数从语法树解析结果中复制到该动态内存内,并将该动态内存的地址作为sql函数的参数,在调用时以只读的方式传递给数据处理装置里的sql函数;

所述数据处理装置里的自定义sql函数通过参数的动态内存地址,获取到所要处理的参数,并在执行前对参数进行判断:

当参数为文本数据类型时,数据库引擎调用数据处理装置的文本输入函数,判断参数能否被转换为对应的128位或256位的有符号整数、无符号整数、浮点数(例如参数里有非法字符、负数不能转换位无符号整数、数值超过大的数据类型的范围),如果能正确转换则调用将文本数据转换为128位或256位二进制数据的类型转换函数,如果不能正确转换则报错退出;

当参数为二进制类型时,数据库引擎调用数据处理装置的二进制输入函数,判断参数是否合法,例如做除法时被除数不能为0,如果参数合法则执行数据计算,如果参数不合法则不执行计算过程、报错退出;

判断计算结果是否合法,例如是否会出现上溢出、下溢出,如果计算结果不合法则报错退出;

数据处理装置的自定义sql函数对参数进行处理,得到计算结果,然后分配一块动态内存,将计算结果复制到动态内存里,并将动态内存的地址返回给数据库引擎,由数据库引擎负责对该动态内存进行后续使用和释放。

以在数据库中执行128位加法为例,当计算128位有符号整数“1”“加”128位无符号整数“2”时,sql语句为:select'1'::int16+'2'::uint16,其中int16和uint16为数据类型,“+”为操作符,select为关键字,数据库引擎将操作符+解析为加法函数,加法函数的参数为128位有符号整数“1”,128位无符号整数“2”。

数据库引擎动态分配一块动态内存,将自定义sql函数“+”所需的参数128位整数“1”,128位无符号整数“2”从语法树解析结果中复制到该动态内存内,并将该动态内存的地址作为sql函数的参数,在调用时以只读的方式传递给数据处理装置里的sql函数,参数为文本数据类型,数据库引擎调用数据处理装置的文本输入函数,判断参数能否被转换为对应的128位或256位的有符号整数、无符号整数,参数能被转换为对应的128位或256位的有符号整数、无符号整数,执行类型转换,转换参数,判断转换后的参数是否合法,参数合法,执行数据计算,判断计算结果是否合法,计算结果合法,得到计算结果,然后分配一块动态内存,将计算结果复制到动态内存里,并将动态内存的地址返回给数据库引擎,由数据库引擎将该动态内存通过二进制输出函数输出到数据库端。

上述在控制台执行加法包括4个步骤:

1、数据库引擎调用文本输入函数将文本‘1’转换为有符号128位整数

2、数据库引擎调用文本输入函数将文本‘2’转换为无符号128位整数

3、数据库引擎调用128位有符号整数加128位无符号整数的函数进行计算,获得计算结果(计算结果的数据类型是128位无符号整数)

4、数据库引擎调用文本输出函数将128位无符号整数转换为文本,在控制台上输出

上述实施例的基础上,所述自定义sql函数包括接收文本输入的文本输入函数、输出文本格式数据的文本输出函数、接收二进制输入的二进制输入函数、输出二进制格式数据的二进制输出函数、四则运算函数、科学计算函数、逻辑运算函数、位运算函数、类型转换函数、聚合函数、比较运算函数、哈希函数。

进一步的,所述自定义函数还有与之对应的自定义sql操作符,所述自定义sql操作符包括四则运算操作符、逻辑运算操作符、位运算操作符、类型转换操作符、比较运算函数操作符。

进一步的,所述自定义数据类型还创建有与之对应的b树索引操作符及哈希索引操作符,所述b树索引操作符及哈希索引操作符用于创建自定义数据类型b树索引及创建自定义数据类型哈希索引。

进一步的,所述数据处理装置为自定义数据类型(128位、256位的有符号整数、无符号整数、浮点数)分别定义了文本输入函数、二进制输入函数、文本输出函数、二进制输出函数,在数据处理装置加载时注册分别定义的文本输入函数、二进制输入函数、文本输出函数、二进制输出函数,并由数据库引擎针对参数的数据类型选择相应的函数。

本实施例为关系型数据库postgresql数据库引擎。

所述256位数据类型为两个128位数据类型模拟而来。

如图4所示:数据库引擎根据参数的数据类型将参数输出到对应的输入函数。当参数为文本类型时,参数经计算后从动态内存经文本输出函数输出至数据库引擎;当目标数据为二进制类型时,参数经计算后从动态内存经二进制输出函数输出至数据库引擎。

如图3所示,基于上述方法本发明提供了一种数据库的数据处理装置,所述的装置可以包括使用了本说明书实施例所述方法的系统(包括分布式系统)、软件(应用)、模块、组件、服务器、客户端等并结合必要的实施硬件的装置,本实施例提供的一种数据库的数据处理装置包括:

数据输入输出模块,数据输入输出模块,包括用于获取数据库引擎的语法树解析结果及向数据库引擎输出计算结果的文本输入函数、文本输出函数、二进制输入函数、二进制输出函数;

运算模块,由支持128位数据类型的c语言编译器编译而成,用于对自定义数据类型进行计算;

异常判断模块,用于判断sql语句数据类型的数值长度是否符合自定义数据类型所限定的长度、判断数据处理装置对sql语句进行数据处理后的数据是否符合自定义数据类型所限定的长度和参数是否能被类型转换;

内存存储模块,用于存储动态内存数据;

所述数据处理装置在数据库引擎启动或数据库引擎启动后执行自定义数据类型运算时自动加载至数据库引擎。

如图5所示,所述运算模块包括四则运算函数单元、科学计算函数单元、逻辑运算函数单元、位运算函数单元、类型转换函数单元、聚合函数单元、比较运算函数单元、哈希函数单元,用于对自定义数据类型进行四则运算、科学计算、逻辑运算、位运算、类型转换、聚合函数运算、比较运算、哈希运算;所述运算模块还包括与所述四则运算函数单元、科学计算函数单元、逻辑运算函数单元、位运算函数单元、类型转换函数单元、聚合函数单元、比较运算函数单元、哈希函数单元对应的四则运算操作符单元、逻辑运算操作符单元、位运算操作符单元、类型转换操作符单元、比较运算操作符单元、哈希函数函数单元、b树索引操作符单元。

本实施例中四则运算函数单元包括加法(add)、减法(subtract)、乘法(multiply)、除法(divide)、取负数(negative)、取余数(mod)等函数;科学计算函数包括平方、立方、平方根、立方根等科学计算函数;逻辑运算函数单元包括等于(eq)、不等于(ne)、大于(gt)、大于或等于(ge)、小于(lt)、小于或等于(le)等函数;位运算函数单元包括与(and)、或(or)、异或(xor)、左移(shl)、右移(shr)、取反(not)等函数;类型转换函数单元包括cast等函数,例如,对int16这个数据类型,需要注册转换到uint16、int256、uint256、float16、int8、uint8、float8、int4、uint4、float4、int2、uint2、int1、uint1这些数据类型;聚合函数单元包括取小(min)、取大(max)、累加(sum)、平均(avg)等函数;比较运算函数单元包括比较函数(cmp)、内部排序函数(sort_support);哈希函数单元包括用于计算hash值的hash函数;还包括与之对应的操作符单元;除此之外还包括b树索引操作符单元用于创建b树索引;哈希索引操作符单元用于创建哈希索引。

如图3、4所示,一种数据库的数据处理方法的另一种实施例,用户或应用程序通过向数据库引擎输入sql语句,数据库引擎对输入的sql语句进行语法解析,数据库引擎将解析后的数据输出到数据处理装置,数据处理装置的数据输入输出模块对参数进行判断,当自定义sql函数所需的参数的数据类型为文本类型时,判断参数能否被转换为对应的128位或256位的有符号整数、无符号整数,如参数能被转换为对应的128位或256位的有符号整数、无符号整数,执行类型转换,则转换参数为二进制类型;当自定义sql函数所需的参数的数据类型为二进制类型时,判断转参数是否合法,如参数合法,则执行数据计算得到结算结果,判断计算结果是否合法,如计算结果合法,得到计算结果,然后将计算结果复制到内存存储模块里,并将内存存储模块的内容返回给数据库引擎,由数据库引擎将该内存存储模块的内容通过二进制输出函数输出到数据库端。

本发明一种数据库的数据处理方法及装置以无侵入性的插件方式加载在数据库中运行,不修改数据库的代码;也无需修改数据库的驱动程序,当用户的应用程序不支持128位、256位计算时,可以通过sql命令和函数在数据库里读写相关数据,完美实现数据输入、输出、存储、计算、索引等功能,完成全部的业务计算通过本插件创建的自定义128位、256位的sql数据类型及相关sql操作符,并在插件里使用支持128位数据类型的c语言实现自定义sql函数,完成新数据类型和各种数据类型之间的计算,通过动态内存的机制和数据库引擎交换数据,解决了现有64位数据库不提供128位和256位的数据计算和存储的技术问题。

需要说明的是,本申请实施例提供的装置,在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。

另外,上述实施例提供的装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1