Quais algoritmos / matéria de leitura você recomendaria para resolver bloqueios de transações / leitura / gravação?

10

Uma transação clássica simplificada do banco de dados pode ser vista como:

  • lendo itens M
  • executando algum cálculo com base nessas leituras
  • escrevendo alguns resultados de N com base nesses cálculos, que podem incluir os elementos lidos originalmente.

Ao executar essas transações (simultaneamente), as propriedades ACID precisam ser mantidas.

Exatamente os mesmos requisitos (N atualizações baseadas em M leem transacionalmente) existem em outros sistemas concorrentes não DBMS.

Estou interessado em descobrir quais algoritmos existem para executar / resolver essas transações e quais são os pontos fortes e fracos relativos desses algoritmos. Você poderia recomendar alguma leitura? Pode ser livros ou referências / tutoriais on-line.

Esclarecimento:

Assim, por exemplo, um algoritmo ingênuo pode ser cada transação com um único bloqueio global, forçando efetivamente o encadeamento único e removendo a concorrência. Um algoritmo um pouco mais complicado seria o bloqueio individual de leitura / gravação de itens, com uma ordem para evitar conflitos). Etc, etc. Existe uma boa fonte documentando vários algoritmos para resolver esse problema. Mesmo uma resposta que apenas apontasse para um único algoritmo com seus pontos fortes e fracos seria útil.

Nick Fortescue
fonte
3
Esta questão certamente se enquadra no escopo deste site. Eu recomendaria escrever um pouco mais sobre o contexto em que você está trabalhando. Atualmente, é bastante geral e aberto.
Dave Clarke
Você acha que vale a pena reformular, portanto é exatamente a questão do banco de dados? IE algo como "Eu tenho um banco de dados que pode ser lido e gravado, e quero poder ler e gravar transacionalmente com propriedades ACID. Quais algoritmos existem para garantir essas propriedades"
Nick Fortescue
Reescrever a pergunta pode resultar em respostas mais próximas do que você está procurando, como fornecer mais detalhes do problema que você está tentando resolver; no momento você só dá dicas. De qualquer forma, parece que você está solicitando algoritmos clássicos de transação de banco de dados.
Dave Clarke
@ Dave - obrigado, eu editei. Melhor?
Nick Fortescue
11
Você já está familiarizado com os livros didáticos do DBMS, como o de Ramakrishnan e Gehrke? E se você não está perguntando sobre os elementos internos de um DBMS, pode esclarecer a pergunta para nos informar a diferença entre um DBMS e o que você está interessado?
Maverick Woo

Respostas:

10

O livro Sistemas de Informações Transacionais de Weikum e Vossen cobre grande parte da área, tanto em termos teóricos quanto práticos, sob diferentes perspectivas, não apenas transações. Tem cerca de 1000 páginas, por isso o manterá ocupado por um fim de semana ou dois. Por outro lado, ele tem quase 10 anos, então pode haver algo mais atualizado disponível. Outros livros da linha incluem Controle e Recuperação de Concorrência em Sistemas de Banco de Dados por Bernstein, P., Hadzilacos, V. e Goodman, N, Addison-Wesley, 1987, Transaction Processing: Concepts and Techniques por Jim Gray e Andreas Reuter, e Principles do processamento de transaçõespor Philip A. Bernstein e Eric Newcomer, 2009. Não vi o último, mas sendo o mais recente, pode ser um bom lugar para começar, embora sua solução possa ser encontrada em textos mais antigos. Uma viagem à biblioteca pode valer a pena.

Um texto monumental nessa área é Atomic Transactions de Nancy Lynch et al. Apresenta um relato formal e provas de vários tipos de algoritmos nos quais você está interessado. É bastante formal e tedioso, por isso pode não ser do seu gosto.

Muitos trabalhos recentes são dedicados à Memória Transacional de Software , que aplica as idéias de transação a aplicativos multithread. Há dezenas de publicações sobre esse tópico a cada ano: a página da wikipedia fornece muitas referências.

Dave Clarke
fonte
11
obrigado Dave, especialmente pela frase "Memória transacional de software", eu não havia encontrado esse nome #
Nick Fortescue
11
Atualmente, o STM é um tópico muito importante na pesquisa de linguagens de programação. Há uma corrida para ver se os modelos de programação baseados em STM ou em ator serão a base de futuras (= todas) linguagens de programação concorrentes.
Dave Clarke
11
Além do STM, uma palavra-chave específica para procurar dentro dessas referências é MVCC. É usado na maioria dos DBMSs modernos: en.wikipedia.org/wiki/Multiversion_concurrency_control
Maverick Woo
@supercooldave Não tenho certeza se é uma corrida: acho que os idiomas futuros terão que suportar um pouco dos dois, em um grau ou outro.
Marc Hamann
@ Marc Harmann: metaforicamente falando.
Dave Clarke