CN112541044A - 一种数据库设计方法、装置以及存储介质 - Google Patents
一种数据库设计方法、装置以及存储介质 Download PDFInfo
- Publication number
- CN112541044A CN112541044A CN201910895169.0A CN201910895169A CN112541044A CN 112541044 A CN112541044 A CN 112541044A CN 201910895169 A CN201910895169 A CN 201910895169A CN 112541044 A CN112541044 A CN 112541044A
- Authority
- CN
- China
- Prior art keywords
- physical storage
- sub
- spatial data
- storage node
- data
- 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
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- 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/29—Geographical information databases
Abstract
本发明实施例提供一种数据库设计方法以及装置,其中所述方法包括:将空间数据集合划分为n个子区域;n为正整数,所述n个子区域中相邻的子区域具有连续的编码,每个子区域中包含至少一个空间数据对象;基于所述编码,将所述n个子区域分配到至少一个物理存储节点上,在每个物理存储节点上建立第一结构索引;所述第一结构索引用于确定每个物理存储节点上待存储的数据的结构;基于所述第一结构索引,将所述n个子区域中包含的空间数据对象存储到对应的物理存储节点上。应用本发明所述方法,能够实现对空间数据的完善存储,提高空间数据管理与并行化处理的效率。
Description
技术领域
本发明涉及大数据领域,尤其涉及一种数据库设计方法、装置以及存储介质。
背景技术
随着多维态的地理信息系统(Geographic Information System,GIS)的开发应用,用户对GIS数据的处理能力和效率提出了更高的要求。
传统的数据库领域虽然已经引入空间索引技术来扩充空间储存能力,但是由于GIS数据的空间关系复杂度高、数据量极大,而目前的存储方案,有的需要根据业务场景来制定相应地规则,不具备通用性;有的在数据的查询上范围支持度不够,需要进行全表扫描处理,查询效率低下,都不能很好地满足应用需求。
发明内容
有鉴于此,本发明实施例期望提供一种数据库设计方法、装置以及存储介质,能够实现对GIS空间数据完善的存储,提高对空间数据管理与并行化处理的效率。
为达到上述目的,本发明的技术方案是这样实现的:
本发明实施例提供一种数据库设计方法,所述方法包括:
将空间数据集合划分为n个子区域;n为正整数,所述n个子区域中相邻的子区域具有连续的编码,每个子区域中包含至少一个空间数据对象;
基于所述编码,将所述n个子区域分配到至少一个物理存储节点上,在每个物理存储节点上建立第一结构索引;所述第一结构索引用于确定每个物理存储节点上待存储的数据的结构;
基于所述第一结构索引,将所述n个子区域中包含的空间数据对象存储到对应的物理存储节点上。
在上述方案中,所述将空间数据集合划分为n个子区域,包括:
确定所述空间数据集合中空间数据对象的个数,以及每个空间数据对象的数据量大小;
基于确定的空间数据对象的个数以及每个空间数据对象的数据量大小,将所述空间数据集合划分为n个子区域。
在上述方案中,所述基于所述编码,将所述n个子区域分配到至少一个物理存储节点上,包括:
确定每个物理存储节点对应的待存储的数据量;
基于确定的每个物理存储节点对应的待存储的数据量,将所述具有连续的编码的子区域分配到每个物理存储节点上,以使每个物理存储节点的存储量达到对应的待存储的数据量。
在上述方案中,所述确定每个物理存储节点对应的待存储的数据量,包括:
确定物理存储节点的个数;
确定所述n个子区域中全部空间数据对象的数据量大小;
基于确定的物理存储节点的个数以及所述全部空间数据对象的数据量大小,确定每个物理存储节点对应的待存储的数据量。
在上述方案中,所述在每个物理存储节点上建立第一结构索引,包括:
基于每个物理存储节点,确定对应的根节点;
基于每个物理存储节点上所包含的子区域,确定第一层叶节点;
基于每个物理存储节点上子区域所包含的空间数据对象,确定第二层叶节点;
依据所述根节点、第一层叶节点、第二层叶节点,在每个物理存储节点上建立第一结构索引。
本发明实施例还提供一种数据库设计装置,所述装置包括:空间数据划分模块、索引构建模块、存储模块;其中,
所述空间数据划分模块,用于将空间数据集合划分为n个子区域;n为正整数,所述n个子区域中相邻的子区域具有连续的编码,每个子区域中包含至少一个空间数据对象;
所述索引构建模块,用于基于所述编码,将所述n个子区域分配到至少一个物理存储节点上,在每个物理存储节点上建立第一结构索引;所述第一结构索引用于确定每个物理存储节点上待存储的数据的结构;
所述存储模块,用于基于所述第一结构索引,将所述n个子区域中包含的空间数据对象存储到对应的物理存储节点上。
在上述装置中,所述空间数据划分模块,用于确定所述空间数据集合中空间数据对象的个数,以及每个空间数据对象的数据量大小;
基于确定的空间数据对象的个数以及每个空间数据对象的数据量大小,将所述空间数据集合划分为n个子区域。
在上述装置中,所述索引构建模块包括分配子模块、存储确定子模块;其中,
所述分配子模块,用于确定每个物理存储节点对应的待存储的数据量;
基于确定的每个物理存储节点对应的待存储的数据量,将所述具有连续的编码的子区域分配到每个物理存储节点上,以使每个物理存储节点的存储量达到对应的待存储的数据量。
在上述装置中,所述存储确定子模块,用于确定物理存储节点的个数;
确定所述n个子区域中全部空间数据对象的数据量大小;
基于确定的物理存储节点的个数以及所述全部空间数据对象的数据量大小,确定每个物理存储节点对应的待存储的数据量。
在上述装置中,所述索引构建模块,用于基于每个物理存储节点,确定对应的根节点;
基于每个物理存储节点上所包含的子区域,确定第一层叶节点;
基于每个物理存储节点上子区域所包含的空间数据对象,确定第二层叶节点;
依据所述根节点、第一层叶节点、第二层叶节点,在每个物理存储节点上建立第一结构索引。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现上述方法的任一步骤。
本发明实施例还提供一种数据库设计装置,包括:处理器和用于存储能够在处理器上运行的计算机程序的存储器,其中,所述处理器用于运行所述计算机程序时,执行上述方法的任一步骤。
本发明实施例所提供的数据库设计方法、装置及存储介质,通过对空间数据集合进行分解,得到多个子区域,并对每个子区域按顺序进行编码,基于编码顺序将子区域分配至多个物理存储节点以实现存储;由于在每个物理存储节点上都构建了第一结构索引,如此在保证了数据存储的完备性和可靠性的同时,可以实现对空间数据的并行化处理,极大地提高了处理速度。
附图说明
图1为本发明实施例提供的数据库设计方法的流程示意图;
图2为不同阶的Hilbert曲线示意图;
图3为基于Hilbert曲线层次分解的空间数据划分算法流程图;
图4为空间数据集合的划分策略的整体流程图;
图5为本发明实施例提供的数据库设计方法的总体架构图;
图6为本发明实施例提供的数据库设计装置的功能示意图;
图7为本发明实施例提供的数据库设计装置的一种硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对发明的具体技术方案做进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
需要说明的是,本发明实施例中的空间数据是指地理信息数据,即GIS数据。地理信息是关于地理实体、现象或关系的本质、特征及其运动状态、规律的表征。具体来讲,表征地理空间内事物的数量、位置、大小、形状、分布、内在联系和变化规律的数据统称为空间数据。
空间数据包括空间位置及其关系、属性特征和时域特征;其中,属性特征是对空间数据的说明,如一个城市,它的属性特征有人口、GDP、绿化率等。
为了实现对空间数据的完善存储,本发明实施例提供一种数据库设计方法,图1为本发明实施例中的数据库设计方法的流程示意图,如图1所示,上述数据库设计方法包括:
S101,将空间数据集合划分为n个子区域;n为正整数,所述n个子区域中相邻的子区域具有连续的编码,每个子区域中包含至少一个空间数据对象;
S102,基于所述编码,将所述n个子区域分配到至少一个物理存储节点上,在每个物理存储节点上建立第一结构索引;所述第一结构索引用于确定每个物理存储节点上待存储的数据的结构;
S103,基于所述第一结构索引,将所述n个子区域上包含的空间数据对象存储到对应的物理存储节点上。
在实际应用中,由于单个物理存储节点的容量有限,在存储时需要将空间数据分布到多个物理存储节点上进行存储。因此,在进行存储前,需要对空间数据进行划分。
一般而言,在数据库领域,数据划分策略对划分后的数据块在各磁盘之间分布情况有直接影响,采用好的数据划分策略可以很好解决数据块在各磁盘之间分布不均衡问题。同样,空间数据划分策略在空间数据库中也发挥着重要作用,好的空间数据划分策略可以在避免产生数据倾斜的前提下,提高空间数据的并行查询与检索效率。
这里,由于空间数据是多维的,一般具有数据类型和存储结构多变、数据量巨大、空间关系复杂等特征,空间上相邻的数据对象被划分到不同的存储节点上,会给后续数据的查询和管理造成不必要的开销;因此,在空间数据的划分过程中需要充分考虑空间关系因素的存在。
保持空间数据的邻近性意味着相邻的空间实体对象应当存储在一起,而空间填充曲线是实现这一目标的有效方法。
空间填充曲线是一种通过一维曲线去包含整个二维甚至多维空间的一种函数曲线。根据不同的排列规则,可以得到不同的空间填充曲线,例如,Z-order曲线、Peano曲线、Hilbert曲线等。对于本发明而言,对空间数据通过空间填充曲线进行划分的方式不限于上述几种曲线。
在本发明实施例中,针对空间数据的特点,通过空间层次分解的方式将空间数据划分为n个具有连续的编码的子区域。在划分的过程中,需要保证每个子区域中都包含有空间数据对象。这里,每个子区域中包含的空间数据对象即为空间实体对象。
为了更好地描述本发明的方案,以Hilbert空间填充曲线进行空间数据划分为例,进行具体说明。
Hilbert曲线通过将多维空间转换为一维空间的方式很好地保留了空间邻近性。Hilbert曲线依据自身空间填充曲线的特性,可以线性地贯穿二维或者更高维度的每个离散单元,且仅仅穿过一次,并对每个离散单元进行线性排序和编码,该编码作为该离散单元的唯一标识。对于Hilbert曲线而言,Hilbert曲线上相邻的点在原始空间上一定相邻。
图2为不同阶的Hilbert曲线示意图,如图2所示,标准平面是一个网格平面,填充这个平面的Hilbert曲线称之为m阶Hilbert填充曲线。在图2中,1阶Hilbert填充曲线为2×2的网格,标号为0、1、2、3,Hilbert曲线从左下角开始贯穿这个网格,以贯穿的方向对每个网格进行顺序编码。类似地,可以看到2阶Hilbert填充曲线的情况,2阶Hilbert填充曲线为4×4的网格,标号为0-15。
通过Hilbert填充曲线的划分,使得划分后的每个子区域所拥有的空间实体对象均具有Hilbert编码,这种方式既保证了每个子区域中空间实体对象之间具有较强的空间相关性(如相邻关系等),从而避免经由数据划分后空间实体对象彼此之间的空间关系被严重割裂;同时,又保证了每个子区域之间空间实体对象总量上的平衡。
这里,步骤S101中所述将空间数据集合划分为n个子区域,包括:
确定所述空间数据集合中空间数据对象的个数,以及每个空间数据对象的数据量大小;基于确定的空间数据对象的个数以及每个空间数据对象的数据量大小,将所述空间数据集合划分为n个子区域。
需要说明的是,在实现划分前,需要对空间数据集合进行预处理。由于Hilbert曲线是针对点对象设计的,在对空间数据对象赋予Hilbert编码前,需要将空间数据对象的集合转化为点数据的集合。
所述预处理方法可以是:以空间中每个实体对象的最小外接矩形的中心点作为空间对象的近似表示,例如,当每个实体对象的最小外接矩形的中心点用O表示时,以Oi表示第i个实体对象;确定中心点Oi的横纵坐标值,基于横纵坐标值确定每个实体对象的Hilbert编码。
这里,基于横纵坐标值确定每个空间实体对象的Hilbert编码具体可以是,基于横纵坐标值确定每个空间实体对象所处的子区域,所述子区域的对应的Hilbert编码即为该空间实体对象的Hilbert编码。
通过该预处理方法,可以将实体对象数据集转换为点数据集,进而可以基于点数据集构造Hilbert曲线。需要说明的是,还可以采用其他将对象转化点数据的方法,在此不作赘述。
由于本发明的数据划分目的在于让每个物理存储节点上待存储的数据量是均衡的,因此,需要确定所述空间数据集合中空间数据对象的个数,以及每个空间数据对象的数据量大小,通过空间数据对象的个数以及数据量大小对空间数据集合进行大致均衡的划分。
这里,Hilbert曲线构造的函数的计算复杂度为O(m2),m为Hilbert曲线的迭代次数,或称为Hilbert曲线的次序。
为了尽可能地逼近点对象的真实位置,减少点对象集中的Hilbert值的重复次数,一般m值的选择与空间数据对象的个数w满足w<22m。为了得到Hilbert曲线的迭代次数,需要先确定空间数据集合中空间数据对象的个数w。
下面对空间数据集合的划分进行具体描述:
需要说明的是,理想情况下,将空间数据集合划分后,每个网格(子区域),只包含一个空间对象,这样就建立了空间数据对象与Hilbert编码之间一一对应的关系。用Hilbert编码对空间数据对象进行排序,从起始编码开始顺序将空间数据对象放入第一个物理存储节点,当超过单个物理存储节点平均限定的数据量时停止;从断点开始以同样方式将剩余的空间数据对象依次放入下一个存储节点,重复此过程直到所有空间数据对象被划分到相应的物理存储节点上。由此,划分后各个物理存储节点上有大致均衡的数据量。
这里,将每个子区域中的空间数据对象放入物理存储节点上可以通过轮询算法实现,当然也可以通过其他能实现将空间数据对象均衡的分配至物理存储节点上的方式,在此对轮询算法不作描述。
上述方法在实践中可能引起两个问题:第一,在实际中,空间数据集合通常含有数万甚至数十万个空间数据对象,当空间数据对象的数目非常多时,构造Hilbert曲线和生成空间数据对象Hilbert编码的过程会非常繁琐;第二,空间数据对象经常为非均匀密集分布,若保证一个网格内最多只有一个空间数据对象,势必需要对空间进行过密的划分,这不但会造成存储浪费,也加大了计算空间数据对象Hilbert编码的时间。
针对此情况,本发明实施例通过将同一个子区域内的空间数据对象存储在相同的物理存储节点上,按分区情况进行分配,即同一子区域内的空间数据对象无需进行Hilbert编码排序。这样,同一子区域内部的空间数据对象共用同一个Hilbert编码,基于此可建立每个网格包含多个空间数据对象的初始的低阶Hilbert网格。
这里,使用低阶Hilbert网格划分空间数据可能会造成各物理存储节点之间待存储的数据量相差较大,因此,需要对建立的初始的低阶网格进行再次划分,以调节各物理存储节点间的数据量。
需要说明的是,步骤S101中的空间数据划分是步骤S102中子区域分配到物理存储节点的前提,通过合理的数据划分策略可以保证后续单个物理存储节点上的分配的数据量较为均衡。
这里,本发明实施例的基于Hilbert空间填充曲线进行空间数据层次分解的基本思想描述如下:
确定每个空间数据对象最小外接矩形的中心点,以此中心点作为空间数据对象的近似;根据空间数据集的范围、数据量大小选择一个初始的低阶Hilbert曲线,将整个空间范围粗略地划分为I×I的初分网格,其中,m0是初始Hilbert曲线的阶数;取Hilbert曲线经过该网格的编码作为每个网格内所有空间数据对象的统一编码,这样就建立了初分Hilbert网格与空间数据对象之间一对多的关系。
进一步地,需要对初始的低阶网格的各子网格进行再次划分,用以调节各物理存储节点间的数据量:根据初分Hilbert编码对空间数据对象进行排序,从起始编码子网格开始累加网格内空间数据对象的数据量,如果对第K个子网格进行累加时,累加的数据量超过单个物理存储节点允许存放的平均数据量,则将第K个子网格进行一次层次分解(即四等分),并计算下级子网格对应的Hilbert编码;根据分解后的子网格Hilbert编码重复上述数据量累计过程。基于多次的层次分解,直至每个物理存储节点上将要存储的数据量大体相同。
这里,需要确定每个物理存储节点对应的待存储的数据量,或者说单个物理存储节点允许存放的平均数据量。
所述确定每个物理存储节点对应的待存储的数据量,包括:
确定物理存储节点的个数;
确定所述n个子区域中全部空间数据对象的数据量大小;
基于确定的物理存储节点的个数以及所述全部空间数据对象的数据量大小,确定每个物理存储节点对应的待存储的数据量。
通常情况下,物理存储节点的数目是远远小于空间数据对象的个数,因此,利用少数子网格的层次分解来避免对整个空间范围的密集划分,可以有效减少空间数据对象Hilbert编码和排序时间,提高空间数据的划分效率。
需要说明的是,在实际存储中由于数据量的变动及其他因素,是无法保持各物理存储节点上待存储的数据量的严格相等。这里,为避免对初分网格进行过深的层次分解,可以设定一个层次分解的中止阶数m,当达到该阶数时停止层次分解操作,这样既可提高效率,又不影响划分后数据量的大致均衡。
在空间数据划分后,将得到的多个子区域分配至多个物理存储节点上。
这里,所述基于所述连续的编码,将所述n个子区域分配到至少一个物理存储节点上,包括:
确定每个物理存储节点对应的待存储的数据量;
基于确定的每个物理存储节点对应的待存储的数据量,将所述具有连续的编码的子区域分配到每个物理存储节点上,以使每个物理存储节点的存储量达到对应的待存储的数据量。
在实际应用中,由于物理存储节点个数的限制,大部分情况会是每个物理存储节点对应两个及以上的子区域。那么,每个物理存储节点上将会分配两个及以上的子区域的空间数据对象。
从Hilbert曲线的构造特性可以看出,基于Hilbert曲线层次分解的空间数据划分涉及两个关键问题,一是确定划分的初始阶数m0和层次分解的中止阶数m;二是计算空间对象初始Hilbert编码和层次分解后的Hilbert编码;每进行一次层次分解操作,其分解后的子网格相当于Hilbert曲线的阶数增加一阶。显然,当空间对象与Hilbert编码一一对应时,即每个网格只包含一个空间对象时,应该中止层次分解。由此可以得到中止阶数m与空间对象个数w之间应满足的条件:w<22m。这里,可以取满足该条件的最小正整数作为中止阶数m。
图3为基于Hilbert曲线层次分解的空间数据划分算法流程图,所述划分算法中涉及的变量有:
系统中物理存储节点的个数N;待划分的空间数据对象的总个数w;初始Hilbert曲线的阶数m0;当前的Hilbert曲线阶数m;Hilbert编码为k的网格内的空间对象的个数uk;第i个空间对象的大小vi(Byte),i∈[0,…,n];每个空间对象的非空间属性的大小vα(Byte),这里,由于非空间属性是定量,其大小可以预先估计;Hilbert编码为k的网格内的空间对象总的数据量大小vk(Byte),k∈[0,...,22m-1];每个物理存储节点的待存储的平均数据量
上述变量之间的关系是:
如图3所示,算法主要步骤为:
步骤201,构造初始Hilbert曲线网格。
步骤202,计算各空间数据对象Hilbert编码并排序。
步骤203,计算物理存储节点的待存储的平均数据量。
需要说明的是,可以根据每个空间数据对象最小外接矩形的中心点位置确定该空间数据对象所属的网格,赋予每个空间数据对象该网格的Hilbert编码,根据Hilbert编码对空间数据对象进行排序,统计各个子网格中空间数据对象的数据量vk(Byte),并计算每个物理存储节点的待存储的平均数据量
步骤204,按Hilbert编码排序累计子网格数量。
步骤205,判断子网格累计数据量是否小于物理存储节点待存储的平均数据量;若是,转到步骤204,按Hilbert编码排序累计子网格数量;若否,转到步骤206。
步骤206,判断子网格累计数据量是否等于物理存储节点待存储的平均数据量;若是,转到步骤207。
步骤207,存储数据至当前物理存储节点。
步骤208,判断是否最后一个节点;若是,结束流程,若否,切换到下一存储节点,转到步骤204。
至此,制定完成了对空间数据集合的划分以及分配策略。
这里,对整个对空间数据集合的划分策略作一个总结,如图4所示,通过基于Hilbert曲线层次分解的空间数据划分方法对空间数据集合实现划分,划分为多个子区域,划分后的子区域具有连续的Hilbert编码;这里,通过划分策略以及编码保证了每个子区域中的空间实体对象都具有相邻关系;再通过轮询算法根据物理存储节点个数均衡地将子区域中的空间数据散列到对应的物理存储节点。这里,每个物理存储节点管理多个子区域,每个子区域中的数据都有对应的数据结构。
为了提高查询效率,本发明实施例提出在每个物理存储节点上构建第一结构索引,实现对空间数据的并行查询与更新。
这里,所述在每个物理存储节点上建立第一结构索引,包括:
基于每个物理存储节点,确定对应的根节点;
基于每个物理存储节点上所包含的子区域,确定第一层叶节点;
基于每个物理存储节点上子区域所包含的空间数据对象,确定第二层叶节点;
依据所述根节点、第一层叶节点、第二层叶节点,在每个物理存储节点上建立第一结构索引。
这里,所述第一结构索引可以为简单网格空间索引、二叉树索引、R树索引、四叉树索引。在本发明实施例中,以第一结构索引为R树索引进行说明:
为了实现并行索引,在每个物理存储节点上都建立R树索引。这里,每个物理存储节点上建立的R树索引以每个物理存储节点作为根节点,以每个物理存储节点上所包含的子区域作为第一层叶节点,以每个物理存储节点上子区域所包含的空间数据对象作为第二层叶节点,由此,在每个物理存储节点上建立R树索引。
这里,每个物理存储节点上建立的R树索引的空间数据的访问方法和数据插入删除操作都与传统R树索引处理方法一致,具体操作方法在此不作赘述。
在实际应用中,在对空间数据集合进行划分前,需要获取空间数据。空间数据的获取可以直接引用测绘地理信息局提供的权威数据,或者是一些数据共享平台,如国家地球系统科学数据共享平台、地理空间数据云等提供的数据;还可以是自行采集的数据,具体采集方式在此不作赘述。
由于上述步骤S102中已经给出了在每个物理存储节点上建立结构索引的数据存储的策略,由此可以基于所述策略对空间数据对象进行存储。
这里,底层存储可以通过Apache HBase实现;其中,HBase即Hadoop Database,是一种高可靠、高性能,面向列、可伸缩的分布式存储系统,利用HBase可以对数据的读、写达到实时级别。
本发明实施例的底层存储主要基于交易日志(Transcation Log)和快照(Snapshot)机制,物理存储节点通过异步快照刷新线程周期性在物理存储节点上生成快照文件,快照文件为线程执行时的最新内存快照。
这里,物理存储节点初始化时,通过读取最新的快照文件,同时载入快照之后最新的事务日志来初始化内存数据。
在实际存储中,为了实现数据的一致性和容灾,可以对每个物理存储节点通过Raft协议做复制。Raft协议将服务器划分为3种角色:领导者(Leader),负责与客户端交互以及实现日志复制,同一时刻系统中最多存在1个Leader;跟随者(Follower),被动响应请求,从不主动发起请求;候选者(Candidate),由Follower向Leader转换的中间状态,是一种临时的角色,只存在于Leader的选举阶段,某个节点想要变成Leader,那么就发起投票请求,同时自己变成Candidate,如果选举成功,则变为Candidate,否则退回为Follower。
这里,复制后的副本以每个子区域为单位管理,不同的物理存储节点上多个子区域构成一个Raft组,各组之间互为副本,以实现Raft组中Leader的迁移。
图5为分布式空间数据库的总体架构图,如图5所示,本发明实施例提供的数据库设计方法主要通过客户端(Client)、物理存储节点(Space Daemon,SD)以及分布式数据库HBase来实现。所述分布式数据库HBase实现的是底层存储其中,Client主要实现空间数据集合的划分以及将划分后的子区域混合散列到物理存储节点来实现空间数据的存储和定位。SD主要基于Raft协议实现每个子区域的一致性和容错,并通过Transcation Log和Snapshot来实现子区域的存储。HBase主要提供可靠的数据存储,主要存储底层的具体数据。
在图5中,物理存储节点每接收到客户端的一条事务操作日志,即R树的插入删除操作等,将交易日志(Transcation Log)作为Raft协议的日志(Log)发送给Raft组内部的Follower成员实现复制,当半数以上的Follower对事务日志进行确认,当前Leader将事务日志写入底层磁盘。具体地操作流程是:
当接收到客户端的日志(事务请求)后,先把该日志追加到本地的Log日志中,然后通过心跳把该输入同步给其他Follower,Follower接收到Log后,记录日志Log,然后向Leader发送确认指令(ACK)。当Leader收到大多数Follower的ACK信息后,将该日志设置为已提交并追加到本地磁盘中,通知客户端,并在下个心跳中Leader将通知所有的Follower将该日志存储在自己的本地磁盘中。
这里,如果超过半数的Follower都成功写了Log,那么Leader开始第二阶段的提交:正式写入数据,然后同样广播给Follower,Follower也根据自身情况选择写入或者不写入并返回结果给Leader。
需要说明的是,当客户端启动的时候,会随机挑选一个服务器进行通信。如果客户端第一次挑选的服务器不是Leader,那么该被挑选的服务器会拒绝客户端的请求并且提供他最近接收到的Leader的信息。如果Leader已经崩溃了,那么客户端的请求就会超时;客户端之后会再次重试随机挑选服务器的过程。
至此完成了对空间数据的存储。
本发明实施例所提供的数据库的设计方法,通过对空间数据集合进行分解,使分解后的每个子区域的数据量大体相同,并对每个子区域进行编码,得到具有连续编码的子区域,基于子区域的连续编码将子区域分配至多个物理存储节点上,进而在每个物理存储节点上构建第一结构索引进行数据的存储;如此通过每个子区域数据量的均衡性来保证物理存储节点间负载的均衡性,避免了数据倾斜;在保证了数据存储的完备性和可靠性的同时,能在后续查询中基于构建的空间索引提高对空间数据的查询效率,实现并行化处理。
基于前述实施例相同的技术构思,本发明实施例还提供一种数据库设计装置,如图6所示,所述装置600包括:空间数据划分模块601、索引构建模块602、存储模块603;其中,
所述空间数据划分模块601,用于将空间数据集合划分为n个子区域;n为正整数,所述n个子区域中相邻的子区域具有连续的编码,每个子区域中包含至少一个空间数据对象;
所述索引构建模块602,用于基于所述连续的编码,将所述n个子区域分配到至少一个物理存储节点上,在每个物理存储节点上建立第一结构索引;所述第一结构索引用于确定每个物理存储节点上待存储的数据的结构;
所述存储模块603,用于基于所述第一结构索引,将所述n个子区域中包含的空间数据对象存储到对应的物理存储节点上。
这里,所述空间数据划分模块601,具体用于确定所述空间数据集合中数据对象的个数,以及每个数据对象的数据量大小;基于确定的数据对象的个数以及每个数据对象的数据量大小,将所述空间数据集合划分为n个子区域。
索引构建模块602还包括分配子模块、存储确定子模块;其中,所述分配子模块,用于确定每个物理存储节点对应的待存储的数据量;基于确定的每个物理存储节点对应的待存储的数据量,将所述具有连续的编码的子区域分配到每个物理存储节点上,以使每个物理存储节点的存储量达到对应的待存储的数据量。
所述存储确定子模块,用于确定物理存储节点的个数;确定所述n个子区域中全部空间数据对象的数据量大小;基于确定的物理存储节点的个数、以及所述全部空间数据对象的数据量大小,确定每个物理存储节点对应的待存储的数据量。
这里,所述索引构建模块602,具体用于基于每个物理存储节点,确定对应的根节点;
基于每个物理存储节点上所包含的子区域,确定第一层叶节点;
基于每个物理存储节点上子区域所包含的空间数据对象,确定第二层叶节点;
依据所述根节点、第一层叶节点、第二层叶节点,在每个物理存储节点上建立第一结构索引。
需要说明的是,由于所述数据库设计装置600解决问题的原理与前述数据库设计方法相似,因此,所述数据库设计装置600的具体实施过程及实施原理均可以参见前述方法和实施过程,以及实施原理的描述,重复之处不再赘述。
本发明实施例所提供的数据库设计装置,通过对空间数据集合进行分解,使分解后的每个子区域的数据量大体相同,并对每个子区域进行编码,得到具有连续编码的子区域,基于子区域的连续编码将子区域分配至多个物理存储节点上,进而在每个物理存储节点上构建第一结构索引进行数据存储;如此通过每个子区域数据量的均衡性来保证物理存储节点间负载的均衡性,避免了数据倾斜;在保证了数据存储的完备性和可靠性的同时,能在后续查询中基于构建的空间索引提高对空间数据的查询效率,实现并行化处理。
本发明实施例还提供一种计算机存储介质,其上存储有计算机程序,其中,该计算机程序被处理器执行时实现上述实施例中所述方法的步骤。并且该计算机程序被处理器执行时实现执行上述实施例中所提供的方法的各个步骤,这里不再赘述。
本发明实施例还提供一种数据库设计装置,包括:处理器和用于存储能够在处理器上运行的计算机程序的存储器,其中,所述处理器用于运行所述计算机程序时,执行存储在存储器中的上述方法实施例的步骤。
图7是本发明实施例数据库设计700的一种硬件结构示意图,该数据库设计装置700包括:至少一个处理器701、存储器702,数据库设计装置700中的各个组件通过总线系统703耦合在一起,可理解,总线系统703用于实现这些组件之间的连接通信。总线系统703除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图7中将各种总线都标为总线系统703,所述存储器702包括操作系统以及应用程序。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个模块或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或模块的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的模块可以是、或也可以不是物理上分开的,作为模块显示的部件可以是、或也可以不是物理模块,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部模块来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能模块可以全部集成在一个处理模块中,也可以是各模块分别单独作为一个模块,也可以两个或两个以上模块集成在一个模块中;上述集成的模块既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请所提供的方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
本申请所提供的装置实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的装置实施例。
本申请所提供的方法或装置实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (12)
1.一种数据库设计方法,其特征在于,所述方法包括:
将空间数据集合划分为n个子区域;n为正整数,所述n个子区域中相邻的子区域具有连续的编码,每个子区域中包含至少一个空间数据对象;
基于所述编码,将所述n个子区域分配到至少一个物理存储节点上,在每个物理存储节点上建立第一结构索引;所述第一结构索引用于确定每个物理存储节点上待存储的数据的结构;
基于所述第一结构索引,将所述n个子区域中包含的空间数据对象存储到对应的物理存储节点上。
2.根据权利要求1所述的方法,其特征在于,所述将空间数据集合划分为n个子区域,包括:
确定所述空间数据集合中空间数据对象的个数,以及每个空间数据对象的数据量大小;
基于确定的空间数据对象的个数以及每个空间数据对象的数据量大小,将所述空间数据集合划分为n个子区域。
3.根据权利要求1所述的方法,其特征在于,所述基于所述编码,将所述n个子区域分配到至少一个物理存储节点上,包括:
确定每个物理存储节点对应的待存储的数据量;
基于确定的每个物理存储节点对应的待存储的数据量,将所述具有连续的编码的子区域分配到每个物理存储节点上,以使每个物理存储节点的存储量达到对应的待存储的数据量。
4.根据权利要求3所述的方法,其特征在于,所述确定每个物理存储节点对应的待存储的数据量,包括:
确定物理存储节点的个数;
确定所述n个子区域中全部空间数据对象的数据量大小;
基于确定的物理存储节点的个数以及所述全部空间数据对象的数据量大小,确定每个物理存储节点对应的待存储的数据量。
5.根据权利要求1所述的方法,其特征在于,所述在每个物理存储节点上建立第一结构索引,包括:
基于每个物理存储节点,确定对应的根节点;
基于每个物理存储节点上所包含的子区域,确定第一层叶节点;
基于每个物理存储节点上子区域所包含的空间数据对象,确定第二层叶节点;
依据所述根节点、第一层叶节点、第二层叶节点,在每个物理存储节点上建立第一结构索引。
6.一种数据库设计装置,其特征在于,所述装置包括:空间数据划分模块、索引构建模块、存储模块;其中,
所述空间数据划分模块,用于将空间数据集合划分为n个子区域;n为正整数,所述n个子区域中相邻的子区域具有连续的编码,每个子区域中包含至少一个空间数据对象;
所述索引构建模块,用于基于所述编码,将所述n个子区域分配到至少一个物理存储节点上,在每个物理存储节点上建立第一结构索引;所述第一结构索引用于确定每个物理存储节点上待存储的数据的结构;
所述存储模块,用于基于所述第一结构索引,将所述n个子区域中包含的空间数据对象存储到对应的物理存储节点上。
7.根据权利要求6所述的装置,其特征在于,
所述空间数据划分模块,用于确定所述空间数据集合中空间数据对象的个数,以及每个空间数据对象的数据量大小;
基于确定的空间数据对象的个数以及每个空间数据对象的数据量大小,将所述空间数据集合划分为n个子区域。
8.根据权利要求6所述的装置,其特征在于,所述索引构建模块包括分配子模块、存储确定子模块;其中,
所述分配子模块,用于确定每个物理存储节点对应的待存储的数据量;
基于确定的每个物理存储节点对应的待存储的数据量,将所述具有连续的编码的子区域分配到每个物理存储节点上,以使每个物理存储节点的存储量达到对应的待存储的数据量。
9.根据权利要求8所述的装置,其特征在于,
所述存储确定子模块,用于确定物理存储节点的个数;
确定所述n个子区域中全部空间数据对象的数据量大小;
基于确定的物理存储节点的个数以及所述全部空间数据对象的数据量大小,确定每个物理存储节点对应的待存储的数据量。
10.根据权利要求6所述的装置,其特征在于,
所述索引构建模块,用于基于每个物理存储节点,确定对应的根节点;
基于每个物理存储节点上所包含的子区域,确定第一层叶节点;
基于每个物理存储节点上子区域所包含的空间数据对象,确定第二层叶节点;
依据所述根节点、第一层叶节点、第二层叶节点,在每个物理存储节点上建立第一结构索引。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5任一项所述方法的步骤。
12.一种数据库设计装置,其特征在于,包括:处理器和用于存储能够在处理器上运行的计算机程序的存储器,其中,所述处理器用于运行所述计算机程序时,执行权利要求1至5任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910895169.0A CN112541044A (zh) | 2019-09-20 | 2019-09-20 | 一种数据库设计方法、装置以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910895169.0A CN112541044A (zh) | 2019-09-20 | 2019-09-20 | 一种数据库设计方法、装置以及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112541044A true CN112541044A (zh) | 2021-03-23 |
Family
ID=75012628
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910895169.0A Pending CN112541044A (zh) | 2019-09-20 | 2019-09-20 | 一种数据库设计方法、装置以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112541044A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150049944A1 (en) * | 2013-08-14 | 2015-02-19 | Oracle International Corporation | Memory-efficient spatial histogram construction |
CN106021567A (zh) * | 2016-05-31 | 2016-10-12 | 中国农业大学 | 一种基于Hadoop的海量矢量数据划分方法及系统 |
CN107423422A (zh) * | 2017-08-01 | 2017-12-01 | 武大吉奥信息技术有限公司 | 基于网格的空间数据分布式存储及检索方法和系统 |
CN107423368A (zh) * | 2017-06-29 | 2017-12-01 | 中国测绘科学研究院 | 一种非关系数据库中的时空数据索引方法 |
-
2019
- 2019-09-20 CN CN201910895169.0A patent/CN112541044A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150049944A1 (en) * | 2013-08-14 | 2015-02-19 | Oracle International Corporation | Memory-efficient spatial histogram construction |
CN106021567A (zh) * | 2016-05-31 | 2016-10-12 | 中国农业大学 | 一种基于Hadoop的海量矢量数据划分方法及系统 |
CN107423368A (zh) * | 2017-06-29 | 2017-12-01 | 中国测绘科学研究院 | 一种非关系数据库中的时空数据索引方法 |
CN107423422A (zh) * | 2017-08-01 | 2017-12-01 | 武大吉奥信息技术有限公司 | 基于网格的空间数据分布式存储及检索方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10558672B1 (en) | System and method for executing queries on multi-graphics processing unit systems | |
US11593323B2 (en) | Parallel and efficient technique for building and maintaining a main memory CSR based graph index in a RDBMS | |
US6874061B1 (en) | Method and system for implementing variable sized extents | |
CN105793843B (zh) | 用于oltp和分析工作量的用于内存数据库的组合行和列式存储 | |
US9846540B1 (en) | Data durability using un-encoded copies and encoded combinations | |
US8214404B2 (en) | Media aware distributed data layout | |
US9477551B1 (en) | Method and system for data migration between high performance computing architectures and file system using distributed parity group information structures with non-deterministic data addressing | |
EP3688607A1 (en) | System and method for load, aggregate and batch calculation in one scan in a multidimensional database environment | |
US10152500B2 (en) | Read mostly instances | |
US10649959B2 (en) | Write-optimized nested trees | |
US20210390089A1 (en) | Code dictionary generation based on non-blocking operations | |
CN111104457A (zh) | 基于分布式数据库的海量时空数据管理方法 | |
US11947515B2 (en) | Relational method for transforming unsorted sparse dictionary encodings into unsorted-dense or sorted-dense dictionary encodings | |
Jing et al. | An improved distributed storage and query for remote sensing data | |
CN111917834A (zh) | 一种数据同步方法、装置、存储介质及计算机设备 | |
US11334552B2 (en) | Lightweight redundancy tool for performing transactions | |
CN117677943A (zh) | 用于混合数据处理的数据一致性机制 | |
Duan et al. | Scalable data resilience for in-memory data staging | |
US9600538B2 (en) | Systems and methods for managing large volumes of data in a digital earth environment | |
CN115918110A (zh) | 使用键值存储库的空间搜索 | |
CN112541044A (zh) | 一种数据库设计方法、装置以及存储介质 | |
CN115328865A (zh) | 一种csv文件的批量导入方法和相关设备 | |
Xiao | A Spark based computing framework for spatial data | |
US11232095B2 (en) | Composite metadata objects for database systems | |
CN115686811A (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 |