[firebase-br] RES: Detectar alteração no banco sem uso do aplicativo?

Douglas Tosi douglasht em gmail.com
Qui Jun 18 12:16:10 -03 2009


2009/6/18 Felix <felix2005 em oi.com.br>

> Acredito que o FB tenha alguma tabela de sistema que armazene um handle ou
> algo assim.
>

Algumas idéias:

- Rastrear o número de transação. Imagine que logo antes de terminar a
aplicação grava em algum lugar o número da próxima transação. Na próxima vez
que a aplicação for iniciada, ela verifica o número que armazenou com o
número atual da base de dados. Dá pra saber que houve algum commit enquanto
ela estava desligada.
Mas a chance de problemas é grande. 1) Qualquer manutenção legítima no banco
causaria uma diferença. A aplicação deveria saber lidar com isto. 2) Também
precisaria saber lidar com várias instâncias da aplicação. 3) Se alguém
alterar manualmente a base enquanto a aplicação está aberta, ela não
perceberia. 4) Um ser muito hardcore [mas muito mesmo] poderia editar a base
diretamente no arquivo.
Olhe o resultado de gstat -h. Poderia usar "Next Transaction", "Generation"
ou "Next Attachment".

- Gravar um checksum (sha ou md5) de cada registro. Para cada registro
gravado, a aplicação deveria pegar todos os valores e mais um tempero que só
ela saiba, calcular um md5 e gravar junto em um campo na tabela. Na hora de
ler cada registro ela pode verificar se o md5 bate com os dados. Esta idéia
também tem chances de problemas: 1) Dependendo da aplicação e quantidade de
dados, este cálculo pode ser muito custoso e complexo de manter. 2) Tem que
proteger muito bem o "tempero", senão o esquema todo fica inútil: qualquer
um que saiba o tempero pode calcular o md5 na mão. 3) A aplicação só
detectaria que um registro foi mexido quando tentasse acessá-lo e não na
inicialização.

hth,
-- 
Douglas Tosi
www.sinatica.com



Mais detalhes sobre a lista de discussão lista