Как правильно обрабатывать постоянные соединения в пуле соединений mysql
Если я использую функцию пула соединений node-mysql, это не будет представлять проблему в моем приложении, потому что соединения повторно используются после connection.end()
? Вот почему я обеспокоен: когда вы определяете переменную в SQL или запускаете транзакцию, переменная или транзакция сохраняются до тех пор, пока соединение не будет закрыто. Поскольку соединение на самом деле никогда не закрывается, а используется повторно, переменные и транзакции могут просочиться в другую подпрограмму, которая не ожидает переменную или ожидает, что транзакция существует; он ожидает свежей связи.
Переменные могут представлять большую проблему; подпрограмма никогда не может безопасно предполагать, что переменная не определена, потому что связь с износом.
Транзакции могут представлять еще большую проблему, если одна подпрограмма не сможет откатить или зафиксировать транзакцию перед вызовом end()
, Если следующая подпрограмма, которая должна была использовать это соединение, не будет иметь дело с транзакциями, тогда все запросы будут добавлены к транзакции и остановлены, и никогда не будут выполнены. Когда я пишу свое приложение, я мог бы быть осторожным, чтобы такая ошибка никогда не возникала, но бывают ошибки, и если это произойдет, отладку будет крайне сложно (я бы не знал, какая подпрограмма неправильно обрабатывает соединения, что плохо, плохо).
Вот некоторые из моих проблем, когда я думаю об использовании пула. Конечно, я не единственный, кто задумывался об этих проблемах, поэтому, пожалуйста, пролите немного света на то, как правильно обрабатывать соединения в пуле, если вы будете так добры.:)
Большое спасибо.
1 ответ
Все транзакции будут происходить в контексте одного соединения. После того, как вы завершили или разорвали соединение, вы больше не можете работать с этой транзакцией. Общий шаблон - открывать, запрашивать, закрывать, и если у вас нет длительной транзакции, у вас не возникнет проблем с запросами или переменными, перетекшими в другие соединения.
В случае длительной транзакции вам нужно будет управлять этим объектом подключения, чтобы убедиться, что он существует и используется только кодом, который работает в этой транзакции.