Упрощенная классическая транзакция базы данных может рассматриваться как:
- чтение М предметов
- выполняя некоторые расчеты на основе этих чтений
- написание некоторых N результатов, основанных на этих расчетах, которые могут включать элементы, которые изначально были прочитаны.
При выполнении этих транзакций (одновременно) необходимо поддерживать свойства ACID .
Точно такие же требования (N обновлений на основе M считываний транзакционно) существуют в других параллельных системах, не относящихся к СУБД.
Мне интересно узнать, какие существуют алгоритмы для выполнения / разрешения этих транзакций, и каковы относительные сильные и слабые стороны этих алгоритмов. Не могли бы вы порекомендовать почитать? Это могут быть книги или онлайн-ссылки / учебные пособия.
Разъяснение:
Так, например, наивным алгоритмом может быть то, что каждая транзакция берет одну глобальную блокировку, фактически вызывая единую многопоточность и удаляя параллелизм. Немного более сложным алгоритмом были бы блокировки чтения / записи отдельных элементов с упорядочением во избежание тупиковых ситуаций). И т. Д., И т. Д. Есть ли хороший источник, документирующий различные алгоритмы для решения этой проблемы. Даже ответ, который указывает только на один алгоритм с его сильными и слабыми сторонами, будет полезен.