CN112883048A - 一种数据访问方法、装置、服务器及可读存储介质 - Google Patents

一种数据访问方法、装置、服务器及可读存储介质 Download PDF

Info

Publication number
CN112883048A
CN112883048A CN201911203922.1A CN201911203922A CN112883048A CN 112883048 A CN112883048 A CN 112883048A CN 201911203922 A CN201911203922 A CN 201911203922A CN 112883048 A CN112883048 A CN 112883048A
Authority
CN
China
Prior art keywords
target
data
database
identifier
data access
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.)
Pending
Application number
CN201911203922.1A
Other languages
English (en)
Inventor
李伟龙
李韬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201911203922.1A priority Critical patent/CN112883048A/zh
Publication of CN112883048A publication Critical patent/CN112883048A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof

Abstract

本发明实施例提供一种数据访问方法、装置、服务器及可读存储介质,其中方法包括:获取查询语句,所述查询语句至少包括:目标数据库链接标识,目标模式标识及目标表标识;根据所述目标数据库链接标识指示的数据库实例,连接所述数据库实例的数据库;根据所述目标模式标识指示的目标数据库,从连接的数据库中选择目标数据库;根据所述目标表标识指示的目标数据类型,从所述目标数据库中读取与所述目标数据类型对应的目标数据;将所述目标数据存储到所述目标表标识所对应的数据表。本发明实施例可提升数据访问效率。

Description

一种数据访问方法、装置、服务器及可读存储介质
技术领域
本发明实施例涉及数据访问技术领域,具体涉及一种数据访问方法、装置、服务器及可读存储介质。
背景技术
随着业务的发展,系统功能的增多,系统所需要管理的数据源越来越多,为提升系统的数据处理效率,提升这些数据源的数据访问效率显得尤为必要。
目前系统所需要管理的数据源主要包括多种类型的数据库,支持这些数据库实现数据访问的查询语言各不相同,导致数据访问效率存在瓶颈;因此如何使用统一的查询语言,实现多种类型数据库的访问支持,以提升数据访问效率,成为了本领域技术人员亟需解决的问题。
发明内容
有鉴于此,本发明实施例提供一种数据访问方法、装置、服务器及可读存储介质,以提升数据访问效率。
为实现上述目的,本发明实施例提供如下技术方案:
一种数据访问方法,包括:
获取查询语句,所述查询语句至少包括:目标数据库链接标识,目标模式标识及目标表标识;
根据所述目标数据库链接标识指示的数据库实例,连接所述数据库实例的数据库;
根据所述目标模式标识指示的目标数据库,从连接的数据库中选择目标数据库;
根据所述目标表标识指示的目标数据类型,从所述目标数据库中读取与所述目标数据类型对应的目标数据;
将所述目标数据存储到所述目标表标识所对应的数据表。
本发明实施例还提供一种数据访问装置,包括:
语句获取模块,用于获取查询语句,所述查询语句至少包括:目标数据库链接标识,目标模式标识及目标表标识;
数据库连接模块,用于根据所述目标数据库链接标识指示的数据库实例,连接所述数据库实例的数据库;
数据库选择模块,用于根据所述目标模式标识指示的目标数据库,从连接的数据库中选择目标数据库;
数据读取模块,用于根据所述目标表标识指示的目标数据类型,从所述目标数据库中读取与所述目标数据类型所对应的目标数据;
存储模块,用于将所述目标数据存储到所述目标表标识所对应的数据表。
本发明实施例还提供一种服务器,包括至少一个存储器和至少一个处理芯片;所述存储器存储计算机可执行指令,所述处理芯片调用所述计算机可执行指令,执行上述所述的数据访问方法。
本发明实施例还提供一种数据库,所述数据库被配置为执行上述所述的数据访问方法。
本发明实施例还提供一种可读存储介质,所述可读存储介质存储执行上述所述的数据访问方法的计算机可执行指令。
本发明实施例提供的数据访问方法,可在无需配置查询语句的情况下,使用查询语句实现对数据库进行访问,具体的,针对需访问的数据库,本发明实施例可在查询语句的表达基础上,通过查询语句设置的目标数据库链接标识、目标模式标识及目标表标识映射数据库,即以目标数据库链接标识映射数据库实例,以目标模式标识映射数据库实例的目标数据库,以目标表标识映射目标数据类型,从而确定出需要访问数据的数据库实例中的目标数据库,从该目标数据库中读取目标数据类型的目标数据;进而将所述目标数据在目标表标识对应的数据表中进行存储,使得最终访问得到的数据结果为符合所使用的查询语句的数据结果。本发明实施例提供的数据访问方法可通过改进查询语句的表达方式,实现为数据库建立映射,并提供相应改进的数据访问流程实现数据访问,从而可无需配置的基于查询语句访问数据库,使得不同类型的数据库,能够使用统一的查询语句进行数据访问,提升数据访问效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为基于SQL访问数据的流程阶段示例图;
图2为SQL语句中表达数据源的信息示例图;
图3为本发明实施例提供的SQL语句的部分内容示例图;
图4为本发明实施例提供的数据访问方法的流程图;
图5为本发明实施例提供的读取目标数据的流程图;
图6所为针对目标Redis数据库中任一类型的数据的读取过程示例图;
图7为使用project下推前后的数据读取对比示意图;
图8为使用谓词下推前后的数据读取对比示意图;
图9为使用limit下推前后的数据读取对比示意图;
图10为本发明实施例提供的应用示例图;
图11为本发明实施例提供的数据访问装置的框图;
图12为本发明实施例提供的数据访问装置的另一框图;
图13为服务器的硬件框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在一种可选实现中,本发明实施例提供的数据访问方法的可选流程可以包括:
获取查询语句,所述查询语句至少包括:目标数据库链接标识,目标模式标识及目标表标识;
根据所述目标数据库链接标识指示的数据库实例,连接所述数据库实例的数据库;
根据所述目标模式标识指示的目标数据库,从连接的数据库中选择目标数据库;
根据所述目标表标识指示的目标数据类型,从所述目标数据库中读取与所述目标数据类型对应的目标数据;
将所述目标数据存储到所述目标表标识所对应的数据表。
本发明实施例提供的数据访问方法,可在无需配置查询语句的情况下,使用查询语句实现对数据库进行访问,具体的,针对需访问的数据库,本发明实施例可在查询语句的表达基础上,通过查询语句的目标数据库链接标识、目标模式标识及目标表标识映射数据库,即以目标数据库链接标识映射数据库实例,以目标模式标识映射数据库实例的目标数据库,以目标表标识映射目标数据类型,从而确定出需要访问数据的数据库实例中的目标数据库,从该目标数据库中读取目标数据类型的目标数据;进而将所述目标数据在目标表标识对应的数据表中进行存储,使得最终访问得到的数据结果为符合所使用的查询语句的数据结果。本发明实施例提供的数据访问方法可通过改进查询语句的表达方式,实现为数据库建立映射,并提供相应改进的数据访问流程实现数据访问,从而可无需配置的基于查询语句访问数据库,使得不同类型的数据库,能够使用统一的查询语句进行数据访问,提升数据访问效率。
在可选说明中,支持数据库实现数据访问的查询语言各不相同的一种示例是,支持关系型数据库和非关系型数据库实现数据访问的查询语言并不相同,而关系型数据库和非关系型数据库作为系统管理数据源的主要数据库类型,关系型数据库和非关系型数据库无法以统一的查询语言实现数据访问,无疑将严重影响数据访问效率。基于此,下面以统一关系型数据库和非关系型数据库的查询语言为例,对本发明实施例提供的方案进行说明。
目前关系型数据库可基于SQL(Structured Query Language,结构化查询语言)实现数据访问;为提升数据访问的效率,使用SQL实现关系型数据库和非关系型数据库的数据访问,无疑是一个较佳的选择。
需要说明的是,SQL是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系型数据库。关系型数据库是指采用了关系模型来组织数据的数据库,在一种示例中,关系型数据库可通过行和列的形式存储数据,关系型数据库这一系列的行和列被称为数据表,一组数据表组成了数据库,数据表可以彼此关联协作存储,从而基于SQL可以实现对关系型数据库的数据访问;示例的,关系型数据库例如Mysql、SQLServer、PostgreSQL等。
非关系型数据库又被称为NoSQL,非关系型数据库的数据并不适合存储在数据表的行和列中,而是将数据大块组合在一起,因此直接使用SQL访问非关系型数据库的数据存在一定的困难;示例的,非关系型数据库例如Redis、MongoDB等。
目前在基于SQL访问非关系型数据库的方面,presto(一种作为开源的分布式SQL查询引擎)提供了一种基于SQL访问Redis数据库的能力,具体的,presto通过连接中间件形式的Redis连接器,从而允许基于SQL查询存储在Redis数据库中的数据;但是,Redis连接器需要事先配置,这就需要在配置文件中事先定义好Redis数据库中的数据参数,并且不同版本的Redis数据库需要分别配置连接器,这导致数据访问效率的提升受限。
基于此,本发明实施例提供改进的数据访问方案,从而无需配置的基于SQL访问非关系型数据库,提升数据访问效率。
在一种示例中,基于SQL访问数据的流程阶段可以如图1所示,包括:抽象语法树阶段,逻辑执行计划阶段,优化逻辑执行计划阶段和物理执行计划阶段;
其中,SQL语句可用于记录SQL查询请求的内容,在抽象语法树阶段,SQL语句可通过语法分析工具转化为抽象语法树,语法分析工具例如antlr(一个根据输入自动生成语法树并可视化的显示出来的开源语法分析器)、calcite(一个提供标准的SQL语言查询底层各种数据源的工具)、javacc(一个能生成语法和词法分析器的生成程序)等;
在逻辑执行计划阶段,通过规划器可将抽象语法树转化为逻辑执行计划,逻辑执行计划例如关系代数表达式或者类似的结构;在优化逻辑执行计划阶段,优化器可对转化后的逻辑执行计划进行优化,从而进入物理执行计划阶段;在物理执行计划阶段,逻辑执行计划被转化为物理执行计划,从而通过物理执行计划来要求操作的执行顺序,每一步操作使用的算法,操作之间的传递方式等。
本发明的发明人经过研究发现:物理执行计划中的scan(扫描)算子可用于从数据源中读取数据,以实现数据访问,scan算子例如tablescan(表扫描)算子;在一种示例中,scan算子在SQL语句中表达数据源的信息可如图2所示,包括:DBLink(Database Link,数据库链接),schema(模式),table(表);其中,DBLink可用于映射数据源实例,schema是数据库的组织和结构,table为表;
目前scan算子在SQL语句中表达的数据源一般是Mysql、SQLServer、PostgreSQL等关系型数据库,像Redis等非关系型数据库无法通过上述方式进行表达,因此基于SQL访问非关系型数据库存在一定的困难;有鉴于此,本发明的发明人提出在SQL语句的表达基础上,映射非关系型数据库,并提供相应的数据访问流程,从而无需配置的实现基于SQL访问非关系型数据库,提升数据访问效率。
为便于说明,下面以非关系型数据库为Redis为例,对本发明实施例提供的数据访问方案进行说明,下述说明中涉及的Redis可被替换为任意一种的非关系型数据库,即Redis仅是非关系型数据库的一种可选形式。
在一种可选实现中,图3示出了本发明实施例中SQL语句的部分内容示例,如图3所示,SQL语句的部分内容可以包括:DBLink(数据库连接)标识,schema(模式)标识,table标识;在一种示例中,标识例如名称,相应的,DBLink标识可以为DBLink名称,schema标识可以为schema名称,table标识可以为table名称;
如图3所示,DBLink标识可用于指示Redis实例,在一种示例中,DBLink标识可直接使用Redis实例的标识;
schema标识可基于Redis数据库的序号进行确定,从而通过schema标识可指示Redis数据库;同时,本发明实施例可提供schema标识对应的结构化数据表,如通过schema标识命名的结构化数据表,以schema标识命名的结构化数据表可存储结构化的数据;
可选的,在确定schema标识的方面,本发明实施例可获取Redis的数据库总数,根据所述数据库总数,在Redis的各数据库序号前添加设定前缀,以实现确定schema标识;从而,通过schema标识中的数据库序号可指示相应序号的Redis数据库;
需要说明的是,Redis可在配置文件中指定“databases X”,databases的中文释义为数据库,其英文缩写可以是db,X表示Redis的数据库总数,例如X为16,则表示Redis存在标号为0至15的16个数据库,这些数据库可通过“select(选择)”命令切换;在一种示例中,本发明实施例可通过Config Get databases命令获取Redis的数据库总数(Redis的ConfigGet命令可用于获取Redis服务的配置参数),从而在Redis的各数据库序号前添加前缀“db”,确定出schema标识;例如,以schema标识为schema名称为例,Redis存在序号为0至15的16个数据库,则可重命名出“db0”至“db15”的schema名称,从而schema名称中的序号可映射相应序号的Redis数据库,例如可通过db1的schema名称映射序号为1的Redis数据库,其他Redis数据库的映射与此同理;
本发明实施例可设置多个table,各table的table标识可指示Redis的数据类型;在一种示例中,如图3所示,本发明实施例可为Redis建立6张table,标识分别为"all"、"string"、"list"、"set"、"hash"、"zset";其中,all的table对应Redis中所有key类型的数据集合,string的table对应Redis中key为string类型的数据集合,list的table对应Redis中key为List类型的数据集合,set的table对应Redis中key为set类型的数据集合,hash的table对应Redis中key为hash类型的数据集合,zset的table对应Redis中key为zset类型的数据集合;当然,图3所示各table标识对应的table及所对应Redis的数据类型仅是一种可选示例,本发明实施例并不局限table的数量,以及对应Redis的数据类型的形式。
基于图3所示SQL语句的部分示例内容,本发明实施例可在获取SQL语句后通过本发明实施例提供的数据访问方法,实现基于SQL访问Redis数据库;可选的,图4示出了本发明实施例提供的数据访问方法的一种可选流程,参照图4,该流程可以包括:
步骤S10、获取SQL语句,所述SQL语句至少包括:目标DBLink标识,目标schema标识及目标table标识。
本发明实施例可在SQL语句中携带目标DBLink标识,目标schema标识及目标table标识,从而通过目标DBLink标识可指示需要访问数据的目标Redis实例,通过目标schema标识可指示目标Redis实例中需要访问数据的目标Redis数据库,通过目标table标识可指示所述目标Redis数据库中需要访问的目标数据类型。
步骤S11、根据所述目标DBLink标识指示的目标Redis实例,连接所述目标Redis实例的Redis数据库。
在一种可选实现中,DBLink标识可直接使用Redis实例标识,本发明实施例可根据所述SQL语句携带的目标DBLink标识确定目标Redis实例标识,从而获取所述目标Redis实例标识对应的目标Redis实例的数据库的连接信息(例如目标Redis实例的Redis数据库的地址、端口、密码等连接信息),进而根据所述连接信息,连接所述目标Redis实例的Redis数据库。
步骤S12、根据所述目标schema标识指示的目标Redis数据库,从连接的Redis数据库中选择目标Redis数据库。
在一种可选实现中,本发明实施例可解析所述SQL语句携带的目标schema标识,确定所述目标schema标识携带的目标Redis数据库序号,从而从连接的Redis数据库中选择与所述目标Redis数据库序号对应的目标Redis数据库;例如,本发明实施例在解析出所述目标schema标识携带的目标Redis数据库序号后,可通过select命令切换到所述目标Redis数据库序号对应的目标Redis数据库。
步骤S13、根据所述目标table标识指示的目标数据类型,从所述目标Redis数据库中读取与所述目标数据类型对应的目标数据。
在一种可选实现中,table的table标识可指示Redis的数据类型,本发明实施例可解析所述SQL语句携带的目标table标识,确定出所述目标table标识指示的目标数据类型,进而从所述目标Redis数据库中读取与所述目标数据类型对应的目标数据。
步骤S14、将所述目标数据结构化存储到所述目标schema标识对应的结构化数据表。
本发明实施例还定义有schema标识对应的结构化数据表,在读取所述目标数据后,本发明实施例可根据所述目标schema标识对应的结构化数据表的数据存储结构,将所述目标数据进行结构化存储,从而使得从目标Redis数据库中读取的非结构化的目标数据,转化为结构化数据,以使得最终访问得到的数据结果符合SQL结构化的数据结果。
在一种示例中,以SQL语句包括Redis1(目标DBLink标识的一种可选表示),db0(目标schema标识的一种可选表示),string(目标table标识的一种可选表示)为例,本发明实施例可基于SQL语句,从Redis1实例的标号为0的目标Redis数据库中,读取key为String类型的目标数据,并将目标数据在db0的结构化数据表中进行结构化存储,具体示例过程可以如下:
从SQL语句中解析到目标DBLink标识为Redis1,获取Redis1实例的Redis数据库的地址、端口、密码等连接信息,根据所述连接信息连接上Redis1实例的Redis数据库;
解析db0,得到目标Redis数据库的标号为0,通过select命令从连接的Redis1实例的Redis数据库中,切换到标号为0的目标Redis数据库;
解析目标table标识确定目标数据类型为string,从目标Redis数据库读取string类型的目标数据;
将string类型的目标数据结构化存储到db0对应的结构化数据表中。
可以看出,本发明实施例提供的数据访问方法,可对SQL语句进行改进,在SQL语句中至少包括目标DBLink标识,目标schema标识及目标table标识,从而通过目标DBLink标识指示需要访问数据的目标非关系型数据库实例(如目标Redis实例),通过目标schema标识指示目标非关系型数据库实例中需要访问数据的目标数据库(如目标Redis数据库),通过目标table标识指示目标数据库中需要访问的目标数据类型;
进而,在对非关系型数据库进行数据访问时,本发明实施例可根据所述目标DBLink标识指示的目标非关系型数据库实例,连接所述目标非关系型数据库实例的数据库,根据所述目标schema标识指示的目标数据库,从所连接的所述目标非关系型数据库实例的数据库中选择目标数据库,根据所述目标table标识指示的目标数据类型,从所述目标数据库中读取与所述目标数据类型对应的目标数据,从而实现从非关系型数据库中读取数据;为使得最终访问得到的数据结果符合SQL结构化的数据结果,本发明实施例可进一步在所述目标schema标识对应的结构化数据表中,结构化存储所述目标数据,从而实现将读取的非结构化的目标数据进行结构化存储,实现基于SQL访问非关系型数据库。
本发明实施例提供的数据访问方法,通过改进SQL语句的表达,可通过SQL语句携带的目标DBLink标识,目标schema标识及目标table标识,确定需要访问数据的目标非关系型数据库实例中的目标数据库,从而从该目标数据库中读取目标数据类型的目标数据,实现从非关系型数据库实例中读取非结构化的目标数据;进而将所述目标数据在目标schema标识对应的结构化数据表中进行结构化存储,使得最终访问得到的数据结果符合SQL结构化的数据结果,实现基于SQL访问非关系型数据库的目的。本发明实施例提供的数据访问方法可通过改进SQL语句的表达,自动为任意版本的非关系型数据库建立映射,并提供相应改进的数据访问流程实现数据访问,从而可无需配置的基于SQL访问非关系型数据库,提升数据访问效率。
作为一种可选实现,本发明实施例可在确定目标数据类型后,通过图5所示流程从目标Redis数据库中读取与所述目标数据类型对应的目标数据,如图5所示,该流程可以包括:
步骤S20、遍历目标Redis数据库中的key。
可选的,本发明实施例可通过scan(扫描)命令遍历目标Redis数据库中的key(键)。
步骤S21、获取遍历到的key的数据类型。
可选的,对于任一遍历到的key,本发明实施例可通过type命令获取key的数据类型。
步骤S22、若遍历到的key的数据类型不为目标数据类型,继续遍历,返回步骤S21。
步骤S23、若遍历到的key的数据类型为目标数据类型,使用与所述目标数据类型相应的数据获取命令,获取遍历到的key对应的数据,以得到所述目标数据。
可选的,如果遍历到的key的数据类型为目标数据类型,本发明实施例可使用目标数据类型相应的数据获取命令,获取遍历到的key对应的数据,该遍历到的key对应的数据可以作为目标数据。需要说明的是,获取不同数据类型使用的数据获取命令可能不同,例如获取string类型数据可以使用get命令获取,获取list类型数据可以使用lrange命令获取。
本发明的发明人发现,目前基于presto所实现的基于SQL访问Redis数据库的方式,仅能支持读取Redis中的hash和string类型的数据,而对于string、list、hash、set、zset等主流类型数据均无法支持,本发明实施例可通过设置多个table标识的table以及图5所示的流程,实现对这些主流类型数据的读取支持;在一种示例中,table标识可以包括如下至少一项"all"、"string"、"list"、"set"、"hash"、"zset";
其中,all的table对应Redis中所有类型的数据集合,string的table对应Redis中key为string类型的数据集合,list的table对应Redis中key为List类型的数据集合,set的table对应Redis中key为set类型的数据集合,hash的table对应Redis中key为hash类型的数据集合,zset的table对应Redis中key为zset类型的数据集合;
可选的,基于图5所示流程,本发明实施例可实现对非关系型数据库中主流类型数据的读取,示例的,针对目标Redis数据库中任一类型的数据的读取过程的示例可如图6所示,主要分为从目标Redis数据库中读取string、list、set、hash、zset及all类型的数据:
一、在目标数据类型为string,从目标Redis数据库中读取string的数据时,本发明实施例可采用如下过程实现:采用scan命令遍历目标Redis数据库中的key;采用type命令获取遍历到的key的数据类型;如果遍历到的key的数据类型不为string,继续遍历,获取下一遍历到的key;如果遍历到的key的数据类型为string,采用get命令获取相应数据;
二、在目标数据类型为list,从目标Redis数据库中读取list的数据时,本发明实施例可采用如下过程实现:采用scan命令遍历目标Redis数据库中的key;采用type命令获取遍历到的key的数据类型;如果遍历到的key的数据类型不为list,继续遍历,获取下一遍历到的key;如果遍历到的key的数据类型为list,采用lrange命令获取相应数据;
三、在目标数据类型为set,从目标Redis数据库中读取set的数据时,本发明实施例可采用如下过程实现:采用scan命令遍历目标Redis数据库中的key;采用type命令获取遍历到的key的数据类型;如果遍历到的key的数据类型不为set,继续遍历,获取下一遍历到的key;如果遍历到的key的数据类型为set,采用smembers命令获取相应数据;
四、在目标数据类型为hash,从目标Redis数据库中读取hash的数据时,本发明实施例可采用如下过程实现:采用scan命令遍历目标Redis数据库中的key;采用type命令获取遍历到的key的数据类型;如果遍历到的key的数据类型不为hash,继续遍历,获取下一遍历到的key;如果遍历到的key的数据类型为hash,采用hgetALL命令获取相应数据;
五、在目标数据类型为zset,从目标Redis数据库中读取zset的数据时,本发明实施例可采用如下过程实现:采用scan命令遍历目标Redis数据库中的key;采用type命令获取遍历到的key的数据类型;如果遍历到的key的数据类型不为zset,继续遍历,获取下一遍历到的key;如果遍历到的key的数据类型为zset,采用zrangeWithScores命令获取相应数据;
六、在目标数据类型为all,即从目标Redis数据库中读取所有数据类型的数据时,本发明实施例可采用如下过程实现:采用scan命令遍历目标Redis数据库中的key;采用type命令获取遍历到的key的数据类型;根据遍历到的key的数据类型,采用相应的数据获取命令,获取遍历到的key对应的数据;可选的,不同数据类型所使用的数据获取命令可参照上文获取string、list、set、hash、zse类型数据所使用的数据获取命令。
需要说明的是,上述说明的数据类型仅是一种可选示例,本发明实施例还可支持扩展其他数据类型,并不局限上述示例的数据类型。
在获取目标数据后,本发明实施例可基于目标schema标识对应的结构化数据表,将目标数据进行结构化存储;在一种可选实现中,所述结构化数据表可以包括设定的多个字段,本发明实施例可将目标数据的内容转化为与所述多个字段相应的字段内容,实现将目标数据进行结构化存储;
示例的,所述多个字段可以例如:key(键),index(索引),value(值),score(分数),expire time(过期时间),data type(数据类型);相应的,结构化数据表的结构可以如下表1所示:
key index value score expire time data type
表1
可选的,本发明实施例可基于表1的结构化数据表,将string类型的目标数据进行结构化存储,以string类型的目标数据为“my Key”->“my Value”为例,string类型的目标数据的结构化存储形式可以如下表2所示:
Figure BDA0002296525450000141
表2
其中,null(空值)表示,该字段在某种数据类型的数据中不存在取值,如表2所示中,index和score的字段在string类型的数据中不存在取值,因此以null标识。
可选的,本发明实施例可基于表1的结构化数据表,将list类型的目标数据进行结构化存储,以list类型的目标数据为“myList”->“[1,2,3]”为例,list类型的目标数据的结构化存储形式可以如下表3所示:
Figure BDA0002296525450000142
表3
可选的,本发明实施例可基于表1的结构化数据表,将hash类型的目标数据进行结构化存储,以hash类型的目标数据为“myHash”->“hashkey1”:“hashvalue1”;“hashkey2”:“hashvalue2”为例,hash类型的目标数据的结构化存储形式可以如下表4所示:
Figure BDA0002296525450000151
表4
可选的,本发明实施例可基于表1的结构化数据表,将set类型的目标数据进行结构化存储,以set类型的目标数据为“mySet”->setValue1,setValue2为例,set类型的目标数据的结构化存储形式可以如下表5所示:
Figure BDA0002296525450000152
表5
可选的,本发明实施例可基于表1的结构化数据表,将zset类型的目标数据进行结构化存储,以zset类型的目标数据为“myZSet”–>zsetValue1(100),zetValue2(50)为例,其中,a(b)表示value是a,score分数为b;则zset类型的目标数据的结构化存储形式可以如下表6所示:
Figure BDA0002296525450000153
Figure BDA0002296525450000161
表6
可见,所述结构化数据表可以包括设定的多个字段,本发明实施例可将目标数据的内容转化为与所述多个字段相应的字段内容,其中,字段在目标数据的内容中不存在取值时,确定相应字段内容为空值。进一步,通过设置结构化数据表中包含expire time的字段,本发明实施例可实现支持读取数据的key的过期时间。
在一种可选实现中,进一步,本发明实施例可在优化逻辑执行计划阶段,提供优化逻辑执行计划的方案,本发明实施例提供的优化逻辑执行计划的方案例如project(计划)下推、谓词下推、limit(限制)下推等;具体的,可使用project下推,将project节点信息下推到扫描scan节点,使用谓词下推,将filter节点的谓词信息下推到扫描scan节点,使用limit下推,将limit节点的limit信息下推到扫描scan节点,其中,所述scan节点用于遍历目标数据库中的key;
从而,通过这些优化逻辑执行计划的方案,本发明实施例可在目标Redis数据库中不需要读取所有的key/value数据,即可实现获取所需的key;例如:在SQL语句带有"wherekey='XXX'"的谓词时,可以不需要执行scan命令,而是以type命令获取相应的key;
示例的,以从Redis1实例的标号为1的目标Redis数据库中,读取所有类型数据为例,图7示出了使用project下推前后的数据读取对比示意图;如图7所示,在使用project下推前,在scan节点,需要采用scan命令遍历目标Redis数据库,然后在project节点执行计划,在output节点输出读取的数据;而在使用project下推后,project节点信息可下推到scan节点实现。
以从Redis1实例的标号为1的目标Redis数据库中,读取特定key的数据为例,图8示出了使用谓词下推前后的数据读取对比示意图,如图8所示,在使用谓词下推前,需要在scan节点使用scan命令遍历目标Redis数据库的所有key,然后在filter节点使用type命令获取key的数据类型,筛选出特定key,最后通过key的不同数据类型,使用不同的数据获取命令来获取数据的值;在使用谓词下推后,filter和scan相结合,则可在scan节点确定出filter的数据类型筛选条件,直接通过type命令获取特定key,通过相应数据获取命令来获取数据的值,而不需遍历所有的key。
以从Redis1实例的标号为1的目标Redis数据库中,读取符合限制条件的key的数据为例,图9示出了使用limit下推前后的数据读取对比示意图,如图9所示,在使用limit下推前,需要在scan节点使用scan命令遍历目标Redis数据库的所有key,然后在limit节点获取符合限制条件的key,进而根据不同key的数据类型,使用不同的数据获取命令来获取数据的值;在使用limit下推后,limit和scan相结合,则可在scan节点确定出limit的限制条件,直接通过scan命令获取符合限制条件的key,然后通过相应数据获取命令来获取数据的值。
可见,本发明实施例通过提供project下推、谓词下推、limit下推等优化逻辑执行计划的方案,能够使得数据读取性能更快,进一步提升数据读取效率。
在一种应用示例中,以从Redis1实例的标号为6的Redis数据库,读取string数据为例,相应的SQL语句可以包括“Redis1”,“db6”,“string”,其中,Redis1为目标DBLink标识的一种可选表示,指示Redis1实例;db6为目标schema标识的一种可选表示,指示标号6的Redis数据库;string为目标table标识的一种可选表示,指示string的数据类型;基于该SQL语句,图10示出了本发明实施例提供的应用示例的数据访问过程,如图10所示,该过程可以包括:
步骤S01、连接Redis1实例的Redis数据库。
步骤S02、从连接的Redis数据库切换到标号6的Redis数据库。
步骤S03、从标号6的Redis数据库中读取string类型的数据。
可选的,本发明实施例可采用scan命令遍历标号6的Redis数据库中的key;采用type命令获取遍历到的key的数据类型;如果遍历到的key的数据类型不为string,继续遍历,获取下一遍历到的key;如果遍历到的key的数据类型为string,采用get命令获取相应数据。
步骤S04、将读取的string类型的数据,结构化存储到db6的结构化数据表。
可选的,进一步,上述过程中,本发明实施例可在步骤S03执行之时,使用project下推、谓词下推、limit下推等方式进行优化。
需要说明的是,上述虽然是以基于SQL访问非关系型数据库,来进行本发明实施例的方案说明,但上述说明也仅是可选方式,本发明实施例并不局限于关系型数据库和非关系型数据库统一基于SQL实现数据访问,也就是说,在可选实现中,结构化查询语言语句仅是本发明实施例提供使用的查询语句的可选形式,非关系型数据库实例仅是本发明实施例需访问的数据库实例的可选形式,结构化数据表也仅是存储目标数据的数据表的可选形式;本发明实施例对于任意不同类型的数据库,只要能够通过本发明实施例提供的方式,以查询语句的目标数据库链接标识、目标模式标识及目标表标识映射数据库,均是能够实现无需配置的基于查询语句访问数据库,使得不同类型的数据库,能够使用统一的查询语句进行数据访问,提升数据访问效率。
本发明实施例提供的数据访问方法可通过改进查询语句的表达方式,实现为数据库建立映射,并提供相应改进的数据访问流程实现数据访问,从而可无需配置的基于查询语句访问数据库,使得不同类型的数据库,能够使用统一的查询语句进行数据访问,提升数据访问效率。
上文描述了本发明实施例提供的多个实施例方案,各实施例方案介绍的各可选方式可在不冲突的情况下相互结合、交叉引用,从而延伸出多种可能的实施例方案,这些均可认为是本发明实施例披露、公开的实施例方案。
下面对本发明实施例提供的数据访问装置进行介绍,下文描述的数据访问装置可以认为是,为实现本发明实施例提供的数据访问方法所需设置的功能模块架构。下文描述的数据访问装置的内容,可与上文描述的数据访问方法的内容相互对应参照。
图11为本发明实施例提供的数据访问装置的一种可选框图,参照图11,该数据访问装置可以包括:
语句获取模块100,用于获取查询语句,所述查询语句至少包括:目标数据库链接标识,目标模式标识及目标表标识;
数据库连接模块110,用于根据所述目标数据库链接标识指示的数据库实例,连接所述数据库实例的数据库;
数据库选择模块120,用于根据所述目标模式标识指示的目标数据库,从连接的数据库中选择目标数据库;
数据读取模块130,用于根据所述目标表标识指示的目标数据类型,从所述目标数据库中读取与所述目标数据类型对应的目标数据;
存储模块140,用于将所述目标数据存储到所述目标表标识所对应的数据表。
可选的,数据库选择模块120,用于根据所述目标模式标识指示的目标数据库,从连接的数据库中选择目标数据库包括:
确定所述目标模式标识携带的目标数据库序号,从连接的数据库中选择与所述目标数据库序号对应的目标数据库。
可选的,图12示出了本发明实施例提供的数据访问装置的另一框图,结合图11和图12所示,该数据访问装置还可以包括:
标识确定模块150,用于获取数据库总数,根据所述数据库总数,在各数据库的序号前添加设定前缀,以确定模式标识。
可选的,数据读取模块130,用于根据所述目标表标识指示的目标数据类型,从所述目标数据库中读取与所述目标数据类型对应的目标数据包括:
遍历目标数据库中的键;
获取遍历到的键的数据类型;
若遍历到的键的数据类型为目标数据类型,使用与所述目标数据类型相应的数据获取命令,获取遍历到的键对应的目标数据。
可选的,数据库连接模块110,用于根据所述目标数据库链接标识指示的数据库实例,连接所述数据库实例的数据库包括:
根据所述目标数据库链接标识确定数据库实例标识;
获取所述数据库实例标识对应的数据库实例的数据库的连接信息,根据所述连接信息,连接所述数据库实例的数据库。
可选的,所述数据表包括设定的多个字段;存储模块140,用于将所述目标数据存储到所述目标表标识对应的数据表包括:
将所述目标数据的内容转化为与所述多个字段相应的字段内容,其中,字段在目标数据的内容中不存在取值时,确定相应字段内容为空值。
可选的,所述多个字段可以包括:key,index,value,score,expire time,datatype。
可选的,本发明实施例提供的数据访问装置还可以用于:
使用project下推,将project节点信息下推到scan节点,其中所述scan节点用于遍历目标数据库中的key;
和/或,使用谓词下推,将filter节点的filter节点信息中的谓词信息下推到scan节点;
和/或,使用limit下推,将limit节点的limit信息下推到scan节点。
可选的,所述查询语句为结构化查询语言语句,所述数据库实例为非关系型数据库实例,所述数据表为结构化数据表。
本发明实施例提供的数据访问装置可以无需配置的基于查询语句访问数据库,可提升数据访问效率。
本发明实施例还提供一种服务器,该服务器可以用于数据服务,该服务器可以设置程序形式的上述数据访问装置,以实现本发明实施例提供的数据访问方法。
可选的,本发明实施例提供的服务器的一种可选硬件框图可如图13所示,包括:至少一个处理芯片1,至少一个通信接口2,至少一个存储器3和至少一个通信总线4;
处理芯片1、通信接口2、存储器3通过通信总线4完成相互间的通信;
可选的,通信接口2可以为通信模块的接口;
处理芯片1可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
其中,存储器3存储有计算机可执行指令,处理芯片1调用存储器3所存储的计算机可执行指令,以执行本发明实施例提供的数据访问方法。
本发明实施例还提供一种数据库,该数据库可以是服务器数据库,该数据库可以被配置为执行本发明实施例提供的数据访问方法。
本发明实施例还提供一种可读存储介质,该可读存储介质可以存储执行本发明实施例提供的数据访问方法的计算机可执行指令。
虽然本发明实施例披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。

Claims (13)

1.一种数据访问方法,其特征在于,包括:
获取查询语句,所述查询语句至少包括:目标数据库链接标识,目标模式标识及目标表标识;
根据所述目标数据库链接标识指示的数据库实例,连接所述数据库实例的数据库;
根据所述目标模式标识指示的目标数据库,从连接的数据库中选择目标数据库;
根据所述目标表标识指示的目标数据类型,从所述目标数据库中读取与所述目标数据类型对应的目标数据;
将所述目标数据存储到所述目标表标识所对应的数据表。
2.根据权利要求1所述的数据访问方法,其特征在于,所述根据所述目标模式标识指示的目标数据库,从连接的数据库中选择目标数据库包括:
确定所述目标模式标识携带的目标数据库序号,从连接的数据库中选择与所述目标数据库序号对应的目标数据库。
3.根据权利要求2所述的数据访问方法,其特征在于,还包括:
获取数据库总数,根据所述数据库总数,在各数据库的序号前添加设定前缀,以确定模式标识。
4.根据权利要求1所述的数据访问方法,其特征在于,所述根据所述目标表标识指示的目标数据类型,从所述目标数据库中读取与所述目标数据类型对应的目标数据包括:
遍历目标数据库中的键;
获取遍历到的键的数据类型;
若遍历到的键的数据类型为目标数据类型,使用与所述目标数据类型相应的数据获取命令,获取遍历到的键对应的目标数据。
5.根据权利要求1所述的数据访问方法,其特征在于,所述根据所述目标数据库链接标识指示的数据库实例,连接所述数据库实例的数据库包括:
根据所述目标数据库链接标识确定数据库实例标识;
获取所述数据库实例标识对应的数据库实例的数据库的连接信息,根据所述连接信息,连接所述数据库实例的数据库。
6.根据权利要求1所述的数据访问方法,其特征在于,所述数据表包括设定的多个字段;所述将所述目标数据存储到所述目标表标识所对应的数据表包括:
将所述目标数据的内容转化为与所述多个字段相应的字段内容,其中,字段在目标数据的内容中不存在取值时,确定相应字段内容为空值。
7.根据权利要求6所述的数据访问方法,其特征在于,所述多个字段包括:键,索引,值,分数,过期时间,及数据类型。
8.根据权利要求4所述的数据访问方法,其特征在于,还包括:
使用计划下推,将计划节点信息下推到扫描节点,其中所述扫描节点用于遍历目标数据库中的键;
和/或,使用谓词下推,将过滤节点的过滤节点信息中的谓词信息下推到扫描节点;
和/或,使用限制下推,将限制节点的限制信息下推到扫描节点。
9.根据权利要求1-8任一项所述的数据访问方法,其特征在于,所述查询语句为结构化查询语言语句,所述数据库实例为非关系型数据库实例,所述数据表为结构化数据表。
10.一种数据访问装置,其特征在于,包括:
语句获取模块,用于获取查询语句,所述查询语句至少包括:目标数据库链接标识,目标模式标识及目标表标识;
数据库连接模块,用于根据所述目标数据库链接标识指示的数据库实例,连接所述数据库实例的数据库;
数据库选择模块,用于根据所述目标模式标识指示的目标数据库,从连接的数据库中选择目标数据库;
数据读取模块,用于根据所述目标表标识指示的目标数据类型,从所述目标数据库中读取与所述目标数据类型对应的目标数据;
存储模块,用于将所述目标数据存储到所述目标表标识所对应的数据表。
11.一种服务器,其特征在于,包括至少一个存储器和至少一个处理芯片;所述存储器存储计算机可执行指令,所述处理芯片调用所述计算机可执行指令,执行权利要求1-9任一项所述的数据访问方法。
12.一种数据库,其特征在于,所述数据库被配置为执行权利要求1-9任一项所述的数据访问方法。
13.一种可读存储介质,其特征在于,所述可读存储介质存储执行权利要求1-9任一项所述的数据访问方法的计算机可执行指令。
CN201911203922.1A 2019-11-29 2019-11-29 一种数据访问方法、装置、服务器及可读存储介质 Pending CN112883048A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911203922.1A CN112883048A (zh) 2019-11-29 2019-11-29 一种数据访问方法、装置、服务器及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911203922.1A CN112883048A (zh) 2019-11-29 2019-11-29 一种数据访问方法、装置、服务器及可读存储介质

Publications (1)

Publication Number Publication Date
CN112883048A true CN112883048A (zh) 2021-06-01

Family

ID=76038835

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911203922.1A Pending CN112883048A (zh) 2019-11-29 2019-11-29 一种数据访问方法、装置、服务器及可读存储介质

Country Status (1)

Country Link
CN (1) CN112883048A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114661963A (zh) * 2022-05-25 2022-06-24 阿里巴巴达摩院(杭州)科技有限公司 模式链接处理方法、装置以及计算机可读存储介质
WO2023116036A1 (zh) * 2021-12-20 2023-06-29 华为云计算技术有限公司 一种存储系统、数据访问方法、装置以及设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102033912A (zh) * 2010-11-25 2011-04-27 北京北纬点易信息技术有限公司 一种分布式数据库访问方法及系统
CN102193922A (zh) * 2010-03-04 2011-09-21 杭州华三通信技术有限公司 一种对数据库进行访问的方法和装置
FR2967281A1 (fr) * 2010-11-10 2012-05-11 Brainwave Sarl Procede de formulation de criteres de recherche et procede d'extraction de donnees d'une base de donnees
CN103902565A (zh) * 2012-12-26 2014-07-02 阿里巴巴集团控股有限公司 一种数据访问关系的确定方法及装置
CN106934062A (zh) * 2017-03-28 2017-07-07 广东工业大学 一种查询elasticsearch的实现方法及系统
CN107463693A (zh) * 2017-08-11 2017-12-12 深圳乐信软件技术有限公司 一种数据处理方法、装置、终端及计算机可读存储介质
US20180218031A1 (en) * 2017-01-31 2018-08-02 Salesforce.com. inc. Systems, methods, and apparatuses for implementing dynamic macros within a multi-tenant aware structured query language
CN109284326A (zh) * 2018-11-26 2019-01-29 北京中创碳投科技有限公司 一种数据库访问方法和装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102193922A (zh) * 2010-03-04 2011-09-21 杭州华三通信技术有限公司 一种对数据库进行访问的方法和装置
FR2967281A1 (fr) * 2010-11-10 2012-05-11 Brainwave Sarl Procede de formulation de criteres de recherche et procede d'extraction de donnees d'une base de donnees
CN102033912A (zh) * 2010-11-25 2011-04-27 北京北纬点易信息技术有限公司 一种分布式数据库访问方法及系统
CN103902565A (zh) * 2012-12-26 2014-07-02 阿里巴巴集团控股有限公司 一种数据访问关系的确定方法及装置
US20180218031A1 (en) * 2017-01-31 2018-08-02 Salesforce.com. inc. Systems, methods, and apparatuses for implementing dynamic macros within a multi-tenant aware structured query language
CN106934062A (zh) * 2017-03-28 2017-07-07 广东工业大学 一种查询elasticsearch的实现方法及系统
CN107463693A (zh) * 2017-08-11 2017-12-12 深圳乐信软件技术有限公司 一种数据处理方法、装置、终端及计算机可读存储介质
CN109284326A (zh) * 2018-11-26 2019-01-29 北京中创碳投科技有限公司 一种数据库访问方法和装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
吕剑虹;陈圆;徐良发;: "利用结构化语言实现对数据库灵活查询功能", 电脑编程技巧与维护, no. 22, 18 November 2013 (2013-11-18) *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023116036A1 (zh) * 2021-12-20 2023-06-29 华为云计算技术有限公司 一种存储系统、数据访问方法、装置以及设备
CN114661963A (zh) * 2022-05-25 2022-06-24 阿里巴巴达摩院(杭州)科技有限公司 模式链接处理方法、装置以及计算机可读存储介质

Similar Documents

Publication Publication Date Title
WO2020233367A1 (zh) 区块链数据存储和查询方法、装置、设备及存储介质
CN111061757B (zh) 数据库的语言转换方法、装置、电子设备及存储介质
CN107491561B (zh) 一种基于本体的城市交通异构数据集成系统及方法
Vajk et al. Denormalizing data into schema-free databases
CN106934062A (zh) 一种查询elasticsearch的实现方法及系统
Chung et al. JackHare: a framework for SQL to NoSQL translation using MapReduce
CN107038222B (zh) 数据库缓存实现方法及其系统
US20110246448A1 (en) Database distribution system and methods for scale-out applications
CN105868204A (zh) 一种转换Oracle脚本语言SQL的方法及装置
CN110688397B (zh) 一种基于sql的分布式数据统一访问系统及方法
US10360002B2 (en) Method, apparatus, and computer-readable medium for generating an alternative implementation of a program on one or more engines
CN110866029B (zh) sql语句构建方法、装置、服务器及可读存储介质
WO2019015364A1 (zh) 执行结构化查询语言sql指令的方法和装置
CN112579610A (zh) 多数据源结构分析方法、系统、终端设备及存储介质
US9053207B2 (en) Adaptive query expression builder for an on-demand data service
CN112883048A (zh) 一种数据访问方法、装置、服务器及可读存储介质
CN107077496A (zh) 用于索引编译以优化索引使用的系统、方法和设备
CN109815240A (zh) 用于管理索引的方法、装置、设备和存储介质
CN113886395A (zh) 基于openGauss平台的高速数据导入导出方法
CN113468204A (zh) 一种数据查询方法、装置、设备、介质
CN113407565B (zh) 跨库数据查询方法、装置和设备
CN109408539B (zh) 数据操作方法、装置、服务器和存储介质
CN115114325B (zh) 数据查询方法、装置、电子设备以及存储介质
CN113779068B (zh) 数据查询方法、装置、设备及存储介质
CN111488360B (zh) 一种行级安全的实现方法、装置、设备及存储介质

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