MySqlBulkLoader 可以与事务一起使用吗?我看不到将事务显式附加到加载程序实例的方法。还有其他方法吗?
问问题
893 次
2 回答
1
正如MySQL 文档团队成员在此处所述:
It's not atomic. The records loaded prior to the error will be in the
table.
解决方法是将数据导入专用表,然后执行INSERT INTO ... SELECT ...
原子操作。在庞大的数据集上,由于长事务,这是潜在的问题。
于 2011-05-05T19:16:18.303 回答
1
MySQL 手册指出 MySqlBulkLoader 是“LOAD DATA INFILE”的包装器。在查看 'LOAD DATA INFILE' 文档时,我注意到了这一段:
如果您指定 IGNORE,将跳过与唯一键值上的现有行重复的输入行。如果您不指定任一选项,则行为取决于是否指定了 LOCAL 关键字。如果没有 LOCAL,则在找到重复键值时会发生错误,并忽略文本文件的其余部分。对于 LOCAL,默认行为与指定 IGNORE 相同;这是因为服务器无法在操作过程中停止文件的传输。
我发现没有关于交易的讨论,但上面的段落表明交易是不可能的。
一种解决方法是将数据导入到导入表中,然后使用单独的存储过程通过事务将数据处理到所需表中。
所以在回答
于 2011-02-15T15:31:32.577 回答