名词解释

  • data collection
    • 业务数据集合,是一个虚拟概念,例如包含了experience表和talent表的数据聚合,命名为titan
    • 一般由pg中的一张表或者多张表聚合组成,例如talent和experience和一对多关系,那么插入到es前需要先把experience中的数据聚合到 talent上,组成一个大json,再进行同步
    • 系统中可以有多个data collection
  • data source
    • pg中保存的数据源,例如talent、experience、company等,分别为不同数据源
  • search index
    • es中存储data collection的表
    • 在index中的每个document都有id/pg_id字段,指向data source中的原始记录
  • queue command
    • 执行同步命令的指令,先由系统向queue发出,再由queue回调系统执行实际的同步操作(新增/更新/删除)
    • 每条指令可能涉及到单条数据或多条数据的同步操作
    • 具体使用时,一个data collection对应一个queue

同步场景

  • 全量同步单个data collection
    • 如果es中alias未存在,创建alias
    • 创建index,以时间戳作为命名区分
    • 构造处理分批次数据的queue command,向queue发出
      • 例如要同步1000条记录,分成20批,每次写入50条记录,则需要构造20条queue command
    • 由queue回调系统,分批次执行同步指令
    • 同步完成,把alias指向新的index
    • 删除老的index
  • 单个data source数据更新时同步
    • 新增
      • 通过data source和data collection的依赖关系,构造新增数据的queue command
      • 发出queue command
    • 更新
      • 通过data source和data collection的依赖关系,构造更新数据的queue command
      • 发出queue command
    • 删除
      • 通过data source和data collection的依赖关系,构造删除数据的queue command
      • 发出queue command
  • 清除search index
    • 删除index
    • es中alias指向null

同步执行

  • 新增数据同步
    • 查询es中对应的数据是否存在
      • 已存在,执行删除
    • 构造需要同步的data collection的单条数据
    • 通过es sdk把数据写入index
  • 更新数据同步
    • 查询es中对应的数据是否存在
      • 已存在,执行删除
    • 构造需要同步的data collection的单条数据
    • 通过es sdk把数据写入index
  • 删除数据同步
    • 查询es中对应的数据是否存在
      • 已存在,执行删除

queue command格式

  • { "action": "insert" | "update" | "delete", "collection": "titan", "id": [1,2,3], "errorHandle": "strict" | "loose" }

results matching ""

    No results matching ""