Um aplicativo precisa ter os dados mais atualizados possível de um banco de dados. Nesse caso, existe alguma outra maneira de obter os dados, além de uma solicitação (polling) do banco de dados baseada em timer?
Trabalho com MS SQL Server 2008 (e aplicativos .NET + Entity Framework), mas gostaria de conhecer outros tipos de banco de dados também.
No Oracle, você pode usar o pacote DBMS_ALERT embutido para facilitar isso.
ESCUTAR / NOTIFICAR para PostgreSQL
http://www.postgresql.org/docs/current/static/sql-notify.html
no banco de dados...
ou em uma função/gatilho:
no cliente de banco de dados:
O cliente LISTEN receberá o ID do processo PostgreSQL, nome do canal e valor da mensagem.
O driver JDBC padrão para PostgreSQL não gosta de notificações, mas você pode usar o driver https://github.com/impossibl/pgjdbc-ng para essa finalidade
Certos fornecedores de banco de dados também fornecem barramentos de mensagens integrados nos quais seu aplicativo pode simplesmente se inscrever:
Uma alternativa seria encaminhar os dados para o banco de dados em primeiro lugar por meio de um barramento de mensagem como o Tibco/RV e simplesmente "ramificá-lo", um stream indo para o banco de dados e outro indo para seu aplicativo, ou usar uma camada de cache como Coherence entre seu aplicativo e o banco de dados.
Outra solução Oracle: desenvolvemos aplicativos usando a estrutura dotnet da Microsoft que aproveitam o recurso Database Change Notification da Oracle em conjunto com o ODP.Net (o provedor de dados Oracle para dotnet). Usando isso, o banco de dados realmente notifica o aplicativo dotnet quando novos dados chegam, o que nos permite evitar pesquisas constantes. O link que mencionei acima é um tutorial da Oracle para fazer exatamente isso. Espero que isso ajude você.
Não conheço nenhum outro RDBMS.
O Service Broker para SQL Server 2005+ pode fazer isso.
Desculpe, não tenho certeza de outro RDBMS
Para um de nossos aplicativos (acessado pelo Chrome e APENAS Chrome), estamos usando MySQL com sys_exec UDF . Basicamente, por que o Chrome - devido ao suporte do WebSocket.
Depois que ocorre uma atualização/inserção/exclusão crítica, um programa externo é invocado por meio da funcionalidade sys_exec recém-adicionada incorporada a determinados gatilhos. Nesse ponto, temos tudo o que precisamos para retransmitir a mensagem para todos os clientes conectados sem a necessidade de polling ou várias consultas, pois tudo acontece em tempo real.
Usamos uma combinação de Oracle GoldenGate e Java Persistence API (JPA) para fazer isso com banco de dados Oracle, mas também com DB2, Sybase, Microsoft SQL Server, MySQL, Teradata, etc. O recurso está descrito aqui: http://docs .oracle.com/middleware/1212/coherence/COHIG/golden_g.htm
O que o GoldenGate faz é transformar o log de transação do banco de dados em um fluxo de eventos filtrável que pode ser consumido em qualquer lugar da rede. Nós o usamos para transformar transações relevantes em atualizações de cache ou invalidações de cache, ambas as quais podem acionar eventos no nível do aplicativo, por exemplo, enviar os dados para aplicativos de desktop ou websocket HTML5.
(Para divulgação completa, trabalho na Oracle em um dos produtos que usam o GoldenGate.)