CN111625543B - 一种基于HBase表实现全局单调递增的序列的方法 - Google Patents
一种基于HBase表实现全局单调递增的序列的方法 Download PDFInfo
- Publication number
- CN111625543B CN111625543B CN202010459160.8A CN202010459160A CN111625543B CN 111625543 B CN111625543 B CN 111625543B CN 202010459160 A CN202010459160 A CN 202010459160A CN 111625543 B CN111625543 B CN 111625543B
- Authority
- CN
- China
- Prior art keywords
- sequence
- hbase
- value
- database
- unique
- 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
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/221—Column-oriented storage; 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/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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于HBase表实现全局单调递增的序列的方法,包括以下步骤:数据库初始化阶段,HBase内创建一张表,表至少具有两列,一列对应序列的唯一标识,另外一列用于存放序列的当前值,表内每一行依次对应数据库中的一个序列;创建序列时,数据库的元数据表内插入数值,所述数值包括序列起始值,最大值,步长值,且需要将序列唯一标识,以及起始值插入到步骤A中创建的HBase表中。本发明利用incrementColumnValue方法可以保证表中的数据单调递增的特性,数据在数据库引擎层面不需要额外增加锁,使得数据库性能好,效率高,且实现简单。
Description
技术领域
本发明属于分布式数据库技术领域,具体涉及一种基于HBase表实现全局单调递增的序列的方法。
背景技术
序列是数据库中的一个对象,在ANSI标准中有明确定义。序列具有起始值,最大值,步长,是否循环,是否单调递增等属性。使用序列通常用来获得其当前值或者下一个值。一个数据库集群中可以存在多个的序列。如何实现高性能的序列,是分布式数据需要解决的问题之一。本方案是要解决在分布式数据库中,如何实现高效的整个集群全局唯一且单调递增的序列的问题。
序列的各个属性是固化在数据库的元数据表中的。在分布式数据库中,想要保证全局唯一且递增,也就要做到对序列的元数据表的访问具有原子性,常见的解决方案就是基于锁的序列实现。锁的实现分为两类。一类是乐观锁,一类是悲观锁。乐观锁适用于并发较低的场景。流程为向元数据表中写入时间戳(需保证唯一),获取当前的序列号,加上步长之后,更新序列的元数据表中序列的值,读回时间戳。通过写入和读回的时间戳是否相等,来确定是否获取到唯一的递增的序列号。时间戳相等,表示获取成功,如果时间戳不相等,表示这个序列的值被其他客户端获得了,那么就重试。悲观锁就是真正意义上的分布式锁,在访问序列的元数据表之前,加分布式全局锁,获取唯一的序列号,然后更新序列元数据的值,最后释放锁。以上用锁的方式,都需要在数据库的引擎层面有锁保护或者锁的相关逻辑。
乐观锁的缺点显而易见,首先在大并发的情况下,冲突会多,可能重试多次才能获得结果,甚至获取失败。就算没有并发,需要额外的多一次读和一次写,效率不高;悲观锁首先是基于一个分布式锁,无论是基于zookeeper的实现或者是Redis的实现,获取锁本身的代价就很大,另外还有扩展性,可用性,单点热点的隐患存在的问题,为此我们提出一种基于HBase表实现全局单调递增的序列的方法。
发明内容
本发明的目的在于提供一种基于HBase表实现全局单调递增的序列的方法,以解决上述背景技术中提出的问题,并达到利用HBase的方法,无须在引擎层加锁或实现锁的逻辑,就能获得全局唯一且单调递增的序列值的效果。
为了实现上述目的,本发明采用了如下技术方案:
一种基于HBase表实现全局单调递增的序列的方法,包括以下步骤:
A)、数据库初始化阶段,HBase内创建一张表,表至少具有两列,一列对应序列的唯一标识,另外一列用于存放序列的当前值,表内每一行依次对应数据库中的一个序列;
B)、创建序列时,数据库的元数据表内插入数值,所述数值包括序列起始值,最大值,步长值,且需要将序列唯一标识,以及起始值插入到步骤A中创建的HBase表中;
C)、当序列获得下一个值时,需要根据序列唯一标识,以及步长,调用incrementColumnValue方法来更新HBase表中的值,并把更新的值返回给客户端;
D)、若使用序列获得当前值,根据序列的唯一标识,步长为0,调用incrementColumnValue方法来更新HBase表中的值,incrementColumnValue方法可以保证表中的数据单调递增的特性,以上的步骤在数据库引擎层面不需要额外增加锁;
E)、删除序列,除了要删除序列的元数据表中的记录,同时需要根据序的唯一标识,删除HBase表中序列的记录。
进一步地,若数据库中存在多种序列,可以将多种序列分类存储不同的HBase表中。
进一步地,当多张HBase表同时存在的情况下,多张HBase表的表名前缀相同,表名以_n结尾,序列到序列所存放的HBase表之间的路由关系是:序列的唯一标识/HBase表的总个数,其余数来决定序列存放到第几张HBase表,且与数值存放到该序列的元数据表中。
相比于现有技术,本发明的有益效果在于:
通过设计了本申请,利用incrementColumnValue方法可以保证表中的数据单调递增的特性,数据在数据库引擎层面不需要额外增加锁,使得数据库性能好,效率高,且实现简单,不需要任何额外实现分布式锁的逻辑,也没有获得分布式锁的开销,且和锁的实现相比,本申请具有更强的可扩展性,同时能避免分布式锁的单点热点问题,在序列数量庞大,或者单region访问成为瓶颈的时候,可以创建多张HBase表来存放,以及序列到HBase表的路由方式。这是本申请提案需要保护的技术点之二。
附图说明
图1为本发明的创建序列流程图;
图2为本发明的获得序列值流程图;
图3为本发明的删除序列流程图;
图4为本发明的流程图。
具体实施方式
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
参照图1-图4,本发明提出的一种基于HBase表实现全局单调递增的序列的方法,包括以下步骤:
A)、数据库初始化阶段,HBase内创建一张表,表至少具有两列,一列对应序列的唯一标识,另外一列用于存放序列的当前值,表内每一行依次对应数据库中的一个序列;
B)、创建带有order属性的序列,把序列UID,对应的HBase表的编号以及其他属性值插入到元数据表SEQ_GEN,再把序列UID以及起始值插入到表名为ESG_TRAFODION._ORDER_SG_.ORDER_SEQ_GEN_n的HBase表中,如下表所示:
SEQ_UID | SEQ_VALUE |
1111111111111111111 | start_value(default1) |
C)、当序列获得下一个值时,需要根据序列唯一标识,以及步长,调用incrementColumnValue方法来更新HBase表中的值,并把更新的值返回给客户端,查询序列值过程中,根据序列名从元数据表SEQ_GEN中获得序列UID以及所有属性用incrementColumnValue方法更新ESG_TRAFODION._ORDER_SG_.ORDER_SEQ_GEN_n表中UID对应的序列值,并获得更新值,然后返回更新值,查询结束;
D)、若使用序列获得当前值,根据序列的唯一标识,步长为0,调用incrementColumnValue方法来更新HBase表中的值,incrementColumnValue方法可以保证表中的数据单调递增的特性,以上的步骤在数据库引擎层面不需要额外增加锁;
E)、删除带有order属性的序列,删除元数据表SEQ_GEN里UID对应的那行数据,再删除ESG_TRAFODION._ORDER_SG_.ORDER_SEQ_GEN_n的HBase表中对应的行,除了要删除序列的元数据表中的记录,同时需要根据序的唯一标识,删除HBase表中序列的记录。
在本实施例中,若数据库中存在多种序列,可以将多种序列分类存储不同的HBase表中,以此来实现扩展性,同时防止热点region的问题。
在本实施例中,当多张HBase表同时存在的情况下,多张HBase表的表名前缀相同,表名以_n结尾,来决定是第几张HBase表,序列到序列所存放的HBase表之间的路由关系是:序列的唯一标识/HBase表的总个数,其余数来决定序列存放到第几张HBase表,且与数值存放到该序列的元数据表中。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (1)
1.一种基于HBase表实现全局单调递增的序列的方法,其特征在于,包括以下步骤:
A)、数据库初始化阶段,HBase内创建一张表,表至少具有两列,若数据库中存在多种序列,可以将多种序列分类存储不同的HBase表中,一列对应序列的唯一标识,另外一列用于存放序列的当前值,表内每一行依次对应数据库中的一个序列,当多张HBase表同时存在的情况下,多张HBase表的表名前缀相同,表名以_n结尾,序列到序列所存放的HBase表之间的路由关系是:序列的唯一标识/HBase表的总个数,其余数来决定序列存放到第几张HBase表,且与数值存放到该序列的元数据表中;
B)、创建序列时,数据库的元数据表内插入数值,所述数值包括序列起始值,最大值,步长值,且需要将序列唯一标识,以及起始值插入到步骤A中创建的HBase表中;
C)、当序列获得下一个值时,需要根据序列唯一标识,以及步长,调用incrementColumnValue方法来更新HBase表中的值,并把更新的值返回给客户端;
D)、若使用序列获得当前值,根据序列的唯一标识,步长为0,调用incrementColumnValue方法来更新HBase表中的值,incrementColumnValue方法可以保证表中的数据单调递增的特性,以上的步骤在数据库引擎层面不需要额外增加锁;
E)、删除序列,除了要删除序列的元数据表中的记录,同时需要根据序的唯一标识,删除HBase表中序列的记录。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010459160.8A CN111625543B (zh) | 2020-05-27 | 2020-05-27 | 一种基于HBase表实现全局单调递增的序列的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010459160.8A CN111625543B (zh) | 2020-05-27 | 2020-05-27 | 一种基于HBase表实现全局单调递增的序列的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111625543A CN111625543A (zh) | 2020-09-04 |
CN111625543B true CN111625543B (zh) | 2023-08-25 |
Family
ID=72272600
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010459160.8A Active CN111625543B (zh) | 2020-05-27 | 2020-05-27 | 一种基于HBase表实现全局单调递增的序列的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111625543B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112104743B (zh) * | 2020-09-21 | 2022-08-16 | 北京金山云网络技术有限公司 | 序列生成方法、装置和电子设备 |
CN112948399B (zh) * | 2021-05-17 | 2021-08-03 | 太平金融科技服务(上海)有限公司深圳分公司 | 序列号生成方法、装置、计算机设备和存储介质 |
Citations (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102769667A (zh) * | 2012-06-29 | 2012-11-07 | 北京奇虎科技有限公司 | 一种id生成方法、装置和系统 |
CN103390038A (zh) * | 2013-07-16 | 2013-11-13 | 西安交通大学 | 一种基于HBase的构建和检索增量索引的方法 |
CN103823810A (zh) * | 2012-11-19 | 2014-05-28 | 中国电信股份有限公司 | 一种在分布式系统中生成唯一键的方法、装置及系统 |
CN104008212A (zh) * | 2014-06-23 | 2014-08-27 | 中国科学院重庆绿色智能技术研究院 | 一种地理位置信息相关联的物联网时间序列数据存取方法 |
CN104850611A (zh) * | 2015-05-12 | 2015-08-19 | 浪潮集团有限公司 | 一种使用kettle从关系型数据库向非关系型数据库定时增量更新数据的方法 |
CN104951519A (zh) * | 2015-06-04 | 2015-09-30 | 无锡天脉聚源传媒科技有限公司 | 一种生成序列号的方法及装置 |
CN105446976A (zh) * | 2014-06-25 | 2016-03-30 | 北大方正集团有限公司 | 业务表的处理方法及装置 |
CN106326374A (zh) * | 2016-08-15 | 2017-01-11 | 北京集奥聚合科技有限公司 | 一种从HBase中增量抽取数据的方法及系统 |
CN106777019A (zh) * | 2016-12-08 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 一种HBase系统的监控方法及监控服务器 |
CN107077476A (zh) * | 2014-09-24 | 2017-08-18 | 甲骨文国际公司 | 利用动态类型的大数据对事件进行丰富以用于事件处理 |
CN107918671A (zh) * | 2017-11-29 | 2018-04-17 | 郑州云海信息技术有限公司 | 全局序列号应用于分布式数据库中间件的方法 |
CN108960672A (zh) * | 2018-07-23 | 2018-12-07 | 广州唯品会信息科技有限公司 | 限额限次的风控方法、装置及计算机可读存储介质 |
CN108959386A (zh) * | 2018-05-31 | 2018-12-07 | 深圳壹账通智能科技有限公司 | 分布式全局唯一id生成方法、装置、设备和存储介质 |
CN109639775A (zh) * | 2018-11-27 | 2019-04-16 | 湖南蚁为软件有限公司 | 全局单调递增id生成方法、装置、系统及设备 |
CN110036382A (zh) * | 2016-09-30 | 2019-07-19 | 易享信息技术有限公司 | 多租户非关系型平台对象 |
CN110147359A (zh) * | 2017-12-13 | 2019-08-20 | 北京奇虎科技有限公司 | 一种增量生成方法、装置以及一种数据更新方法、装置 |
CN110457059A (zh) * | 2019-06-28 | 2019-11-15 | 苏宁云计算有限公司 | 一种基于redis的序列号生成方法及装置 |
CN111104397A (zh) * | 2019-11-19 | 2020-05-05 | 浙江工业大学 | 一种基于Flume的可配置数据集成方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7870110B2 (en) * | 2008-02-27 | 2011-01-11 | International Business Machines Corporation | Method and system for generating a transaction-bound sequence of records in a relational database table |
JP4612715B2 (ja) * | 2008-09-05 | 2011-01-12 | 株式会社日立製作所 | 情報処理システム、データ更新方法およびデータ更新プログラム |
US20110078666A1 (en) * | 2009-05-26 | 2011-03-31 | University Of California | System and Method for Reproducing Device Program Execution |
US10120907B2 (en) * | 2014-09-24 | 2018-11-06 | Oracle International Corporation | Scaling event processing using distributed flows and map-reduce operations |
-
2020
- 2020-05-27 CN CN202010459160.8A patent/CN111625543B/zh active Active
Patent Citations (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102769667A (zh) * | 2012-06-29 | 2012-11-07 | 北京奇虎科技有限公司 | 一种id生成方法、装置和系统 |
CN103823810A (zh) * | 2012-11-19 | 2014-05-28 | 中国电信股份有限公司 | 一种在分布式系统中生成唯一键的方法、装置及系统 |
CN103390038A (zh) * | 2013-07-16 | 2013-11-13 | 西安交通大学 | 一种基于HBase的构建和检索增量索引的方法 |
CN104008212A (zh) * | 2014-06-23 | 2014-08-27 | 中国科学院重庆绿色智能技术研究院 | 一种地理位置信息相关联的物联网时间序列数据存取方法 |
CN105446976A (zh) * | 2014-06-25 | 2016-03-30 | 北大方正集团有限公司 | 业务表的处理方法及装置 |
CN107077476A (zh) * | 2014-09-24 | 2017-08-18 | 甲骨文国际公司 | 利用动态类型的大数据对事件进行丰富以用于事件处理 |
CN104850611A (zh) * | 2015-05-12 | 2015-08-19 | 浪潮集团有限公司 | 一种使用kettle从关系型数据库向非关系型数据库定时增量更新数据的方法 |
CN104951519A (zh) * | 2015-06-04 | 2015-09-30 | 无锡天脉聚源传媒科技有限公司 | 一种生成序列号的方法及装置 |
CN106326374A (zh) * | 2016-08-15 | 2017-01-11 | 北京集奥聚合科技有限公司 | 一种从HBase中增量抽取数据的方法及系统 |
CN110036382A (zh) * | 2016-09-30 | 2019-07-19 | 易享信息技术有限公司 | 多租户非关系型平台对象 |
CN106777019A (zh) * | 2016-12-08 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 一种HBase系统的监控方法及监控服务器 |
CN107918671A (zh) * | 2017-11-29 | 2018-04-17 | 郑州云海信息技术有限公司 | 全局序列号应用于分布式数据库中间件的方法 |
CN110147359A (zh) * | 2017-12-13 | 2019-08-20 | 北京奇虎科技有限公司 | 一种增量生成方法、装置以及一种数据更新方法、装置 |
CN108959386A (zh) * | 2018-05-31 | 2018-12-07 | 深圳壹账通智能科技有限公司 | 分布式全局唯一id生成方法、装置、设备和存储介质 |
CN108960672A (zh) * | 2018-07-23 | 2018-12-07 | 广州唯品会信息科技有限公司 | 限额限次的风控方法、装置及计算机可读存储介质 |
CN109639775A (zh) * | 2018-11-27 | 2019-04-16 | 湖南蚁为软件有限公司 | 全局单调递增id生成方法、装置、系统及设备 |
CN110457059A (zh) * | 2019-06-28 | 2019-11-15 | 苏宁云计算有限公司 | 一种基于redis的序列号生成方法及装置 |
CN111104397A (zh) * | 2019-11-19 | 2020-05-05 | 浙江工业大学 | 一种基于Flume的可配置数据集成方法 |
Non-Patent Citations (1)
Title |
---|
许鑫 ; 时雷 ; 何龙 ; 张浩 ; 马新明 ."基于NoSQL数据库的农田物联网云存储系统设计与实现".《农业工程学报》.2019,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111625543A (zh) | 2020-09-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107818115B (zh) | 一种处理数据表的方法及装置 | |
EP0303231B1 (en) | Method and device for enabling concurrent access of indexed sequential data files | |
EP0362709A2 (en) | Method for obtaining access to data structures without locking | |
CN111625543B (zh) | 一种基于HBase表实现全局单调递增的序列的方法 | |
CN105320775A (zh) | 数据的存取方法和装置 | |
CN104484471B (zh) | 一种高性能数据存储引擎的实现方法 | |
CN103229164B (zh) | 数据访问方法和装置 | |
CN112269786B (zh) | 一种内存数据库kv存储引擎索引的创建方法 | |
CN111611246B (zh) | 一种基于持久性存储器优化b+树索引性能的方法和系统 | |
Ramamohanarao et al. | Recursive linear hashing | |
Kumar et al. | Access methods for bi-temporal databases | |
CN109684327B (zh) | 一种数据库外部链接的数据获取方法 | |
CN111427885B (zh) | 基于查找表的数据库管理方法和装置 | |
CN115935020A (zh) | 一种图数据存储方法和装置 | |
Chien et al. | A comparative study of version management schemes for XML documents | |
CN113742307B (zh) | 一种基于值日志系统的二级索引的存储和查询方法及系统 | |
CN114218277A (zh) | 一种关系数据库的高效查询方法和装置 | |
CN112463837B (zh) | 一种关系型数据库数据存储查询方法 | |
WO2022068289A1 (zh) | 一种数据访问方法、装置、设备及计算机可读存储介质 | |
CN114840561A (zh) | 一种基于数组索引的外键引用和连接查询的实现方法、装置、设备及存储介质 | |
JPH08235040A (ja) | データファイル管理システム | |
CN111767436A (zh) | 一种hash索引数据的存储、读取方法与系统 | |
CN118394803B (zh) | 一种存算分离数据库的缓存方法、装置、设备及介质 | |
Huang et al. | A Primer on Database Indexing | |
Omiecinski | Concurrent file conversion between B+-tree and linear hash files |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |