옵션 1. 모든 웹 사용자간에 단일 데이터베이스 연결을 공유하는 것은 여러 가지 이유에서 실패 할 수밖에 없습니다. 하나의 장기 실행 쿼리 및 전체 서버가 중단됩니다. 99.9 %의 모든 최신 응용 프로그램, 심지어 웹 기반이 아닌 응용 프로그램에 대해서도 단호하고 빠른 "아니오"입니다.
옵션 2. 연결 풀링. 아마도 웹 응용 프로그램이 DB에 연결하는 데 가장 많이 사용되는 두 번째 기술 일 것입니다. 첫째, DB와 Pool/web app가 동일한 시스템에 있으면 이점이 극히 제한적입니다. 그러나 풀과 웹 앱은 동일한 하드웨어에 쉽게 존재할 수 있습니다. 여기서 이점은 데이터베이스 연결이 열리는 데 드는 비용이 적게 들고 상대적으로 비용이 적게 들고 열리게하는 데 많은 비용이 듭니다. 연결을 열려면 CPU 사용 및 메모리 할당이 필요합니다. 풀링 연결을 사용하면 수십 개의 연결을 거의 즉시 연결할 수 있습니다. 메모리가 이미 할당되고 대부분의 설정 작업이 이미 완료되었으므로 풀에 연결하거나 연결을 끊는 것이 상대적으로 쉽습니다. 일반적으로 풀은 항상 일정한 수의 연결을 유지하며 트래픽이 증가함에 따라 증가합니다. 과도한 트래픽이 발생하면 풀은 일반적으로 DB에 과부하가 걸리지 않도록 연결 요청을 대기열에 넣습니다. 대기열의 뒤쪽에있는 사용자는 지연을 경험하지만 시스템이 중단되어 일반적으로 메모리 부족으로 인해 중단 될 가능성이 적습니다 및 디스크 스와핑.
옵션 3. 요청 당 새 데이터베이스 연결. 가벼운 시스템에서 적당히 사용되는 시스템에서는 끔찍한 옵션이 아니며 보통 나중에 풀러로 업그레이드하는 것이 쉽습니다. 그러나 각 데이터베이스 연결 (모든 페이지로드)에는 CPU 및 메모리 할당과 관련된 DB 연결 열기 및 닫기가 필요합니다. 실제로 페이지가 빠르게로드되고 사용자 기반이 작고 일관되며 트래픽이 상당히 일정한 경우 정상적으로 작동 할 수 있습니다. 많은 DEV, CAT 및 QA 환경은 풀러없이 직접 연결됩니다. 단점은 # 1이며, DB에 대한 연결을 제어 할 수있는 방법이 전혀 없다는 것입니다. 쿼리가 멈추는 경우 갑자기 수백 개의 연결이 DB를 종료하게 할 수 있으며 경우에 따라 DB를 재부팅하거나 다시 시작해야 상황을 수정할 수 있습니다.
예를 들어 사이트의 홈페이지에 1 개의 잘못된 쿼리를 작성하면 0.3 초가 아닌 3 초가 걸릴 수 있습니다. 결국 한 순간에 1-2 페이지가 실행 된 사이트는 현재 최대 10-20 개까지 충돌 할 수 있습니다. 이제는 10-20 페이지 = 10-20 DB 연결이 끊임없이 열리고 닫히며 10-20은 평균으로 열립니다. 이 문제는 연결 제한에 도달 할 때까지 점점 더 많은 메모리를 사용하여 크리프됩니다 (또는 더 나쁜 경우, 이제는 모든 메모리와 모든 스와핑을 사용합니다). 이 시점에서 모든 것이 중단됩니다.
연결은 DB와 앱 서버/풀러 모두에서 리소스를 사용합니다. DB가 페이징을 할 때 대부분의 시간 동안 무언가를 다시 설정하지 않고도 정상적인 복구를 위해 모든 희망을 잃어 버릴 수 있습니다 - 분명히 일어날 수 있지만 코드 수정 없이는 문제가 필연적으로 해결 될 때까지 다시 부팅해야합니다. 다시 발생하고 잘하면 그 시간에, 당신은 나쁜 쿼리 또는 나쁜 구성을 발견하고 그것을 고쳤습니다.
옵션 2는 옵션을 제공합니다. 일반적으로 관리상의 골치 거리는 아니지만 1 대의 머신에서 모두 실행하면 이점이 제한됩니다. 적어도 2 대의 컴퓨터 (응용 프로그램 서버 및 DB 서버)가있는 경우 일반적으로 많은 시스템 과부하를 방지하는 쉬운 솔루션입니다.