【问题描述】
主要咨询在有主键冲突场景下,多线程并发导入,--allowkeydup 分别设置为 true 和 false 时,当有导入线程发生主键冲突,该线程内数据还有数据未导入,工具如何处理冲突数据以及后续未导入数据。
最主要的一点问题是:当--allowkeydup 设置为 false 时,后续的未导入的数据是否会出现没导入的情况,和主键冲突的记录一并吐出到文件?
【解决办法】
量插入有个flag(SDB_INSERT_CONTONDUP)用于控制主键冲突时的行为,详情请参考:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190839-edition_id-0
当--allowkeydup默认值为false, 当它设置为true时,导入工具使用批插接口时将会加上SDB_INSERT_CONTONDUP flag,这样,当该批次的记录有主键冲突时(-38)错误,冲突的记录将不会被修改,且该批次的记录将继续进行插入。
当--allowkeydup设置为false时,如果批量插入不是事务操作,当遇到主键冲突时(-38),冲突的记录将不会被修改,但该批次剩余的记录将按照失败插入处理。如果批量插入是事务操作,当出现主机冲突时,该批次的记录将全部被回滚,且按照插入失败来处理。