增加TIKV节点会发生数据迁移,这时候读写插入数据是否有影响?

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:3.0
  • 【问题描述】:
  1. 增加TIKV节点后,会把原有数据的部分数据迁移到新节点。但在这个时候,执行sql,update正在被迁移的那部分数据。 请问这个时候,数据是否会被更新?是否会等迁移完成后执行sql,还是说,update正在迁移的数据时会失败。

  2. 如果因增加节点而正在迁移数据时,这个时候执行insert是否会插入到根据原有路由规则,插入到原位置。还是说会按照新路由规则,匹配插入到新节点的数据将会被插入到新kv节点?

  3. 路由时会根据tb表名_主键_索引 得出出key,那么key将会落在哪个tikv中,是根据什么来定?是不是3个节点时,key%3=n,则用n来决定节点位置?因为我需要知道,增加tikv时,发生部分数据迁移,这个时候会影响哪些数据。

  4. 我以前的mysql数据库的表的主键是用雪花算法生成出来的,导入到tidb时,主键rowid会沿用之前的雪花生成的主键吗?如果用了,那么能让tidb平均分配的3个tikv上吗?

  1. pd会记录region迁移的信息,所以如果发生了region的迁移,pd会收到信息,可以看调度相关文章 https://book.tidb.io/session1/chapter4/scheduling-overview.html
  2. 当执行sql的时候,首先会去访问,tidb中缓存的region信息,如果这时候恰好这个region是leader,就会在运行时遇到报错,类似 not region leader之类的日志信息, tidb会重新从pd中获取新的region信息,保证sql执行成功。
  3. 这些信息都是在很短的时间内完成,并且会有重试机制,基本可以忽略.

我以前的mysql数据库的表的主键是用雪花算法生成出来的,导入到tidb时,主键rowid会时之前的雪花生成的主键吗?生成出来的数字都很大,如7978321312132 。如果导入后,那么能让tidb平均分配的3个tikv上吗?

  1. 这个主键看来是bigint对吧,那么他还是主键
  2. 如果数据比较均衡,会比较均匀的分布在3个tikv实例上

但是我以前的主键的数据生成出来的都是70000000000~80000000000这个范围内,且在这个范围内均匀。不存在小于70000000000和大于80000000000数字。所以我不知道会不会平均落在3个节点,还是说我这种情况都在在一个节点上。 所以我想知道key拼接为“tb表名_主键_索引”后,tidb是按key的什么规则来算出落在哪个tikv?

你也可以参考文档split region来手工分割