Um Mecanismo de Cache de Dados para DataSnap

Hoje pela manhã, durante o Delphi Academy, discutimos sobre cache de dados para DataSnap. Basicamente o cenário onde você tem tabelas que sofrem nenhuma ou poucas alterações ao longo do período, as quais você não precisa refazer a consulta a todo tempo, para todos os usuários.

Estou disponibilizando o exemplo abaixo, mas em um resumo, temos o seguinte:

  • Em uma aplicação DataSnap REST, adicionar um DataModule e configurar seu LifeCycle para Server, no ServerContainer. Com isso, ele terá uma única instância durante o ciclo de vida da aplicação
  • Neste DataModule, coloque um MemTable (ou Clientdataset se preferir) para cada tabela que deseja manter em cache
  • Defina uma conexão ao banco, e métodos (ou componentes para a execução das queries) para executar as consultas e carregar as tabelas em memória
  • Adicione um TFDEventAlerter e faça as devidas configurações: http://docwiki.embarcadero.com/Libraries/Tokyo/en/FireDAC.Comp.Client.TFDEventAlerter
  • Crie triggers de INSERT/UPDATE/DELETE que fará o “POST_EVENT” com o nome do evento alertando que a tabela sofreu alguma alteração. Este mesmo mecanismo está disponível para a maioria dos banco de dados: http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Database_Alerts_(FireDAC)
  • No evento do OnAlert do  TFDEventAlerter, faça o refresh das tabelas e atualização dos datasets em memória

Com isso, você tem um mecanismo seguro e prático para manter as tabelas em memória sempre atualizadas.

Screen Shot 2017-05-30 at 17.34.14Screen Shot 2017-05-30 at 17.34.21

Os exemplos atualizados estão nestes links:

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s