大数据处理与智慧营销系统性能优化

news2024/9/22 5:37:55

随着企业数字化转型的加速,客户经营数字化正在向智能化方向发展,构建全场景、全流程、全触点的数字化、智能化的客户经营智慧营销体系。智慧营销系统已运行 5 年,伴随着业务增长,系统业务流程复杂度增大,大表数据量已超 10 亿,系统性能和吞吐量不能满足业务需求,急需优化系统架构和提升处理性能,打造高效稳定的智慧营销服务系统。

现有流程及存在问题

智慧营销系统的主要流程为活动规格同步、客户群清单入库、活动生单和活动派单,具体流程见下图:

上述流程中目前主要存在的问题:

  • 活动规格同步:活动配置数据同步频率高、易出错,且没有异常处理重试机制;

  • 客户群清单入库:当客户群较大(500W)的时候,处理速度较慢且容易出现数据库执行压力较大出现慢 sql 或者超时;

  • 活动生单:当活动的客户群较大时,生单性能慢,生单过程涉及多张大表,容易导致慢 sql;

  • 活动派单:FTP 派单性能较差,派单耗时长,500 万工单派单需 10 小时以上。

提升举措

基于目前存在问题进行针对性的优化和提升,主要举措有如下四点:

活动规格同步优化

活动配置过程中虽然只有规格层面的数据同步,但因七步法配置过程涉及基本信息、客户群、销售品、渠道触点、营销话术等众多规格数据,目前在七步法配置过程中任意信息要素的新增和修改都会多次发起数据同步更新,且频繁操作颇多,存在无法保证活动配置数据完整性的隐患,并且对接口超时或者调用异常没有重试机制,导致活动规格同步存在较高的错误率(1-9%)、活动创建后调度无法执行等问题。

主要通过以下几点进行优化,来降低活动规格同步的错误率: 

1)   新增或修改活动配置:无须同步数据。未发布的活动存在多次修改的可能,减少没必要的数据同步次数,反复频繁的数据同步反而会增加出错概率;

2)   活动审批后发布生效:只需实时同步更新审批发布生效的活动配置数据;

3)   智慧营销系统-营销中心查询规格中心活动详情:全部查询所有数据后统一更新,不能分多步更新;

4)   智慧营销系统更新活动详情事务操作:智慧营销系统获取到活动详情后,进行详情的入库操作需要进行事务操作,避免活动规格的数据不完整,导致生单过程中报错;

5)   增加活动规格同步的每日稽核机制:每天凌晨营销服务系统根据文件接口增量同步规格中心前一天发布生效的活动配置数据,营销服务系统基于文件数据进行活动规格的数据比对以及同步失败数据进行修复;

6)   重试机制:在活动规格发布后的同步过程中,如果出现了活动同步失败情况,在活动发布的页面增加“重新同步”的按钮,让用户可以主动的触发活动规格的重试动作,避免因为网络不稳定或者其他的原因导致的同步失败没有及时处理的入口。

客户群清单入库提速

客户群清单入库流程涉及大表为客户群清单表,数据量达到 10 亿级别,因此在大客户群清单解析比对过程中容易出现慢 sql 导致客户群清单解析慢、数据库压力大以及超时出现解析出错。

主要从以下几点进行优化,提高大客户群解析入库成功率和速度,提高用户的体验。

优化策略:客户群清单表(tar_grp_detail)为分片表,分片键为 tar_grp_id,查询条件带上分片键,其他查询字段账期字段和号码字段添加索引,使用主键索引进行批次操作。

1)   优化客户群清单表的删除操作:分批次进行删除操作,每个批次的大小可以动态配置,默认 100000 一批次数据,避免一次上百万乃至千万数据量级别的删除操作;

2)   同时每批次删除通过主键索引进行,提高 sql 执行效率;

3)   优化客户群清单表的更新操作:将大批量的负责状态更新操作语句进行优化,优化数据库查询性能;

4)   提供客户群清单归档策略:定期清理客户群清单表数据,制定清理策略规则,周期性客户群连续 10 天没有关联任何有效活动,不再推送数据给营销服务系统。

活动生单提速

目前智慧营销系统调度是单任务遍历客户群清单进行生单,生单效率较低;加上任务单、工单等表的数据量都达到了 10 亿左右,生单后的 FTP 派单涉及多处查询,导致派单耗时较长。

采用多个实例的子任务,同时进行一个活动的客户群清单的工单生成,提高处理速度;增加多个子任务同时对一个活动进行工单生成,先获取客户群要生单的用户数量,再将用户数根据子任务数量分配到不同子任务数量上去,使用多个机器实例执行不同子任务,提升生单速度。

活动派单提速

FTP 工单推送是对触点系统派单的一个重要流程,通过定时任务触发派单动作,将批量活动和事件触发生单后的待派单的工单数据,按每 5000 条工单一个批次写入到派单文件中,然后上传到指定的 FTP 目录,最后通知到触点系统完成派单流程,目前对其中的各个派单动作环节可能出现的异常没有容错机制和重跑机制,甚至可能出现漏单的情况。

1)   分批查询取数优化:

目前是按 5000⼀个批次查询获取⼯单数据,采⽤数据偏移量的⽅式,类似于分⻚查询(第⼀批次 1-5000,第⼆批次 5001-10000……),查询效率⾮常低,因为 limit 后面的偏移量太大导致的越往后查询响应会越慢,严重影响性能。

调整为上次查找结果的最大主键值,再根据主键值分批查询,避免使⽤偏移量 offset,提高查询效率。

2)   分批写入文件:

目前按批次循环写⼊⽂件,写入过程中每条⼯单会查询多个业务表数据(如查询客户群标签、销售品数据等),如一次派单 500 万就要查询 500W*N 次数据库,占用数据库连接过多,查询效率低。

调整为通⽤的数据只查询⼀次,如客户群的标签数据、其他数据⼀次性查询出来,减少频繁数据库,用空间换时间的方式达到最大性能。

3)   派单异常处理:

目前派单异常时有⼀部分数据写⼊了⽂件,但是缺少 check⽂件,需要⼿⼯补⽂件上传到 FTP,再次通知外部系统处理。

优化调整说明:

a)   部分⼯单写⼊⽂件成功时,如捕获异常默认⽣成完整的 check⽂件和 dat⽂件,避免数据 txt 文件生成了,但是缺失其他文件的情况,支持部分写入成功的数据派单出去,能成功通知触点系统;

b)   针对“派单异常”的工单推送任务可进⾏自动重跑,当天默认最多 3 次,配置静态数据阀值,可以动态调整活动运营位的次数,新增静态数据;

c)   新建自动重跑任务,每 30 分钟执行一次,查询“派单异常”的调度日志,然后重新发起活动运营位的工单推送任务,将没有成功派单出去的工单再次处理。

4)   工单状态更新:

目前⼯单数据写⼊⽂件和⽂件上传到 FTP 都成功后,⼯单状态按每 800 条/批次更新数据,如果其中批次更新失败,那该任务会调度失败,重新派单时会漏单,因为有部分⼯单的状态已经变更。

优化调整说明:

a)   每批次从 800 条调整为 2000 条,减少连接提升性能,并可动态调整改参数阀值;

b)   记录已经更新⼯单状态的主键范围到调度日志,任务调度失败时,重新派单时可根据主键范围重新处理,避免漏单;

c)   运维人员可以根据调度日志工单 ID 的范围准确找到需要调整状态的工单数据,然后将工单状态还原,避免下次调度的时候出现漏单的情况。

优化效果

通过对核心流程的性能提升优化,在同一个测试环境经过 500w 数量的客户群进行客户群入库、生单和派单的验证,测试结果表明性能提升明显。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2055353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FreeSWITCH Record

1概述 FreeSWITCH https://signalwire.com/freeswitch是一个开源的电话交换平台。官方给它的定义是–世界上第一个跨平台的、伸缩性极好的、免费的、多协议的电话软交换平台。由这个定义我们可以得出以下几点: FreeSWITCH是跨平台的。它能原生地运行于Windows、MaxOSX、Linux、…

计算几何,CF 993A - Two Squares

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 A - Two Squares 二、解题报告 1、思路分析 由于数据量很小,可…

《Redis核心技术与实战》学习笔记5——内存快照RDB:宕机后,Redis如何实现快速恢复?

文章目录 给哪些内存数据做快照?快照时数据能修改吗?可以每秒做一次快照吗?小结 大家好,我是大白。 上篇文章记录了 Redis 避免数据丢失的 AOF 方法。这个方法的好处,是每次执行只需要记录操作命令,需要持久化的数据量…

11.4k star! 部署清华开源的ChatGLM3,用私有化大模型无缝替换openai

转自AI技术实战 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的第三代开源模型,对话流畅、部署门槛低,测评显示其基础模型ChatGLM3-6B-Base 具有在 10B 以下的基础模型中最强的性能,同时…

ESP32CAM人工智能教学19

ESP32CAM人工智能教学19 Udp socket服务器 本课的工作模式,正好是第十四课工作模式的相反:第十四课中,ESP32Cam是客户端,运行在PC中的Python程序是服务器,就收到了摄像头数据后,调用openCV组件显示图像。而本课的ESP32Cam是服务器,Python是客户端,正好掉了个个,目的就…

蓝桥杯编程题讲解

给定一个正整数 N ,然后将 N 分解成 3 个正整数之和。 计算出共有多少种符合要求的分解方法。 要求: 分解的 3 3 3个正整数各不相同; 分解的 3 3 3个正整数中都不含数字3和7. 如:N为8,可分解为 ( 1 , 1 , 6 ) (1,1,6) (1,1,6)、 ( 1 , 2 ,…

位图与布隆过滤器 —— 海量数据处理

🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 🚀 位图 一: 🔥 位图概念 二: 🔥 位图的实现思路及代码实现三: 🔥 位图的应用四:…

云原生系列 - Nginx(基础篇)

前言 学习视频:尚硅谷Nginx教程(亿级流量nginx架构设计)本内容仅用于个人学习笔记,如有侵扰,联系删学习文档: 云原生系列 - Nginx(基础篇) 1、简介 1.1、背景介绍 Nginx(enginex)是一个高性能的HTTP和…

SpringBoot教程(二十四) | SpringBoot集成日志AOP切面

SpringBoot教程(二十四) | SpringBoot集成日志AOP切面 (一)AOP 概要1. 什么是 AOP ?2. 为什么要用 AOP?3. AOP一般用来干什么?4. AOP 的核心概念 (二)Spring AOP1. 简述2…

【芯智雲城】UDStore定制化存储模组和技术解决方案

一、方案详情: UDStore芯宇存储专注行业应用,根据不同应用场景,为客户提供包括车规级、工业级、工规宽温及高耐久型的存储模组产品和技术解决方案,可提供的产品和解决方案类型包括如下: 二、关键技术: 1&…

WLAN DNS proxy settings (Win 10)

WLAN DNS proxy settings (Win 10) 114.114.114.114 8.8.8.8

Ubuntu 22.04 安装 MySQL 8

Ubuntu 22.04 安装 MySQL 8 本文描述了Ubuntu安装MySQL 8的方法 CentOS7 的安装方法点击此处跳转 Windows 的安装方法点击此处跳转 Docker 的安装方法点击此处跳转 正文开始: 在一切开始之前,建议先切换到root #输入下方名,然后输入当…

【JavaSec】Java反射知识点补充

0x03反射-补充零散知识点 文章目录 0x03反射-补充零散知识点Runtime类setAccessible(true)三种命令执行的方法static变量赋值 前面学过 就不多说final变量赋值InDirect final间接赋值static final 向大佬致敬: https://drun1baby.top Runtime类 Runtime 类中有 …

JAVA itextpdf 段落自动分页指定固定行距打印

JAVA itextpdf 段落自动分页指定固定行距打印 前言:公司有个需求,打印的合同模板左上角要加上logo的图标。但是itext pdf 自动分页会按照默认的顶部高分页打印内容的,导致从第二页开始logo图标就会把合同的内容给覆盖掉了。然后尝试了挺多方法…

Electron31-ViteAdmin桌面端后台|vite5.x+electron31+element-plus管理系统Exe

原创自研Vue3Electron31ElementPlus桌面端轻量级后台管理Exe系统。 基于最新前端技术栈Vite5.x、Vue3、Electron31、ElementPlus、Vue-I18n、Echarts实战开发桌面端高颜值后台管理模板。内置4种布局模板,支持i18n国际化、动态权限路由,实现了表格、表单、…

基于Spring Boot的大学校园生活信息平台的设计与实现pf

TOC springboot523基于Spring Boot的大学校园生活信息平台的设计与实现pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关…

记录阿里云服务器购买和域名绑定解析的流程

购买阿里云域名和服务器 因为App备案的原因,需要购买域名和服务器,这篇文章介绍在阿里云上购买相关服务的流程。 注册阿里云的流程比较简单这里不再赘述了。请参考我之前写的 阿里云账号注册详细教程 购买顺序:一般是先购买阿里云服务器&…

【乐吾乐大屏可视化组态编辑器】事件交互-场景交互

场景交互 在线使用:https://v.le5le.com/ 乐吾乐大屏可视化可以实现大屏页面与内嵌2d/3d场景相互通信,底层原理是利用了iframe通过postMessage发送消息。 下面以2d场景为例,实现步骤如下: 1. 首先配置场景2(被嵌入…

Postman接口测试项目实战

第 1 章 什么是接口测试 1.1、为什么要进行接口测试 目前除了特别Low的公司外,开发都是前后端分离的,就是说前端有前端的工程师进行编码,后端有后端的工程师进行编码,前后端进行数据基本都是通过接口进行交互的。 1.2、接口测…

ant design 的 tree 如何作为角色中的权限选择之一

这种功能如何弄呢&#xff1f; 编辑的时候要让权限能选中哦。 <ProForm.Item name"permissions" label{intl.formatMessage({ id: permission_choose })}><Spin spinning{loading}><TreecheckableonExpand{onExpand}expandedKeys{expandedKeys}auto…