数据同步

数据同步 #

推拉结合 #

  1. 数据发送方基于消息队列实时同步最新数据。
  2. 数据接收方每隔一段时间按批次进行主动拉取,避免因消息中间件出现问题造成少数据。

优化方案:

  • 数据消费方消费时将数据保存到Redis中,实现幂等性,避免重复推。
  • 数据接收方主动拉取时,可以先拉取新增数据量;数据量不一致时再拉取新增ID集合;还是不一样再拉取新增数据。

支持数据修改的优化方案:

  1. 数据发送方生产新数据时,记为version=1。
  2. 每次修改数据时,新数据记为version=2。
  3. 删除数据时,数据记为version=999。
  4. 数据接收方将数据落入临时表。
  5. 日切后,数据接收方对临时表中的数据进行筛选后移动到正式表,同流水号只保留version最大的数据,并丢弃version=999的数据。

除了日切筛选外,也可以实时进行旧数据的淘汰。

基于完整性校验 #

  1. 数据发送方将数据按时间维度划分为块。例如10作为基准时间,11点作为对账时间。
  2. 数据发送方抽取基准时间和对账时间内的所有数据,通过md5生成校验码。
  3. 数据发送方发送当前窗口的数据、当前窗口的md5(currMd5)和上一个窗口的md5(preMd5)。
  4. 数据接收方检查两个校验码是否一致。
    • preMd5和currMd5都一致。将新数据写入数据库。
    • preMd5一致,currMd5不一致。要求数据发送方重新发送数据。
    • preMd5不一致。要求数据发送方重新发送上一个窗口的数据。

基于中间服务实现数据同步 #

数据同步

  1. 数据交换平台启动交换任务。
  2. 从数据发送方获取数据,经过格式转换后发送给数据接收方,同时记录数据总数。

数据对账

  1. 数据交换平台根据之前记录的数据总数进行分片,交给对账服务器进行对账。
  2. 对账服务器根据分片信息从数据发送方和数据接收方抽取数据,进行对账。
  3. 有遗漏时,数据交换平台从发送方获取数据同步给接收方,实现自动修复。