Приложение должно иметь как можно более свежие данные из базы данных. В таком случае, есть ли другой способ получения данных, кроме запроса (опроса) базы данных на основе таймера?
Я работаю с MS SQL Server 2008 (и приложениями .NET + Entity Framework), но мне бы хотелось узнать и о других типах баз данных.
Ответы:
Service Broker для SQL Server 2005+ может сделать это.
Извините, я не уверен в других RDBMS
источник
В Oracle вы можете использовать встроенный пакет DBMS_ALERT, чтобы облегчить это.
источник
Некоторые поставщики баз данных также предоставляют интегрированные шины сообщений, на которые ваше приложение может просто подписаться:
В качестве альтернативы можно было бы сначала направить данные в базу данных через шину сообщений, например Tibco / RV, и просто «разветвлять» ее, когда поток идет в БД, а другой - в ваше приложение, или использовать уровень кэширования, такой как Coherence. между вашим приложением и БД.
источник
СЛУШАТЬ / УВЕДОМИТЬ для PostgreSQL
http://www.postgresql.org/docs/current/static/sql-notify.html
в базе данных ...
или в функции / триггере:
в клиенте базы данных:
Клиент LISTEN получит идентификатор процесса PostgreSQL, имя канала и значение сообщения.
Стандартный драйвер JDBC для PostgreSQL не любит уведомления, однако для этой цели вы можете использовать драйвер https://github.com/impossibl/pgjdbc-ng
источник
Другое решение Oracle: мы разработали приложения, использующие среду dotnet от Microsoft, которая использует функцию уведомления об изменении базы данных Oracle в сочетании с ODP.Net (поставщик данных Oracle для dotnet). Используя это, база данных фактически уведомляет приложение dotnet о поступлении новых данных, что позволяет нам избежать постоянного опроса. Ссылка, на которую я ссылаюсь выше, является руководством по Oracle для этого. Надеюсь, что это помогает вам.
Не знаю ни о каких других РСУБД.
источник
Для одного из наших приложений (доступ через Chrome и ТОЛЬКО Chrome) мы используем 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 / промежуточное программное обеспечение / 1212 / когерентность / COHIG / golden_g.htm
GoldenGate превращает журнал транзакций базы данных в фильтруемый поток событий, который можно использовать в любом месте сети. Мы используем его для превращения соответствующих транзакций в обновления кеша или в аннулирование кеша, которые могут инициировать события уровня приложения, например, отправка данных до настольных или веб-сокет-приложений HTML5.
(Для полного раскрытия я работаю в Oracle над одним из продуктов, использующих GoldenGate.)
источник