CN105608165A - 一种分布式数据库主键生成的方法和系统 - Google Patents
一种分布式数据库主键生成的方法和系统 Download PDFInfo
- Publication number
- CN105608165A CN105608165A CN201510962633.5A CN201510962633A CN105608165A CN 105608165 A CN105608165 A CN 105608165A CN 201510962633 A CN201510962633 A CN 201510962633A CN 105608165 A CN105608165 A CN 105608165A
- Authority
- CN
- China
- Prior art keywords
- major key
- node
- generates
- motion
- data base
- 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
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/2282—Tablespace storage structures; Management thereof
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种分布式数据库主键生成的方法和系统,建立一种系统,在多机分布式环境中,保证各个节点都是对等的,各个节点通过自动协商来决定主键生成,也解决了集中式锁在高并发访问下的缺陷,达到了扩展性和性能的同时增强。本发明通过引入分布式环境中的多个对等节点间自动协商来决定分布式主键生成,能够有效的以节点协商方式解决因为集中式锁故障导致的分布式主键生成的整体瘫痪问题,使得分布式系统可以完全水平自由扩展,达到了性能上的极大增强。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种分布式数据库主键生成的方法和系统。
背景技术
随着互联网应用的不断发展,越来越多的应用系统部署朝着大规模、分布式、多机协同的方向发展。同时,所有项目中的数据库都需要选择一种主键生成的策略,用来完成唯一主键的生成工作。通常,数据库主键生成分为单机生成和分布式生成两种。单机生成是指在单台机器上生成主键,所有请求顺序执行,典型的方式是数据库自增ID。分布式生成则是指在多台机器上来生成主键。
其中分布式生成主键的通常做法,一种是利用特殊的规则在不同的机器上生成互不重复的ID,典型的方式是生成GUID或者包括地域、机房、机器信息在内的自定义编码;还有一种是通过一个集中式锁的管理来实现分布式主键生成的唯一性,典型的方式是通过关系数据库锁或者可以加锁的内存缓存。
关于第一种方法,虽然在特殊规则下可以生成不重复的ID编码,但由于编码本身的无规律性,这种编码会明显降低数据库主键索引的性能,同时因为字段通常比较长,需要占用更多的存储空间,如GUID是32个十六进制字符。
关于第二种方法,虽然采用集中式的锁可以继续使用自增ID这种有益于索引和存储的方式,但集中式的锁会是整个系统的瓶颈,因为每次生成主键都需要对锁资源进行锁定互斥处理,需要协同的机器越多,对集中式锁的访问冲突就会越剧烈,降低了整体分布式环境的处理能力,也限制了多级协同的规模。
同时,一旦集中式的锁出现故障,整个主键生成也将完全中断。因此如何解决分布式主键生成中集中式锁的缺陷就显得很有意义。
数据库中的每张数据表都有一个主键字段来唯一标识一条记录,主键也会默认加入到索引中以提高数据库操作的效率。主键生成策略的首要一点是保证生成记录的唯一性,一般对于单个数据库实例的主键通常会按照某个ID自增完成,但在业务规模越来越大的情况下,单个数据库实例会由于满足不了需求而按照一定规则拆分成多个分布式的数据库实例,如果按照普通的自增是无法保证在分布式环境中的主键唯一性,在这种情况下就需要在分布式的环境中生成唯一的数据库主键,同时还要最大化的提高主键生成效率。
发明内容
本发明的目的在于:针对现有技术中存在的上述技术问题,提供了一种分布式数据库主键生成的方法,并且提供了基于该方法保证分布式主键唯一性生成的系统。
本发明是通过以下技术方案实现的:一种分布式数据库主键生成的方法,在多机分布式环境中,保证各个节点都是对等的情况下,各个节点通过自动协商来决定主键生成。
进一步,所述的各节点协商确定主键生成是基于一致性算法下。
一种分布式数据库主键生成的系统,系统流程步骤如下:
(1)任意节点在正常运行中;
(2)某节点收到主键生成请求;
(3)该节点启动主键预生成,生成一个唯一标识;具体地如下:
如果某个节点收到某个主键的生成请求,则该节点先会根据主键标识和按照预定规则(如自增)生成的新主键ID值计算出一个在所有工作节点中对当前这个主键生成请求的唯一标识,然后以一个全局唯一且递增的编号向其他工作节点发出执行这个请求的提案,这个全局唯一且递增的编号可以由当前的时间戳加上工作节点IP组成,提案中的唯一标识代表请求本身。
其他节点在收到这个提案后,首先检查关于这个主键生成请求有没有已收到其他的提案,如果已收到关于这个生成请求的提案,接下来需要比较已收到的提案号和刚收到的这个提案号的大小。
如果已收到的提案号大于这个提案号,则直接拒绝当前提案。
如果已收到的提案号小于这个提案号,则同意该提案,但同时需要告知发起提案的节点本节点之前已经收到过其他节点关于这个请求的提案。
如果没有收到其他提案,则直接同意这个提案。
(4)该节点将步骤(3)生成的一个唯一标识与其他节点协商确定是否可以生成该节点;协商如下:
如果同意提案的节点数超过半数,且都是简单同意,则该节点再次向其他节点发起执行这个请求提案的提交。
如果同意提案的节点数超过半数,但有节点反馈在本提案之前已收到过其他关于这个请求的更小提案号,则该节点需要提交具备更小编号的其他节点关于这个请求执行的提案。
其他节点在收到新提交的提案后,按照与步骤(3)相同的规则进行判断处理。
最终,发起提案的节点在指定时间内收到其他节点的反馈后:
如果同意提交提案的节点数超过半数,说明提案已通过,再根据提案内容决定请求是在哪个节点运行。如果是在本机执行,则接下来就执行该主键生成;如果是在其他节点运行,则接下来由其他节点执行该主键生成。
如果同意提交提案的节点数没有超过半数,则该次提案失败,本节点不执行该次请求。
(5)生成主键。
进一步,所述的该节点为收到主键生成请求的节点。
进一步,所述步骤(3)的主键预生成为根据主键的标识和期望生成的主键ID来生成一个唯一标识,所述的唯一标识会在步骤(4)中使用。
进一步,所述的步骤(4)中的协商包括:若大多数节点同意执行,则进入步骤(5);若大多数节点不同意执行,则返回到步骤(1)。
进一步,所述的任意节点为多个对等的工作节点;每个工作节点都负责处理主键的生成;所述的每个工作节点都会随机收到对某个主键的生成请求。
综上所述,由于采用了上述技术方案,本发明的有益效果是:本发明通过引入分布式环境中的多个对等节点间自动协商来决定分布式主键生成,能够有效的以节点协商方式解决因为集中式锁故障导致的分布式主键生成的整体瘫痪问题,使得分布式系统可以完全水平自由扩展,达到了性能上的极大增强。
附图说明
本发明将通过例子并参照附图的方式说明,其中:
图1为本发明的检测方法流程示意图。
具体实施方式
本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。
本说明书(包括任何附加权利要求、摘要和附图)中公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。
具体实施方案,下面按Paxos算法对本方案做说明,当然本方案也可基于其它一致性算法(如:Gossip等),如图1所示的,一种分布式数据库主键生成的方法,在多机分布式环境中,保证各个节点都是对等的情况下,各个节点通过自动协商来决定主键生成。
进一步,所述的各节点协商确定主键生成是基于一致性算法下。
一种分布式数据库主键生成的系统,系统流程步骤如下:
(1)任意节点在正常运行中;
(2)某节点收到主键生成请求;
(3)该节点启动主键预生成,生成一个唯一标识;具体地如下:
如果某个节点收到某个主键的生成请求,则该节点先会根据主键标识和按照预定规则(如自增)生成的新主键ID值计算出一个在所有工作节点中对当前这个主键生成请求的唯一标识,然后以一个全局唯一且递增的编号向其他工作节点发出执行这个请求的提案,这个全局唯一且递增的编号可以由当前的时间戳加上工作节点IP组成,提案中的唯一标识代表请求本身。
其他节点在收到这个提案后,首先检查关于这个主键生成请求有没有已收到其他的提案,如果已收到关于这个生成请求的提案,接下来需要比较已收到的提案号和刚收到的这个提案号的大小。
如果已收到的提案号大于这个提案号,则直接拒绝当前提案。
如果已收到的提案号小于这个提案号,则同意该提案,但同时需要告知发起提案的节点本节点之前已经收到过其他节点关于这个请求的提案。
如果没有收到其他提案,则直接同意这个提案。
(4)该节点将步骤(3)生成的一个唯一标识与其他节点协商确定是否可以生成该节点;协商如下:
如果同意提案的节点数超过半数,且都是简单同意,则该节点再次向其他节点发起执行这个请求提案的提交。
如果同意提案的节点数超过半数,但有节点反馈在本提案之前已收到过其他关于这个请求的更小提案号,则该节点需要提交具备更小编号的其他节点关于这个请求执行的提案。
其他节点在收到新提交的提案后,按照与步骤(3)相同的规则进行判断处理。
最终,发起提案的节点在指定时间内收到其他节点的反馈后:
如果同意提交提案的节点数超过半数,说明提案已通过,再根据提案内容决定请求是在哪个节点运行。如果是在本机执行,则接下来就执行步骤(5)该主键生成;如果是在其他节点运行,则接下来由其他节点执行步骤(5)该主键生成。
如果同意提交提案的节点数没有超过半数,则该次提案失败,本节点不执行该次请求,返回到步骤(1)。
(5)生成主键。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明。本发明扩展到任何在本说明书中披露的新特征或任何新的组合,以及披露的任一新的方法或过程的步骤或任何新的组合。
Claims (7)
1.一种分布式数据库主键生成的方法,其特征在于:在多机分布式环境中,保证各个节点都是对等的情况下,各个节点通过自动协商来决定主键生成。
2.根据权利要求1所述的分布式数据库主键生成的方法,其特征在于,所述的各节点协商确定主键生成是基于一致性算法下。
3.一种分布式数据库主键生成的系统,其特征在于,系统流程步骤如下:
(1)任意节点在正常运行中;
(2)某节点收到主键生成请求;
(3)该节点启动主键预生成,生成一个唯一标识;
(4)该节点将步骤(3)生成的一个唯一标识与其他节点协商确定是否可以生成该节点;
(5)生成主键。
4.根据权利要求3所述的分布式数据库主键生成的系统,其特征在于,所述的该节点为收到主键生成请求的节点。
5.根据权利要求3所述的分布式数据库主键生成的系统,其特征在于,所述步骤(3)的主键预生成为根据主键的标识和期望生成的主键ID来生成一个唯一标识,所述的唯一标识会在步骤(4)中使用。
6.根据权利要求4所述的分布式数据库主键生成的系统,其特征在于,所述的步骤(4)中的协商包括:若大多数节点同意执行,则进入步骤(5);若大多数节点不同意执行,则返回到步骤(1)。
7.根据权利要求3所述的分布式数据库主键生成的系统,其特征在于,所述的任意节点为多个对等的工作节点;每个工作节点都负责处理主键的生成;所述的每个工作节点都会随机收到对某个主键的生成请求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510962633.5A CN105608165A (zh) | 2015-12-21 | 2015-12-21 | 一种分布式数据库主键生成的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510962633.5A CN105608165A (zh) | 2015-12-21 | 2015-12-21 | 一种分布式数据库主键生成的方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105608165A true CN105608165A (zh) | 2016-05-25 |
Family
ID=55988105
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510962633.5A Pending CN105608165A (zh) | 2015-12-21 | 2015-12-21 | 一种分布式数据库主键生成的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105608165A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106357604A (zh) * | 2016-08-18 | 2017-01-25 | 史兴国 | 一种一致性数据累积协同组装方法 |
CN106899654A (zh) * | 2016-08-10 | 2017-06-27 | 阿里巴巴集团控股有限公司 | 一种序列值生成方法、装置及系统 |
CN107133285A (zh) * | 2017-04-18 | 2017-09-05 | 北京北信源软件股份有限公司 | 一种分布式主键生成方法与装置 |
CN107948276A (zh) * | 2017-11-22 | 2018-04-20 | 用友金融信息技术股份有限公司 | 分布式会话更新方法、装置、计算机设备和可读存储介质 |
CN108038004A (zh) * | 2017-09-30 | 2018-05-15 | 用友金融信息技术股份有限公司 | 分布式锁生成方法、装置、计算机设备和可读存储介质 |
CN108256019A (zh) * | 2018-01-09 | 2018-07-06 | 顺丰科技有限公司 | 数据库主键生成方法、装置、设备及其存储介质 |
CN108804451A (zh) * | 2017-04-28 | 2018-11-13 | 北京京东尚科信息技术有限公司 | 生成主键的方法、装置、电子设备和可读存储介质 |
WO2020177533A1 (zh) * | 2019-03-06 | 2020-09-10 | 腾讯科技(深圳)有限公司 | 电子票据标识分配方法、电子票据生成方法、装置及系统 |
CN112015818B (zh) * | 2020-08-31 | 2024-01-30 | 杭州欧若数网科技有限公司 | 分布式图数据库uuid生成方法、装置、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880705A (zh) * | 2012-09-28 | 2013-01-16 | 用友软件股份有限公司 | 数据库主键生成装置和数据库主键生成方法 |
US20140157370A1 (en) * | 2012-05-22 | 2014-06-05 | Hasso-Plattner-Institu für Softwaresystemtechnik GmbH | Transparent Control of Access Invoking Real-time Analysis of the Query History |
CN104361065A (zh) * | 2014-11-04 | 2015-02-18 | 福建亿榕信息技术有限公司 | 基于Zookeeper的分布式系统的有序序列号生成方法 |
-
2015
- 2015-12-21 CN CN201510962633.5A patent/CN105608165A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140157370A1 (en) * | 2012-05-22 | 2014-06-05 | Hasso-Plattner-Institu für Softwaresystemtechnik GmbH | Transparent Control of Access Invoking Real-time Analysis of the Query History |
CN102880705A (zh) * | 2012-09-28 | 2013-01-16 | 用友软件股份有限公司 | 数据库主键生成装置和数据库主键生成方法 |
CN104361065A (zh) * | 2014-11-04 | 2015-02-18 | 福建亿榕信息技术有限公司 | 基于Zookeeper的分布式系统的有序序列号生成方法 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106899654B (zh) * | 2016-08-10 | 2020-02-07 | 阿里巴巴集团控股有限公司 | 一种序列值生成方法、装置及系统 |
CN106899654A (zh) * | 2016-08-10 | 2017-06-27 | 阿里巴巴集团控股有限公司 | 一种序列值生成方法、装置及系统 |
CN106357604A (zh) * | 2016-08-18 | 2017-01-25 | 史兴国 | 一种一致性数据累积协同组装方法 |
CN106357604B (zh) * | 2016-08-18 | 2019-07-23 | 苏州超块链信息科技有限公司 | 一种一致性数据累积协同组装方法 |
CN107133285A (zh) * | 2017-04-18 | 2017-09-05 | 北京北信源软件股份有限公司 | 一种分布式主键生成方法与装置 |
CN108804451B (zh) * | 2017-04-28 | 2021-07-30 | 北京京东尚科信息技术有限公司 | 生成主键的方法、装置、电子设备和可读存储介质 |
CN108804451A (zh) * | 2017-04-28 | 2018-11-13 | 北京京东尚科信息技术有限公司 | 生成主键的方法、装置、电子设备和可读存储介质 |
CN108038004A (zh) * | 2017-09-30 | 2018-05-15 | 用友金融信息技术股份有限公司 | 分布式锁生成方法、装置、计算机设备和可读存储介质 |
CN107948276A (zh) * | 2017-11-22 | 2018-04-20 | 用友金融信息技术股份有限公司 | 分布式会话更新方法、装置、计算机设备和可读存储介质 |
CN108256019A (zh) * | 2018-01-09 | 2018-07-06 | 顺丰科技有限公司 | 数据库主键生成方法、装置、设备及其存储介质 |
WO2020177533A1 (zh) * | 2019-03-06 | 2020-09-10 | 腾讯科技(深圳)有限公司 | 电子票据标识分配方法、电子票据生成方法、装置及系统 |
US11632441B2 (en) | 2019-03-06 | 2023-04-18 | Tencent Technology (Shenzhen) Company Limited | Methods, systems, and devices for electronic note identifier allocation and electronic note generation |
CN112015818B (zh) * | 2020-08-31 | 2024-01-30 | 杭州欧若数网科技有限公司 | 分布式图数据库uuid生成方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105608165A (zh) | 一种分布式数据库主键生成的方法和系统 | |
WO2021032138A1 (zh) | 一种基于区块链系统的共识方法、装置及系统 | |
US9563673B2 (en) | Query method for a distributed database system and query apparatus | |
US10949395B2 (en) | Cross objects de-duplication | |
US20160350440A1 (en) | Matching objects using match rules and lookup key | |
CN110324331B (zh) | 基于区块链的电力系统安全稳定控制终端身份认证方法 | |
US10956450B2 (en) | Dense subset clustering | |
EP3442201B1 (en) | Cloud platform construction method and cloud platform | |
CN104731951A (zh) | 一种数据查询方法及装置 | |
US10761869B2 (en) | Cloud platform construction method and cloud platform storing image files in storage backend cluster according to image file type | |
CN112835977A (zh) | 一种基于区块链的数据库管理方法及系统 | |
CN110597459B (zh) | 存储方法、主、副节点及包含其的系统 | |
CN103984728B (zh) | 用于外包空间数据库的范围查询完整性验证方法 | |
CN109063070B (zh) | 一种数据库的操作方法及数据库服务器 | |
CN109359477B (zh) | 一种数据加密、数据验证方法及其系统 | |
CN110990378A (zh) | 一种基于区块链的数据一致性对比方法及设备、介质 | |
Lei et al. | Improved Method of Blockchain Cross‐Chain Consensus Algorithm Based on Weighted PBFT | |
Khan et al. | An announcer based bully election leader algorithm in distributed environment | |
Zarafshan et al. | A preliminary study on ancestral voting algorithm for availability improvement of mutual exclusion in partitioned distributed systems | |
Lee et al. | Robust distributed indexing for locality-skewed workloads | |
US20230229321A1 (en) | System and method for improving memory resource allocations in database blocks using blockchain | |
KR101441000B1 (ko) | 병렬처리 기반 트리플 데이터에 대한 변경 탐지 방법 | |
KR101089294B1 (ko) | 구조적 p2p 네트워크를 위한 데이터 매핑 방법 및 장치 | |
Lin et al. | An optimized multi-Paxos protocol with centralized failover mechanism for cloud storage applications | |
CN106708432A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160525 |