Tabelas de Soma
Tabelas de soma são tabelas que totalizam o conteúdo de um determinado campo de uma tabela.
Exemplificando:
Seja uma tabela hipotética de Vendas
Data | Classe | Valor |
---|---|---|
01/05 | 2 | 32 |
01/05 | 2 | 22 |
01/05 | 3 | 11 |
02/05 | 3 | 44 |
Desejamos gerar uma tabela de soma, agregando por data e classe.
O programador, através de um script vai definir a tabela, os campos de agregação, e os campos de soma:
Exemplo de script:
{
tableName: "Vendas",
viewName : "Vendas_Soma",
fields: [
{name:"data"},
{name:"classe"},
{name: "valor", agg: "sum"}
],
indexes: ["data,classe", "classe"]
}
Teríamos a tabela Vendas_Soma
Data | Classe | Valor |
---|---|---|
01/05 | 2 | 54 |
01/05 | 3 | 11 |
02/05 | 3 | 44 |
O conceito de tabelas de soma do sistema está ligado aos conceitos de visão de dados, visão materializada, notação JSON e objetos literais. É necessário compreensão destes conceitos.
Visão de dados
Tabela derivada a partir de uma ou várias tabelas do banco de dados através de uma consulta. As visões não armazenam dados.
Wikipedia: Uma visão, ou vista (em inglês: view), no contexto dos bancos de dados é uma relação que não armazena dados, composta dinamicamente por uma consulta que é previamente analisada e otimizada.
Entre as principais utilidades estão, a depender do SGBD utilizado, o aumento de segurança por propiciar uma visão limitada e controlada dos dados que podem ser obtidos da base e a performance por utilizar uma consulta previamente otimizada, tornando desnecessário este processo de otimização quando for realizada.
Desvantagem em usar visões
São re-computadas sempre que uma consulta a referencia. Esse processo pode ter um custo bastante elevado.
Uma solução usada para contornar esta desvantagem seria usar visões materializadas.
Visão materializada
É o resultado do conteúdo de uma visão computada e armazenado fisicamente em uma tabela do banco de dados.
Uma consulta envolvendo a visão pode acessar diretamente a visão materializada.
Obs: O sistema já possibilitava o uso de visões materializadas.
Desvantagens em usar visões materializadas
Como uma visão materializada é uma tabela derivada e definida a partir de uma tabela base, operações de inserção, deleção e atualização nos registros dessa tabela base fazem com que a visão materializada fique desatualizada. Recriar a visão materializada como um todo pode ser um processo demorado e ineficiente.
Uma solução para contornar esta desvantagem seria aplicar na visão materializada apenas as alterações feitas na tabela base. Este tipo de atualização é chamado de manutenção incremental da visão materializada.
Como funciona a tabela de soma?
Aqui segue um breve descrição dos item desta imagem:
- Tabela Base: Nome da tabela do sistema.
- Tabela Delta: Tabela gerada pela API da tabela de soma que será onde ficará todas as alterações realizadas na tabela base desde a última a atualização da visão materializada base.
- Visão Base: Uma visão de dados construída a partir da tabela base com os dados agregados.
- Visão Delta: Visão da tabela delta, com os mesmo campos agregados da visão base.
- Visão Materializada Base: Visão materializada da visão base. Se o banco de dados não suportar visão materializada, será criada pela API de tabelas de soma uma tabela física.
- Visão do usuário: União da visão delta com a visão materializada base. Com isso a visão do usuário sempre terá os dados on-line, sem gap de atualização.
Configurando uma tabela de soma
Para configurar uma tabela de soma, deve ser criado um arquivo com a extensão “.iat”. O conteúdo desse arquivo deve ser um JSON com as seguintes propriedades:
{
"tableName": "Vendas",
"viewName" : "Vendas_Soma",
"fields": [
{ "name":"data" },
{ "name":"classe" },
{ "name": "valor", "agg": "sum" }
],
"indexes": ["data,classe", "classe"]
}
Onde,
- tableName = Nome da tabela;
- viewName = Nome da visão;
- fields = Nome dos campos e os tipos de agregação;
- indexes = Nome dos campos dos índices que vão ser criados no banco. Poderão ser criado índices simples ou compostos.
O processo para criação das tabelas de soma
Local: “Desenvolvimento > Base de dados > Tabelas De Soma”.
- Grade de visões do sistema: Contém todos os scripts que definem uma tabela de soma.
- Grade de visões criadas: Contém todas as tabelas de soma criadas no banco de dados.
Atualização de uma visão materializada
A atualização das visões materializada é realizada através de um tarefa no scheduler executada de acordo com o periodicidade configurada, ou através do processo de criação das tabelas de soma.
Atualizando Manualmente
- Acesse o processo “Desenvolvimento > Base de dados > Tabelas de Soma”
- Na grade “Visões Criadas” selecione um registro ou todos.
- Clique no botão “Atualizar”.
- Observe se o campo “Status” mudou para “Atualizada”
Agendando a Atualização
- Acesse o processo “Admin > Agendador de Scripts”
- Crie uma nova tarefa
- Em “Período” selecione “Intervalo”
- Em “Hora” selecione o intervalo entre as execuções do script, recomendamos 10 minutos, mas o valor pode ser definido de acordo com o usuário.
- Em “Script VFS” preencha com o valor “-1898141887” que é a chave do script “updateSummaryTables.ijs”.
- Caso não seja encontrado o “Script VFS” acima, favor verificar se há permissão para acessar o script em “Permissões > products > Engine > scripts > sumtable “.
- Grave o agendamento e verifique se a primeira execução deste ocorre sem erros.
Criando uma tabela de soma no sistema
Segue os passos necessários para criar uma tabela de soma no sistema.
- Criar um script com extensão “.iat” no formato de objeto JSON;
- Entrar no processo de Tabelas de soma
- Escolher a visão que vai ser criada;
- Clicar na action de criar visão;
Conclusão
Com as informações aqui apresentas a respeito da tabela de soma e seu funcionamento, podemos destacar os seguintes pontos:
- Otimização nas consultas que utilizem o tipo de agregação do tipo SUM, com a criação de visões materializadas e com a oportunidade de criação de índices simples ou compostos para os campos.
- Utilização de tabelas e visões deltas que ajudam a manter a visão sempre atualizada, sem perder a performance das consultas.
- Compatibilidade com três tipos de banco de dados: SQL Server, ORACLE, PGSQL.