如果一个索引的_id与数据的业务id一致,这个索引的数据持续有update操作,每次更新会更新文档中的updateTime字段
我现在想把它从A集群迁移到B集群。
迁移前我先从A到B全量reindex一遍索引,记录reindex开始时间t1,然后切换读写到B集群。
切换完成后我再做一次reindex导入增量变更数据
"source": {
"index": "my_index",
"query": {
"range": {
"updateTime": {
"gte": t1
}
}
}
},
"dest": {
"index": "my_index"
}
这时有个风险,如果某个id的记录在迁移期间有过好几次update操作
1.导数据前它是x(在A)
2.第一次全量导数据期间,它更新成了y(A上的x变y,B上值仍然是x)
3.读写切换到B之后,它又更新成了z(B上的x变z,A上是y)
4.这时我再把A上索引updateTime为t1后的数据导过去,B上这条记录就又从z刷回y了。
所以在导数据时要判断,B上索引的这条记录updateTime如果大于我原集群A索引上的记录时,跳过不更新,这种情况下要怎么实现呢,用脚本可以实现吗。
或者类似的迁移需求,有没有其他好的方法来实现。
我现在想把它从A集群迁移到B集群。
迁移前我先从A到B全量reindex一遍索引,记录reindex开始时间t1,然后切换读写到B集群。
切换完成后我再做一次reindex导入增量变更数据
"source": {
"index": "my_index",
"query": {
"range": {
"updateTime": {
"gte": t1
}
}
}
},
"dest": {
"index": "my_index"
}
这时有个风险,如果某个id的记录在迁移期间有过好几次update操作
1.导数据前它是x(在A)
2.第一次全量导数据期间,它更新成了y(A上的x变y,B上值仍然是x)
3.读写切换到B之后,它又更新成了z(B上的x变z,A上是y)
4.这时我再把A上索引updateTime为t1后的数据导过去,B上这条记录就又从z刷回y了。
所以在导数据时要判断,B上索引的这条记录updateTime如果大于我原集群A索引上的记录时,跳过不更新,这种情况下要怎么实现呢,用脚本可以实现吗。
或者类似的迁移需求,有没有其他好的方法来实现。
1 个回复
zsy
赞同来自: