一种基于消息队列的MongoDB数据实时同步方法及系统技术方案

技术编号:24756298 阅读:49 留言:0更新日期:2020-07-04 09:12
本发明专利技术提出一种基于消息队列的MongoDB数据实时同步方法及系统,旨在实现从MongoDB到目标系统ElasticSearch的实时数据同步,并解决原来的同步工具在数据同步过程中同步速率慢和由于MongoDB快速写入情况而引发的同步数据丢失的问题,保证了从MongoDB到ElasticSearch的快速、准确、可靠的数据同步。

A method and system of mongodb data real time synchronization based on message queue

【技术实现步骤摘要】
一种基于消息队列的MongoDB数据实时同步方法及系统
本专利技术涉及计算机信息
,具体涉及一种基于消息队列的MongoDB数据实时同步方法及系统。
技术介绍
随着信息时代的到来,数据量急剧增加,包括各种结构化的数据和非结构化的数据,面对大规模的数据量和复杂的数据类型,传统的数据存储和数据检索方式都已经不能满足需求,而MongoDB和ElasticSearch(简称ES)的出现有效地解决了大数据模式下的数据存储和数据检索的问题。MongoDB作为NoSQL的一个主流数据库,它基于文档进行存储,与传统的关系型数据库不同,它不需要预定义数据模式。MongoDB副本集从节点通过操作日志异步复制主节点的数据,这个操作日志就是MongoDB的oplog。oplog是一个特殊的数据集合,用来存储MongoDB的所有操作日志,它在MongoDB启动之前就被预先设置好了存储容量,且不能轻易修改,其存储方式类似于环形缓存器,当其存储空间不足时,新插入的数据会按时间顺序覆盖旧的数据。oplog的数据存储格式如下所示:其中,“ts”表示本次操作发生的时间戳,“op”表示本次的操作类型,“ns”表示本次操作针对的集合名称,“o”表示操作的具体内容。虽然MongoDB可以很好地被应用于大数据的存储,但是其在检索和查询方面存在一些弊端,如无法适用于分词查询等,并且查询速度较慢,无法做到实时检索,而ElasticSearch作为一个企业级的全文搜索引擎,可以很好地解决这一问题。ElasticSearch使用Lucene作为开发的核心,通过提供RestfulAPI接口,可以实现各种复杂的查询,并且查询速度较快。但是ElasticSearch不适合直接用作数据存储,因为使用ElasticSearch存储数据时有数据模式的要求,当数据模式一旦设定好之后,就不能轻易修改,因此一般不采用ElasticSearch直接用作存储数据。在实际的应用中,采用MongoDB存储数据,ElasticSearch检索数据时,就存在两者之间的数据同步问题。目前业界使用较多的是mongo-connector这一开源工具,该工具基于python开发,并作为第三方包进行使用。该工具通过跟读MongoDB下的oplog,进而创建一个从MongoDB到ElasticSearch的数据通道,最终实现两者之间的数据同步。上述同步工具有其不足之处,主要表现在以下两个方面:(1)同步速度慢:mongo-connector同步数据时,受数据类型、数据复杂程度等多方面的影响,导致向目标系统ElasticSearch同步数据时速度比较慢。如在该部署环境中,使用一个索引的情况下,同步的数据单条约2.2Kb大小且多层嵌套,其同步速率仅为480条/秒,而MongoDB的写入速度约为700条/秒,可见同步的速率远不及MongoDB的写入速度。(2)数据丢失:mongo-connector同步工具通过定时读取MongoDB的oplog,解析日志内容,实现MongoDB数据的实时同步。然而,由于MongoDB在启动时需要预先设置oplog的数据存储容量,当日志规模超过oplog预先设置的容量时,日志数据会根据时间顺序覆盖oplog中已经存在的数据。因此,当mongo-connector的同步速度小于MongoDB的日志刷新速度时,特别是大规模数据短时间内写入或者更新,就会造成同步数据的丢失,甚至会导致同步系统崩溃。在解决上述问题时,目前大多是采用修改oplogSize的方法。修改oplogSize可以缓解上述问题,但是不能从根本上解决问题,因为当oplogSize设置的特别大,不仅仅会造成磁盘空间的浪费,同时由于oplog不使用索引,所以初始查询代价特别大,从而降低同步的速率,无法做到数据的实时同步,因此给数据同步带来了很大不便。
技术实现思路
本专利技术的目的是提出一种基于消息队列的MongoDB数据实时同步方法及系统,旨在实现从MongoDB到目标系统ElasticSearch的实时数据同步,并解决原来的同步工具在数据同步过程中同步速率慢和由于MongoDB快速写入情况而引发的同步数据丢失的问题,保证了从MongoDB到ElasticSearch的快速、准确、可靠的数据同步。为实现上述目的,本专利技术采用如下技术方案:一种基于消息队列的MongoDB数据实时同步方法,步骤包括:创建MongoDB与Kafka之间的长连接;跟读MongoDB的日志文件oplog,对读取到的需要同步的bson数据进行初步解析,并根据oplog数据中的“ns”字段,将MongoDB的集合名映射成设定的ElasticSearch的索引名;将该Bson数据转码成可以缓存到Kafka的序列化数据,并缓存到Kafka上的与ElasticSearch索引名同名的Topic中;为每一个Topic创建一条从Kafka到ElasticSearch的长连接;从Kafka的Topic中读取之前缓存好的数据,并转码还原成Bson数据,再进一步解析;解析每一条数据的操作类型,并为之调取对应的操作方法;最后把数据解析成ElasticSearch可以识别的数据结构,并缓存在本地;本地缓存的数据达到设定的阈值时,批量提交到ElasticSearch中。进一步地,如果Kafka上不存在Topic,则自动创建Topic。进一步地,操作类型包括“i”、“d”、“u”、“c”,对应的操作方法包括“insert”、“delete”、“update”、“cmd”。一种基于消息队列的MongoDB数据实时同步系统,包括:一连接创建模块,用于解析配置文件中的各项参数并初始化,指定要同步的数据集合的名称和所匹配的索引的名称,同时创建MongoDB与Kafka之间的长连接,形成MongoDB的数据集合到Kafka的topic的多条数据通道;一数据读取模块,用于跟读MongoDB中的oplog,对读取到需要同步的Bson数据进行初步解析,转码成可以缓存到Kafka中的序列化数据;一命名解析模块,用于把从MongoDB中读取到的oplog数据中的“ns”字段的集合名解析替换成与之匹配的ElasticSearch中的索引名;一数据缓存模块,用于将序列化数据发送到Kafka中进行缓存,数据读取时,再将从Kafka中读取的序列化数据转码成Bson数据,并进一步解析,根据解析之后的数据的操作类型,调取对应的操作方法;一数据同步模块,用于提供对应于数据操作类型的操作方法,并根据数据缓存模块所调用的操作方法,将数据解析成ElasticSearch可以识别的数据结构,并缓存在本地,最后批量同步到ElasticSearch中。进一步地,数据读取模块将从MongoDB中读取的oplog数据由Bson类型转码成序列化的数据,便于之后在Kafka中进行存储。进一步地,当Kafka中的Topi本文档来自技高网
...

【技术保护点】
1.一种基于消息队列的MongoDB数据实时同步方法,步骤包括:/n创建MongoDB与Kafka之间的长连接;/n跟读MongoDB的日志文件oplog,对读取到的需要同步的bson数据进行初步解析,并根据oplog数据中的“ns”字段,将MongoDB的集合名映射成设定的ElasticSearch的索引名;/n将该Bson数据转码成可以缓存到Kafka的序列化数据,并缓存到Kafka上的与ElasticSearch索引名同名的Topic中;/n为每一个Topic创建一条从Kafka到ElasticSearch的长连接;/n从Kafka的Topic中读取之前缓存好的数据,并转码还原成Bson数据;/n解析每一条Bson数据的操作类型,调取对应的操作方法,以解析成ElasticSearch可以识别的数据结构,并缓存在本地;/n当本地缓存的数据达到设定的阈值时,批量提交到ElasticSearch中。/n

【技术特征摘要】
1.一种基于消息队列的MongoDB数据实时同步方法,步骤包括:
创建MongoDB与Kafka之间的长连接;
跟读MongoDB的日志文件oplog,对读取到的需要同步的bson数据进行初步解析,并根据oplog数据中的“ns”字段,将MongoDB的集合名映射成设定的ElasticSearch的索引名;
将该Bson数据转码成可以缓存到Kafka的序列化数据,并缓存到Kafka上的与ElasticSearch索引名同名的Topic中;
为每一个Topic创建一条从Kafka到ElasticSearch的长连接;
从Kafka的Topic中读取之前缓存好的数据,并转码还原成Bson数据;
解析每一条Bson数据的操作类型,调取对应的操作方法,以解析成ElasticSearch可以识别的数据结构,并缓存在本地;
当本地缓存的数据达到设定的阈值时,批量提交到ElasticSearch中。


2.如权利要求1所述的方法,其特征在于,如果Kafka上不存在Topic,则自动创建Topic。


3.如权利要求1所述的方法,其特征在于,操作类型包括“i”、“d”、“u”、“c”;对应的操作方法包括“insert”、“delete”、“update”、“cmd”,用于对ElasticSearch进行数据插入操作、数据删除操作、数据更新操作和命令行操作。。


4.一种基于消息队列的MongoDB数据实时同步系统,包括:
一连接创建模块,用于解析配置文件中的各项参数并初始化,指定要同步的数据集合的名称和所匹配的索引的名称,同时创建MongoDB与Kafka之间的长连接,形成MongoDB的数据集合到Kafka的topic的多条数据通道;
一数据读取模块,用于跟读MongoDB中的opl...

【专利技术属性】
技术研发人员:戴琼石瑞聪彭怀梁王晓岩
申请(专利权)人:中国科学院信息工程研究所
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1