Меня больше всего интересует общая концепция, но, в частности, мне нужно понять эту концепцию, чтобы научиться программировать на стороне сервера с помощью Swift / Vapor. Но хорошо получить общий ответ c, даже если вы не знаете Swift / Vapor.
Я обнаружил, что для подключения к базе данных я могу использовать эти два метода:
func requestPooledConnection<Database>(to dbid: DatabaseIdentifier<Database>) -> Future<Database.Connection>
func requestCachedConnection<Database>(to database: DatabaseIdentifier<Database>) -> Future<Database.Connection>
Теперь, что я понимаю из документации (Источник: https://docs.vapor.codes/3.0/database-kit/overview/#pools):
- Используя пул, я могу повторно использовать существующее соединение или создать новое один, если не существует
- При пулировании соединения не распределяются между циклами событий, чтобы предотвратить условия гонки
- Существует обычно обычно один пул на базу данных на событие l oop
- При кэшировании вы получаете одно соединение для каждого идентификатора базы данных
Теперь это немного сбивает с толку, особенно термин «обычно», и я также попытался найти дополнительную документацию об общей концепции (например, https://en.wikipedia.org/wiki/Connection_pool), и похоже, что слова «кэширование» и «объединение» иногда используются взаимозаменяемо. Теперь мне интересно понять разницу, потому что это было бы полезно для правильной оптимизации моих веб-сервисов. Но для меня это выглядит - по крайней мере, насколько я понимаю документацию Vapor - они очень похожи, и я не понимаю разницы. Может кто-нибудь уточнить это?