Hi,请教下DDL中新建索引的一致性问题

请教一个索引的使用问题,在重建索引还没完成时,如果用户写入(更新)了跟这个索引相关的数据,最后的结果索引与数据会是一致的吗?

最终是一致的,中间过程参考 sorry,我贴的是 DML,DDL change 的机制要等存储同学来解答,非常好的问题:+1:t2:

让我们举个具体的例子,实际使用中可能出现这类情况吗?(本质上有两个点:1. schema view的一致性 2.底层需要有事务保障)
t0 → 开始重建索引 <---- t0取整体的snapshot,并依据snapshot开始index的backfill
t1 → collect index (key1,index1)
| <---- t1到t2的时间窗口内对key1的值进行了更改,例:删除了key1,删除key1时,这个query可能感知不到schema中已经有了索引
|
t2 → backfill index1
t3 → 最后的结果 index1是个孤儿索引,它对应的key1实际数据已经不存在了

另外还有一种比较极端的case,就是写请求假设执行了很久都没结束(久到schema已经改了多次),这种请求执行也会造成不一致。

打扰了 对于上述这个直观的过程 nebula的机制是怎么保证最终的一致呢?(补充下,我看隔壁PingCap是参考了F1的Online DDL Change机制来做的新增索引