Является ли опрос единственным способом обновления данных приложения из базы данных?
-
16-10-2019 - |
Вопрос
Приложение должно иметь как можно более свежие данные из базы данных.В таком случае, есть ли какой-либо другой способ получения данных, помимо запроса (опроса) базы данных на основе таймера?
Я работаю с MS SQL Server 2008 (и .NET applications + Entity Framework), но я хотел бы узнать и о других типах баз данных.
Решение
Сервисный брокер Для SQL Server 2005+ может сделать это.
Извините, я не уверен в других RDBMS
Другие советы
В Oracle вы можете использовать встроенный DBMS_Alert Package чтобы облегчить это.
DBMS_Alert поддерживает асинхронное уведомление о событиях базы данных (оповещения). При надлежащем использовании этого пакета и триггеров базы данных приложение может уведомлять себя, когда изменяются интересные значения в базе данных.
Предположим, что графический инструмент отображает график некоторых данных из таблицы базы данных. Графический инструмент может, после чтения и графика данных, подождать при оповещении базы данных (Waitone), охватывающего данные. Инструмент автоматически просыпается, когда данные изменяются любым другим пользователем. Все, что требуется, это то, что триггер будет размещен в таблице базы данных, которая выполняет сигнал (сигнал) всякий раз, когда запускается триггер.
Некоторые поставщики баз данных также предоставляют встроенные шины сообщений, на которые ваше приложение может просто подписаться:
- Расширенное обслуживание очередей Oracle
- IBM DB2 с MQSeries (теперь называется WebSphere MQ)
- Sybase RTMS
Альтернативой было бы перенаправить данные в базу данных в первую очередь через шину сообщений, например 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.)