【发布时间】:2011-06-25 21:16:11
【问题描述】:
MySqlBulkLoader 可以与事务一起使用吗?我看不到将事务显式附加到加载程序实例的方法。还有其他方法吗?
【问题讨论】:
标签: mysql transactions bulkinsert bulkloader
MySqlBulkLoader 可以与事务一起使用吗?我看不到将事务显式附加到加载程序实例的方法。还有其他方法吗?
【问题讨论】:
标签: mysql transactions bulkinsert bulkloader
正如 MySQL 文档团队成员 here 所说:
It's not atomic. The records loaded prior to the error will be in the
table.
工作方法是将数据导入专用表,然后执行INSERT INTO ... SELECT ...,这将是原子操作。在庞大的数据集上,由于长事务,这是潜在的问题。
【讨论】:
MySQL manual 表示 MySqlBulkLoader 是“LOAD DATA INFILE”的包装器。在查看 'LOAD DATA INFILE' 文档时,我注意到了这一段:
如果您指定 IGNORE,则输入符合以下条件的行 在唯一的上复制现有行 键值被跳过。如果你不 指定任一选项,行为 取决于是否 LOCAL 关键字 被指定。如果没有 LOCAL,则会出错 当重复键值是 找到,以及文本文件的其余部分 被忽略。使用 LOCAL,默认 行为与 IGNORE 相同 指定的;这是因为服务器 没有办法停止传播 操作中间的文件。
我发现没有关于交易的讨论,但上面的段落表明交易是不可能的。
一种解决方法是将数据导入到导入表中,然后使用单独的存储过程通过事务将数据处理到所需的表中。
所以回答
【讨论】: