2014-09-09 3 views
0

У меня есть программа, которая работает, возможно, 100M выбирает и вставляет.Когда закрыть/открыть соединение MySQL

Есть ли какая-либо польза от закрытия и повторного открытия курсора после N числа утверждений? Или я должен просто открыть его один раз - в начале - и затем закрыть его в конце?

два варианта:

def connect(self): 
    if self.conn: 
     self.conn.close() 
    self.conn = MySQLdb.connect (...) 
    self.cursor = self.conn.cursor() 

1) 
self.connect() 
# all statements 
self.conn.close() 

2) 
self.connect() 
for num, sql_statement in enumerate(sql_statements): 
    if num == N: 
     self.connect() 
    # sql statement 
self.conn.close() 

есть ли преимущество использования второго маршрута? Есть ли разница между двумя вариантами?

+0

Довольно уверенно, что постоянное создание и удаление соединений является дорогостоящим и ненужным накладными расходами. Большинство приложений имеют тенденцию использовать одно соединение от начала до конца, если совершенно необходимо повторно подключиться посередине. Если вам не нужно это делать, зачем это делать? Я почти думал, что постоянное повторное подключение будет убивать время исполнения. – 2014-09-09 17:53:01

ответ

2

Как правило, вы хотите поддерживать связь как можно меньше, но есть влияние на открытие и закрытие соединений.

Если вы выполняете несколько запросов последовательно, как сортировку, используйте одно соединение для всего пакета (ваш первый сценарий).

Однако, если операторы являются дискретными транзакциями, тогда я думаю, что наилучшим подходом было бы открыть и закрыть соединение для каждого оператора.

Конечно, мое последнее заявление не учитывает влияние производительности на ожидаемую производительность вашего приложения.

+0

Просто из любопытства, не могли бы вы сказать несколько слов, почему оставаться живыми как можно меньше времени? –

+0

Открытые соединения с БД потребляют конечные ресурсы (например, память, сокеты и т. Д.), Поэтому держать их открытыми только тогда, когда они необходимы, помогает гарантировать, что ваше приложение не поддерживает ресурсы, которые он не использует. –

Смежные вопросы