Мне нужно прочитать и объединить множество строк (~ 500k) из базы данных PostgreSQL и записать их в базу данных MySQL.Улучшение производительности запросов
Мой наивный подход выглядит следующим образом
entrys = Entry.query.yield_per(500)
for entry in entrys:
for location in entry.locations:
mysql_location = MySQLLocation(entry.url)
mysql_location.id = location.id
mysql_location.entry_id = entry.id
[...]
mysql_location.city = location.city.name
mysql_location.county = location.county.name
mysql_location.state = location.state.name
mysql_location.country = location.country.name
db.session.add(mysql_location)
db.session.commit()
Каждый Entry
имеет около 1 до 100 Locations
.
Этот скрипт работает около 20 часов и уже потребляет> 4 ГБ памяти, так как все хранится в памяти до тех пор, пока сеанс не будет зафиксирован.
С моей попыткой совершить ранее, у меня возникают проблемы, такие как this.
Как повысить производительность запроса? Это нужно сделать намного быстрее, так как количество строк в ближайшие месяцы вырастет примерно до 2500 тыс.
Любая причина, по которой вы не можете использовать метод [Извлечь, преобразовать, загрузить] (http://en.wikipedia.org/wiki/Extract,_transform,_load)? – AndrewS
В основном 'pg_dump dbname | mysql dbname' –
@JochenRitzel, я соединяю несколько строк из нескольких таблиц в одну строку для MySQL. Я не вижу, как помочь pg_dump. – dbanck