我需要将一个较大的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指令


这样会更快吗?这个大瓶好吗?

谢谢

最佳答案

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

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

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

10-01 11:14