2014-11-06 3 views
0

В новой компании (схема может измениться), у меня есть таблица, которая будет иногда получать объемную вставку (строки 10k - 200k, которые МОГУТ содержать дубликаты) из проанализированного файла csv. Какой был бы лучший подход для этого?C Sharp MysqlBulkInsert vs Muplitple Вставить запрос

В настоящее время я делаю следующее: Insert Into table (Fields) Values (Values) ON DUPLICATE KEY UPDATE Set <Primary Key> = <Primary Key>, который занимает слишком много времени, особенно по мере увеличения количества вставленных записей.

Два варианта я в курсе являются

1) INSERT INTO table (Fields) VALUES (Values),(Values),(Values)....

концернов:

  • Paramaterizaion, мне придется объявить тысячи параметров команды, чтобы избежать SQL Injection?
  • Дубликаты ключей, есть способ, чтобы избежать команды неисправного, когда дубликат первичного ключа добавляется в смесь

2) Используйте MySqlBulkLoader

проблемы: Mapping

  • Колонка: Из того, что я прочитал, csv необходимо сгенерировать с полями в том же порядке, что и в таблице (при условии, что простой DESCRIBE tablename даст мне правильный порядок). Поскольку компания является новой, и структура таблиц HAS уже изменилась. Я не хочу забывать обновлять код и скомпрометировать целостность данных.

Любая помощь с благодарностью.

ответ

0

Один из вариантов - использовать LOAD DATA INFILE с синтаксисом REPLACE. ЗАМЕНА синтаксис заменит существующие строки с входными строками для строк, которые имеют одинаковое значение для первичного ключа или уникального индекса в существующей строке

Пример:

LOAD DATA INFILE '/tmp/your_data.csv' REPLACE 
INTO TABLE your_table (column1, column2, ...) 

Как вы говорите, ваша дб схема будет часто меняться , Вы можете прочитать список столбцов из конфигурации. Таким образом, вам не придется менять свой код в будущем, когда что-то изменится в вашей схеме db.

+0

Спасибо, я прочитаю на LOAD DATA INFILE с REPLACE. Я не возражаю против изменения кода, о чем я беспокоюсь, - если добавить или заменить столбец, что bulkload все равно выполнит запрос в другом столбце. – Vee

+0

Исправить. Как я уже сказал, вы можете иметь список столбцов в порядке в файле конфигурации. Поэтому, когда запрос будет выполнен, он будет принимать правильное количество столбцов и порядок. – Typist