Является ли опрос единственным способом обновления данных приложения из базы данных?

dba.stackexchange https://dba.stackexchange.com/questions/1570

Вопрос

Приложение должно иметь как можно более свежие данные из базы данных.В таком случае, есть ли какой-либо другой способ получения данных, помимо запроса (опроса) базы данных на основе таймера?

Я работаю с MS SQL Server 2008 (и .NET applications + Entity Framework), но я хотел бы узнать и о других типах баз данных.

Это было полезно?

Решение

Сервисный брокер Для SQL Server 2005+ может сделать это.

Извините, я не уверен в других RDBMS

Другие советы

В Oracle вы можете использовать встроенный DBMS_Alert Package чтобы облегчить это.

DBMS_Alert поддерживает асинхронное уведомление о событиях базы данных (оповещения). При надлежащем использовании этого пакета и триггеров базы данных приложение может уведомлять себя, когда изменяются интересные значения в базе данных.

Предположим, что графический инструмент отображает график некоторых данных из таблицы базы данных. Графический инструмент может, после чтения и графика данных, подождать при оповещении базы данных (Waitone), охватывающего данные. Инструмент автоматически просыпается, когда данные изменяются любым другим пользователем. Все, что требуется, это то, что триггер будет размещен в таблице базы данных, которая выполняет сигнал (сигнал) всякий раз, когда запускается триггер.

Некоторые поставщики баз данных также предоставляют встроенные шины сообщений, на которые ваше приложение может просто подписаться:

Альтернативой было бы перенаправить данные в базу данных в первую очередь через шину сообщений, например Tibco/фургон и просто "разветвляйте" его, передавая поток в базу данных, а другой - в ваше приложение, или используйте уровень кэширования, такой как Согласованность между вашим приложением и базой данных.

Слушайте / уведомление о PostgreSQL

http://www.postgresql.org/docs/current/static/sql-notify.html

В базе данных ...

NOTIFY static_channel_name, 'static-message';

или в функции/триггере:

perform pg_notify('dynamic-channel-name', 'dynamic-message');

В базе данных клиент:

LISTEN some_channel_name; --note the lack of quotes

Клиент прослушивания получит идентификатор процесса PostgreSQL, имя канала и значение сообщения.

Стандартный драйвер JDBC для PostgreSQL не любит уведомления, однако вы можете использовать https://github.com/impossibl/pgjdbc-ng водитель для этой цели

Другое решение Oracle: мы разработали приложения, используя Dotnet Framework от Microsoft, которые пользуются преимуществами Уведомление об изменении базы данных Функция Oracle в сочетании с ODP.net (поставщик данных Oracle для DotNet). Используя это, база данных фактически уведомляет приложение DotNet, когда появились новые данные, позволяющие нам избежать постоянного опроса. Ссылка, на которую я ссылаюсь выше, является учебником Oracle для этого. Надеюсь, что это помогает вам.

Не знаю ни о каких других RDBMS.

Для одного из наших приложений (доступ к Chorough Chrome и Hrome) мы используем MySQL с sys_exec udfАнкет По сути, почему Chrome - из -за поддержки WebSocket.

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

Мы используем комбинацию Oracle Goldengate и Java Persistence API (JPA), чтобы сделать это с базой данных Oracle, а также с DB2, Sybase, Microsoft SQL Server, MySQL, Teradata и т. Д. http://docs.oracle.com/middleware/1212/coherence/cohig/golden_g.htm

Goldengate делает, так это превратить журнал транзакций базы данных в фильтруемый поток событий, который можно использовать в любом месте сети. Мы используем его, чтобы превратить соответствующие транзакции в обновления кэша или допустимость кэша, которые могут запустить события уровня приложений, например, выдвигать данные на все возможное в приложениях WebSocket Desktop или HTML5.

(Для полного раскрытия я работаю в Oracle над одним из продуктов, используя Goldengate.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top