数据异构就该这样设计,yyds

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

何谓数据异构,上周交易部门商品的同事过来做分享,又看到这个词,他的PPT里面是 数据库异构。其实我们以前做的事情,也是可以称之为数据异构。比如我们将DB里面的数据持久化到Redis里面去,就是一种数据异构的方式。

如果要下个定义的话:把数据按需(数据结构、存取方式、存取形式)异地构建存储。

常见应用场景

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

这个时候通过数据异构就能很好的解决此问题,如下图:

数据异构总结起来大概有以下几种场景

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

数据异构方向

在日常业务开发中大致可以分为以上几种数据去向,DB-DB这种方式,一般常见于分库分表后,聚合查询的时候,比如我们按照订单ID去分库分表,那么这个时候我们要按照用户ID去查询,查询这个用户下面的订单就非常不方便了,当然可以使用统一加到内存中去,但这样不太好。

所以我们就可以用数据库异构的方式,重新按照用户ID的维度来分一个表,像在上面常见应用场景中介绍的那样。把数据异构到redis、elasticserach、slor中去要解决的问题跟按照多维度来查询的需求差不多。这些存储天生都有聚合的功能。当然同时也可以提高查询性能,应对大访问量,比如redis这种抗量银弹。

数据异构的常用方法

1. 完整克隆

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

2. 标记同步

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

3. binlog方式

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

4. MQ方式

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

binlog方式

binglog是数据的日志记录方式,每次对数据的操作都会有binlog日志。现在开源的订阅binlog日志的组件,比如使用比较广泛的canal,它是阿里开源的基于mysql数据库binlog的增量订阅和消费组件。

由于cannal服务器目前读取的binlog事件只保存在内存中,并且只有一个canal客户端可以进行消费。所以如果需要多个消费客户端,可以引入activemq或者kafka。如上图绿色虚线框部分。

我们还需要确保全量对比来保证数据的一致性(canal+mq的重试机制基本可以保证写入异构库之后的数据一致性),这个时候可以有一个全量同步WORKER程序来保证,如上图深绿色部分。

canal的工作原理

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

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

  1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);

  2. slave将master的binary log events拷贝到它的中继日志(relay log);

  3. slave重做中继日志中的事件,将改变反映它自己的数据。

再来看下canal的原理,如下图:

cannal实现原理相对比较简单(参照上面的mysql主备复制实现原理):

  1. canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议

  2. mysql master收到dump请求,开始推送binary log给slave(也就是canal)

  3. canal解析binary log对象(原始为byte流)

我们在部署canal server的时候要部署多台,来保证高可用。但是canal的原理,是只有一台服务器在跑处理,其它的服务器作为热备。canal server的高可用是通过zookeeper来维护的。

注意点

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

MQ方式

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

总结

本文主要叙述了数据异构的使用场景,方法。这里面涉及到的activemq以及canal并没有深入分析,关于这块的内容可以直接参考相关具体文档,文中已给了链接地址。

根据数据异构的定义,将数据异地构建存储,我们可以应用的地方就非常多,文中说的分库分表之后按照其它维度来查询的时候,我们想脱离DB直接用缓存比如redis来抗量的时候。数据异构这种方式都能够很好的帮助我们来解决诸如此类的问题。

联邦学习中的数据异构性问题综述 摘要 联邦学习中的数据异构性问题主要是由参与训练的各客户端的数据虽独立分布但不服从同一采样方法(Non-IID)所导致的,这一问题也导致模型精度的严重下降。如何缓解Non-IID带来的不利影响目前仍是一个开放性的问题。 目前已经有很多算法可以应用于这一问题的处理上,但由于这些算法的实验都是基于不同的数据划分策略,我们没办法系统地、直观地理解这些算法的优缺点。 为了能对各算法的性能进行一个比较,《Federated Learning on Non-IID Data Silos: An Experimental 阅读详情

相关推荐

超详细的Canal入门,看这篇就够了!

Canal入门看这篇就够了!

yehongzhi1994的博客 21万+

什么是异构数据

异构数据顾名思义就是不同结构的数据异构数据体现在五个层次上: 1.计算机体系结构的异构数据的物理存储来源于不同体系结构的计算机中,如:大型机、小型机、工作站、PC或嵌入式系统中。 2.操作系统的异构数据的存储来源于不同的操作系统,如:Unix、Windows、Linux、OS/400等。 3.数据格式的异构数据的存储管理机制不同,可以是关系型数据库系统,如:Oracle、SQL Serve...

3万+

十五、寻龙队列术——数据队列:基于Canal实现数据异构

Canal是阿里开源的一款基于MySQL数据库binlog的增量订阅和消费组件,通过 它可以订阅数据库的binlog 0志,然后进行一些数据消费,如数据镜像、数据异构、数 据索引、缓存更新等。相对于消息队列,通过这种机制可以实现数据的有序性和一致性。Canal架构如下图所示。MySQL数据库首先需要部署canal server,可以同时部署多台,但是只有一台是活跃的,其他的作 为备机。canal server会通过slave机制订阅数据库的binlog H志。

流楚丶格念的博客 2万+

数据异构的武器-BINLOG+MQ

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34101229的博客 605

8 种主流数据迁移工具技术选型,yyds

往期热门文章:1、用了Stream后,代码反而越写越丑? 2、代码精简10倍,责任链模式yyds 3、聊聊大厂都怎么防止重复下单? 4、上班期间在 IDEA 里面斗地主。。强悍! 5、如何画出一张优秀的架构图(老鸟必备)前言最近有些小伙伴问我,ETL数据迁移工具该用哪些。ETL(是Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业应用来说,我们经常会遇到各...

Java后端技术 296

数据YYDS! Flink+IceBerg实时数据湖实践

点击上方蓝色字体,选择“设为星标”回复”面试“获取更多惊喜数据湖的前世今生互联网技术发展的当下,数据是各大公司最宝贵的资源之一已经是不争的事实。收据的收集、存储和分析已经成为科技公司最重要...

微信搜:import_bigdata,大数据领域硬核原创作者 1715

新一代数据湖,真yyds

数仓技术应对关系型结构化数据游刃有余,但对于多元异构数据,却爱莫能助。最近行业大佬都在聊怎么部署数据湖,这波操作未来走向如何?数据湖技术能够实现全量数据的单一存储,通常存储原始格式的对象块...

欢迎关注公众号:【码农突围】,回复9999,可以获取一份LeetCode刷题笔记 248

性能测试—yyds

性能测试是通过自动化的测试工具模拟各种正常、峰值以及异常负载条件来对系统的各项性能指标的测试。

huace3740的博客 169

介绍几种主流数据迁移工具技术选型,yyds

ETL数据迁移工具该用哪些。ETL(是Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业应用来说,我们经常会遇到各种数据的处理、转换、迁移的场景。今天特地给大家汇总了一些目前市面上比较常用的ETL数据迁移工具,希望对你会有所帮助。

在计算机领域混战了5年的java开发工程师,正在向全栈奋斗的路上。目前在学习和分享:Java,springboot,spring,vue,系统开发,服务器运维(可做毕业设计)等相关知识。 1097

本周 13 个 YYDS 的 GitHub 项目,哪个你用过?

使用 SSHJ 库实现安全的 SSH 连接,Apache POI处理 Excel 文件,JFreeChart 生成图表,JTS 处理空间数据等。containerd 以守护进程形式运行,负责管理容器的整个生命周期,包括镜像的拉取和存储、容器的创建与监控、以及低层次的存储和网络附件管理。而设计的开源工具,有 8000 的星星。与传统的虚拟机不同,Lima 在设计上更加轻量级,专注于为开发人员提供接近原生体验的 Linux 环境。例如,可以设置当某个关键警报触发时,自动抑制相关的低级警报,避免不必要的干扰。

IT_1024的博客 869

YYDS!多模态特征融合!小白也能轻松搞定高区论文!

MulFS-CAP框架:提出了一种名为MulFS-CAP的单阶段融合框架,将非配准红外-可见光图像的配准和融合任务相结合。该框架利用共享浅层特征编码器,在单阶段中合并非配准的红外-可见光图像,避免了传统两阶段方法中配准和融合任务独立训练导致的性能欠佳问题。可学习模态词典:为解决特征提取在配准和融合中的冲突,引入可学习模态词典来增强单模态特征。模态词典为单一模态图像的特征提供补偿信息,使其包含其他模态的相关信息,从而减少红外和可见光图像特征间的模态差异,增强特征的表达能力,实现跨模态特征的一致性。

2501_91057708的博客 1234

5 种主流API网关技术选型,yyds

点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天 10:33更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2021超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库中间件 Sharding-JDBC 和 MyCAT 源码解析作业调度中间件 E...

芋艿V 528

比Python快6.8万倍的新语言开放下载了yyds

什么编程语言,敢号称是高性能版的“Python++”?新语言,来自LLVM之父和Swift之父Chris Lattner,性能可达到目前版本Python的倍。你没看错,几个月前团队还宣称是35000倍,换了台机器测评就成了68000倍。现在,Mojo终于开放编译器和完整本地开发环境的下载,首日就在开发社区引发轰动。它语法像Python一样简单,跑起来像C++一样快,更重要的是可以与任何Python库无缝交互。

Trb701012的博客 961

推荐 10 个本周 yyds 的 GitHub 项目。

无论你是寻找一个不臃肿的任务管理工具来逃离配置地狱,还是想研究世界顶级 Rails 团队的最新代码实践,Fizzy 都是一个极具价值的开源项目。它不仅仅是一个简单的 RAG 工具,而是一个企业级的、模块化的全流程解决方案,解决复杂异构文档的知识提取与精确问答难题。、截图或现有的图表图片,AI 利用多模态视觉能力会识别图片中的元素与结构,并将其复刻为可编辑的 draw.io 图表。,它不仅能提取文本,还能通过 OCR 和版面分析技术理解表格、图片中的语义信息,从而构建统一的结构化知识中心。

公众号:逛逛GitHub 909

推荐 2 个 YYDS AI 开源项目!

最近已有不少大厂都在秋招宣讲,也有一些已在 Offer 发放阶段了。节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了深入的讨论。大家好,今天继续跟大家分享两个有趣的AI开源项目。

2201_75499313的博客 1091

第十七届全国大学生智能汽车竞赛完全模型组实战项目——湖北工业大学蓝电YYDS Car队全栈技术方案包

简介:本项目完整复现湖北工业大学蓝电YYDS Car队在第十七届全国大学生智能汽车竞赛完全模型组中的获奖方案,涵盖自主导航智能车的端到端开发全流程。项目深度融合计算机视觉(车道线识别、目标检测)、多源传感器融合(IMU+编码器+摄像头)、实时决策规划(路径规划与行为决策)、轻量化机器学习模型部署(边缘端YOLOx-Tiny推理)及嵌入式控制系统(基于STM32H7+ROS2 Micro-ROS架构)。

weixin_35728286的博客 269

5 种主流API网关技术选型,yyds

API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、协议转换、限流熔断、静态响应处理。**API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。**通常,网关也是提供REST/HTTP的访问API。

CXikun的博客 1478
上一篇: 一次服务器被入侵的处理过程分享
下一篇: 说说 Spring 定时任务如何大规模企业级运用
java小姜在线冲
博客等级 码龄4年 51粉丝 137原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值