Я сделал следующее, чтобы добиться некоторого дозирования:
inserts = []
insert_every = 1000
for line in file_to_parse:
m = line_regex.match(line)
if m:
fields = m.groupdict()
if use_sql: #This uses Globals, Ick :-/
inserts.append(pythonified)
if (parsed % insert_every) == 0:
connection.execute(log_table.insert(), inserts)
inserts = []
parsed += 1
if use_sql:
if len(inserts) > 0:
connection.execute(log_table.insert(), inserts)
Это не использует транзакции, но очень ленивым образом позволило мне переключить этап вставки / разбора с ~ 13 секунд до ~ 2 секунд с бэкэндом mysql, используя меньший образец. Я увижу разницу между mysql и sqlite с этим изменением, используя полный образец.
Я нашел основную информацию для этого здесь .
Результаты:
Движок: не сгруппированное время вставки в минутах: сгруппированное время вставки в минутах
Sqlite: 61: 8
MySql: 15: 2,5
Я не сбрасывал кэш между mysql и sqlite, в которых, возможно, имел бы исходный текстовый файл, но я не думаю, что это было бы относительно значительным отличием.