Дата публикации: 20.02.2013

IBProvider 3.14. Новый асинхронный ускоритель для вашего Firebird и InterBase

В новой версии IBProvider v3.14 появилась асинхронная загрузка данных результирующих множеств.

IBProvider предоставляет два метода активации этой функциональности:

  1. Стандартный способ, предоставляющий расширенные возможности для контроля над асинхронной операцией.
  2. Упрощенный способ, в виде неявной асинхронной загрузки.

Стандартный способ включения асинхронной загрузки

В данном случае, асинхронная работа набора рядов настраивается через стандартное свойство команды и набора рядов — «Asynchronous Rowset Processing». Вы можете настроить:

  • Блокирующую асинхронную загрузку
  • Неблокирующую асинхронную загрузку

Интерфейсы для управления асинхронной загрузкой IDBAsynchStatus и ISSAsynchStatus

После включения асинхронной загрузки набора рядов, вам будут доступны интерфейсы IDBAsynchStatus и ISSAsynchStatus. Эти интерфейсы позволяют:

  • Запрашивать данные о состоянии асинхронной загрузки
  • Прерывать асинхронную загрузку
  • Ждать завершения асинхронной загрузки

Интерфейсы для получения уведомлений: IConnectionPointContainer и IDBAsynchNotify

Кроме того, через IConnectionPointContainer можно будет подключиться к уведомлениям асинхронной операции. Интерфейс точки подключения – IDBAsynchNotify.

В случае работы с Firebird и InterBase через библиотеку ADODB, асинхронный фетч включается указанием adAsyncFetch в параметре Options метода ADODB.Command.Execute.

Упрощенный способ включения асинхронной загрузки

Для случаев, когда включение асинхронной загрузки стандартным методом не представляется возможным, в IBProvider добавлен упрощенный вариант в виде неявной асинхронной загрузки. Она включается через новое свойство инициализации asynch_fetch. Допускается установка следующих значений:

  • 0 — неявная асинхронная загрузка запрещена
  • 1 — неявная асинхронная загрузка всегда включена
  • 2 — неявная асинхронная загрузка включается только если клиент включает асинхронную инициализацию (MSSQL)
Если вы хотите использовать асинхронную загрузку для связного сервера MSSQL, необходимо указать в строке подключения «asynch_fetch=2».

В упрощенном режиме наборы рядов не будут предоставлять интерфейсы для управления асинхронной загрузкой и получения уведомлений.

Производительность асинхронной загрузки

Производительность асинхронной загрузки зависит от множества факторов. В наших экспериментах с асинхронной загрузкой мы получали результаты, которые говорят об увеличении скорости обработки данных более чем на 30%.

Сравнение синхронной и асинхронной обработки данных.

В целом, глобальное включение асинхронной загрузки (asynch_fetch=1) не приводило к ухудшению производительности в нашей тестовой системе.


Дата публикации: 20.02.2013. Права на материал принадлежат: IBProvider. При перепечатке ссылка на сайт https://www.ibprovider.com/rus обязательна.