У меня есть таблица базы данных с уникальным строковым полем и парой целочисленных полей. Строковое поле обычно длиной 10-100 символов.
Раз в минуту или около того у меня следующий сценарий: я получаю список из 2-10 тысяч кортежей, соответствующих структуре записей таблицы, например,
[("hello", 3, 4), ("cat", 5, 3), ...]
Мне нужно вставить все эти кортежи в таблицу (предположим, я проверил, что ни одна из этих строк не появилась в базе данных). Для пояснения, я использую InnoDB, и у меня есть автоинкрементный первичный ключ для этой таблицы, строка не PK.
Мой код в настоящее время выполняет итерацию по этому списку, для каждого кортежа создается объект модуля Python с соответствующими значениями и вызывается ".save ()", что-то вроде этого:
@transaction.commit_on_success
def save_data_elements(input_list):
for (s, i1, i2) in input_list:
entry = DataElement(string=s, number1=i1, number2=i2)
entry.save()
Этот код в настоящее время является одним из узких мест производительности в моей системе, поэтому я ищу способы его оптимизации.
Например, я могу сгенерировать коды SQL, каждый из которых содержит команду INSERT для 100 кортежей («жестко запрограммированных» в SQL), и выполнить ее, но я не знаю, улучшит ли это что-нибудь.
Есть ли у вас предложения по оптимизации такого процесса?
Спасибо