Quels algorithmes / éléments de lecture recommanderiez-vous pour résoudre les transactions / verrous en lecture-écriture?

10

Une transaction de base de données classique simplifiée peut être considérée comme:

  • lecture de M éléments
  • effectuer un calcul basé sur ces lectures
  • écrire quelques résultats N basés sur ces calculs, qui peuvent inclure les éléments lus à l'origine.

Lors de l'exécution de ces transactions (simultanément), les propriétés ACID doivent être conservées.

Exactement les mêmes exigences (N mises à jour basées sur M lectures de manière transactionnelle) existent dans d'autres systèmes concurrents non SGBD.

Je suis intéressé à découvrir quels algorithmes existent pour effectuer / résoudre ces transactions, et quelles sont les forces et les faiblesses relatives de ces algorithmes. Pourriez-vous recommander une lecture? Il peut s'agir de livres ou de références / tutoriels en ligne.

Clarification:

Ainsi, par exemple, un algorithme naïf peut faire en sorte que chaque transaction prenne un seul verrou global, forçant en fait le thread unique et supprimant la concurrence. Un algorithme un peu plus compliqué serait les verrous de lecture / écriture des éléments individuels, avec un ordre pour éviter le blocage). Etc, etc. Existe-t-il une bonne source documentant divers algorithmes pour résoudre ce problème. Même une réponse qui n'indiquerait qu'un seul algorithme avec ses forces et ses faiblesses serait utile.

Nick Fortescue
la source
3
Cette question entre certainement dans le cadre de ce site. Je recommanderais d'écrire un peu plus sur le contexte dans lequel vous travaillez. Actuellement, il est assez général et ouvert.
Dave Clarke
Pensez-vous que cela vaut la peine d'être reformulé, c'est donc précisément la question de la base de données? IE quelque chose comme "J'ai une base de données qui peut être lue et écrite, et je veux pouvoir lire et écrire de manière transactionnelle avec les propriétés ACID. Quels algorithmes existent pour garantir ces propriétés"
Nick Fortescue
La reformulation de la question peut donner des réponses plus proches de ce que vous recherchez, comme donner plus de détails sur le problème que vous essayez de résoudre; à l'heure actuelle, vous ne donnez que des indices. Dans tous les cas, il semble que vous demandiez des algorithmes de transaction de base de données classiques.
Dave Clarke
@Dave - merci, j'ai édité. Meilleur?
Nick Fortescue
1
Connaissez-vous déjà des manuels de SGBD tels que celui de Ramakrishnan et Gehrke? Et si vous ne posez pas de questions sur les caractéristiques internes d'un SGBD, pouvez-vous clarifier la question pour nous faire savoir la différence entre un SGBD et ce qui vous intéresse?
Maverick Woo

Réponses:

10

Le livre Transactional Information Systems de Weikum et Vossen couvre une grande partie du domaine, à la fois en termes théoriques et pratiques, à partir de perspectives différentes, pas seulement des transactions. Il fait environ 1 000 pages et vous occupera donc pendant un week-end ou deux. En revanche, il a presque 10 ans, il pourrait donc y avoir quelque chose de plus à jour disponible. D'autres livres dans la ligne incluent le contrôle de la concurrence et la récupération dans les systèmes de bases de données par Bernstein, P., Hadzilacos, V., et Goodman, N, Addison-Wesley, 1987, Transaction Processing: Concepts and Techniques par Jim Gray et Andreas Reuter, et Principles du traitement des transactionspar Philip A. Bernstein et Eric Newcomer, 2009. Je n'ai pas vu ce dernier, mais étant le plus récent, il pourrait être un bon point de départ, bien que votre solution puisse très bien être trouvée dans des textes plus anciens. Un voyage à la bibliothèque peut valoir la peine.

Un texte monumental dans ce domaine est Atomic Transactions de Nancy Lynch et al. Il présente un compte rendu formel et des preuves d'un certain nombre d'algorithmes qui vous intéressent. Il est plutôt formel et fastidieux, donc peut-être pas à votre goût.

De nombreux travaux récents sont consacrés à la mémoire transactionnelle logicielle , qui applique les idées de transaction à des applications multithreads. Il existe des dizaines de publications sur ce sujet chaque année: la page wikipedia propose de nombreuses références.

Dave Clarke
la source
1
merci dave, surtout pour l'expression "Software transactional memory", je n'avais pas trouvé ce nom
Nick Fortescue
1
La STM est un sujet très chaud dans la recherche sur les langages de programmation de nos jours. Il y a une course pour voir si les modèles de programmation basés sur STM ou sur acteur seront la base des futurs langages de programmation concurrents (= tous).
Dave Clarke
1
Outre STM, un mot-clé particulier à rechercher dans ces références est MVCC. Il est utilisé dans la plupart des SGBD modernes: en.wikipedia.org/wiki/Multiversion_concurrency_control
Maverick Woo
@supercooldave Je ne suis pas sûr que ce soit une course: je pense que les futures langues devront prendre en charge un peu des deux dans une certaine mesure ou une autre.
Marc Hamann
@Marc Harmann: métaphoriquement parlant.
Dave Clarke