멀티 스테일 응용 프로그램에서 좋은 관행은 데이터베이스에 대한 액세스 구성 요소를 분리하는 것이 좋습니다.이 관행의 위반은 다른 오류 중에서 액세스 위반 오류를 생성 할 수 있습니다. 이 문제를 해결하기 위해 embarchadero는 연결의 정의 및 관리를 담당하고 스레드-안전 (멀티 스레드 환경에서 안전한 사용)을 담당하는 구성 요소 인 FDManager를 제공했습니다.
출처 : https://docwiki.embarcadero.com/radstudio/sydney/en/multithreading_(fiedac)
FDManager 사용의 장점
라이브러리 정의 데이터베이스에 대한 고객 액세스. [선택 과목]
데이터베이스와 연결 설정의 중앙 집중화.
TFDConnection 구성 요소의 매개 변수화의 중앙 집중화. (이 구성은 응용 프로그램에 사용 된 모든 FDConnection으로 확장됩니다)
FDManger를 사용하는 것 외에도 모범 사례와 데이터베이스 연결 최적화 기술을 사용하는 것 외에도 연결 풀이 라고합니다.
데이터베이스에서 작업을 수행 해야하는 경우 먼저 연결을 설정해야합니다.이 연결의 설정은 일반적으로 연결을 열고 폐쇄하는 비용과 관련된 TCP/IP 프로토콜을 통해 발생합니다. 이 비용은 특히 수천 개의 지속적인 요청을받을 수있는 웹 애플리케이션 에서 특히 중요하며 각각은 데이터베이스 연결의 개방 및 폐쇄를 생성합니다. 이 일정한 "빌어 먹을"연결을 피하기위한 간단한 기술은 특정 수의 연결이 항상 열려 있고 (연결 풀 )를 유지하고 필요한 경우 간단히 재사용하는 것입니다.
데이터베이스 연결을 설정하는 데 드는 비용은 Wireshark 도구를 사용하여 아래 이미지에서 볼 수 있습니다. 간단한 선택을 수행하는 데 사용되는 패킷의 양을 볼 수 있습니다.
Connections Pool을 사용하여 데이터베이스 쿼리의 동작 아래 이미지에서 볼 수 있습니다.
연결 풀을 구성하기 위해 FDManager 및 풀 속성을 사용합니다.
| 매개 변수 | 설명 | 예 |
|---|---|---|
| 풀링 | fdmanager.connectationndefs에 알려진 ConnectionOndefName의 연결 풀을 활성화합니다. 연결 풀을 사용하려면 연결 정의가 지속적이거나 개인이어야합니다. | 진실 |
| pool_cleanuptimeout | Firedac까지 밀리 초의 시간은 pool_expiretimeout 시간까지 사용되지 않은 연결을 제거합니다 . 기본값은 30000ms (30 초)입니다. | 15000ms 15 s |
| pool_expiretimeout | 밀리 초의 시간, 그 후 비활성 연결은 수영장에서 제외되어 파괴 될 수 있습니다. 기본값은 90000ms (90 초)입니다. | 60000ms 60 s |
| pool_maxumemtes | 수영장의 최대 연결 수. 응용 프로그램에 더 많은 연결이 필요한 경우 예외가 생성됩니다. 기본값은 50입니다. 이 속성에 지정된 총 연결 수에 도달하면 예외가 생성됩니다. | 100 |
일반적으로 FDManager는 다음과 같은 경우 "물리적"연결 풀을 열어줍니다.
다른 데이터베이스와 함께 FDManager를 사용하려면 링크 : Database Connectivity (FiredAc) #Driver Linkage를 확인하십시오.
| 데이터 베이스 | 드라이버 | tfdconneneondefpass | 단위 |
|---|---|---|---|
| Microsoft SQL Server | MSSQL | TFDPHYSMSSSQLONNEONEFPASS | firedac.phys.mssqldef, firedac.stan.intf, firedac.phys, firedac.phys.odbcbase, firedac.phys.mssql |
| 오라클 서버 | 지금 | TFDPHYSORACLECONNECONTEFPASS | firedac.phys.oracledef, firedac.stan.intf, firedac.phys, firedac.phys.oracle |
| Postgresql | pg | TFDPHYSPGCONNEONECENDEFPASS | fiedac.phys.pgdef, firedac.stan.intf, firedac.phys, firedac.phys.pg; |
| MySQL 서버 | MySQL | TFDPHYSMYSQLCONNEONEFPASS | firedac.phys.mysqldef, firedac.stan.intf, firedac.phys, firedac.phys.mysql |
| IBM DB2 서버) | DB2 | TFDPHYSDB2CONNECTIONANDEFPARAMS | firedac.phys.db2def, firedac.stan.intf, firedac.phys, firedac.phys.odbcbase, firedac.phys.db2 |
| 파이어 버드 | FB | TFDPHYSFBCONNEONTEFPASS | firedac.phys.fbdef, firedac.stan.intf, firedac.phys, firedac.phys.ibbase, firedac.phys.fb |
| 인터베이스 | ib | TFDPHYSIBCONNEONECENDEFPASS | firedac.phys.ibdef, firedac.stan.intf, firedac.phys, firedac.phys.ibbase, firedac.phys.ib |
| sqlite | sqlite | TFDPHYSSQLITECONNECTIONANDEFPARAMS | fiedac.stan.exprfuncs, firedac.phys.sqlitedef, firedac.stan.intf, firedac.phys, firedac.phys.sqlite |
| Mongodb | 몽고 | tfdphysmongoconneottondefpass | firedac.phys.mongodbdef, firedac.stan.intf, firedac.phys, firedac.phys.mongodb |
| ODBC | ODBC | TFDPHYSODBCCONNEONECENDEFPASS | firedac.phys.odbcdef, firedac.stan.intf, firedac.phys, firedac.phys.odbcbase, firedac.phys.odbc |
프로젝트에 첨부 된 다중 재생 환경에서 데이터베이스 연결을 사용하는 두 가지 예가 있습니다.
첫 번째 예, 데스크탑 용 멀티 스레딩 환경에서 연결을 사용합니다.
두 번째 예, 말이있는 웹 서버의 멀티 스레딩 환경에서 연결을 사용합니다.
두 예 모두 Firebird 데이터베이스를 사용합니다