Как будет работать MonetDB при одновременном выполнении нескольких операций копирования sql?

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

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

куда

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

Будет ли это быстрее? Будет ли это нормально?

Спасибо


person Federico    schedule 07.02.2012    source источник


Ответы (1)


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

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

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

person Holger    schedule 07.02.2012