异步创建索引时,ingest数据如何保证与增量数据不冲突的?

在 TiDB 中,异步创建索引的过程中,如果同时有数据的写入或更新操作,可能会导致索引数据与增量数据冲突。为了避免这种情况,TiDB 采用了以下两种方式来保证索引数据的正确性:

  1. 在异步创建索引的过程中,TiDB 会将新写入的数据同时写入原表和索引表。这样可以保证索引表中的数据与原表中的数据保持一致。同时,TiDB 会记录哪些数据已经被写入索引表,以便在索引创建完成后,将这些数据从原表中删除。

  2. 在异步创建索引的过程中,TiDB 会将增量数据写入一个临时表中,而不是直接写入原表。这样可以避免索引数据与增量数据冲突。当索引创建完成后,TiDB 会将临时表中的数据写入索引表,并将这些数据从原表中删除。

需要注意的是,异步创建索引的过程中,可能会导致查询结果不一致的问题。因为在索引创建完成之前,查询可能会同时访问原表和索引表,而这两个表中的数据可能不一致。为了避免这种情况,TiDB 会在查询时自动选择正确的表进行查询,以保证查询结果的正确性。

总之,TiDB 通过将新写入的数据同时写入原表和索引表,或者将增量数据写入临时表中,来保证索引数据的正确性。同时,在查询时自动选择正确的表进行查询,以避免查询结果不一致的问题。