Pergunta

Seria uma boa idéia usar o Terracotta como uma solução de persistência (substituindo um banco de dados)? Estou me perguntando especificamente sobre problemas de integridade de dados e suporte para sistemas transacionais.

Foi útil?

Solução

Terracota é transacional (Os blocos sincronizados formam transações de objetos modificados), mas não são e não querem ser compatíveis com JTA. Há uma discussão bastante longa sobre transações e alguns equívocos comuns sobre terracota aqui.

Eu escrevi a Postagem do blog sobre a vida útil dos dados E como isso deve enquadrar seu pensamento sobre a identificação de oportunidades para o uso da terracota. Em suma, o ponto ideal da Terracotta é o caso de uso em que você precisa de persistência e disponibilidade (seu aplicativo pode travar, mas você ainda precisa dos dados), mas onde os dados não são necessariamente críticos a longo prazo.

Um exemplo canônico são dados importantes no contexto de uma sessão de usuário em um aplicativo da Web, como informações do carrinho de compras. Você deseja manter esses dados persistentes para que, se o aplicativo da web travar, você mantenha o carrinho de compras. Mas o próprio carrinho pode ou nunca ser comprado. Então, você o armazena em terracota até que seja comprado e, em seguida, salva no banco de dados como dados "sistema de registro".

Historicamente, os dados que você armazenou em um banco de dados sempre foram "sistema de registro", que foram críticos para o sucesso a longo prazo de seus negócios: clientes, pedidos etc. com as arquiteturas "sem estado" de hoje (que realmente não são duras) , nós abaixamos todos os dados de médio prazo para o banco de dados. Isso significa que estamos punindo desnecessariamente nosso banco de dados (com trabalho e armazenamento extras) e nossos desenvolvedores (que precisam lidar com a incompatibilidade de impedância de impedância relacionada a objetos, mesmo se usar o ORM). Uma abordagem melhor é deixá -lo em objetos e agrupá -lo com terracota. Vários usuários recentes de terracota usaram essa técnica para reduzir significativamente sua pegada de banco de dados (economizando milhões de dólares) enquanto aumenta simultaneamente sua capacidade de escalar.

Há a questão do ponto de integração com o banco de dados e como fazer a transferência de maneira confiável. Vimos isso como um caso de uso no lançado recentemente Examinador (um aplicativo da web de referência de primavera / terracota / tomcat / mysql). Quando os exames estão em andamento, o estado (respostas a perguntas, pedidos de escolha randomizada, perguntas marcadas para revisão) são armazenadas em terracota. Mas quando os exames são concluídos, a pontuação resultante é calculada e armazenada a longo prazo no banco de dados.

Para fazer isso com segurança, usamos uma estratégia -chave do Hibernate que gera o ID da linha do banco de dados no objeto em Terracotta primeiro e, em seguida, salva os dados no banco de dados e depois remove de Terracotta. Esse cenário tem uma condição de corrida em potencial se o aplicativo travar depois de salvar no banco de dados, mas antes de remover da Terracotta. Nesse caso, o aplicativo pode tentar reavaliar os dados para o banco de dados, possivelmente criando duas linhas. Porém, devido ao ID pré-gerado, podemos dizer se a linha foi escrita anteriormente ou não e evitando esse problema.

Em resumo, não acho que a Terracota substituirá seu banco de dados em breve. É muito novo operacional para ser considerado como tal na maioria das lojas. O modelo de uso é muito diferente. Não há capacidade de consulta ou SQL na pilha (sua capacidade de consulta é definida pelo modelo de objeto). Eu acho que pode e está começando a substituir o uso de dados de médio prazo, onde é uma alternativa muito mais barata e mais fácil. No entanto, algumas pessoas estão começando a experimentá-lo para armazenamento a longo prazo.

Outras dicas

Terracota é apenas Java. Se não estiver tudo bem para você estar bloqueado nessa tecnologia, sem a possibilidade de apenas escrever alguns scripts (sem a JVM) em outros idiomas, então vá em frente.

O artigo Mate seu banco de dados com Terracotta foi muito bom.

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