IBProvider 3.14. Новый асинхронный ускоритель для вашего Firebird и InterBase
В новой версии IBProvider v3.14 появилась асинхронная загрузка данных результирующих множеств.
IBProvider предоставляет два метода активации этой функциональности:
- Стандартный способ, предоставляющий расширенные возможности для контроля над асинхронной операцией.
- Упрощенный способ, в виде неявной асинхронной загрузки.
Стандартный способ включения асинхронной загрузки
В данном случае, асинхронная работа набора рядов настраивается через стандартное свойство команды и набора рядов — «Asynchronous Rowset Processing». Вы можете настроить:
- Блокирующую асинхронную загрузку
- Неблокирующую асинхронную загрузку
Интерфейсы для управления асинхронной загрузкой IDBAsynchStatus и ISSAsynchStatus
После включения асинхронной загрузки набора рядов, вам будут доступны интерфейсы IDBAsynchStatus и ISSAsynchStatus. Эти интерфейсы позволяют:
- Запрашивать данные о состоянии асинхронной загрузки
- Прерывать асинхронную загрузку
- Ждать завершения асинхронной загрузки
Интерфейсы для получения уведомлений: IConnectionPointContainer и IDBAsynchNotify
Кроме того, через IConnectionPointContainer можно будет подключиться к уведомлениям асинхронной операции. Интерфейс точки подключения – IDBAsynchNotify.
Упрощенный способ включения асинхронной загрузки
Для случаев, когда включение асинхронной загрузки стандартным методом не представляется возможным, в IBProvider добавлен упрощенный вариант в виде неявной асинхронной загрузки. Она включается через новое свойство инициализации asynch_fetch. Допускается установка следующих значений:
- 0 — неявная асинхронная загрузка запрещена
- 1 — неявная асинхронная загрузка всегда включена
- 2 — неявная асинхронная загрузка включается только если клиент включает асинхронную инициализацию (MSSQL)
В упрощенном режиме наборы рядов не будут предоставлять интерфейсы для управления асинхронной загрузкой и получения уведомлений.
Производительность асинхронной загрузки
Производительность асинхронной загрузки зависит от множества факторов. В наших экспериментах с асинхронной загрузкой мы получали результаты, которые говорят об увеличении скорости обработки данных более чем на 30%.
В целом, глобальное включение асинхронной загрузки (asynch_fetch=1) не приводило к ухудшению производительности в нашей тестовой системе.