Как MonetDB будет выполнять одновременно несколько операций копирования SQL? - PullRequest
2 голосов
/ 07 февраля 2012

Мне нужно импортировать большой файл CSV в MonetDB, и мне интересно, можно ли разделить файл на два и запустить два сценария, например:

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

, где

  • import1.sql выдает инструкцию SQL copy с использованием file1.csv, а
  • import2.sql выдает инструкцию SQL copy с использованием file2.csv

Будетэто будет быстрее?Будет ли это хорошо?

Спасибо

1 Ответ

6 голосов
/ 08 февраля 2012

MonetDB использует Оптимистический контроль параллелизма для одновременных транзакций (т. Е. Любых изменений данных). Это означает, что многие потоки могут работать с одними и теми же данными. Однако конфликты записи не ожидаются и предотвращаются, например, путем блокировки, а обнаруживаются только до совершения транзакции (то есть, когда вся фактическая работа выполнена).

Созданный вами сценарий, по сути, является наихудшим вариантом для этой стратегии: две одновременные транзакции, которые изменяют одни и те же данные. Оба будут работать некоторое время, один будет зафиксирован, а другой будет откатан и затем перезапущен.

Суть: не делай этого :-). Что вы можете сделать, это добавить суффикс «LOCKED» к копии в операторах, которые могут значительно увеличить скорость загрузки при работе в однопользовательском режиме (см. Документация MonetDB ).

...