MonetDB如何在同时运行多个sql复制操作的情况下执行?

时间:2012-02-07 15:46:15

标签: monetdb

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

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

其中

  • import1.sql使用file1.csv和
  • 发出SQL copy指令
  • import2.sql使用file2.csv
  • 发出SQL copy指令

这会更快吗?这会很好吗?

由于

1 个答案:

答案 0 :(得分:6)

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

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

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