2

我需要将一个大型 CSV 文件导入 MonetDB,我想知道是否可以将文件一分为二并运行两个脚本,例如:

mclient -u monetdb -d mydb < import1.sql
mclient -u monetdb -d mydb < import2.sql

在哪里

  • import1.sql 使用 file1.csv 发出一条 SQLcopy指令,并且
  • import2.sql 使用 file2.csv 发出 SQLcopy指令

这会更快吗?这样表现好吗?

谢谢

4

1 回答 1

6

MonetDB对并发事务(即对数据的任何修改)使用乐观并发控制。这意味着许多线程可以对相同的数据进行操作。然而,写入冲突不是通过例如锁定来预期和避免的,而是仅在提交事务之前(即,当所有实际工作完成时)检测到。

您创建的场景本质上是此策略的最坏情况:两个并发事务修改完全相同的数据。它们都将运行一段时间,一个将被提交,另一个将被回滚然后重新启动。

底线是:不要这样做:-)。您可以做的是将“LOCKED”后缀附加到副本的语句中,这可以在单用户模式下运行时显着加快加载速度(请参阅MonetDB 文档)。

于 2012-02-07T23:16:16.037 回答