我需要将一个大型 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
指令
这会更快吗?这样表现好吗?
谢谢
我需要将一个大型 CSV 文件导入 MonetDB,我想知道是否可以将文件一分为二并运行两个脚本,例如:
mclient -u monetdb -d mydb < import1.sql
mclient -u monetdb -d mydb < import2.sql
在哪里
copy
指令,并且copy
指令这会更快吗?这样表现好吗?
谢谢
MonetDB对并发事务(即对数据的任何修改)使用乐观并发控制。这意味着许多线程可以对相同的数据进行操作。然而,写入冲突不是通过例如锁定来预期和避免的,而是仅在提交事务之前(即,当所有实际工作完成时)检测到。
您创建的场景本质上是此策略的最坏情况:两个并发事务修改完全相同的数据。它们都将运行一段时间,一个将被提交,另一个将被回滚然后重新启动。
底线是:不要这样做:-)。您可以做的是将“LOCKED”后缀附加到副本的语句中,这可以在单用户模式下运行时显着加快加载速度(请参阅MonetDB 文档)。