[firebase-br] RES: RES: Transação com Select ?

Daniel / Tecnobyte temp2 em tecnobyte.com.br
Sex Fev 15 19:44:29 -03 2008


Complementando...

Dependendo do nível de isolamento da transação usada no SELECT você poderá 
ter alguns comportamentos distintos. Veja um exemplo:

1. Conexão1 inicia uma transação.

2. Conexão2 inicia uma transação e modifica um registro.

3. Conexão1 dá um select no registro alterado por Conexão2. Neste select 
deverá aparecer o que Conexao2 modificou (leitura suja) ou deve pegar a 
versão anterior do registro? A resposta é: depende do nível de isolamento da 
transação.

4. Conexão2 confirma a transação (commit).

5. Conexão1 dá um novo select no registro alterado por Conexão2. Neste 
select deverá aparecer o que Conexao2 modificou (read commited)  ou deve 
pegar a versão anterior do registro? A resposta é: depende do nível de 
isolamento da transação.

Se o SELECT não estivesse dentro do contexto de uma transação, como poderia 
ser feito o controle de versões do registro no caso de acesso concorrente 
(duas ou mais transações simultâneas)?

O controle de versão dos registros são feitos com base na identificação das 
transações que modificam os dados. É um controle de versão dos dados de modo 
que um mesmo registro pode estar gravado várias vezes no banco (alterações) 
e a última versão commitada é que será considerada "atual".

Mais alguma observações:

1. As versões antigas de um registro, quando não for mais necessária dentro 
do controle transacional, poderá ser reutilizada pelo FB para gravar novos 
registros, evitando assim que mais espaço em disco seja alocado.

2. Enquanto houver pelo menos uma transação ativa, dependendo do nível de 
isolamento utilizado, a última versão de cada registro no momento em que a 
transação foi iniciada não poderá ser reutilizada pelo banco para gravar 
outro registro no local. Manter uma transação ativa por muito tempo neste 
caso fará com que o arquivo de banco de dados cresça mais que tendo 
transações de pequena duração.

3. Algumas funções do FB dependem do controle transacional (funções de data 
e hora). Não me recordo quais exatamente, mas há dois casos:

3.1. Algumas funções mantém o valor de data e hora de quando a transação 
iniciou.

3.2. Outras funções pegam a data e hora realmente atual, independente de 
quando iniciou a transação.

Espero que isto ajude.

Atenciosamente.

Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br

----- Original Message ----- 
From: "Carlos H. Cantu (TeamFB)" <listas em warmboot.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Friday, February 15, 2008 7:54 AM
Subject: Re: [firebase-br]RES: RES: Transação com Select ?


DEBW> Qual é a lógica de se usar transação para Select?

A lógica é que para garantir o correto isolamento dos dados, tudo tem
que estar dentro de uma transação, inclusive os selects. Isso faz
parte da arquitetura de Versioning.

[]s
Cantu (Membro do TeamFB - FireBase)
http://www.warmboot.com.br
FireBase - http://www.FireBase.com.br





Mais detalhes sobre a lista de discussão lista