Pergunta

Eu li muito sobre memória transacional de software, especialmente em relação a Haskell, mas estou tentando descobrir como ela é diferente das transações de banco de dados.Existem algumas vantagens que não entendo com o STM?

Foi útil?

Solução

A ideia de uma “transação” na memória transacional de software é explicitamente emprestada dos bancos de dados.A diferença é onde as transações são implementadas e como são utilizadas.

STM é um conceito de nível de linguagem:uma sequência de operações não entra em vigor até que uma transação seja confirmada.Normalmente, isso significa que os valores de algumas variáveis ​​globais/compartilhadas só mudam quando uma transação é bem-sucedida.A propriedade é imposta pelo tempo de execução da linguagem.Não há noção inerente de persistência:as variáveis ​​envolvidas em uma transação podem ser de natureza puramente dinâmica (por exemplo, o tamanho de uma fila de trabalho).

As transações de banco de dados são um conceito em nível de aplicativo:uma sequência de operações de dados não entra em vigor até que a transação seja confirmada.Por se tratar de um banco de dados, a persistência é fundamental:o significado de "entrar em vigor" dentro de um banco de dados é que os dados são salvos em algum armazenamento persistente.

Você poderia usar um banco de dados e transações de banco de dados para implementar um algoritmo no estilo STM, mas perderia a facilidade e a conveniência (e provavelmente na maioria dos casos o desempenho) de uma implementação em nível de linguagem.

Outras dicas

Uma transação STM tem muito em comum com uma transação de banco de dados. Em particular, das propriedades ácidas importantes para os designers de banco de dados, o STM fornece atomicidade e isolamento. A consistência, no entanto, cabe ao programador - você pode escrever transações STM que violam os invariantes das estruturas de dados internas, por exemplo. Finalmente, as transações STM normalmente não são duráveis; Os resultados são armazenados na RAM volátil e, se a máquina travar após uma transação bem -sucedida, os resultados poderão ser perdidos. Isso, na minha opinião, é provavelmente a diferença mais saliente entre uma transação STM e uma transação de banco de dados.

O STM é usado principalmente para simultaneidade, enquanto as transações do banco de dados são sobre consistência dos dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top