Banco de Dados

Data de postagem: May 24, 2010 2:41:52 PM

Introdução

O banco de dados utilizado no iEngine é denormalizado. Essa denormalização visa performance em consultas uma vez que há redudância de dados e não há necessidades de várias junções para se chegar a um resultado. Também há facilidade para o desenvolvedor chegar a uma determinada informação.

Outro ponto importante é o conceito de chave única em todo o banco de dados. Não há duas chaves de registro iguais no base, mesmo em tabelas diferentes. Podendo ser chave negativa (para o caso de produto) ou chave positiva (para o caso de registro pertencente somente àquela base). É sempre guardado a última chave utilizada para que seja continuado o incremento de chaves para um novo registro e a cada inserção há uma versão que também é uma chave única na base.

Toda tabela segue um padrão de ter os campos CHAVE, CLASSE e VERSAO. A chave, como já dita, é única em toda a base. O campo classe estará a classe ao qual o registro pertence na base. E o campo versao tem a chave da versão que houve a alteração.

Cache Local

O cache é um dispositivo de acesso rápido, tendo como principal benefício não ser necessário acessar o dispositivo central de armazenamento. Esse dispositivo, no caso do iEngine, é o IDO. Dessa forma, se o "iEngine servidor" estiver offline, o "iEngine cliente" pode continuar o funcionamento normal se estiver alterado somente dados no cache local, pois quando o servidor ficar online novamente esse cache será sincronizado com o banco de dados central. O cache é frequentemente atualizado com os dados da base de dados.

Esse cache será armazenado no local onde o iEngine estiver em execução, ou seja, se um usuário possui o iEngine executando em sua máquina, lá haverá um armazenamento em cache de algumas tabelas. Porém, como poderia aumentar muito de tamanho, comprometendo o espaço na máquina que possuir o iEngine, somente algumas tabelas são armazenadas no cache.

As tabelas de movimentação (exemplo: Pedido, Evento, VinculaMovimentac, etc.) não são armazenadas no cache, devido ao seu tamanho. Somente tabelas ditas de cadastro, exemplo: Entidade, Vincula, Tabela, etc.

ApplyUpdates

O ApplyUpdates é responsável pela inserção, atualização e deleção de um registro na base de dados. Ao realizar operações no DataSet (estrutura de dados de forma tabular utilizada para manipulação de dados) é definido um delta para o registro, ou seja, se um registro é deletado de um DataSet, será atribuído um delta, se for inserido um registro será outro delta. O ApplyUpdates tem o conhecimento desse delta para que faça a operação correta na base de dados.

A cada operação do ApplyUpdates é atribuído um número de versão para alteração. Dessa forma é possível rastrear qualquer alteração realizada na base de dados através da versão.

Utilizando o ApplyUpdates implementado na variável global connection, a cada vez que é invocado é retornado a versão da operação, se retornar zero é porque não houve alteração na base de dados. Um segundo parâmetro (boolean) é usado para informar se as alterações devem ser inseridas na tabela iLog, como forma de registro do log de alterações, por padrão é true.

connection.applyUpdates(ds)

ou

connection.applyUpdates([ds1, ds2, ...])

Para invocar o ApplyUpdates é necessário que o DataSet seja a cópia (podendo ter somente a cópia da estrutura da tabela e não todos os registros) de uma tabela da base de dados, pois o ApplyUpdates irá verificar a qual tabela o DataSet pertence, para assim executar a operação na tabela correta.

Tabelas de cache local x Tabelas que não são de cache local

Também há o conceito de tabelas de cadastro (que estão no cache local) e tabelas de movimentação. Nas tabelas de movimentação estão os registros referentes a operações do dia a dia no ERP, como por exemplo: pedidos, eventos, log's, vínculos de movimentação, movimentação de depósito, etc. Já nas tabelas de cadastro estão registros que serão utilizados nas operações, dados cadastrais do ERP, exemplo: entidade (onde está por exemplo: clientes, fornecedores, etc), tabela (onde está todos os cadastros auxiliares de operações, recursos, entidades, etc), etc.

Desta forma, não há necessidade de se fazer query para consultar dados cadastrais (que estão no cache), bastando capturar do cache local que é sincronizado frequentemente. Isso torna a operação bem mais rápida do que um acesso ao banco de dados.

As tabelas de cadastro, por estarem no cache local, podem ter o conteúdo do registro acessado diretamente, informando o nome campo após especificar a chave do registro.

(-19888673).nome

Essa chave é um registro da tabela Entidade, que tem o campo nome. Dessa forma o resultado da expressão será o valor existente no campo nome do registro de chave: -19888673).