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

    浏览量

    20235
  • DTS
    DTS
    +关注

    关注

    1

    文章

    53

    浏览量

    16733
  • 数据库
    +关注

    关注

    7

    文章

    3993

    浏览量

    67730
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AI赋能 车行无忧|腾视科技ES10终端,为车辆装上“智慧大脑”

    腾视科技,以车载智能领域深耕多年的技术积淀,破局而出!‌ 专为特种车辆与复杂作业场景量身打造的ES10车载智能终端,以‌超强环境适应‌(-30℃~75℃
    的头像 发表于 10-28 10:15 1037次阅读
    AI赋能 车行无忧|腾视科技<b class='flag-5'>ES</b>10终端,为车辆装上“智慧大脑”

    订单实时状态查询接口技术实现

    、可靠的订单实时状态查询接口,涵盖接口设计、技术选型、代码实现和性能优化。我们将使用Python和Flask框架作为示例,确保内容真实可靠,适合开发人员参考。 1. 接口设计原则 订单实时
    的头像 发表于 10-21 17:58 470次阅读
    订单<b class='flag-5'>实时</b>状态<b class='flag-5'>查询</b>接口<b class='flag-5'>技术</b>实现

    深入解析米尔全志T536核心板的实时技术突破

    延迟、调度器抖动...这些因素导致Linux的延迟通常在几十毫秒级别波动,根本无法满足工业场景对确定性的苛刻要求。 一、工业实时挑战:从理论到实践的鸿沟1.1 实时
    发表于 10-17 17:41

    业内分享热敏电阻在智能电能中常用的型号及相关特性

    PTC热敏电阻 SPMZB-06S201RN/10D391、SPMZB-08S800RN/12D391等适用于 智能电能等,可在电网电压波动较大等复杂工况下使用,为电路提供过流过压保护,能有效保护
    发表于 09-10 10:50

    吉时利2602B源

    速度比传统PC控制快200%。 TSP-Link®接口支持多通道并行测试扩展,无需主机干预,降低系统复杂性和成本。 软件与兼容 内置基于Java的I-V特性分析软件,提供“即插即用”操作体验。 兼容
    发表于 08-26 17:48

    Allegro更新原理图导入网,Xnet混乱何解?

    更新原理图导入网,Allegro莫名其妙将原本组合好的Xnet的差自动组合成新的Xnet。这些Xnet是没有模型存在的(去掉过模型导入的),现在就是组合成一个Xnet
    发表于 07-25 15:15

    一文读懂:嵌入式Linux实时进阶

    与Xenomai双核方案成为两大主流技术路线。 本文将深入剖析它们的原理与性能差异,助您在学习道路上少走弯路,事半功倍! 1嵌入式Linux实时是指什么 Linux的实时
    发表于 07-10 15:26

    便携式经济型万用常见疑问汇总

    上,与 SYN5684 系列相近,能够为用户提供精准的测量结果。而且,其智能算法还能对测量数据进行实时校准和优化,进一步提升测量的可靠。​ (二)测量功能丰富吗?​ 这两款万用的测量功能十
    发表于 06-12 16:37

    智能触屏万用的科技优势在哪

    的设置与实时测量结果,大大提高了操作的便利和效率。 2.强大的数据处理能力:全自动万用内置了高性能的处理器,具备强大的数据处理能力,能够快速准确地完成各种测量任务,并对测量数据进行实时
    发表于 06-12 16:34

    复杂电磁环境构建与测试软件系统

    复杂电磁环境构建与测试软件系统
    的头像 发表于 04-29 20:47 475次阅读
    <b class='flag-5'>复杂</b>电磁环境<b class='flag-5'>构建</b>与测试软件系统

    边缘计算网关的实时监控与预测维护都有哪些方面?适合哪些行业使用?

    边缘计算网关的实时监控与预测维护都有哪些方面?适合哪些行业使用? 有实施过得案例的介绍吗? 深控技术的不需要点的边缘计算网关如何?
    发表于 04-01 09:44

    Marvell展示2纳米芯片3D堆叠技术应对设计复杂性挑战!

    随着现代科技的迅猛发展,芯片设计面临着前所未有的挑战。特别是在集成电路(IC)领域,随着设计复杂性的增加,传统的光罩尺寸已经成为制约芯片性能和功能扩展的瓶颈。为了解决这一问题,3D堆叠技术应运而生
    的头像 发表于 03-07 11:11 887次阅读
    Marvell展示2纳米芯片3D堆叠<b class='flag-5'>技术</b>,<b class='flag-5'>应对</b>设计<b class='flag-5'>复杂性</b>挑战!

    或许我们都被分库约束了思维

    作者:张俊杰 概述 这篇文章没什么太多的干货,纯纯是一篇讨论和思考帖。 从业数据库领域三年有余了,从分库中间件到数据库团队内核学到了很多东西。也接触了很多项目,包括TiDB、Vitess
    的头像 发表于 02-21 09:51 443次阅读

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

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

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

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