Мне нужно прочитать данные из огромной таблицы (> 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-й экземпляр будет итерировать первые 200k строк, 2-й - 200k-400k ...), но проблема в том, что 2-му экземпляру (и 3-му, и так далее) требуется НЕСКОЛЬКО ЛЕТ, чтобы добраться до стадии, когда он начинает просматривать строку 200k и далее. Создается впечатление, что он все еще обрабатывает первые 200k строк, вместо того, чтобы пропустить их. Код, который я использую (для 2-го экземпляра) в этом случае, выглядит примерно так:
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 процесса на своем четырехъядерном сервере, кажется, что одновременно выполняется только один процесс (похоже, что CPU разделяет время между этими процессами, в отличие от того, что каждое ядро запускает отдельный процесс). Два процесса python используют соответственно 14% и 9% CPU. Есть мысли, что может быть не так?