CN110287251B - MongoDB到HBase的分布式高容错数据实时同步方法 - Google Patents
MongoDB到HBase的分布式高容错数据实时同步方法 Download PDFInfo
- Publication number
- CN110287251B CN110287251B CN201910561319.4A CN201910561319A CN110287251B CN 110287251 B CN110287251 B CN 110287251B CN 201910561319 A CN201910561319 A CN 201910561319A CN 110287251 B CN110287251 B CN 110287251B
- Authority
- CN
- China
- Prior art keywords
- oplog
- key
- data
- mongodb
- value
- 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
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/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
-
- 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
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)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种MongoDB到HBase的分布式高容错数据实时同步方法,包括:开启MongoDB的oplog操作日志记录功能;生产者将MongoDB中oplog的检查点之后的记录读取出来,将各条oplog推送到Kafka的预定主题,同时写入Redis;oplog进入Storm后,判断该条oplog的操作类型,针对涉及数据同步的操作类型,获取适合HBase存储的键‑值以及数据定位信息,或者仅获取数据定位信息;HBase writer接受传来的键‑值及数据定位信息,进行相应处理。本发明高效地进行从MongoDB到HBase数据实时同步,保证数据同步的准确性,能够满足业务系统复杂的数据实时同步要求。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及MongoDB到HBase的分布式高容错数据实时同步方法。
背景技术
MongoDB是一种常用的非关系型数据库,作为一个适用于敏捷开发的数据库,MongoDB的数据模式可以随着应用程序的发展而灵活地更新,MongoDB能够使企业更加具有敏捷性和可扩展性,各种规模的企业都可以通过使用MongoDB来创建新的应用,提高工作效率,降低企业成本。HBase是建立在Hadoop(分布式计算)文件系统之上的分布式面向列的数据库,可以提供快速随机访问海量结构化数据。尽管目前已经有很多各种数据库之间的同步方法,但对于MongoDB到HBase之间的数据同步,仍未有较为通用的方法。
发明内容
本发明的目的在于提供一种MongoDB到HBase的分布式高容错数据实时同步方法,高效地进行从MongoDB到HBase数据实时同步,达到异构数据库备份的目的,同时支持oplog的消费确认机制,保证数据同步的准确性,能够满足业务系统复杂的数据实时同步要求。
实现上述目的的技术方案是:
一种MongoDB到HBase的分布式高容错数据实时同步方法,包括:
步骤S1,开启MongoDB的oplog(操作日志)操作日志记录功能;
步骤S2,生产者将MongoDB中oplog的检查点之后的记录读取出来,将各条oplog推送到Kafka(一个消息队列工具)的预定主题,同时写入Redis(一个内存数据库);
步骤S3,Storm(一个开源分布式计算系统)作为消费者订阅Kafka的预定主题,oplog进入Storm后,判断该条oplog的操作类型,针对涉及数据同步的操作类型,获取适合HBase存储的键-值以及数据定位信息,或者仅获取数据定位信息;
步骤S4,HBase writer(Hbase写入器)接受步骤S3传来的键-值及数据定位信息,若传入的键-值信息为空,HBase writer会将指定位置的一行数据删除,若不为空,则将传入的键-值写入指定位置;在数据写入成功后,HBase writer根据传入的信息重新拼接出第一时间戳+名称空间+oid(Mongodb表唯一id,Mongodb中表字段中的不重复字段)作为键,并删除Redis中对应的记录;若数据写入失败,则不做任何处理;
步骤S5,一条oplog处理完成后,返回步骤S3,直至所有oplog处理完成后。
优选的,所述的步骤S2中,生产者读取定位时间戳作为检查点,以键=名称空间,值=第一时间戳+oplog的形式将oplog推送到Kafka的预定主题Storm,同时以键=第一时间戳+名称空间+oid,值=0的形式将键-值存到Redis中,每将一条oplog写入Kafka和Redis后,将其第一时间戳写入到定位时间戳中。
优选的,所述的步骤S2中,
名称空间由当前oplog中ns字段(Oplog是json格式的,json由若干个键和值组成,ns是其中的一个键的名称)的值组成,表示对应数据所在的库和集合;
第一时间戳指的是当前oplog中ts字段(Oplog是json格式的,json由若干个键和值组成,ts是其中的一个键的名称)的值;
在生产者读取的一批oplog全部推向Kafka及Redis后,重复步骤S2。
优选的,在Kafka的同一消费者组中,有多个消费者来共同消费生产者发送到该消费者组中的数据。
优选的,所述的oplog的操作类型分为插入、修改、删除和其他四类,其他类别包括建表、数据库声明和系统的空操作;
针对插入和修改操作:获取oplog中关于插入和修改描述所在的子json(一种轻量级数据交换格式,由若干个键值对组成),及产生该条oplog数据所在的库、表和主键id这些定位信息及第一时间戳;然后,对于接收到的子json,对子json进行递归转换,将子json转换成适合HBase存储的键-值格式,对于嵌套多层子json,转换到最后一层为止;之后对键-值进行时间日期等格式转换;
针对删除操作:获取产生该条oplog数据所在的库、表和主键id这些定位信息及第一时间戳;
针对其他操作:重新拼接出第一时间戳+名称空间+oid作为键,并删除Redis中对应的记录。
优选的,每隔15秒,Redis遍历器(Redis Scanner)遍历一遍Redis,寻找键中第一时间戳小于当前时间-30s的键,并将这些键所对应的值加1,在给值加1之前,如果值>5,在Redis中将该条数据删除;
Redis遍历器获取到符合条件的键后,利用键中的名称空间和oid这些定位信息,在MongoDB数据库中查找对应的键-值信息,若键-值信息不为空,将对应的oplog的子json进行递归转换,将子json转换成适合HBase存储的键-值格式,对于嵌套多层子json,转换到最后一层为止;之后对键-值进行时间日期等格式转换,再次转入步骤S4;若查到的键-值信息为空,转到步骤S4。
本发明的有益效果是:
1)本发明基于解析MongoDB内部的oplog实现数据同步,对源端的侵入性低,避免了数据同步对源端产生过多压力,且在同步过程中表的粒度上严格按照日志产生顺序,避免了因同步顺序的颠倒造成数据不一致的现象。
2)本发明基于Kafka、Storm等分布式工具,并行实现数据的同步,同步效率高,且避免了单点故障,提高了服务的健壮性。
3)本发明基于Redis在内存中实现了oplog从生产者端到写入HBase之间的同步日志消费确认,并在标记到未完成同步的数据后,会进行多次补数据操作,确保了数据的一致性,同时,因Redis中只存记录数据的定位信息和时间戳,且会在完成同步或者同步超时后删除,因此不会出现过多占用系统内存的现象。
4)本发明方法扩展性强,在已经部署好的MongoDB实时同步到HBase的单对单模式下,可轻易的部署新的生产者将另外一个MongoDB的数据推到Kafka的对应主题中,达到多个MongoDB源端同步到一个HBase的效果。
5)本发明方法对目的端几乎无依赖,只需要对HBase writer稍作修改,实现相应的方法即可将目的端替换为其他的非关系型数据库,如果实际业务场景中源端MongoDB的集合中json格式固定统一,还可将目的端替换为关系型数据库。
附图说明
图1是本发明的MongoDB到HBase的分布式高容错数据实时同步方法的流程图;
图2是本发明中HBase writer处理传来数据的流程图;
图3是本发明中Redis遍历器获取同步超时及补数据的流程图。
具体实施方式
下面将结合附图对本发明作进一步说明。
请参阅图1,本发明的MongoDB到HBase的分布式高容错数据实时同步方法,包括下列步骤:
步骤S1,开启MongoDB的oplog操作日志记录功能(复制集和分片式两种部署方式默认开启,单节点部署需手动配置开启),并确保MongoDB和HBase两个数据库处在数据相同的初始状态。
Oplog是MongoDB中用于实现数据备份的集合,MongoDB中的集合都以json格式存储,oplog的主要功能是用来存储MongoDB中的写操作,分为增删改、建表、数据库声明和系统空操作等类型。
步骤S2,生产者读取定位时间戳作为检查点,将MongoDB中oplog的检查点之后的记录读取出来,以键(key)=名称空间(名称空间由该条oplog中ns字段的值组成,表示对应数据所在的库和集合),值(value)=第一时间戳+oplog的形式将oplog推送到Kafka的预定主题(此处的第一时间戳指的是oplog中ts字段的值),同时以键=第一时间戳+名称空间+oid,值=0的形式将键-值存到Redis中,Redis中的数据是由生产者把oplog推入Kafka前写入的,每将一条oplog写入Kafka和Redis后,将该条oplog的ts值(第一时间戳)写入到定位时间戳中。在生产者读取的一批oplog全部推向Kafka及Redis后,重复步骤S2。
在Kafka的同一消费者组中,有多个消费者来共同消费生产者发送到该消费者组中的数据,起到负载均衡的作用。在步骤S2中推送到Kafka中数据的键=名称空间,是为了确保同一MongoDB集合中的oplog进入Kafka的同一分区,保证同一集合中的oplog消费顺序与oplog的产生顺序一致,避免因在目的端执行顺序的不同,造成数据不一致。
步骤S3,Storm作为消费者订阅Kafka相应的主题,oplog进入Storm后,判断该条oplog的操作类型,针对涉及数据同步的操作类型,获取适合HBase存储的键-值以及数据定位信息,或者仅获取数据定位信息。具体地:
oplog的操作类型分为插入、修改、删除和其他四类,其他类别包括建表、数据库声明和系统的空操作,其中,
针对插入和修改操作:获取oplog中关于插入和修改描述所在的子json,及产生该条oplog数据所在的库、表和主键id这些定位信息及第一时间戳;然后,对于接收到的子json,对子json进行递归转换,将子json转换成适合HBase存储的键-值(k-v,key-values)格式,对于嵌套多层子json,转换到最后一层为止;之后对键-值进行时间日期等格式转换,确保源端、目的端的格式正确。
针对删除操作:获取产生该条oplog数据所在的库、表和主键id这些定位信息及第一时间戳。
针对其他操作:建表、数据库声明和系统的空操作相关日志,这些日志在oplog中占的比重较小且不涉及到数据同步。重新拼接出第一时间戳+名称空间+oid作为键,并删除Redis中对应的记录。
步骤S4,HBase writer接受步骤S3传来的键-值及数据定位信息,若传入的键-值信息为空,HBase writer会将指定位置的一行数据删除,若不为空,则将传入的键-值写入指定位置;在数据写入成功后,HBase writer根据传入的信息重新拼接出第一时间戳+名称空间+oid作为键,并删除Redis中对应的记录。若数据写入失败,则不做任何处理。如图2所示。
步骤S5,一条oplog处理完成后,返回步骤S3,直至所有oplog处理完成。
在步骤S2-S5的过程中,如图3所示,每隔15秒,Redis遍历器遍历一遍Redis,寻找键中第一时间戳小于当前时间-30s的键,并将这些键所对应的值(value)加1,在给值加1之前,如果值>5,表示该条数据在重复多次后仍未同步成功,在Redis中将该条数据删除。Redis遍历器获取到符合条件的键后,利用键中的名称空间和oid这些定位信息,在MongoDB数据库中查找对应的键-值信息,若键-值信息不为空,将对应的oplog的子json进行递归转换,将子json转换成适合HBase存储的键-值格式,对于嵌套多层子json,转换到最后一层为止;之后对键-值进行时间日期等格式转换,再次转入步骤S4;若查到的键-值信息为空,表明该键所对应的为删除操作,转到步骤S4。
以上实施例仅供说明本发明之用,而非对本发明的限制,有关技术领域的技术人员,在不脱离本发明的精神和范围的情况下,还可以作出各种变换或变型,因此所有等同的技术方案也应该属于本发明的范畴,应由各权利要求所限定。
Claims (6)
1.一种MongoDB到HBase的分布式高容错数据实时同步方法,其特征在于,包括:
步骤S1,开启MongoDB的oplog操作日志记录功能;
步骤S2,生产者读取出MongoDB中预设检查点之后的多条oplog,将各条oplog推送到Kafka的预定主题,同时写入Redis;
步骤S3,Storm作为消费者订阅Kafka的预定主题,oplog进入Storm后,判断该条oplog的操作类型,针对涉及数据同步的操作类型,获取适合HBase存储的键-值以及数据定位信息,或者仅获取数据定位信息;
步骤S4,HBase writer接受根据步骤S3获取的键-值及数据定位信息,若传入的键-值信息为空,则HBase writer将指定位置的一行数据删除,若不为空,则将传入的键-值写入指定位置;在数据写入成功后,HBase writer根据传入的信息重新拼接出第一时间戳+名称空间+oid作为键,并删除Redis中对应的记录;若数据写入失败,则不做任何处理;
步骤S5,一条oplog处理完成后,返回步骤S3,直至所有oplog处理完成后。
2.根据权利要求1所述的MongoDB到HBase的分布式高容错数据实时同步方法,其特征在于,所述的步骤S2中,生产者读取定位时间戳作为检查点,以键=名称空间,值=第一时间戳+oplog的形式将oplog推送到Kafka的预定主题Storm,同时以键=第一时间戳+名称空间+oid,值=0的形式将键-值存到Redis中,每将一条oplog写入Kafka和Redis后,将其第一时间戳写入到定位时间戳中。
3.根据权利要求2所述的MongoDB到HBase的分布式高容错数据实时同步方法,其特征在于,所述的步骤S2中,
名称空间由当前oplog中ns字段的值组成,表示对应数据所在的库和集合;
第一时间戳指的是当前oplog中ts字段的值;
在生产者读取的一批oplog全部推向Kafka及Redis后,重复步骤S2。
4.根据权利要求1所述的MongoDB到HBase的分布式高容错数据实时同步方法,其特征在于,在Kafka的同一消费者组中,有多个消费者来共同消费生产者发送到该消费者组中的数据。
5.根据权利要求1所述的MongoDB到HBase的分布式高容错数据实时同步方法,其特征在于,所述的oplog的操作类型分为插入、修改、删除和其他四类,其他类别包括建表、数据库声明和系统的空操作;
针对插入和修改操作:获取oplog中关于插入和修改描述所在的子json,及产生该条oplog数据所在的库、表和主键id这些定位信息及第一时间戳;然后,对于接收到的子json,对子json进行递归转换,将子json转换成适合HBase存储的键-值格式,对于嵌套多层子json,转换到最后一层为止;之后对键-值进行时间日期等格式转换;
针对删除操作:获取产生该条oplog数据所在的库、表和主键id这些定位信息及第一时间戳;
针对其他操作:重新拼接出第一时间戳+名称空间+oid作为键,并删除Redis中对应的记录。
6.根据权利要求5所述的MongoDB到HBase的分布式高容错数据实时同步方法,其特征在于,每隔15秒,Redis遍历器遍历一遍Redis,寻找键中第一时间戳小于当前时间-30s的键,并将这些键所对应的值加1,在给值加1之前,如果值>5,在Redis中将该条数据删除;
Redis遍历器获取到符合条件的键后,利用键中的名称空间和oid这些定位信息,在MongoDB数据库中查找对应的键-值信息,若键-值信息不为空,将对应的oplog的子json进行递归转换,将子json转换成适合HBase存储的键-值格式,对于嵌套多层子json,转换到最后一层为止;之后对键-值进行时间日期等格式转换,再次转入步骤S4;若查到的键-值信息为空,转到步骤S4。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910561319.4A CN110287251B (zh) | 2019-06-26 | 2019-06-26 | MongoDB到HBase的分布式高容错数据实时同步方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910561319.4A CN110287251B (zh) | 2019-06-26 | 2019-06-26 | MongoDB到HBase的分布式高容错数据实时同步方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110287251A CN110287251A (zh) | 2019-09-27 |
CN110287251B true CN110287251B (zh) | 2022-09-16 |
Family
ID=68006132
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910561319.4A Active CN110287251B (zh) | 2019-06-26 | 2019-06-26 | MongoDB到HBase的分布式高容错数据实时同步方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110287251B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113495894B (zh) * | 2020-04-01 | 2024-07-16 | 北京京东振世信息技术有限公司 | 数据同步方法、装置、设备及存储介质 |
CN112487087B (zh) * | 2020-11-17 | 2024-08-06 | 中国人寿保险股份有限公司 | 一种增量数据实时同步的方法及相关设备 |
CN112286941B (zh) * | 2020-12-23 | 2021-03-23 | 武汉物易云通网络科技有限公司 | 一种基于Binlog+HBase+Hive的大数据同步方法和装置 |
CN112667698B (zh) * | 2021-01-04 | 2023-02-28 | 山西云媒体发展有限公司 | 一种基于融媒体平台的MongoDB数据同步方法 |
CN114035982B (zh) * | 2021-11-08 | 2024-07-02 | 中电福富信息科技有限公司 | 一种基于事件驱动的apm指标切片计算方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108920698A (zh) * | 2018-07-16 | 2018-11-30 | 北京京东金融科技控股有限公司 | 一种数据同步方法、装置、系统、介质及电子设备 |
CN109800128A (zh) * | 2019-01-15 | 2019-05-24 | 苏州工品汇软件技术有限公司 | 基于微服务的操作日志记录收集方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170255663A1 (en) * | 2016-03-07 | 2017-09-07 | Researchgate Gmbh | Propagation of data changes in a distributed system |
-
2019
- 2019-06-26 CN CN201910561319.4A patent/CN110287251B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108920698A (zh) * | 2018-07-16 | 2018-11-30 | 北京京东金融科技控股有限公司 | 一种数据同步方法、装置、系统、介质及电子设备 |
CN109800128A (zh) * | 2019-01-15 | 2019-05-24 | 苏州工品汇软件技术有限公司 | 基于微服务的操作日志记录收集方法 |
Non-Patent Citations (1)
Title |
---|
基于存储形态及特征的HBase数据库灾难恢复机制研究;罗文华等;《信息网络安全》;20180910(第09期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110287251A (zh) | 2019-09-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110287251B (zh) | MongoDB到HBase的分布式高容错数据实时同步方法 | |
CN111367886B (zh) | 数据库中数据迁移的方法及装置 | |
CN107402963B (zh) | 搜索数据的构建方法、增量数据的推送方法及装置和设备 | |
CN110879813B (zh) | 一种基于二进制日志解析的MySQL数据库增量同步实现方法 | |
CN113297166B (zh) | 数据处理系统、方法以及装置 | |
CN109918349B (zh) | 日志处理方法、装置、存储介质和电子装置 | |
CN113535856B (zh) | 数据同步方法及系统 | |
CN110162512B (zh) | 一种日志检索方法、装置及存储介质 | |
EP3480705B1 (en) | Database data modification request processing method and apparatus | |
CN109298978B (zh) | 一种指定位置的数据库集群的恢复方法及系统 | |
CN111414362A (zh) | 数据读取方法、装置、设备及存储介质 | |
CN114416868B (zh) | 一种数据同步方法、装置、设备及存储介质 | |
CN114595288A (zh) | 一种基于sql命令级的多idc分布式系统数据同步方法 | |
CN110019169B (zh) | 一种数据处理的方法及装置 | |
CN110866068B (zh) | 一种基于hdfs的公告数据存储方法及其装置 | |
CN116303789A (zh) | 多分片多副本数据库并行同步方法、装置及可读介质 | |
CN114564458B (zh) | 集群间数据同步的方法、装置、设备和存储介质 | |
CN116186053A (zh) | 一种数据处理方法、装置及存储介质 | |
CN111274316B (zh) | 多级数据流转任务的执行方法及装置、电子设备、存储介质 | |
CN115408200A (zh) | 多存储引擎的数据备份方法、装置、电子设备及存储介质 | |
CN116756247B (zh) | 数据修复方法、装置、计算机设备和存储介质 | |
CN115357429B (zh) | 恢复数据文件的方法、装置和客户端 | |
CN116756236A (zh) | 一种数据同步方法、装置、设备及存储介质 | |
CN114238494A (zh) | 数据同步处理方法、装置、计算机设备和存储介质 | |
CN116126620A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |