首页 > 其他分享 >如何高效驾驭海量任务处理的艺术

如何高效驾驭海量任务处理的艺术

时间:2024-11-02 15:59:25浏览次数:1  
标签:状态 高效 海量 redis 查询 订单 线程 驾驭 分片

场景

在支付业务中,我们需要对接很多渠道,再与渠道交易的过程中,因为网络超时,或者渠道返回订单状态结果未知,这是我们一般都需要主动去调用渠道的查询结果去查询订单的最终结果,如果因为某些异常原因积压了大批量这样的订单,我们怎么如何高速快速的查询这种订单?

MySQL 扫表方案

通常最简单的方法就是扫描数据库,建立 status +craeated_at (状态+创建时间)索引,根据异常状态+时间范围去扫描数据库中异常的数据,然后进行业务操作。这里面有几个注意点需要说明:

  1. 建立状态索引是否有效?

    通常状态值都是固定几个值,区分度不是很高,比如支付订单表中,一般就成功、失败、异常。订单的最终结果要么是成功,要么是失败,如果查成功或者失败的订单,通过状态索引和全表查询效果没什么区别,状态索引不会生效,但是,如果我们查询异常状态的订单,效果就不一样,因为异常状态的订单占比非常少,区分度很高,这是用状态索引去查就会很快。

  2. 如何加速处理的速度?

  • 每次查询到异常状态的订单使用线程池去处理

  • 数据分片,开启多个线程同时去查mysql 数据

  • 分片拉取数据,再使用线程池去消费处理

    数据分片拉取处理和线程池消费时,需要考虑MySQL 数据库连接数使用的情况和系统资源开多少线程合适

elastic-job+redis 方案

由于查询Mysql 即使走索引,查询耗时还是要毫秒级别,如何异常订单有大百万的时候,并发查询MysqL 数据库的压力会很大,另一方面处理的速度也还是不是很理想。为了减少MySQL 的查询压力和用更少的资源订单处理速度,我们使用 elastic-job 任务分片 和 redis 分片的 方案

最主要的就是依靠 redis zrangeByScore 命令 ,大概步骤如下:

  1. 将需要需要补单的订单哈哈希取模得到一个分片号,然后存入分片数据

    redis.zadd(key+“_”+hash(订单号)%(redis 分片数)),订单号,时间戳)。哈希取模是为了避免一个key存储的数据量太大

    reids.set(key_detail_"订单号,"订单详情");

  2. 配置elasetic-job 分片任务

    每个分片处理 redis.ranngetByScore(key+“_”+hash(订单号)%(redis 分片数),0,当前时间戳)的数据

生产经验

正常情况使用 elastic-job+redis ,同时为了避免 redis 异常导致数据丢失的情况,需要再配合 mysql 扫描任务进行补偿或者二次确认

标签:状态,高效,海量,redis,查询,订单,线程,驾驭,分片
From: https://www.cnblogs.com/wallacepang/p/18522102

相关文章

  • 基于AI辅助下的高效高质量SCI论文撰写及投稿丨论文选题、文献调研、实验设计、数据分
    目录第一章、论文写作准备即为最关键第二章、开启论文写作之旅及AI大语言模型工具融合应用第三章、高效、高质量的图表制作及AI辅助应用第四章、论文自我审查、修改与润色第五章、投稿及根据审稿意见进行修订、改进第六章、学术诚信与规范第七章、常见问题与解决策略......
  • Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
    本示例演示在vue+openlayers项目中通过WebGLVectorLayerRenderer方式加载海量多边形数据。这里相当于将海量的数据放在同一个层的source中,然后通过webglTile的方式渲染出这一层。本示例数据为5000个多边形,加载速度超级快。一、示例效果专栏名称内容介绍Openlay......
  • 二分法:高效查找的数学利器
    二分法:高效查找的数学利器二分法,又称为二分查找,是一种在已排序数组中查找特定元素的高效算法。其基本思想是通过每次将查找范围减半来迅速定位目标值。以下将详细介绍二分法的原理、实现步骤及其应用场景。一、基本原理二分法的工作原理如下:初始设置:设定两个指针,left指......
  • 数据对象:构建高效数据管理的基础
    数据对象通常指在编程或数据分析中用于存储和处理数据的结构。它们可以是简单的变量,如整数或字符串,或更复杂的结构,如列表、字典、数组、类等。具体来说,数据对象可以包括:1.**基本数据类型**:  -整数(Integer)  -浮点数(Float)  -字符串(String)  -布尔值(Boolean)......
  • 思通数科AI平台引领医疗数据管理变革,高效处理化验单与诊断报告
    思通数科 思通数据 一、系统概述在医疗行业,化验单和诊断报告的数据处理常常面临信息碎片化、数据提取效率低、管理难度大等问题,导致医疗机构在患者信息管理上遇到瓶颈。思通数科AI平台通过开源免费、技术领先的优势,为医疗机构提供了一套高效、智能的化验单和诊断......
  • 【行业应用-工业防爆】本安型工业防爆网关,实现安全高效的数据传输与监控
    工业防爆网关作为工业物联网(IIoT)和自动化控制系统中的重要组成部分,在具有爆炸性危险的环境中发挥着关键作用。它们不仅实现了数据的可靠传输,还通过集成多种安全功能,如集成公钥体系,确保了数据传输的机密性、完整性和不可否认性。2024年亚太防爆设备市场规模预计为27.6亿美元,预计......
  • 面对ntlanman.dll损坏,如何高效修复?跟随ntlanman.dll修复指南轻松解决
    在Windows操作系统中,ntlanman.dll是一个重要的系统文件,它通常与网络相关的功能和服务相关联。当这个文件损坏时,可能会导致网络连接问题、系统不稳定或应用程序崩溃。为了帮助您高效修复ntlanman.dll损坏的问题,我们特别准备了这份修复指南。一、初步诊断与检查确认错误信息......
  • 阿里邮箱报错acdmodel-gemdb.dll?一文带你轻松应对阿里邮箱acdmodel-gemdb.dll报错的高
    在使用阿里邮箱时,如果遇到acdmodel-gemdb.dll报错,这可能会影响到你的邮件收发和其他相关功能。尽管acdmodel-gemdb.dll并非阿里邮箱的标准组件,但遇到此类错误时,不必过于担心。以下是一些高效且实用的解决方法,帮助你轻松应对这一报错。一、了解报错原因首先,需要明确acdmodel-......
  • AI大模型高效开发神器来了 ,解读ModelArts 8大能力
    随着国资委、工信部等持续推动工业企业开展人工智能创新应用,以及AI大模型为代表的新一代AI技术在快速发展,赋能各行各业,开展AI的创新应用对领先的工业企业已经是必答题。,在IDC《中国工业AI综合解决方案2024年厂商评估》中,华为在战略、能力、市场份额三个维度取得第一,位于领导者类别......
  • 【C++】——高效构建与优化二叉搜索树
    活着就意味必须要做点什么,请好好努力。——村上春树《地下》目录1、二叉搜索树BST1.1什么是二叉搜索树1.2BST的性能功能分析2、二叉搜索树的实现2.1BST框架2.2BST插入2.3BST搜索2.4BST删除2.5BST细节问题3、二叉搜索树遍历3.1中序遍历3.2前序遍历3.3......