Я читаю в некоторых сырых файлах и вставляю их в БД.Это будет включать МИЛЛИОНЫ записей, и для каждой записи у меня есть несколько вставок (много таблиц).Когда я проводил локальное тестирование, все шло быстро, но для всего набора данных мне нужно было работать с удаленной базой данных.Это мучительно медленно, что, как я полагаю, происходит из-за всех попыток удаления / вставки по сети.
Я использую модуль MySQLdb (python), и на данный момент у меня есть такие вещи, какследующее:
# setup connection
con = mdb.connect('remote.host', 'database_user', '123456789', 'database_name');
... read files, loop through records, etc...
# clear out data related to current record
cur.execute("DELETE FROM articles WHERE article_id = %s", article.id)
cur.execute("DELETE FROM authors WHERE article_id = %s", article.id)
cur.execute("DELETE FROM addresses WHERE article_id = %s", article.id)
cur.execute("DELETE FROM citation_references WHERE article_id = %s", article.id)
cur.execute("DELETE FROM citation_patents WHERE article_id = %s", article.id)
# insert the article
cur.execute("INSERT INTO articles (article_id, doctype, keywords, language, title) VALUES (%s, %s, %s, %s, %s, %s)" , (article.id, article.doctype, ';'.join(article.keywords), article.language, article.title))
# insert all the authors
for au in article.authors:
cur.execute("INSERT INTO isi_authors (article_id, name_first, name_last, email) VALUES (%s, %s, %s, %s)", (article.id, au.first_name, au.last_name, au.email))
... other loops like the authors to insert 10-20 citations per article, multiple addresses, etc ...
Из того, что я могу сказать, MySQLdb не позволяет мне отправлять несколько запросов одновременно.Должен быть способ избежать сетевых задержек.Есть идеи?