0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分库分表后复杂查询的应对之道:基于DTS实时性ES宽表构建技术实践

京东云 来源:jf_75140285 作者:jf_75140285 2024-06-25 18:30 次阅读

1 问题域

业务发展的初期,我们的数据库架构往往是单库单表,外加读写分离来快速的支撑业务,随着用户量和订单量的增加,数据库的计算和存储往往会成为我们系统的瓶颈,业界的实践多数采用分而治之的思想:分库分表,通过分库分表应对存系统读写性能瓶颈和存储瓶颈;分库分表帮我们解决问题的同时,也带来了复杂性;比如多条件的分页查询,多条件的联表查询变得复杂起来,通过调研我们发现针对这些分页,联表的复杂查询,业界常用的解决方案有以下两种:1 构建ES宽表2 构建查询条件到表主键Mapping映射表;本表文章介绍我们的实践:基于公司的中间件DTS构建实时性的ES宽表。所谓的宽表是通过主键将多张表关联成一张表,比如订单维度的宽表字段包含:订单主表,订单明细表,商品表,用户表等表字段。

2 ES宽表构建解决方案域

2.1 同步双写

应用在接收到写请求后,同步写DB成功,然后再同步写ES。

wKgaomZ46VSARYbuAAEsDHV9EYQ944.png

2.2 异步双写

应用在接收到写请求后,同步写DB成功,异步发送MQ,消费MQ异步写ES。

wKgZomZ46VaATINWAAGJPtL6buw874.png

2.3 基于Binlog的实时同步

2.3.1 Binlog作为消息

将Binlog作为消息,或者驱动的Event,接收到消息后,RPC调取下游的业务系统,获取业务数据进行数组的组装,写入ES。

wKgaomZ46VaAQNPMAAHeWov5JMY706.png

2.3.2 Binlog作为数据

解析Binlog中的数据,获取库表,字段变更前后的内容,INSERT, UPDATE, DELETE事件,基于Binlog中的数据去构建宽表,写入ES。

wKgZomZ46ViActtsAAHxEFS-Njs358.png

3 解决方案优缺点对比

wKgaomZ46VmAa9nyAAKcmKZN5bQ547.png

4 我们的实践

4.1 Binlog作为数据构建ES宽表

wKgZomZ46VmAEqc5AAIIYQ1agrA414.png

4.1.1 顺序性的保证

上游DTS监听的binlog是有序的;发送消息时,业务方可以配置业务主键例如uep_order_no,DTS可以根据业务主键进行hash,将该条消息发送到对应的队列保证局部有序性;消费者消费时,同一个订单号uep_order_no映射到同一个分区,保证顺序消费;

4.1.2 幂等性的保证

DTS可以保证消息不丢失,但不保证消息不重复,可能发送重复的消息需要业务方保证幂等性,

UPDATE/DELETE操作天然具有幂等性

INSERT操作在进行操作前需要先判断下数据是否存在,不存在则插入,存在则更新

4.1.3 数据一致性的保证

由于数据存储在Mysql和ES两种存储媒介,可以采用定时任务对账机制保证数据的一致性,如果数据不一致采用补偿任务进行补偿操作

4.1.4 存量数据迁移

采用定时任务分页将数据从Mysql迁移到ES

4.2 ES复杂检索

4.2.1 检索的分类

多条件的复杂查询,采用Bool查询;

wKgaomZ46VqAa9paAAL8ySW6B98056.png

4.2.2 查询条件构建

wKgaomZ46VuAcslwAAJpT5UGYrY310.png



审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ES
    ES
    +关注

    关注

    0

    文章

    11

    浏览量

    20058
  • DTS
    DTS
    +关注

    关注

    1

    文章

    50

    浏览量

    16156
  • 数据库
    +关注

    关注

    7

    文章

    3845

    浏览量

    64645
收藏 人收藏

    评论

    相关推荐

    一种轻量方案-MyBatis拦截器实践

    文章,将分享如何使用MyBatis拦截器低成本的提升数据库稳定性。 业界常见方案 针对冷数据多的大,常用的策略有以2种: 删除/归档旧数据。 。 归档/删除旧数据 定期将冷数据移动到归档
    的头像 发表于 01-23 17:38 119次阅读

    芯片的失效分析与应对方法

    在汽车、数据中心和人工智能等关键领域,半导体芯片的可靠成为系统稳定运行的核心要素。随着技术发展,芯片面临着更为复杂的使用环境与性能需求,其失效问题愈发凸显。本文将深入探讨芯片失效的根源,剖析芯片
    的头像 发表于 12-20 10:02 1504次阅读
    芯片的失效<b class='flag-5'>性</b>分析与<b class='flag-5'>应对</b>方法

    深控技术 “不需要点的工业网关” 在冲压机上的应用

    这款工业网关具有强大的功能,无需进行复杂的点配置,就能自动识别冲压机的通信协议和数据格式。它能够实时采集冲压机的各种运行数据,包括压力、行程、速度、温度等关键参数。通过先进的传感器技术
    的头像 发表于 10-24 10:34 196次阅读

    一文弄懂实时动态载波相位差技术和伪距差技术的区别

    在全球导航卫星系统(GNSS)中,实时动态载波相位差和伪距差是常见的两种差定位技术。这两种技术
    的头像 发表于 09-13 11:14 1234次阅读
    一文弄懂<b class='flag-5'>实时</b>动态载波相位差<b class='flag-5'>分</b><b class='flag-5'>技术</b>和伪距差<b class='flag-5'>分</b><b class='flag-5'>技术</b>的区别

    如何利用IP查询技术保护网络安全?

    在数字化时代,企业网络面临着复杂多变的威胁与挑战。因此,构建一个稳固的网络安全体系至关重要。而IP查询技术,作为网络安全防御体系中的一把利剑,正日益成为企业防范网络风险的重要工具。 什
    的头像 发表于 09-09 10:10 391次阅读

    安科瑞导轨DDS/DTS/DTZ的都有哪些功能?

    ‌安科瑞导轨DDS/DTS/DTZ具有多种功能,主要包括计量功能、显示功能、参数设置功能、通讯功能以及电能脉冲输出功能。‌
    的头像 发表于 09-07 10:40 359次阅读
    安科瑞导轨<b class='flag-5'>表</b>DDS/<b class='flag-5'>DTS</b>/DTZ的都有哪些功能?

    软件系统数据库的分库设计

    的分布式集群,实现分库表功能,解决数据库中海量数据存储和查询性能的问题。MyCat 还是一个数据库的集群中间件,主要实现 RDBMS 数据库集群的故障转移、负载均衡、读写分离等功能。 MyCat 的关键
    的头像 发表于 08-22 11:39 363次阅读
    软件系统数据库的<b class='flag-5'>分库</b><b class='flag-5'>分</b><b class='flag-5'>表</b>设计

    正弦波信号整流滤波,用万用看到的是乱码,为什么?

    一个正弦波信号,整流滤波,用示波器观察,电压慢慢上升到平稳,用万用看却看到的是乱码?不应该看到直流电压吗?试了直接电阻压测到的电压值是对的。请问如何用万用看滤波
    发表于 08-19 07:06

    聚合物锂电池型号及容量查询

    聚合物锂电池型号及容量查询
    发表于 06-22 10:55 0次下载

    GPRS抄技术是什么?

    1.GPRS抄技术概述GPRS(GeneralPacketRadioService)抄是一种基于移动通信网络的远程抄技术,它利用GPR
    的头像 发表于 06-17 16:11 490次阅读
    GPRS抄<b class='flag-5'>表</b><b class='flag-5'>技术</b>是什么?

    电能软件是什么?

    1.电能软件简述电能软件是当代电力系统中不可或缺的一部,它通过大数据技术性完成了远
    的头像 发表于 05-16 14:51 431次阅读
    电能<b class='flag-5'>表</b>抄<b class='flag-5'>表</b>软件是什么?

    双22输入AND OR反相门数据

    电子发烧友网站提供《双22输入AND OR反相门数据.pdf》资料免费下载
    发表于 05-15 10:01 0次下载
    双2<b class='flag-5'>宽</b>2输入AND OR反相门数据<b class='flag-5'>表</b>

    MySQL联查询优化

    使用显示连接left join(right join,inner join),尽量避免隐式连接(where逗号连接 .... and .... and ...)这类写法,假设三张每张有一千
    的头像 发表于 04-24 12:33 644次阅读
    MySQL联<b class='flag-5'>表</b><b class='flag-5'>查询</b>优化

    采用Impedance Track™ 技术量程电量监测计BQ34Z100数据

    电子发烧友网站提供《采用Impedance Track™ 技术量程电量监测计BQ34Z100数据.pdf》资料免费下载
    发表于 03-21 09:35 0次下载
    采用Impedance Track™ <b class='flag-5'>技术</b>的<b class='flag-5'>宽</b>量程电量监测计BQ34Z100数据<b class='flag-5'>表</b>

    静电ESD整改实践:从基础到高级的应对策略?

    静电ESD整改实践:从基础到高级的应对策略?|深圳比创达电子EMC
    的头像 发表于 02-19 14:41 894次阅读
    静电ESD整改<b class='flag-5'>实践</b>:从基础到高级的<b class='flag-5'>应对</b>策略?