В приложении многопоточного приложения правильная практика состоит в том, чтобы изолировать компоненты доступа к базе данных, нарушение этой практики может генерировать ошибки нарушения доступа среди других ошибок. Чтобы помочь решить эту проблему, Embarchadero предоставила компонент, Fdmanager , который отвечает за определение и управление соединениями и является безопасным для резьбы (безопасное использование в средах для многопоточных счетов).
Источник: https://docwiki.embarcadero.com/radstudio/sydney/en/multithreading_(fiedac)
Преимущества использования Fdmanager
Библиотечное определение клиента доступа к базе данных. [НЕОБЯЗАТЕЛЬНЫЙ]
Централизация настроек подключения с базой данных.
Централизация параметризаций компонента TFDConnection. (Эта конфигурация распространяется на все FDConnection, используемые в приложении)
В дополнение к использованию FDManger хорошая практика и использование техники оптимизации подключения к базе данных, называемой пулом соединений .
Когда нам нужно выполнить любую операцию в базе данных, сначала необходимо установить соединение с ней, установление этого соединения обычно происходит через протокол TCP/IP , включая стоимость открытия и закрытия соединения. Эта стоимость особенно значима в веб -приложениях , где вы можете иметь поток тысяч постоянных запросов, и каждый из них будет генерировать открытие и закрытие подключения к базе данных. Простая техника, позволяющая избежать этого постоянного «траха» соединений, состоит в том, чтобы поддерживать определенное количество соединений, всегда открытых ( пул соединений) и просто повторно использовать при необходимости, поэтому вы уменьшаете как потраченный ресурс машины, так и время вашего отклика приложения.
Эта стоимость установления подключения к базе данных можно увидеть на изображении ниже, используя инструмент Wireshark , мы можем увидеть количество пакетов, которые используются для выполнения простого выбора.
Мы можем видеть на изображении ниже поведения запросов базы данных с использованием пула соединений:
Чтобы настроить пул соединений, мы будем использовать Fdmanager и свойства пула.
| Параметр | Описание | Пример |
|---|---|---|
| Объединенный | Активирует пул соединений для подключения к информированию в fdmanager.connectationndefs. Чтобы использовать пул соединений, определение соединения должно быть постоянным или частным. | Истинный |
| Pool_cleanuptimeout | Время в миллисекундах до тех пор, пока Firedac не удаляет соединения, которые не использовались до времени pool_expiretimeout. Значение по умолчанию составляет 30000 мс (30 секунд). | 15000 мс 15 с |
| Pool_expiretimeout | Время в миллисекундах, после чего неактивная связь может быть исключена из бассейна и уничтожена. Значение по умолчанию составляет 90000 мс (90 секунд). | 60000 мс 60 с |
| Pool_maximumemtes | Максимальное количество соединений в бассейне. Когда приложение требует больше подключений, генерируется исключение. Значение по умолчанию составляет 50. Когда общее количество подключений, указанных на этом свойстве, достигается, генерируется исключение: | 100 |
В целом, Fdmanager сохраняет пул «физических» соединений, когда:
Чтобы использовать Fdmanager с другими базами данных, проверьте ссылку: подключение к базе данных (FireDAC) #Driver Связь
| База данных | DriverId | Tfdconneneondefpass | Единицы |
|---|---|---|---|
| Microsoft SQL Server | MSSQL | Tfdphysmsssqlonneonefpass | Firedac.phys.mssqldef, firedac.stan.intf, firedac.phys, firedac.phys.odbcbase, firedac.phys.mssql |
| Oracle Server | Сейчас | Tfdphysoracleconnecontefpass | Faredac.phys.oracledef, Firedac.stan.intf, Firedac.phys, firedac.phys.oracle |
| Postgresql | Пг | Tfdphyspgconneonecendefpass | Fiedac.phys.pgdef, firedac.stan.intf, firedac.phys, firedac.phys.pg; |
| MySQL Server | Mysql | Tfdphysmysqlconneonefpass | Firedac.phys.mysqldef, firedac.stan.intf, firedac.phys, firedac.phys.mysql |
| IBM DB2 Server) | DB2 | Tfdphysdb2connectionandefparams | Firedac.phys.db2def, firedac.stan.intf, firedac.phys, firedac.phys.odbcbase, firedac.phys.db2 |
| Firebird | Фб | Tfdphysfbconneontefpass | Faredac.phys.fbdef, Firedac.stan.intf, firedac.phys, firedac.phys.ibbase, firedac.phys.fb |
| Межбаза | IB | Tfdphysibconneonecendefpass | Faredac.phys.ibdef, Firedac.stan.intf, Firedac.phys, firedac.phys.ibbase, firedac.phys.ib |
| SQLite | SQLite | Tfdphyssqliteconnectionandefparams | Fiedac.stan.exprfuncs, firedac.phys.sqlitedef, faredac.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 |
Прилагаемое к проекту, есть два примера использования подключения к базе данных в средах многопоточной.
1 -й пример, используя подключения в среде многопоточного для рабочего стола .
2 -й пример, используя подключения в среде многопоточного для веб -сервера с лошадью.
Оба примера используют базу данных Firebird