名词解释
- 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
同步执行
- 新增数据同步
- 查询es中对应的数据是否存在
- 构造需要同步的data collection的单条数据
- 通过es sdk把数据写入index
- 更新数据同步
- 查询es中对应的数据是否存在
- 构造需要同步的data collection的单条数据
- 通过es sdk把数据写入index
- 删除数据同步
queue command格式
- {
"action": "insert" | "update" | "delete",
"collection": "titan",
"id": [1,2,3],
"errorHandle": "strict" | "loose"
}