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