CN102033938B - 基于二级映射的集群动态扩展方法 - Google Patents
基于二级映射的集群动态扩展方法 Download PDFInfo
- Publication number
- CN102033938B CN102033938B CN2010105971390A CN201010597139A CN102033938B CN 102033938 B CN102033938 B CN 102033938B CN 2010105971390 A CN2010105971390 A CN 2010105971390A CN 201010597139 A CN201010597139 A CN 201010597139A CN 102033938 B CN102033938 B CN 102033938B
- Authority
- CN
- China
- Prior art keywords
- data
- node
- hash
- cluster
- mapping
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明方法是基用一种二级映射的方法来实现满足负载均衡的动态扩展技术。即首先在第一维对集群的数据按照hash方法进行负载的均衡分布,这是第一级映射。在第一维的基础上采用一个M:N的映射表来进行第二级的映射,从而在第一维实现数据的分布负载均衡,在第二维实现集群的动态扩展。本发明使用了二级映射方法,既保留了集群中常用的hash分发方法的数据分布负载均衡特点,又支持了动态扩展的需要。同时利用了元数据库的事务特性保证了对二级映射表更新时的读写隔离性,保证了扩展的动态在线。和静态扩展技术动辄需要停机几分钟相比,本发明不仅不需停止应用业务,而且操作简单,每扩展一个节点的时间在秒级。
Description
技术领域
本发明涉及一种基于二级映射的集群动态扩展方法,属于数据库系统应用技术领域。
背景技术
无论是网络还是数据库集群,业务量的发展都超出了过去最乐观的估计,即使按照当时最优配置,也会很快遇到硬件的瓶颈。如何高效、快速、可靠地存储日益增长的用户数据,就需要用到集群的扩展技术。
根据扩展过程中是否需要停止原系统,将集群的扩展性分为静态扩展和动态扩展。静态扩展是指系统增减节点时,需要先停止当前运行的系统,然后根据节点增减的情况进行重新配置,最后重新启动整个系统,使之得以正常工作。动态扩展则是一种在线扩展,系统增减节点时能够自动适应这种变化,自动完成资源的迁移和重新配置,在无人干涉的情况下进行自动管理和自我维护。
当前的多数集群系统都只实现静态扩展,只能实现数据节点的自动增加,但不能适应节点减少的变化情况。静态扩展不需要考虑数据容错、分布式的元数据管理、资源动态分配等问题,因而在实现上相对容易,但由此也带来一些的问题,如系统扩展过程繁琐、可用性不高、管理和维护困难等。当节点数增加到几十或几百时,静态扩展的繁琐程度将使管理员难以忍受,因为中间任何环节出错都将导致系统扩展失败。更为重要的是,在此期间整个系统不能对外提供服务,这对于实时性和可用性要求高的应用业务来说是致命的。
数据库集群需要在元数据库里保存管理节点和数据节点的分布信息。这些分布信息是集群系统里最重要的基础性信息,它维护了整个集群的部署架构,集群就是赖于这些信息运转。一个Share-Nothing架构的数据库集群的部署架构信息类似一个树结构,无论采用什么存储方法,都必须在元数据库里保存整个树形结构。集群扩展的目的就是要对这个树形结构进行更改,增加或删除树的叶子节点,基本原理如图1所示。
与集群架构相似的,分布在集群中各个节点上的数据也需要维护这样一个树形结构来描述这些数据的分布情况。但是Share-Nothing架构的集群为了实现数据的负载均衡,都需要通过一定的分布方法对数据进行均匀分发,最常用的均匀分发方法就是hash(哈希)方法。但是hash方法要求实现固定hash基数,一旦hash分发之后基数就不能再改动,这与集群的动态扩展理念是相悖的。
发明内容
为了解决上述问题,本发明提出了一种基于二级映射集群动态扩展的方法,它可以在满足负载分布均衡的基础上,实现对数据库集群进行任意规模的扩展,而不需要停止集群服务和应用业务。
本发明采用的技术方案如下:
一种基于二级映射的集群动态扩展方法,包括以下步骤:
1)在第一维对集群的数据按照hash方法进行负载的均衡分布,这是第一级映射,在第一维的基础上采用一个M:N的映射表来进行第二级的映射;
2)通过更改第二维的映射表来动态增加新增节点,即实现集群的动态扩展。
所述步骤1)进一步分为以下步骤:
1.1)为集群创建表和hash分布,该表中包括字段Oid、BucketID、Ddl,并将第一级的分布信息存储在元数据库中,其中:Oid为对象在数据库中的唯一标识;BucketID为经过hash分布之后的hash桶号;Ddl为创建该表的sql语句;
1.2)建立映射表,将hash桶号对节点号的映射关系信息存入元数据库中;
1.3)导入数据,并提供查询服务。
所述步骤2)进一步分为以下步骤:
2.1)对新节点进行表模式定义,由于新增节点要存储表数据,因此必须对新增节点创建同其它节点一样的表模式,根据元数据库中保存的表的模式信息对新节点进行模式定义;
2.2)对元数据库的二级映射表通过进行增加操作,来更改桶号BucketID所对应的数据节点号NodeID;
2.3)新增节点之后,当需要导入数据时,为了维持负载的均衡,将该hash桶的新增数据都导入新增节点,直到同一个hash桶对应的节点负载一致之后,新增数据将被循环地导入该hash桶对应的各个节点;如果是查询,首先根据表名查找一级映射表获得该表对应的所有桶号,然后根据桶号查找二级映射表获得对应所有节点位置,并对所有位置应用该查询。
在所述步骤1.1)中,Hash桶数的选择至少为节点数的2倍。
在所述步骤1.3)中,无论导入数据,还是查询,首先都要定位目标数据的位置,如果是导入数据,第一步先根据数据的hash键值进行hash,获得对应的桶号,第二步根据桶号查找二级映射表获得对应的目标数据节点位置,从而将数据导入该数据节点;如果是查询,首先根据表名查找一级映射表获得该表对应的所有桶号,然后根据桶号查找二级映射表获得对应节点位置,并对所有位置应用该查询。
本发明具有以下优点:
1.使用了二级映射方法,既保留了集群中常用的hash分发方法的数据分布负载均衡特点,又支持了动态扩展的需要。
2.利用元数据库的事务特性保证了对二级映射表更新时的读写隔离性,保证了扩展的动态在线。
3.和静态扩展技术动辄需要停机几分钟相比,本动态扩展技术不仅不需停止应用业务,而且操作简单,每扩展一个节点的时间在秒级。
附图说明
图1为集群扩展的基本原理图;
图2为二级映射原理图;
图3为动态扩展原理图。
具体实施方式
本发明方法是基用一种二级映射的方法来实现满足负载均衡的动态扩展技术。即首先在第一维对集群的数据按照hash方法进行负载的均衡分布,这是第一级映射。在第一维的基础上采用一个M:N的映射表来进行第二级的映射,其中M代表经过hash分布之后的hash桶数,N代表集群的数据节点数。从而在第一维实现数据的分布负载均衡,在第二维实现集群的动态扩展。
本发明方法主要包括以下步骤:
数据分布阶段:
步骤一:
为集群创建数据表,并对数据表进行hash分布,并将第一级的hash分布信息存储在元数据库中。所谓进行hash分布就是对数据表中的数据根据某一个属性(这个属性被称为分布属性)使用hash函数进行计算获得hash桶号。Hash桶数的选择至少为节点数的2倍。例如表T的Oid(对象在数据库中的唯一标识)为33263,对其进行hash分布,分布到8个桶中。存储的格式如下:其中Oid为对象在数据库中的唯一标识;BucketID为经过hash分布之后的hash桶号;DDL为创建该表的sql语句。下表就是一个一级映射表的例子。
Oid | BucketID | Ddl |
33263 | 1,2,3,4,5,6,7,8 | Create table T(a int,b int,c int) |
该存储信息表示,Oid为33263的表存储在桶号为1、2、3、4、5、6、7、8的8个桶里。也就是说,表33263被映射到1、2、3、4、5、6、7、8。这一级是通过hash分布的,因此保证了各个桶里数据的分布均衡。
步骤二:
建立映射表,将hash桶号对节点号的映射关系信息存入元数据库中。基于上例,如果共有4个数据节点,那么映射表的存储的格式如下:
BucketID | NodeID |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 1 |
6 | 2 |
7 | 3 |
8 | 4 |
该表即为二级映射表。该映射信息表示,8个hash桶的数据将被映射到4个数据节点上去。其中1号和5号桶被映射到1号节点;2号和6号桶被映射到2号节点;3号和7号桶被映射到3号节点;4号和8号桶被映射到4号节点。
步骤三:
导入数据,并提供查询服务。无论导入数据,还是查询,首先都需要定位目标数据的位置。如果是导入数据,第一步先对该条数据的分布属性使用hash函数进行计算,获得对应的hash桶号,方法和步骤一进行hash分布相同;第二步根据桶号查找数据分布阶段已经记录的二级映射表获得对应的目标数据所在的节点位置,从而将数据导入该数据节点。如果是查询,首先根据该查询所涉及的表的Oid查找一级映射表获得该表对应的所有桶号,然后根据桶号查找二级映射表获得对应节点位置,并对所有位置应用该查询。
集群的数据的分布存储的二级映射原理如图2所示:数据经过hash分布之后分布在6个桶里,桶号分别为1、2、3、4、5、6。在二级映射表里1、3、5号桶被映射到节点1,而2、4、5、6号桶被映射到节点2。
动态扩展阶段:
由于数据是经过hash函数的分发分布到8个桶里的,hash桶数不能再更改。第一级映射用于数据分布负载的均衡,集群的扩展则通过更改第二维的映射表来实现。扩展的过程就是动态地更改第二维映射表的过程。
步骤一:
对新节点进行表模式定义。由于新增节点要存储T表数据,因此必须对新增节点创建同其他节点一样的表模式。根据元数据库中保存的表的模式信息对新节点进行模式定义。如本例中,就需要在新节点5上执行Create table T(a int,b int,c int)。
步骤二:
更改映射表,对集群进行扩展。具体操作就是对元数据库的二级映射表进行update操作,更改桶号BucketID所对应的数据节点号NodeID。接上例,如果集群中还有一个空闲节点,其NodeID为5,现在需要将T表的数据扩展到这个节点上,只需将某个桶在映射表中对应的节点号改为5即可。例如,出于负载均衡的需要,要把8号桶的业务扩展到新节点,只需修改映射表为下表即可,即在8号桶被映射的节点中增加5号节点。由于这些信息存储在元数据库中,数据库自身会根据事务的ACID特性(即数据库中事务的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability))保证了对二级映射表的读写的隔离,因此更改映射表的过程对应用业务并没有影响,保证了扩展的动态在线。
BucketID | NodeID |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 1 |
6 | 2 |
7 | 3 |
8 | 4,5 |
步骤三:
新增节点之后,当需要导入数据时,为了维持负载的均衡,该hash桶的新增数据将都被导入新增节点。直到同一个hash桶对应的节点负载一致之后,新增数据将被循环地导入该hash桶对应的各个节点。如果是查询,首先根据表名查找一级映射表获得该表对应的所有桶号,然后根据桶号查找二级映射表获得对应所有节点位置,并对所有位置应用该查询。
图3描述了动态扩展的原理:最初数据被hash分布在7个桶里,并经过二级映射到两个数据节点SN1、SN2中。其中6号桶二级映射到SN2,7号桶二级映射到SN1。随着业务的变化,第6和第7号桶的数据负载增多,此时进行动态扩展,对第6、7号桶的的二级映射信息进行更改,使6号桶二级映射到SN2和SN3,7号桶映射到SN1和SN3。
本发明的关键特点在于使用了二级映射方法,既保留了集群中常用的hash分发方法的数据分布负载均衡特点,又支持了动态扩展的需要。同时利用了元数据库的事务特性保证了对二级映射表更新时的读写隔离性,保证了扩展的动态在线。和静态扩展技术动辄需要停机几分钟相比,本发明动态扩展技术不仅不需停止应用业务,而且操作简单,每扩展一个节点的时间在秒级。
Claims (4)
1.一种基于二级映射的集群动态扩展方法,其特征在于包括以下步骤:
1)在第一维对集群的数据按照hash方法进行负载的均衡分布,这是第一级映射,在第一维的基础上采用一个M:N的映射表来进行第二级的映射,此处,M代表经过hash分布之后的hash桶数,N代表集群的数据节点数;
2)通过更改第二维的映射表来动态增加新增节点,即实现集群的动态扩展;
所述步骤2)进一步分为以下步骤:
2.1)对新节点进行表模式定义,由于新增节点要存储表数据,因此必须对新增节点创建同其它节点一样的表模式,根据元数据库中保存的表的模式信息对新节点进行模式定义;
2.2)对元数据库的二级映射表通过进行增加操作,来更改桶号BucketID所对应的数据节点号NodeID;
2.3)新增节点之后,当需要导入数据时,为了维持负载的均衡,将该hash桶的新增数据都导入新增节点,直到同一个hash桶对应的节点负载一致之后,新增数据将被循环地导入该hash桶对应的各个节点;如果是查询,首先根据表名查找一级映射表获得该表对应的所有桶号,然后根据桶号查找二级映射表获得对应所有节点位置,并对所有位置应用该查询。
2.如权利要求1所述的基于二级映射的集群动态扩展方法,其特征在于:
所述步骤1)进一步分为以下步骤:
1.1)为集群创建表和hash分布,该表中包括字段Oid、BucketID、Ddl,并将第一级的分布信息存储在元数据库中,其中:Oid为对象在数据库中的唯一标识;BucketID为经过hash分布之后的hash桶号;Ddl为创建该表的sql语句;
1.2)建立映射表,将hash桶号对节点号的映射关系信息存入元数据库中;
1.3)导入数据,并提供查询服务。
3.如权利要求2所述的基于二级映射的集群动态扩展方法,其特征在于:
在所述步骤1.1)中,Hash桶数的选择至少为节点数的2倍。
4.如权利要求2所述的基于二级映射的集群动态扩展方法,其特征在于:
在所述步骤1.3)中,无论导入数据,还是查询,首先都要定位目标数据的位置,如果是导入数据,第一步先根据数据的hash键值进行hash,获得对应的桶号,第二步根据桶号查找二级映射表获得对应的目标数据节点位置,从而将数据导入该数据节点;如果是查询,首先根据表名查找一级映射表获得该表对应的所有桶号,然后根据桶号查找二级映射表获得对应节点位置,并对所有位置应用该查询。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105971390A CN102033938B (zh) | 2010-12-10 | 2010-12-10 | 基于二级映射的集群动态扩展方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105971390A CN102033938B (zh) | 2010-12-10 | 2010-12-10 | 基于二级映射的集群动态扩展方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102033938A CN102033938A (zh) | 2011-04-27 |
CN102033938B true CN102033938B (zh) | 2012-06-06 |
Family
ID=43886831
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010105971390A Active CN102033938B (zh) | 2010-12-10 | 2010-12-10 | 基于二级映射的集群动态扩展方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102033938B (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102307136B (zh) * | 2011-07-06 | 2014-12-24 | 杭州华三通信技术有限公司 | 报文处理方法及其装置 |
CN102999526B (zh) * | 2011-09-16 | 2016-04-06 | 阿里巴巴集团控股有限公司 | 一种数据库关系表的拆分、查询方法及系统 |
CN102521297B (zh) * | 2011-11-30 | 2015-09-09 | 北京人大金仓信息技术股份有限公司 | 无共享数据库集群中实现系统动态扩展的方法 |
CN102646133B (zh) * | 2012-03-28 | 2014-04-16 | 电子科技大学 | 基于元数据存储的二维表组织方法 |
CN103544156B (zh) * | 2012-07-10 | 2019-04-09 | 腾讯科技(深圳)有限公司 | 文件存储方法及装置 |
CN102968503B (zh) * | 2012-12-10 | 2015-10-07 | 曙光信息产业(北京)有限公司 | 数据库系统的数据处理方法以及数据库系统 |
CN104111924B (zh) * | 2013-04-16 | 2018-05-11 | 中国移动通信集团广东有限公司 | 一种数据库系统 |
CN104598386B (zh) * | 2013-10-31 | 2018-03-27 | Lsi公司 | 通过追踪和利用二级映射索引重复利用固态驱动器块 |
CN104951481B (zh) * | 2014-03-31 | 2018-10-23 | 中国移动通信集团云南有限公司 | 一种管理数据库连接的方法和装置 |
CN104461387B (zh) * | 2014-12-02 | 2018-04-27 | 记忆科技(深圳)有限公司 | 一种提高固态硬盘对未映射区域的读性能的方法 |
CN104580393B (zh) * | 2014-12-18 | 2017-12-15 | 北京蓝汛通信技术有限责任公司 | 用于服务器集群系统的扩容方法、装置及服务器集群系统 |
CN104484469B (zh) * | 2014-12-31 | 2017-12-15 | 天津南大通用数据技术股份有限公司 | 一种支持多hash map数据库集群系统不停机的扩容方法 |
CN106407207B (zh) * | 2015-07-29 | 2020-06-16 | 阿里巴巴集团控股有限公司 | 一种实时新增数据更新方法和装置 |
CN106610868A (zh) * | 2015-10-21 | 2017-05-03 | 阿里巴巴集团控股有限公司 | 一种负载均衡方法及装置 |
CN108460094A (zh) * | 2018-01-30 | 2018-08-28 | 上海天旦网络科技发展有限公司 | 存储统计数据的方法和系统 |
CN109299175B (zh) * | 2018-09-26 | 2022-11-08 | 中国建设银行股份有限公司 | 数据库动态扩展方法、系统、装置和存储介质 |
CN110222030B (zh) * | 2019-05-13 | 2021-08-06 | 福建天泉教育科技有限公司 | 数据库动态扩容的方法、存储介质 |
CN112765262B (zh) * | 2019-11-05 | 2023-02-28 | 金篆信科有限责任公司 | 一种数据重分布方法、电子设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7401255B1 (en) * | 2005-03-16 | 2008-07-15 | Symantec Corporation | Mechanisms for recovering data from a backup by comparing transformed data to identify altered memory blocks |
CN1319332C (zh) * | 2005-06-10 | 2007-05-30 | 重庆邮电学院 | 基于Linux内核的高速网络流量测量器及流量测量方法 |
CN100483420C (zh) * | 2007-11-09 | 2009-04-29 | 清华大学 | 基于快照的细粒度文件与目录版本管理方法 |
CN101227341A (zh) * | 2007-12-18 | 2008-07-23 | 浪潮电子信息产业股份有限公司 | Linux系统上以太网卡快速捕包的方法 |
-
2010
- 2010-12-10 CN CN2010105971390A patent/CN102033938B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN102033938A (zh) | 2011-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102033938B (zh) | 基于二级映射的集群动态扩展方法 | |
US11816126B2 (en) | Large scale unstructured database systems | |
US9081837B2 (en) | Scoped database connections | |
CN106503163B (zh) | 基于SaaS应用的全局配置多租户动态数据源系统 | |
US20160292215A1 (en) | Partitioning online databases | |
US8140498B2 (en) | Distributed database system by sharing or replicating the meta information on memory caches | |
US7606813B1 (en) | Model consolidation in a database schema | |
US9342573B2 (en) | Universal delta data load | |
US20110106789A1 (en) | Database system and method of optimizing cross database query | |
US20130047161A1 (en) | Selecting processing techniques for a data flow task | |
CN104781809A (zh) | 容器数据库 | |
US8768973B2 (en) | Apparatus and method for expanding a shared-nothing system | |
CN101741907A (zh) | 一种均衡服务器负载的方法、系统和主服务器 | |
CN108829746B (zh) | 一种基于内存数据库的主数据管理系统及装置 | |
CN107665246B (zh) | 基于图数据库的动态数据迁移方法及图数据库集群 | |
US10534797B2 (en) | Synchronized updates across multiple database partitions | |
CN109710618A (zh) | 知识图谱数据关系分离的混合存储方法及系统 | |
US11442934B2 (en) | Database calculation engine with dynamic top operator | |
US8751711B2 (en) | Storage topology manager | |
CN105022791A (zh) | 一种新型的kv分布式数据存储方法 | |
US9619495B2 (en) | Surrogate key generation | |
CN105373376A (zh) | 用于配置软件应用的方法和装置 | |
CN105138638A (zh) | 一种基于应用层的数据库分布方法 | |
CN106547916A (zh) | 一种用户画像标签查询方法及装置 | |
CN101799822A (zh) | 分层网状知识模型建模方法及知识仓库系统建立方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |