python-mysqldb: как эффективно получить миллионы / миллиарды записей из базы данных? - PullRequest
2 голосов
/ 13 марта 2012
  • У меня есть таблица, из которой мне нужно извлечь около 7 миллионов записей, и это также увеличится до миллиарда записей (поскольку данные добавляются каждый день)
  • Я использую mysql-Python для подключения к удаленной базе данных MySQL

  • Я запрашиваю как следующий

cursor = conn.cursor ()
курсор.execute (запрос)
вернуть курсор

и попытаться напечатать их как

sql = 'select * from reading table;' # has 7 million records
cursor = MySQLDB.execute(sql)
for row in cursor:
        print row
  • Требуется вечность, чтобы напечатать его

На сервере я вижу, что процесс запущен

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                                                                                                                                                     
 3769 mysql     20   0 1120m 276m 5856 S  125  1.7   2218:09 mysqld      

Вопрос Каков эффективный способ запроса таблицы с иллюзиями {m, b} записей с использованием python?

Спасибо

1 Ответ

5 голосов
/ 13 марта 2012

Я бы предложил два варианта:

  1. Направить необходимые данные в файл с SELECT OUTFILE или даже с помощью консоли mysql и работать с файлом.

  2. Вы должны понимать, что по умолчанию mysql отправляет весь набор результатов клиенту, а клиент воспроизводит, как будто данные читаются строка за строкой (хотя весь результат уже находится в памяти, или не выполняется, если естьне хватает памяти).Альтернативно, набор результатов может быть сформирован на стороне сервера.Для этого вам нужно будет добавить параметр cursor=MySQLdb.cursors.SSCursor в MySQLdb.connect (подробности см. http://mysql -python.sourceforge.net / MySQLdb.html ).

...