魅族生活服务数据同步优化方案

本文介绍了一种针对生活服务数据同步的优化方案,重点讨论了商户、团购和电影三大类数据的高效处理方法,包括数据下载、保存、差异对比及线上数据更新等关键步骤,并提出了一系列提高效率的具体措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生活服务数据同步优化方案

数据落地方案

数据分析

生活服务需要定时拉取保存的数据有“商户,团购,电影”三类.

数据项数据量下载文件尺寸是否有分页更新频率
团购400w+13G+
商户200W+1-2G
电影200w-5M-按城市

对于所有数据都要经过如下四个阶段

下载 -> 保存 -> 对比差异 -> 更新线上数据

对每个阶段都要想办法改进效率. 方案说明

  • 下载阶段,经过测试接口响应支持gzip压缩,且提供一个Last-Modify-Since头.通过压缩 提升下载速度,通过保存每一页的Last-Modify-Since下次下载时进行对比,只下载更新 的页,可以进一步减少需要下载的数据.
  • 保存->对比差异阶段,线下原始数据表需要保存每条记录的md5摘要作为主键,通过对比摘要得到更新的记录.最终得到对比结果,更新到线上数据表中.
  • 更新线上数据这个阶段可能会锁表,所以大量的数据更新会导致长时间阻塞访问.现有数据表索引过多更新效率极差,通过重新设计数据结构优化查询方案简化索引定 义. 通过在前三个阶段过滤掉未变更的数据,减少最终需要查询更新的线上数据.当最终需要的更新的数据依然很多的情况下采取后台重建表的方案.

具体流程如下:

这里写图片描述

通过上述改进可以适当提升拉取数据的频率保障数据的及时性.
这里写图片描述

程序架构:

这里写图片描述

程序抽象

每个数据任务抽象出如下几个操作,需要由子类实现.

  1. pickAnyPage : 下载某个分页(分页的下载不一定按顺序)
  2. newPagePuller : 创建某个分页的拉取操作,该操作将http请求分为请求头部和内容两 部分.
  3. parse : 解析下载到的页面为数据记录
  4. update : 将解析的结果更新到数据库中

声明周期方法:

  1. init : 初始化准备,由子类实现
  2. execute : 执行该任务,调用其他组件完成任务,并记录程序状态保存为TaskStatus
  3. onFinish : 任务结束时,对TaskStatus进行处理,由子类实现.子类可以在此阶段实现任务监控.

这里写图片描述

AbstractDataTask是整个任务的模板,定义每个任务的公共环节,并记录每个环节的状态.

拉取分页->摘要对比->解析->摘要对比->更新数据库

进一步优化

更新线上数据时需要进一步降低更新成本

  1. 缩小文档体积(减少冗余存储的数据)
  2. 合并索引,减少数据更新时需要更新的索引数量
  3. 以商户为中心进行查询,所有团购以商户卡片形式进行组织
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值