数据异构

article/2025/10/5 1:22:29

转自:https://my.oschina.net/wangxindong/blog/1531596

1、定义

何谓数据异构,上周交易部门商品的同事过来做分享,又看到这个词,他的PPT里面是 数据库异构。其实我们以前做的事情,也是可以成为数据异构。比如我们将DB里面的数据持久化到REDIS里面去,就是一种数据异构的方式。如果要下个定义的话:把数据按需(数据结构、存取方式、存取形式)异地构建存储。

2、常见应用场景

分库分表中有一个最为常见的场景,为了提升数据库的查询能力,我们都会对数据库做分库分表操作。比如订单库,开始的时候我们是按照订单ID维度去分库分表,那么后来的业务需求想按照商家维度去查询,比如我想查询某一个商家下的所有订单,就非常麻烦。这个时候通过数据异构就能很好的解决此问题,比如下图

异构维度.png

总结起来大概有以下几种场景

  1. 数据库镜像
  2. 数据库实时备份
  3. 多级索引
  4. search build(比如分库分表后的多维度数据查询)
  5. 业务cache刷新
  6. 价格、库存变化等重要业务消息

3、数据异构方向

异构的几种方向.png

在日常业务开发中大致可以分为以上几种数据去向,DB-DB这种方式,一般常见于分库分表后,聚合查询的时候,比如我们按照订单ID去分库分表,那么这个时候我们要按照用户ID去查询,查询这个用户下面的订单就非常不方便了,当然可以使用统一加到内存中去,但这样不太好。所以我们就可以用数据库异构的方式,重新按照用户ID的维度来分一个表,像在上面常见应用场景中介绍的那样。把数据异构到redis、elasticserach、slor中去要解决的问题跟按照多维度来查询的需求差不多。这些存储天生都有聚合的功能。当然同时也可以提高查询性能,应对大访问量,比如redis这种抗量银弹。

数据异构的常用方法

3.1、完整克隆

这个很简单就是将数据库A,全部拷贝一份到数据库B,这样的使用场景是离线统计跑任务脚本的时候可以。缺点也很突出,不适用于持续增长的数据。

3.2、标记同步

这个是业务场景比较简单的时候,理想情况下数据不会发生改变,比如日志数据,这个时候可以去标记,比如时间戳,这样当发生故障的时候还可以回溯到上一次同步点,开始重新同步数据。

3.3、BINLOG方式

通过实时的订阅mysql的binlog日志,消费到这些日志后,重新构建数据结构插入一个新的数据库或者是其他存储比如es、slor等等。订阅binlog日志可以比较好的能保证数据的一致性。

3.4、MQ方式

业务数据写入DB的同时,也发送MQ一份,也就是业务里面实现双写。这种方式比较简单,但也很难保证数据一致性,对简单的业务场景可以采用这种方式。

5、binlog和mq方式重点介绍

5.1、binlog

5.1.1、订阅binglog日志异构流程图

canal异构方式.png

canal异构方式.png

5.1.2、使用说明

binglog是数据的日志记录方式,每次对数据的操作都会有binlog日志。现在开源的订阅binlog日志的组件,比如使用比较广泛的canal,它是阿里开源的基于mysql数据库binlog的增量订阅和消费组件。由于cannal服务器目前读取的binlog事件只保存在内存中,并且只有一个canal客户端可以进行消费。所以如果需要多个消费客户端,可以引入activemq或者kafka。如上图绿色虚线框部分。我们还需要确保全量对比来保证数据的一致性(canal+mq的重试机制基本可以保证写入异构库之后的数据一致性),这个时候可以有一个全量同步WORKER程序来保证,如上图深绿色部分。

5.1.3、canal的工作原理:

先来看下mysql主备(主从)复制原理如下图,在此原理基础之上我们再来理解canal的实现原理就一眼能明白了。

 

mysql主备复制实现原理.jpg

mysql主备复制实现原理.jpg


mysql主备(主从)复制原理,从上层来看,复制分成三步:

  1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);
  2. slave将master的binary log events拷贝到它的中继日志(relay log);
  3. slave重做中继日志中的事件,将改变反映它自己的数据。
    再来看下canal的原理,如下图:canal工作原理.jpg

    canal工作原理.jpg


    cannal实现原理相对比较简单(参照上面的mysql主备复制实现原理):
  4. canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
  5. mysql master收到dump请求,开始推送binary log给slave(也就是canal)
  6. canal解析binary log对象(原始为byte流)
    我们在部署canal server的时候要部署多台,来保证高可用。但是canal的原理,是只有一台服务器在跑处理,其它的服务器作为热备。canal server的高可用是通过zookeeper来维护的。
    有关canal更具体的使用和详细原理请参照:https://github.com/alibaba/canal

5.1.4、注意点

  • 1、确认MySQL开启binlog,使用show variables like 'log_bin'; 查看ON为已开启
  • 2、确认目标库可以产生binlog,show master status 注意Binlog_Do_DB,Binlog_Ignore_DB参数
  • 3、确认binlog格式为ROW,使用show variables like 'binlog_format'; 非ROW模式登录MySQL执行 set global binlog_format=ROW; flush logs; 或者通过更改MySQL配置文件并重启MySQL生效。
  • 4、为保证binlake服务可以获取Binlog,需添加授权,执行 GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'admin'@'%' identified by 'admin'; FLUSH PRIVILEGES;

5.2、mq方式

MQ异构方式.png

MQ异构方式.png

mq的方式,就相对简单,实际上是在业务逻辑中写DB的同时去写一次MQ,但是这种方式不能够保证数据一致性,就是不能保证跨资源的事务。注:调用第三方远程RPC的操作一定不要放到事务中。

6、总结

本文主要叙述了数据异构的使用场景,方法。这里面涉及到的activemq以及canal并没有深入分析,关于这块的内容可以直接参考相关具体文档,文中已给了链接地址。根据数据异构的定义,将数据异地构建存储,我们可以应用的地方就非常多,文中说的分库分表之后按照其它维度来查询的时候,我们想脱离DB直接用缓存比如redis来抗量的时候。数据异构这种方式都能够很好的帮助我们来解决诸如此类的问题。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/F4OkqfV1.shtml

相关文章

异构计算综述

异构计算(Heterogeneous computing) 异构计算(Heterogeneous computing)技术从80年代中期产生,由于它能经济有效地获取高性能计算能力、可扩展性好、计算资源利用率高、发展潜力巨大,目前已成为并行/分布计…

什么是同构与异构?及在不同背景下的理解

同构与异构的基本理解 异构: 多个不同类型的物体参与完成某一件事情,异构系统的各个组成部分具有自身的自治性,实现数据共享的前提下,仍保留有自己的应用特性,完整特性,安全特性。同构: 多个相…

CentOS7安装iTop

一、整体架构说明 系统:CentOS7 数据库:mysql itop部署在192.168.0.22上,mysql建在192.168.0.11上 二、准备工作 https://sourceforge.net/projects/itop/?sourcetyp_redirect 下载最新版本itop,此处为iTop-2.6.0-4294.zip 三、…

itop4412 编译android,iTOP-4412开发板-Android5.1- 移植教程

本文档介绍itop-4412开发板上移植 Android5.1 的教程,包括:基础知识、搭建编译环境、编译、repo 下载、烧写等内容。 需要了解的基础知识有 git 和 repo 工具,这两个工具是程序员必备要会使用的工具;搭 建编译环境是基于 Ubuntu14…

centos7下安装itop-2.6.1(一)

一、 iTop概述 iTop,是IT运营门户(IT Operation Portal)的简称,它是一个开源web应用程序,适用于IT服务的日常运维管理。它基于ITIL最佳实践,适应符合ITIL最佳实践的流程,同时它又很灵活&…

itop在Linux部署环境,iTop的安装部署-测试环境的安装配置- iTop软件安装

本帖最后由 adminlily 于 2020-12-24 09:29 编辑 软件下载 iTop软件可以在网上搜索找到,或到www.itilxf.com社区下载,也可以直接在QQ群的共享里下载,群号是233051696。 下载后,直接解压出来,然后把web文件夹内的文件,全部复制到XAMPP软件的htdocs目录下面,D:\xampp\htdo…

关于iTOP安装过程中报错的问题

Before 首先先来一个链接⬇️ iTop-CN 一般情况下根据链接⬆️中的指示走,然后直接跳到Install就可以了。。 非一般呢❓ 来看一下我在安装过程中出现的问题⬇️ 在你没有wget的时候,你可能需要去先安装一下wget⬇️ 我这里是利用 homebrew 安装的wg…

zabbix怎么配置itop

zabbix如何配置itop 环境 zabbix: 5.2.6 目的: 用iTOP 管理Zabbix 告警信息, 告警信息自动转化工单 教程 官方文档 源代码 配置过程 去到源代码里面把模板下拉下来 关于URL,不同用户的itop也是有对应不同的URL,如果你实在不清楚怎么…

ITOP-1 Docker安装部署itop

ITOP-1 Docker安装部署itop 一、Docker安装部署1、下载docker源2、yum安装docker,并运行3、配置docker镜像加速地址 二、ITOP部署1、登录[docker官网](https://hub.docker.com/)查看所需镜像2、拉取itop镜像3、启动itop4、拉取mysql5.7镜像5、登录itop网页配置 一、…

itop 环境

itop 环境 iTop,即IT运营门户(IT Operation Portal),是一个开源web应用程序,用于IT环境的日常运营。它基于ITIL最佳实践,而又不拘泥于任何具体流程。它很灵活,可以适应不管是非正 式的、务实的流…

RHEL/CentOS8安装itop3.0详细实践教程

RHEL8/CentOS8部署itop3.0详细实践教程 1 硬件环境2 软件环境3 关闭防火墙及selinux4 更新yum源5 安装Apache6 安装PHP及依赖7 安装Mariadb,创建iTop数据库8 上传iTop安装包并配置权限9 进入web端,安装GLPI系统10 配置文件修改10.1修改时区为上海10.2修改…

itop启动mysql_使用iTOP进行CMDB资产管理

安装部署iTOP 2、将压缩包上传,安装数据库和http,并安装php的相关插件: unzip iTop-2.4.0-3585.zip yum install httpd php php-gd php-xml mariadb-server php-mysql php-soap php-mcrypt php-ldap -y mv web /var/www/html/ cd /var/www/html/ chown -…

iTOP4412开发板烧写命令集汇总

第一种:通过fastboot、OTG方式烧写 前提:进入“iTOP-4412”,即通过命令reboot重启开发板后,快速连续按回车进入。 在超级终端逐个键入如下命令(操作在超级终端) (1)全部烧写 fdisk…

itop搭建及使用

安装: 1.https://blog.csdn.net/kk185800961/article/details/84954918?utm_mediumdistribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_sourcedistribute.pc_relevant.none-task-blog-BlogCommendFromMachineL…

ITOP系统简介

目录 目录 目录 1. CMDB概述 2. iTop系统概述 3. iTop功能操作 3.1 配置管理 1. CMDB概述 随着信息技术的发展, IT系统已经成为企业业务发展不可或缺的支撑基础。IT运维管理系统是以CMDB为核心,以网络、服务器、应用的监控为基础,操作…

IT运营之itop

centos7下Mysql5.7.29,PHP72W环境安装itop2.7.5 一、组件版本 Mysql8版本与php5.6版本存在密码解析冲突,手动修改无效,需要初始化时指定密码解析为 mysql_native_password Mysql5.7版本与php5.6版本存在Missing PHP extension(s): mysqli. …

Ubuntu 安装 itop

Ubuntu Linux上的NTP 首先,我们将使用NTP配置系统以使用正确的日期和时间。 在Linux控制台上,使用以下命令设置正确的时区 # dpkg-reconfigure tzdata # apt-get update # apt-get install ntpdate # ntpdate pool.ntp.br Ntpdate命令用于使用server…

itop部署

安装组件: yum -y install epel-release rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum -y install httpd unzip 安装MySQL(必须要5.7以上的版本): wget https://dev.mysql.com/get/mysql57-communi…

itop3.0.0

Centos7.4Apache2.4mariadb10.8PHP7.3环境安装itop3 一、安装数据库 配置yum源,默认yum源安装出来的maridab版本不高,不支持最新change语法.附官方语法说明:将主数据库更改为 - MariaDB 知识库 vim /etc/yum.repos.d/Mariadb.repo[mariadb] name Mar…

itop docker3.0.0安装

下载docker镜像: Docker Hubhttps://hub.docker.com/r/vbkunin/itop/tags安装手册 https://github.com/vbkunin/itop-dockerhttps://github.com/vbkunin/itop-docker 本次测试 Image without MySQL Уou can get base image without MySQL database server (on…