Мне нужно прочитать данные из огромной таблицы (> 1 миллиона строк, 16 столбцов необработанного текста) и выполнить некоторые операции с ней. Чтение строк за строкой кажется очень медленным (python, MySQLdb), и я бы хотел иметь возможность читать несколько строк одновременно (возможно, распараллеливать).
Просто к вашему сведению, мой код выглядит примерно так:
cursor.execute('select * from big_table')
rows = int(cursor.rowcount)
for i in range(rows):
row = cursor.fetchone()
.... DO Processing ...
Я пытался запустить несколько экземпляров программы для итерации по разным разделам таблицы (например, 1-й экземпляр будет повторять более 1-й строки по 200 КБ, 2-й экземпляр будет повторять по строкам 200k-400k ...), но проблема является то, что 2-й экземпляр (и 3-й экземпляр и т. д.) берет НАВСЕГДА, чтобы добраться до стадии, где он начинает смотреть на строку 200k и далее. Кажется, что он все еще обрабатывает первые 200 тыс. Строк, а не пропускает их. Код, который я использую (для второго экземпляра), в этом случае выглядит примерно так:
for i in range(rows):
#Fetch the row but do nothing (need to skip over 1st 200k rows)
row = cur.fetchone()
if not i in range(200000,400000):
continue
.... DO Processing ...
Как я могу ускорить этот процесс? Есть ли чистый способ сделать более быстрое / параллельное чтение из базы данных MySQL через python?
EDIT 1
: я попробовал "LIMIT", основываясь на предложениях ниже. По какой-то причине, хотя я запускаю 2 процесса на своем четырехъядерном сервере, кажется, что одновременно запускается только 1 отдельный процесс (кажется, что центральный процессор разделяет время между этими процессами, в отличие от каждого ядра, выполняющего отдельный процесс). 2 процесса Python используют соответственно 14% и 9% процессоров. Есть мысли, что может быть не так?