首页 > 数据库 >一种Mysql和Mongodb数据同步到Elasticsearch的实现办法和系统

一种Mysql和Mongodb数据同步到Elasticsearch的实现办法和系统

时间:2023-11-06 15:55:18浏览次数:46  
标签:解析 队列 Mongodb MySQL Elasticsearch Mysql 序列化 数据

本文分享自天翼云开发者社区《一种Mysql和Mongodb数据同步到Elasticsearch的实现办法和系统》,作者:l****n

核心流程如下:

 

核心逻辑说明:

MySQL Binlog解析:

首先,从MySQL的二进制日志(Binlog)中解析出表名。这一步骤非常关键,因为我们只关注特定表的数据变更。

进一步,我们检查Binlog中的操作类型,如INSERT、UPDATE和DELETE,以确定是否是表数据的变动操作。这是因为我们只需要捕获数据的变更,而不关心查询操作。

如果操作是INSERT或DELETE,我们只需要关注受影响的数据行。对于UPDATE操作,我们需要记录新旧值的变化。

内存中数据组装:

从解析过的Binlog数据中,我们构建一个内存数据结构,通常是一个数据对象,其中包括表名、字段名、新旧值等信息。这允许我们在内存中轻松管理和处理数据。

数据序列化:

接下来,我们将内存中的数据对象序列化为特定的格式,通常为JSON或XML。这是为了将数据转化为一种可传输的结构,其中包含了表名、字段名和相应的新旧值。序列化的过程使数据适合通过网络传输。

数据传输到消息队列:

完成序列化后,数据通过TCP协议发送到消息队列,通常是Apache Kafka。消息队列用于持久性存储和传递数据,以确保数据不会丢失。

数据在消息队列中等待被消费者处理,这可以是其他系统、应用程序或服务,根据需要对数据进行进一步的分析或存储。

MongoDB Oplog解析:

MongoDB的日志解析过程类似于MySQL,但我们使用的是MongoDB的操作日志(Oplog)来捕获数据变更。

同样,我们从Oplog中解析出表名,确定操作类型(INSERT、UPDATE、DELETE),并提取新旧值。

数据消费和存储:

消费者通过TCP协议从Kafka队列中拉取数据。消费者可以是各种类型的应用程序或服务,例如数据仓库、实时监控系统等。

数据可以通过HTTP协议将其写入Elasticsearch,以进行搜索、分析和可视化。Elasticsearch是一个强大的搜索引擎和分析工具,适用于处理大量数据。

以上流程描述了如何从MySQL和MongoDB中的日志解析数据,将其序列化为可传输的格式,并通过消息队列传递到其他系统或存储库中,以便进行后续处理、分析和查询。这种数据管道允许实时捕获和利用数据库中的变更,以满足各种用例和需求。

标签:解析,队列,Mongodb,MySQL,Elasticsearch,Mysql,序列化,数据
From: https://www.cnblogs.com/developer-tianyiyun/p/17812881.html

相关文章

  • 报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程
    报错:1130-host...isnotallowedtoconnecttothisMySqlserver开放mysql远程连接不使用localhost解决方法:1。改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改"mysql"数据库里的"user"表里的"host"项,从"......
  • MySQL 删除重复记录
    ==========AreallyeasywaytodothisistoaddaUNIQUEindexonthe3columns.WhenyouwritetheALTERstatement,includetheIGNOREkeyword.Likeso:   ALTERIGNORETABLEjobsADDUNIQUEINDEXidx_name(site_id,title,company);Thiswilldropallt......
  • MySQL索引
    索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个mytable表:CREATETABLEmytable(  IDINTNOTNULL,   usernameVARCHAR(16)NOTNULL );......
  • MySQL中表复制:create table like 与 create table as select
    1   CREATETABLEALIKEB此种方式在将表B复制到A时候会将表B完整的字段结构和索引复制到表A中来。2.  CREATETABLEAASSELECT*FROMB此种方式只会将表B的字段结构复制到表A中来,但不会复制表B中的索引到表A中来。这种方式比较灵活可以在复制原表表结构的同时指定要复......
  • MySQL 常用运算符
    1.算数运算符加mysql>select1+2;减mysql>select2-1;乘mysql>select2*3;除mysql>select5/3;商mysql>SELECT5DIV2;模mysql>select5%2,mod(5,2);2.比较运算符等于mysql>select1=0,1=1,null=null;不等于mysql>select1<>0,1<>1,......
  • Import SQL into MySQL with a progress meter
    Thereisnicetoolcalledpv#OnUbuntu/Debiansystem$sudoapt-getinstallpv#OnRedhat/CentOS$sudoyuminstallpvthene.g.youcanuseitlikethis.sql|-uxxx-pxxxxdbname$zcatdbpackfile.sql.gz|pv-cNzcat|mysql-uuser-ppassdbnamePlease......
  • MySQL: Speed of INSERT Statements
    SpeedofINSERTStatementsTooptimizeinsertspeed,combinemanysmalloperationsintoasinglelargeoperation.Ideally,youmakeasingleconnection,sendthedataformanynewrowsatonce,anddelayallindexupdatesandconsistencycheckinguntilthe......
  • 记一次centos7安装python的mysql-client
    Exception:Cannotfindvalidpkg-configname.SpecifyMYSQLCLIENT_CFLAGSandMYSQLCLIENT_LDFLAGSenvvarsmanually起初安装发现缺少pkg-config和 MYSQLCLIENT_LDFLAGS环境变量,安装和手动声明环境变量后又报新的错MYSQL_OPT_SSL_ENFORCE......
  • How can I move a MySQL database from one server to another?
     Myfavoritewayistopipeasqldumpcommandtoasqlcommand.Youcandoalldatabasesoraspecificone.So,forinstance,mysqldump-uuser-ppasswordmyDatabase|mysql-hremoteserver-uremoteuser-premoteserverpasswordYoucandoalldatabaseswithmysq......
  • Centos 7 官网下载安装mysql server 5.6
    Centos7官网下载安装mysqlserver#wgethttp://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm#rpm-ivhmysql-community-release-el7-5.noarch.rpm#yuminstallmysql-community-server安装成功后重启mysql服务。#servicemysqldrestart初次安装mysql,root......