CN112328700A - 一种分布式数据库 - Google Patents
一种分布式数据库 Download PDFInfo
- Publication number
- CN112328700A CN112328700A CN202011356754.2A CN202011356754A CN112328700A CN 112328700 A CN112328700 A CN 112328700A CN 202011356754 A CN202011356754 A CN 202011356754A CN 112328700 A CN112328700 A CN 112328700A
- Authority
- CN
- China
- Prior art keywords
- data
- sql
- node module
- query
- request
- 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
Links
- 239000012634 fragment Substances 0.000 claims abstract description 116
- 238000012545 processing Methods 0.000 claims abstract description 53
- 238000004458 analytical method Methods 0.000 claims description 30
- 230000015654 memory Effects 0.000 claims description 13
- 238000005457 optimization Methods 0.000 claims description 8
- 238000003780 insertion Methods 0.000 claims description 6
- 230000037431 insertion Effects 0.000 claims description 6
- 238000012217 deletion Methods 0.000 claims description 3
- 230000037430 deletion Effects 0.000 claims description 3
- 238000012546 transfer Methods 0.000 claims description 3
- 238000007726 management method Methods 0.000 description 89
- 230000006870 function Effects 0.000 description 15
- 238000004364 calculation method Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 6
- 238000013467 fragmentation Methods 0.000 description 6
- 238000006062 fragmentation reaction Methods 0.000 description 6
- 238000000034 method Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 238000004140 cleaning Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种分布式数据库,所述分布式数据库把单机数据库分成三层:所述SQL节点模块、所述管理节点模块和所述存储节点模块,这样,数据分散在多个节点上,SQL节点模块得到SQL请求后,通过管理节点模块得到数据分片位置,在存储节点模块中一个或多个节点写入或得到数据后再在SQL节点模块汇总,实现了openGauss数据库分布式处理数据的功能。
Description
技术领域
本申请涉及数据处理领域,尤其涉及一种分布式数据库。
背景技术
在数据库技术高速发展的当下,人们对于数据库的处理能力要求越来越高,为了提高数据库的处理性能,分布式数据库越来越广泛地应用到人们的日常生活中。然而,现有的OpenGauss数据库只有集中式数据库,没有分布式数据库,故此,现有的OpenGauss数据库尚不能满足用户日常需求。
发明内容
本申请提供实现了一种分布式数据库,以实现openGauss数据库分布式处理数据的功能。
本申请提供了一种分布式数据库,所述分布式数据库包括SQL节点模块、管理节点模块、存储节点模块;
所述SQL节点模块,用于接收客户端发送的SQL请求,对所述SQL请求执行SQL解析、优化处理,生成执行请求,并向所述管理节点模块发送所述执行指令;根据所述管理节点模块返回的所述执行请求对应的全局事务标识和数据分片位置,生成执行指令,并将所述执行指令向所述存储节点模块发送;将所述存储节点模块返回的所述执行指令的处理结果向所述客户端返回;
所述管理节点模块,用于根据所述执行请求,确定所述执行请求对应的全局事务标识和数据分片位置,并将所述执行请求对应的全局事务标识和数据分片位置向所述SQL节点模块返回;
所述存储节点模块,用于根据所述执行指令,对所述存储节点模块中所存储的数据进行处理,得到所述执行指令的处理结果。
可选的,所述分布式数据库还包括:弗林克(Flink)模块;
所述Flink模块,用于响应分析指令,并向所述管理节点模块发送所述查询请求;根据所述管理节点模块返回的所述查询请求对应的数据分片位置,生成查询指令,并将所述查询指令向所述存储节点模块发送;根据所述存储节点模块返回的所述查询指令的查询结果进行分析;
所述管理节点模块,还用于根据所述查询请求,查询所述所述查询请求对应的数据分片位置,并将所述查询请求对应的数据分片位置向所述Flink模块返回;
所述存储节点模块,用于根据所述查询指令,对所述存储节点模块中所存储的数据进行查询,得到所述查询指令的查询结果。
可选的,所述SQL节点模块具体用于:接收客户端发送的SQL请求,对所述SQL请求进行语法词法解析,得到SQL语句;判断所述SQL语句是否合法,若SQL语句不合法,直接向所述客户端返回错误信息,若所述SQL语句没有错误,则判断所述SQL语句是否为查询语句;若所述SQL语句为查询语句,则判断所述SQL语句对应的查询数据是否在内存中的缓存中,若所述SQL语句对应的查询数据在内存中的缓存中,从所述缓存中获取所述SQL语句对应的查询数据,并将所述SQL语句对应的查询数据返回给所述客户端,若所述SQL语句对应的查询数据不在内存中的缓存中,生成所述SQL语句对应的执行请求,并向所述管理节点模块发送所述执行指令。
可选的,所述SQL节点模块还具体用于:若所述SQL语句不为查询语句,则判断所述SQL语句是否为删除语句;若所述SQL语句为删除语句,访问所述管理节点模块取得所述SQL语句对应的事务标识,并将所述事务数据增加删除标志;若所述SQL语句不是删除语句,则确定所述SQL语句为插入语句,访问所述管理节点模块取得所述SQL语句对应的事务标识,并确定所要插入的数据片位置,判断所要插入的数据片中数据是否已满,若所要插入的数据片中数据已满,访问所述管理节点模块,在所述管理节点模块中分配一个新的数据片位置;
所述存储节点模块,还用于利用Raft协议在所要插入的数据片位置插入数据,并将插入结果向所述SQL节点模块返回,以便所述SQL节点模块将所述插入结果返回给所述客户端;若所插入的数据片位置为行存储数据,则数据插入行存储数据后,利用Raft Learner协议将该数据异步复制为列存储数据。
可选的,所述管理节点模块,具体用于根据所述执行请求,分配所述执行请求对应的全局事务标识,以及基于元数据字典信息查询所述执行请求对应的数据分片位置,并将所述执行请求对应的全局事务标识和数据分片位置向所述SQL节点模块返回;所述管理节点模块,具体用于根据所述查询请求,基于元数据字典信息查询所述查询请求对应的数据分片位置,并将所述查询请求对应的数据分片位置向所述Flink模块返回。
可选的,所述SQL节点模块,具体用于获取所述管理节点模块返回的所述执行请求对应的数据分片位置,判断所述数据分片位置是否存储在所述存储节点模块中的同一数据节点,若所述数据分片位置存储在所述存储节点模块中的同一数据节点,生成执行指令,并将所述执行指令向所述存储节点模块发送,以便所述存储节点模块在该数据节点获取所述执行指令的处理结果,并且所述SQL节点模块将所述执行指令的处理结果向所述客户端返回,以及存储在缓存中;若所述数据分片位置存储在所述存储节点模块中的多个数据节点,生成执行指令,并将所述执行指令向所述存储节点模块发送,以便所述存储节点模块并行在所述多个数据节点获取所述执行指令的处理结果,并且所述SQL节点模块将所述执行指令的处理结果向所述客户端返回,以及存储在缓存中;
所述存储节点模块,还用于统计每个数据分片的使用情况,并将每个数据分片的使用情况写入到所述管理节点模块。
可选的,所述管理节点模块,还用于定时扫描所述存储节点模块中每个数据分片的使用情况;并针对每个数据分片的使用情况和参数阈值,判断该数据分片是否过热,若该数据分片不过热,不做任何处理,若该数据分片过热,针对该数据分片分配一个或多个新的分片位置,并发送分裂指令和分片位置到所述存储节点模块,以便将该数据分片分裂且迁移部分数据到分配所述一个或多个新的分片位置中。
可选的,所述Flink模块具体用于:接收客户端发送的SQL请求,对所述SQL请求进行语法词法解析,得到SQL语句;判断所述SQL语句是否合法,若SQL语句不合法,直接向所述客户端返回错误信息,若所述SQL语句合法,则判断所述SQL语句对应的查询数据是否在内存中的缓存中,若所述SQL语句对应的查询数据在内存中的缓存中,从所述缓存中获取所述SQL语句对应的查询数据,并将所述SQL语句对应的查询数据的分析结果返回给所述客户端,若所述SQL语句对应的查询数据不在内存中的缓存中,生成所述SQL语句对应的所述查询请求,并向所述管理节点模块发送所述查询请求。
可选的,所述SQL节点模块包括若干个openGuass SQL节点,所述存储节点模块包括若干个openGuass存储节点。
可选的,所述SQL请求的类型包括:数据查询SQL请求、数据增加SQL请求、数据删除SQL请求和数据修改SQL请求。
由上述技术方案可以看出,本申请提供了一种分布式数据库,所述分布式数据库包括SQL节点模块、管理节点模块、存储节点模块;所述SQL节点模块,用于接收客户端发送的SQL请求,对所述SQL请求执行SQL解析、优化处理,生成执行请求,并向所述管理节点模块发送所述执行指令;根据所述管理节点模块返回的所述执行请求对应的全局事务标识和数据分片位置,生成执行指令,并将所述执行指令向所述存储节点模块发送;将所述存储节点模块返回的所述执行指令的处理结果向所述客户端返回;所述管理节点模块,用于根据所述执行请求,确定所述执行请求对应的全局事务标识和数据分片位置,并将所述执行请求对应的全局事务标识和数据分片位置向所述SQL节点模块返回;所述存储节点模块,用于根据所述执行指令,对所述存储节点模块中所存储的数据进行处理,得到所述执行指令的处理结果。本实施例中,把单机数据库分成三层:所述SQL节点模块、所述管理节点模块和所述存储节点模块,数据分散在多个节点上,SQL节点模块得到SQL请求后,通过管理节点模块得到数据分片位置,在存储节点模块中一个或多个节点写入或得到数据后再在SQL节点模块汇总,实现了openGauss数据库分布式处理数据的功能。
上述的非惯用的优选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
为了更清楚地说明本申请实施例或现有的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一实施例提供的一种分布式数据库的结构示意图;
图2为本申请一实施例提供的一种分布式数据库的结构示意图;
图3为本申请一实施例提供的一种分布式数据库的流程示意图;
图4为本申请一实施例提供的一种分布式数据库的流程示意图;
图5为本申请一实施例提供的一种分布式数据库的流程示意图;
图6为本申请一实施例提供的一种分布式数据库的流程示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合具体实施例及相应的附图对本申请的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
下面结合附图,详细说明本申请的各种非限制性实施方式。
参见图1,分布式数据库可以包括SQL节点模块(即SQL节点集群)、管理节点模块(即管理节点集群)、存储节点模块(即存储节点集群)。在一种实现方式中,分布式数据库还可以包括弗林克(Flink)模块(即Flink集群)。
如图2所示,SQL节点模块(即SQL节点集群模块)可以包括若干个SQL节点,SQL节点模块为多台计算机组成的计算层集群,可侧重配置高性能CPU,内存。SQL节点模块可对外公布SQL协议的接口,负责接受客户端的连接,执行SQL解析和优化,并最终生成分布式执行计划。SQL节点集群模块,此模块为计算层,SQL节点对外公布SQL协议的接口,负责接受客户端的连接,执行SQL解析和优化,并最终生成分布式执行计划。SQL节点得到SQL命令后,通过管理节点得到数据位置,在多个数据节点写入或得到数据后再在SQL节点汇总,返回给客户端。
如图2所示,管理节点模块(即管理节点集群模块)可以包括若干个管理节点,管理节点模块为多台计算机组成的管理、协调层集群,可侧重配置高性能CPU,内存。管理节点负责管理功能,存储元数据,并为分布式事务分配事务ID。此外,管理节点还根据数据分片使用统计信息,自动智能决定是否分裂热点数据分片,平衡工作负载。管理节点集群模块,此模块为调度、管理层,管理节点负责管理功能,存储元数据,并为分布式事务分配事务ID。此外管理节点还根据数据分片使用统计信息,自动智能决定是否分裂热点数据分片,平衡工作负载。管理节点返回事务ID和数据分片元信息给SQL节点集群模块,只传输数据分片元信息给Flink集群模块。管理节点也分配和返回数据分片元信息给数据节点,完成智能分片和数据写入。
如图2所示,存储节点模块(即存储节点集群模块)可以包括若干个行存储节点和列存储节点,存储节点模块为多台计算机组成的数据节点集群,可侧重配置高性能硬盘。数据节点负责同时提供行式和列式存储数据,提供智能数据分片和自动维护多副本。存储节点集群模块,此模块为数据层,行存储节点和列存储节点负责同时提供行式存储数据和列式存储数据,提供智能数据分片和自动维护多副本。数据节点集群模块返回数据给SQL集群模块。数据节点集群模块也会发送请求给管理节点得到新的数据分片元信息如位置等。
如图2所示,弗林克(Flink)模块(即Flink集群模块)可以包括Flink管理节点和若干个执行节点,Flink模块为多台计算机组成的Flink集群,可侧重配置高性能CPU,内存。Flink节点通过集成Apache Flink平台Flink SQL的分布式流计算技术来完成高效可水平扩展的分布式在线分析功能。Flink集群模块,Flink节点通过集成Apache Flink平台FlinkSQL的分布式流计算技术来完成高效可水平扩展的分布式在线分析功能。
这四种硬件集群之间通过高速网卡、网络相互通讯来实现高可用,高扩展的分布式在线事务处理数据库。上述四种节点都可以水平扩展为多个节点组成集群,各节点之间相互通讯来实现高可用,高扩展的分布式在线事务处理数据库。
在一种实现方式中,所述SQL节点模块,用于接收客户端发送的SQL请求,对所述SQL请求执行SQL解析、优化处理,生成执行请求,并向所述管理节点模块发送所述执行指令;根据所述管理节点模块返回的所述执行请求对应的全局事务标识和数据分片位置,生成执行指令,并将所述执行指令向所述存储节点模块发送;将所述存储节点模块返回的所述执行指令的处理结果向所述客户端返回。所述管理节点模块,用于根据所述执行请求,确定所述执行请求对应的全局事务标识和数据分片位置,并将所述执行请求对应的全局事务标识和数据分片位置向所述SQL节点模块返回。所述存储节点模块,用于根据所述执行指令,对所述存储节点模块中所存储的数据进行处理,得到所述执行指令的处理结果。
所述分布式数据库还包括:弗林克(Flink)模块;所述Flink模块,用于响应分析指令,并向所述管理节点模块发送所述查询请求;根据所述管理节点模块返回的所述查询请求对应的数据分片位置,生成查询指令,并将所述查询指令向所述存储节点模块发送;根据所述存储节点模块返回的所述查询指令的查询结果进行分析;所述管理节点模块,还用于根据所述查询请求,查询所述所述查询请求对应的数据分片位置,并将所述查询请求对应的数据分片位置向所述Flink模块返回;所述存储节点模块,用于根据所述查询指令,对所述存储节点模块中所存储的数据进行查询,得到所述查询指令的查询结果。
在一种实现方式中,所述SQL节点模块可以包括若干个openGuass SQL节点,所述存储节点模块包括若干个openGuass存储节点。所述SQL请求的类型包括:数据查询SQL请求、数据增加SQL请求、数据删除SQL请求和数据修改SQL请求。
本实施例可适用于基于openGauss实现智能数据分片的分布式数据库,并且同时具有在线事务处理和在线分析功能的方的情况。具体的,该方法包括:把openGauss分为四种不同的节点:管理,SQL和数据节点,加上提供在线分析功能的Flink节点,该架构可以通过软件和硬件的方式实现,并集成在设备中。
举例来说,如图3所示,在本实施例中,具体可以实施以下方式:
1、客户端发送数据查询、增删改请求给openGauss SQL节点集群。
2.SQL节点集群接受到客户端请求后,进行语法词法解析。如果有错误,直接返回错误及信息给客户端。没有错误,则向管理节点集群发送请求,查询所操作的数据分片位置。
3.管理节点集群收到SQL节点集群请求。如果需要事务,分配全局事务ID。查询元数据字典,返回需要操作的数据分片位置给SQL节点集群.
4.SQL节点集群拿到事务ID,和所需数据分片位置后,生成执行计划。根据数据分片位置,同时发请求到多个数据节点取得数据,或增删改数据。
5.数据节点根据执行计划,从行存或列存取得数据返回给SQL节点集群。如果是增删改数据,操作完openGauss行存数据后,会利用Raft Learner协议异步复制为列存数据。因为是异步,不影响行存事务的性能。
6.SQL节点集群收到数据分片后,根据执行计划,计算汇总取得结果,返回给客户端。
7.Flink集群是通过集成Apache Flink平台Flink SQL的分布式流计算技术来完成高效可水平扩展的分布式在线分析功能。Flink发送向管理节点集群发送请求,查询所操作的数据分片位置。
8.管理节点集群收到Flink集群请求,查询元数据字典,返回需要查询的数据分片位置给Flink集群。
9.Flink集群得到数据分片位置后,生成执行计划。根据数据分片位置,同时发请求到多个数据节点取得数据,
10.数据节点根据执行计划,主要从列存取得数据,有必要时也可从行存取得数据,返回给Flink集群。
11.Flink集群收到数据分片后,根据执行计划,计算汇总取得结果,返回。
在一种实现方式中,所述SQL节点模块具体用于:接收客户端发送的SQL请求,对所述SQL请求进行语法词法解析,得到SQL语句;判断所述SQL语句是否合法,若SQL语句不合法,直接向所述客户端返回错误信息,若所述SQL语句没有错误,则判断所述SQL语句是否为查询语句;若所述SQL语句为查询语句,则判断所述SQL语句对应的查询数据是否在内存中的缓存中,若所述SQL语句对应的查询数据在内存中的缓存中,从所述缓存中获取所述SQL语句对应的查询数据,并将所述SQL语句对应的查询数据返回给所述客户端,若所述SQL语句对应的查询数据不在内存中的缓存中,生成所述SQL语句对应的执行请求,并向所述管理节点模块发送所述执行指令。
所述SQL节点模块还具体用于:若所述SQL语句不为查询语句,则判断所述SQL语句是否为删除语句;若所述SQL语句为删除语句,访问所述管理节点模块取得所述SQL语句对应的事务标识,并将所述事务数据增加删除标志;若所述SQL语句不是删除语句,则确定所述SQL语句为插入语句,访问所述管理节点模块取得所述SQL语句对应的事务标识,并确定所要插入的数据片位置,判断所要插入的数据片中数据是否已满,若所要插入的数据片中数据已满,访问所述管理节点模块,在所述管理节点模块中分配一个新的数据片位置;
所述存储节点模块,还用于利用Raft协议在所要插入的数据片位置插入数据,并将插入结果向所述SQL节点模块返回,以便所述SQL节点模块将所述插入结果返回给所述客户端;若所插入的数据片位置为行存储数据(即将数据插入到行存储节点),则数据插入行存储数据后,利用Raft Learner协议将该数据异步复制为列存储数据(即将数据插入到列存储节点)。
所述管理节点模块,具体用于根据所述执行请求,分配所述执行请求对应的全局事务标识,以及基于元数据字典信息查询所述执行请求对应的数据分片位置,并将所述执行请求对应的全局事务标识和数据分片位置向所述SQL节点模块返回;所述管理节点模块,具体用于根据所述查询请求,基于元数据字典信息查询所述查询请求对应的数据分片位置,并将所述查询请求对应的数据分片位置向所述Flink模块返回。
所述SQL节点模块,具体用于获取所述管理节点模块返回的所述执行请求对应的数据分片位置,判断所述数据分片位置是否存储在所述存储节点模块中的同一数据节点,若所述数据分片位置存储在所述存储节点模块中的同一数据节点,生成执行指令,并将所述执行指令向所述存储节点模块发送,以便所述存储节点模块在该数据节点获取所述执行指令的处理结果,并且所述SQL节点模块将所述执行指令的处理结果向所述客户端返回,以及存储在缓存中;若所述数据分片位置存储在所述存储节点模块中的多个数据节点,生成执行指令,并将所述执行指令向所述存储节点模块发送,以便所述存储节点模块并行在所述多个数据节点获取所述执行指令的处理结果,并且所述SQL节点模块将所述执行指令的处理结果向所述客户端返回,以及存储在缓存中;
所述存储节点模块,还用于统计每个数据分片的使用情况,并将每个数据分片的使用情况写入到所述管理节点模块。
举例来说,如图4所示,在本实施例中,具体可以实施以下方式:
1.客户端发送数据查询、增删改SQL请求给openGauss SQL节点集群。
2.SQL节点集群接受到客户端请求后,进行语法词法解析。判断SQL语句是否合法?
3.如果SQL不合法,直接返回错误及信息给客户端。
4.如果SQL没有错误,则判断此SQL语句是否为查询语句?
5.如果是查询语句,则判断所查询数据是否已在内存中的缓存中。
6.如果在缓存中,从缓存中取得数据,并通过SQL节点的计算汇总,把数据返回给客户端。
7.如果不在缓存中,向管理节点集群发送请求,查询所操作的数据分片位置。
8.管理节点集群收到SQL节点集群查询请求。查询元数据字典信息,返回需要操作的数据分片位置给SQL节点集群。
9.SQL节点集群拿到所需数据分片位置后,判断所需数据是否存储在同一数据节点。
10.如果在同一数据节点,根据执行统计信息,在1个数据节点选择行存或列存取得数据,返回给SQL节点,数据节点同时统计每个数据片的使用情况,并写入到管理节点。计算结果返回给客户端。并把数据放在缓存中。
11.如果在多个数据节点,根据执行统计信息,并行在多个数据节点选择行存或列存取得数据,返回给SQL节点,数据节点同时统计每个数据片的使用情况,并写入到管理节点。
12.SQL集群节点收到数据分片后,计算汇总数据得到结果,返回给客户端。并把数据放在缓存中。
13.在5中的判断中,如果不是查询语句,则判断SQL是否为删除语句。
14.如果为删除语句,访问管理节点集群取得事务ID,并把数据加个标志表示为删除,等待Vacuum进程后续自动清理。
15.如果不是删除语句,则只有可能为插入语句。更新语句被分解为先删除,后插入语句。
16.访问管理节点集群取得事务ID,并找到所要插入数据片位置。
17.判断所要插入的数据片中数据是否已满?
18.如果数据已满,数据集群节点访问管理集群,分配一个新的数据片位置。
19.数据集群节点插入数据,并用Raft协议保证多个节点数据插入成功。返会结果给SQL集群,然后SQL集群返回给客户端。
20.插入完openGauss行存数据后,会利用Raft Learner协议异步复制为列存数据。因为是异步,不影响行存事务的性能。
在一种实现方式,所述管理节点模块,还用于定时扫描所述存储节点模块中每个数据分片的使用情况;并针对每个数据分片的使用情况和参数阈值,判断该数据分片是否过热,若该数据分片不过热,不做任何处理,若该数据分片过热,针对该数据分片分配一个或多个新的分片位置,并发送分裂指令和分片位置到所述存储节点模块,以便将该数据分片分裂且迁移部分数据到分配所述一个或多个新的分片位置中。
举例来说,如图5所示,在本实施例中,具体可以实施以下方式:
1.前述实例中,数据分片的使用统计信息已被保存至管理节点集群。
2.管理节点集群会定时扫描统计数据。
3.根据统计数据和可修改的参数阈值,来判断分片数据是否过热,也就是说读写的负载是不是主要只发生在某些少数数据分片上?
4.如果不过热,不做任何处理。
5.如果过热,管理集群分配一个或多个新的分片位置。
6.发送分裂指令和分片位置到数据节点集群。
7.数据节点分裂且迁移部分数据到其他数据节点的新分片,让读写热点分散到多个数据节点并行处理。
8.数据节点返回新分片信息给管理集群储存,以便以后使用。
在一种实现方式中,所述Flink模块具体用于:接收客户端发送的SQL请求,对所述SQL请求进行语法词法解析,得到SQL语句;判断所述SQL语句是否合法,若SQL语句不合法,直接向所述客户端返回错误信息,若所述SQL语句合法,则判断所述SQL语句对应的查询数据是否在内存中的缓存中,若所述SQL语句对应的查询数据在内存中的缓存中,从所述缓存中获取所述SQL语句对应的查询数据,并将所述SQL语句对应的查询数据的分析结果返回给所述客户端,若所述SQL语句对应的查询数据不在内存中的缓存中,生成所述SQL语句对应的所述查询请求,并向所述管理节点模块发送所述查询请求。
举例来说,如图6所示,在本实施例中,具体可以实施以下方式:
1.Flink集群是通过集成Apache Flink平台Flink SQL的分布式流计算技术来完成高效可水平扩展的分布式在线分析功能。
2.Flink集群管理节点收到并解析SQL请求。解析SQL判断是否错误。
3.如果错误,直接返回错误及信息给客户端。
4.如没有错误,则判断所查询数据是否已在内存中的缓存中。
5.如果在缓存中,从缓存中取得数据,并通过Flink节点的计算汇总,返回数据。
6.如果不在缓存中,向管理节点集群发送请求,查询所操作的数据分片位置。
7.管理节点集群收到Flink集群请求,查询元数据字典,返回需要查询的数据分片位置给Flink集群。
8.Flink集群得到数据分片位置后,利用Flink流式分布式计算框架,并根据执行统计信息,生成执行计划。根据数据分片位置,同时发请求到多个数据节点取得数据,
9.数据节点根据执行计划,主要从列存取得数据,有必要时也可从行存取得数据,返回给Flink集群。
10.Flink集群收到数据分片后,根据执行计划,计算汇总取得结果,返回。同时把分片读取信息传递给数据节点集群保存。
由上述技术方案可以看出,本申请提供了一种分布式数据库,所述分布式数据库包括SQL节点模块、管理节点模块、存储节点模块;所述SQL节点模块,用于接收客户端发送的SQL请求,对所述SQL请求执行SQL解析、优化处理,生成执行请求,并向所述管理节点模块发送所述执行指令;根据所述管理节点模块返回的所述执行请求对应的全局事务标识和数据分片位置,生成执行指令,并将所述执行指令向所述存储节点模块发送;将所述存储节点模块返回的所述执行指令的处理结果向所述客户端返回;所述管理节点模块,用于根据所述执行请求,确定所述执行请求对应的全局事务标识和数据分片位置,并将所述执行请求对应的全局事务标识和数据分片位置向所述SQL节点模块返回;所述存储节点模块,用于根据所述执行指令,对所述存储节点模块中所存储的数据进行处理,得到所述执行指令的处理结果。本实施例中,把单机数据库分成三层:所述SQL节点模块、所述管理节点模块和所述存储节点模块,数据分散在多个节点上,SQL节点模块得到SQL请求后,通过管理节点模块得到数据分片位置,在存储节点模块中一个或多个节点写入或得到数据后再在SQL节点模块汇总,实现了openGauss数据库分布式处理数据的功能。
也就是说,本发明可以把openGauss分为四种不同的节点:管理,SQL和数据节点,加上提供在线分析功能的Flink节点;管理节点负责管理功能,存储元数据,并为分布式事务分配事务ID;SQL节点对外公布SQL协议的接口,负责接受客户端的连接,执行SQL解析和优化,并最终生成分布式执行计划;数据节点负责同时提供行式和列式存储数据,提供智能数据分片和自动维护多副本;这四种节点都可以水平扩展为多个节点组成集群,各节点之间相互通讯来实现高可用,高扩展的分布式在线事务处理数据库。上述技术方案把单机数据库分成三层,管理、计算和数据分开,数据分散在多个节点上,SQL节点得到SQL命令后,通过管理节点得到数据位置,在多个数据节点写入或得到数据后再在SQL节点汇总,实现了openGauss数据库现在没有的分布式在线事务处理数据库功能;Flink节点通过集成ApacheFlink平台Flink SQL的分布式流计算技术来完成高效可水平扩展的分布式在线分析功能。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。以上所描述的设备及系统实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述,仅为本较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。
Claims (10)
1.一种分布式数据库,其特征在于,所述分布式数据库包括SQL节点模块、管理节点模块、存储节点模块;
所述SQL节点模块,用于接收客户端发送的SQL请求,对所述SQL请求执行SQL解析、优化处理,生成执行请求,并向所述管理节点模块发送所述执行指令;根据所述管理节点模块返回的所述执行请求对应的全局事务标识和数据分片位置,生成执行指令,并将所述执行指令向所述存储节点模块发送;将所述存储节点模块返回的所述执行指令的处理结果向所述客户端返回;
所述管理节点模块,用于根据所述执行请求,确定所述执行请求对应的全局事务标识和数据分片位置,并将所述执行请求对应的全局事务标识和数据分片位置向所述SQL节点模块返回;
所述存储节点模块,用于根据所述执行指令,对所述存储节点模块中所存储的数据进行处理,得到所述执行指令的处理结果。
2.根据权利要求1所述的分布式数据库,其特征在于,所述分布式数据库还包括:弗林克(Flink)模块;
所述Flink模块,用于响应分析指令,并向所述管理节点模块发送所述查询请求;根据所述管理节点模块返回的所述查询请求对应的数据分片位置,生成查询指令,并将所述查询指令向所述存储节点模块发送;根据所述存储节点模块返回的所述查询指令的查询结果进行分析;
所述管理节点模块,还用于根据所述查询请求,查询所述所述查询请求对应的数据分片位置,并将所述查询请求对应的数据分片位置向所述Flink模块返回;
所述存储节点模块,用于根据所述查询指令,对所述存储节点模块中所存储的数据进行查询,得到所述查询指令的查询结果。
3.根据权利要求1所述的分布式数据库,其特征在于,所述SQL节点模块具体用于:接收客户端发送的SQL请求,对所述SQL请求进行语法词法解析,得到SQL语句;判断所述SQL语句是否合法,若SQL语句不合法,直接向所述客户端返回错误信息,若所述SQL语句没有错误,则判断所述SQL语句是否为查询语句;若所述SQL语句为查询语句,则判断所述SQL语句对应的查询数据是否在内存中的缓存中,若所述SQL语句对应的查询数据在内存中的缓存中,从所述缓存中获取所述SQL语句对应的查询数据,并将所述SQL语句对应的查询数据返回给所述客户端,若所述SQL语句对应的查询数据不在内存中的缓存中,生成所述SQL语句对应的执行请求,并向所述管理节点模块发送所述执行指令。
4.根据权利要求3所述的分布式数据库,其特征在于,所述SQL节点模块还具体用于:若所述SQL语句不为查询语句,则判断所述SQL语句是否为删除语句;若所述SQL语句为删除语句,访问所述管理节点模块取得所述SQL语句对应的事务标识,并将所述事务数据增加删除标志;若所述SQL语句不是删除语句,则确定所述SQL语句为插入语句,访问所述管理节点模块取得所述SQL语句对应的事务标识,并确定所要插入的数据片位置,判断所要插入的数据片中数据是否已满,若所要插入的数据片中数据已满,访问所述管理节点模块,在所述管理节点模块中分配一个新的数据片位置;
所述存储节点模块,还用于利用Raft协议在所要插入的数据片位置插入数据,并将插入结果向所述SQL节点模块返回,以便所述SQL节点模块将所述插入结果返回给所述客户端;若所插入的数据片位置为行存储数据,则数据插入行存储数据后,利用Raft Learner协议将该数据异步复制为列存储数据。
5.根据权利要求2所述的分布式数据库,其特征在于,所述管理节点模块,具体用于根据所述执行请求,分配所述执行请求对应的全局事务标识,以及基于元数据字典信息查询所述执行请求对应的数据分片位置,并将所述执行请求对应的全局事务标识和数据分片位置向所述SQL节点模块返回;所述管理节点模块,具体用于根据所述查询请求,基于元数据字典信息查询所述查询请求对应的数据分片位置,并将所述查询请求对应的数据分片位置向所述Flink模块返回。
6.根据权利要求1所述的分布式数据库,其特征在于,所述SQL节点模块,具体用于获取所述管理节点模块返回的所述执行请求对应的数据分片位置,判断所述数据分片位置是否存储在所述存储节点模块中的同一数据节点,若所述数据分片位置存储在所述存储节点模块中的同一数据节点,生成执行指令,并将所述执行指令向所述存储节点模块发送,以便所述存储节点模块在该数据节点获取所述执行指令的处理结果,并且所述SQL节点模块将所述执行指令的处理结果向所述客户端返回,以及存储在缓存中;若所述数据分片位置存储在所述存储节点模块中的多个数据节点,生成执行指令,并将所述执行指令向所述存储节点模块发送,以便所述存储节点模块并行在所述多个数据节点获取所述执行指令的处理结果,并且所述SQL节点模块将所述执行指令的处理结果向所述客户端返回,以及存储在缓存中;
所述存储节点模块,还用于统计每个数据分片的使用情况,并将每个数据分片的使用情况写入到所述管理节点模块。
7.根据权利要求6所述的分布式数据库,其特征在于,所述管理节点模块,还用于定时扫描所述存储节点模块中每个数据分片的使用情况;并针对每个数据分片的使用情况和参数阈值,判断该数据分片是否过热,若该数据分片不过热,不做任何处理,若该数据分片过热,针对该数据分片分配一个或多个新的分片位置,并发送分裂指令和分片位置到所述存储节点模块,以便将该数据分片分裂且迁移部分数据到分配所述一个或多个新的分片位置中。
8.根据权利要求2所述的分布式数据库,其特征在于,所述Flink模块具体用于:接收客户端发送的SQL请求,对所述SQL请求进行语法词法解析,得到SQL语句;判断所述SQL语句是否合法,若SQL语句不合法,直接向所述客户端返回错误信息,若所述SQL语句合法,则判断所述SQL语句对应的查询数据是否在内存中的缓存中,若所述SQL语句对应的查询数据在内存中的缓存中,从所述缓存中获取所述SQL语句对应的查询数据,并将所述SQL语句对应的查询数据的分析结果返回给所述客户端,若所述SQL语句对应的查询数据不在内存中的缓存中,生成所述SQL语句对应的所述查询请求,并向所述管理节点模块发送所述查询请求。
9.根据权利要求1-8任一所述的分布式数据库,其特征在于,所述SQL节点模块包括若干个openGuass SQL节点,所述存储节点模块包括若干个openGuass存储节点。
10.根据权利要求1-8任一所述的分布式数据库,其特征在于,所述SQL请求的类型包括:数据查询SQL请求、数据增加SQL请求、数据删除SQL请求和数据修改SQL请求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011356754.2A CN112328700A (zh) | 2020-11-26 | 2020-11-26 | 一种分布式数据库 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011356754.2A CN112328700A (zh) | 2020-11-26 | 2020-11-26 | 一种分布式数据库 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112328700A true CN112328700A (zh) | 2021-02-05 |
Family
ID=74309044
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011356754.2A Pending CN112328700A (zh) | 2020-11-26 | 2020-11-26 | 一种分布式数据库 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112328700A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905615A (zh) * | 2021-03-02 | 2021-06-04 | 浪潮云信息技术股份公司 | 一种基于顺序校验的分布式一致性协议提交方法及系统 |
CN112925841A (zh) * | 2021-03-26 | 2021-06-08 | 瀚高基础软件股份有限公司 | 分布式jdbc实现方法、设备及计算机可读存储介质 |
CN116644086A (zh) * | 2023-05-24 | 2023-08-25 | 上海沄熹科技有限公司 | 一种基于SST的Insert SQL语句实现方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105608086A (zh) * | 2014-11-17 | 2016-05-25 | 中兴通讯股份有限公司 | 分布式数据库系统的事务处理方法及装置 |
CN105824868A (zh) * | 2015-12-24 | 2016-08-03 | 广东亿迅科技有限公司 | 一种分布式数据库数据处理方法和分布式数据库系统 |
US20160371355A1 (en) * | 2015-06-19 | 2016-12-22 | Nuodb, Inc. | Techniques for resource description framework modeling within distributed database systems |
CN109815294A (zh) * | 2019-02-14 | 2019-05-28 | 北京谷数科技有限公司 | 一种无主节点分布并行数据存储方法和系统 |
CN110704479A (zh) * | 2019-09-12 | 2020-01-17 | 新华三大数据技术有限公司 | 任务处理方法、装置、电子设备及存储介质 |
CN111858097A (zh) * | 2020-07-22 | 2020-10-30 | 安徽华典大数据科技有限公司 | 分布式数据库系统、数据库访问方法 |
-
2020
- 2020-11-26 CN CN202011356754.2A patent/CN112328700A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105608086A (zh) * | 2014-11-17 | 2016-05-25 | 中兴通讯股份有限公司 | 分布式数据库系统的事务处理方法及装置 |
US20160371355A1 (en) * | 2015-06-19 | 2016-12-22 | Nuodb, Inc. | Techniques for resource description framework modeling within distributed database systems |
CN105824868A (zh) * | 2015-12-24 | 2016-08-03 | 广东亿迅科技有限公司 | 一种分布式数据库数据处理方法和分布式数据库系统 |
CN109815294A (zh) * | 2019-02-14 | 2019-05-28 | 北京谷数科技有限公司 | 一种无主节点分布并行数据存储方法和系统 |
CN110704479A (zh) * | 2019-09-12 | 2020-01-17 | 新华三大数据技术有限公司 | 任务处理方法、装置、电子设备及存储介质 |
CN111858097A (zh) * | 2020-07-22 | 2020-10-30 | 安徽华典大数据科技有限公司 | 分布式数据库系统、数据库访问方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905615A (zh) * | 2021-03-02 | 2021-06-04 | 浪潮云信息技术股份公司 | 一种基于顺序校验的分布式一致性协议提交方法及系统 |
CN112905615B (zh) * | 2021-03-02 | 2023-03-24 | 浪潮云信息技术股份公司 | 一种基于顺序校验的分布式一致性协议提交方法及系统 |
CN112925841A (zh) * | 2021-03-26 | 2021-06-08 | 瀚高基础软件股份有限公司 | 分布式jdbc实现方法、设备及计算机可读存储介质 |
CN112925841B (zh) * | 2021-03-26 | 2022-11-08 | 瀚高基础软件股份有限公司 | 分布式jdbc实现方法、设备及计算机可读存储介质 |
CN116644086A (zh) * | 2023-05-24 | 2023-08-25 | 上海沄熹科技有限公司 | 一种基于SST的Insert SQL语句实现方法 |
CN116644086B (zh) * | 2023-05-24 | 2024-02-20 | 上海沄熹科技有限公司 | 一种基于SST的Insert SQL语句实现方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11580070B2 (en) | Utilizing metadata to prune a data set | |
JP7130600B2 (ja) | ファーストクラスデータベース要素としての半構造データの実装 | |
US10078681B2 (en) | Differentiated secondary index maintenance in log structured NoSQL data stores | |
US20180285167A1 (en) | Database management system providing local balancing within individual cluster node | |
CN112328700A (zh) | 一种分布式数据库 | |
Paiva et al. | Autoplacer: Scalable self-tuning data placement in distributed key-value stores | |
US20130110873A1 (en) | Method and system for data storage and management | |
US7949687B1 (en) | Relational database system having overlapping partitions | |
US20160350302A1 (en) | Dynamically splitting a range of a node in a distributed hash table | |
US20030212668A1 (en) | Optimized database appliance | |
US20110040788A1 (en) | Coherent File State System Distributed Among Workspace Clients | |
CN111858759A (zh) | 一种基于共识算法的htap数据库 | |
CN111708894B (zh) | 一种知识图谱创建方法 | |
US11226986B2 (en) | Data table partitioning management method and apparatus | |
CN115114296A (zh) | 一种基于TemplateB+Tree的索引结构布局方法 | |
CN115114294A (zh) | 数据库存储模式的自适应方法、装置、计算机设备 | |
AU2016373662B2 (en) | High throughput, high reliability data processing system | |
US20090171921A1 (en) | Accelerating Queries Based on Exact Knowledge of Specific Rows Satisfying Local Conditions | |
KR20220011184A (ko) | 증분 데이터 비교 구현 시스템 및 방법 | |
CN114020446A (zh) | 一种跨多引擎的路由处理方法、装置、设备及存储介质 | |
Vilaça et al. | On the expressiveness and trade-offs of large scale tuple stores | |
CN110569310A (zh) | 一种云计算环境下的关系大数据的管理方法 | |
CN115114012B (zh) | 一种任务分配方法、装置、电子设备及存储介质 | |
Белоус et al. | Methods for optimizing queries of distributed databases | |
Visinescu | Incremental data distribution on internet-based distributed systems: A spring system approach |
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 |