Quali algoritmi / argomenti di lettura consiglieresti di risolvere transazioni / blocchi di lettura / scrittura?


10

Una transazione di database classica semplificata può essere visualizzata come:

  • lettura di articoli M.
  • eseguendo alcuni calcoli basati su tali letture
  • scrivendo alcuni N risultati basati su questi calcoli, che possono includere gli elementi originariamente letti.

Quando si eseguono queste transazioni (contemporaneamente) , è necessario mantenere le proprietà ACID .

Esistono esattamente gli stessi requisiti (N aggiornamenti basati su M letti in modo transazionale) in altri sistemi concorrenti non DBMS.

Sono interessato a scoprire quali algoritmi esistono per eseguire / risolvere queste transazioni e quali sono i relativi punti di forza e di debolezza di questi algoritmi. Potresti consigliarmi di leggere? Questo potrebbe essere libri o riferimenti / tutorial online.

Una precisazione:

Quindi, ad esempio, un algoritmo ingenuo potrebbe essere ogni transazione che prende un singolo blocco globale, in effetti forzando il threading singolo e rimuovendo la concorrenza. Un algoritmo leggermente più complicato sarebbero i blocchi di lettura / scrittura di singoli elementi, con un ordine per evitare deadlock). Ecc. Esiste una buona fonte che documenta vari algoritmi per risolvere questo problema. Anche una risposta che indicava un singolo algoritmo con la sua forza e debolezza sarebbe utile.


3
Questa domanda rientra certamente nell'ambito di questo sito. Consiglierei di scrivere un po 'di più sul contesto in cui stai lavorando. Al momento è piuttosto generale e aperto.
Dave Clarke,

Pensi che valga la pena riformulare, quindi è proprio la domanda del database? IE qualcosa del tipo "Ho un database che può essere letto e scritto e voglio essere in grado di leggere e scrivere in modo transazionale con proprietà ACID. Quali algoritmi esistono per garantire queste proprietà"
Nick Fortescue,

La riformulazione della domanda può portare a risposte più vicine a ciò che stai cercando, come fornire maggiori dettagli sul problema che stai cercando di risolvere; al momento dai solo suggerimenti. In ogni caso, sembra che tu stia chiedendo algoritmi di transazione di database classici.
Dave Clarke,

@Dave - grazie, l'ho modificato. Meglio?
Nick Fortescue,

1
Conosci già i libri di testo di DBMS come quello di Ramakrishnan e Gehrke? E se non stai facendo domande sull'interno di un DBMS, puoi chiarire la domanda per farci sapere la differenza tra un DBMS e ciò che ti interessa?
Maverick Woo,

Risposte:


10

Il libro Transactional Information Systems di Weikum e Vossen copre gran parte dell'area, sia in termini teorici che pratici, da diverse prospettive, non solo transazioni. È lungo circa 1000 pagine, quindi ti terremo occupato per un weekend o due. D'altra parte, ha quasi 10 anni, quindi potrebbe esserci qualcosa di più aggiornato disponibile. Altri libri della linea includono il controllo e il recupero della concorrenza nei sistemi di database di Bernstein, P., Hadzilacos, V. e Goodman, N, Addison-Wesley, 1987, Elaborazione delle transazioni: concetti e tecniche di Jim Gray e Andreas Reuter e Principi di elaborazione delle transazionidi Philip A. Bernstein ed Eric Newcomer, 2009. Non ho visto quest'ultimo, ma essendo il più recente potrebbe essere un buon punto di partenza, anche se la tua soluzione potrebbe essere trovata in testi più vecchi. Un viaggio in biblioteca può essere utile.

Un testo monumentale in questo settore è Transazioni atomiche di Nancy Lynch et al. Presenta un resoconto formale e prove di alcuni tipi di algoritmi che ti interessano. È piuttosto formale e noioso, quindi potrebbe non essere di tuo gusto.

Molto lavoro recente è dedicato alla memoria transazionale del software , che applica le idee di transazione ad applicazioni multi-thread. Ci sono decine di pubblicazioni su questo argomento ogni anno: la pagina di Wikipedia fornisce molti riferimenti.


1
grazie dave, soprattutto per la frase "Memoria transazionale del software", non mi ero mai imbattuto in questo nome
Nick Fortescue,

1
Oggigiorno STM è un argomento molto caldo nella ricerca dei linguaggi di programmazione. C'è una corsa per vedere se i modelli di programmazione basati su STM o Actor saranno la base dei futuri linguaggi di programmazione simultanei (= tutti).
Dave Clarke,

1
Oltre a STM, una parola chiave particolare da cercare all'interno di questi riferimenti è MVCC. È utilizzato nella maggior parte dei DBMS moderni: en.wikipedia.org/wiki/Multiversion_concurrency_control
Maverick Woo,

@supercooldave Non sono sicuro che sia una gara: penso che le lingue future dovranno supportare un po 'di entrambi in un modo o nell'altro.
Marc Hamann,

@Marc Harmann: metaforicamente parlando.
Dave Clarke,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.