Какие алгоритмы / материалы для чтения вы бы порекомендовали для разрешения транзакций / блокировок чтения-записи?

10

Упрощенная классическая транзакция базы данных может рассматриваться как:

  • чтение М предметов
  • выполняя некоторые расчеты на основе этих чтений
  • написание некоторых N результатов, основанных на этих расчетах, которые могут включать элементы, которые изначально были прочитаны.

При выполнении этих транзакций (одновременно) необходимо поддерживать свойства ACID .

Точно такие же требования (N обновлений на основе M считываний транзакционно) существуют в других параллельных системах, не относящихся к СУБД.

Мне интересно узнать, какие существуют алгоритмы для выполнения / разрешения этих транзакций, и каковы относительные сильные и слабые стороны этих алгоритмов. Не могли бы вы порекомендовать почитать? Это могут быть книги или онлайн-ссылки / учебные пособия.

Разъяснение:

Так, например, наивным алгоритмом может быть то, что каждая транзакция берет одну глобальную блокировку, фактически вызывая единую многопоточность и удаляя параллелизм. Немного более сложным алгоритмом были бы блокировки чтения / записи отдельных элементов с упорядочением во избежание тупиковых ситуаций). И т. Д., И т. Д. Есть ли хороший источник, документирующий различные алгоритмы для решения этой проблемы. Даже ответ, который указывает только на один алгоритм с его сильными и слабыми сторонами, будет полезен.

Ник Фортескью
источник
3
Этот вопрос, безусловно, входит в рамки этого сайта. Я бы рекомендовал написать немного больше о контексте, в котором вы работаете. В настоящее время оно носит довольно общий и открытый характер.
Дэйв Кларк
Как вы думаете, стоит перефразировать, так что это именно вопрос базы данных? IE что-то вроде «У меня есть база данных, в которую можно читать и записывать, и я хочу иметь возможность читать и писать транзакционно со свойствами ACID. Какие существуют алгоритмы для обеспечения этих свойств»
Ник Фортескью
Перефразировка вопроса может привести к ответам, более близким к тому, что вы ищете, например, дать более подробную информацию о проблеме, которую вы пытаетесь решить; в настоящее время вы даете только подсказки. В любом случае, звучит так, будто вы запрашиваете классические алгоритмы транзакций базы данных.
Дэйв Кларк
@ Дэйв - спасибо, я редактировал. Лучше?
Ник Фортескью
1
Вы уже знакомы с учебниками по СУБД, такими как книги Рамакришнана и Герке? И если вы не спрашиваете о внутренностях СУБД, можете ли вы уточнить этот вопрос, чтобы сообщить нам разницу между СУБД и тем, что вас интересует?
Maverick Woo

Ответы:

10

Книга « Транзакционные информационные системы » Weikum и Vossen охватывает довольно много областей, как в теоретическом, так и в практическом смысле, с разных точек зрения, а не только транзакций. Это около 1000 страниц, поэтому вы будете заняты на выходные или два. С другой стороны, ему почти 10 лет, так что может быть что-то более современное. Другие книги в этой серии включают « Управление параллельным доступом и восстановление в системах баз данных » Бернштейна П., Хадзилакоса В. и Гудмана Н.Д. Аддисона-Уэсли, 1987 г. « Обработка транзакций: концепции и методы » Джима Грея и Андреаса Рейтера и « Принципы» обработки транзакцийPhilip A. Bernstein и Eric Newcomer, 2009. Я не видел последний, но, будучи самым последним, он мог бы стать хорошим началом, хотя ваше решение вполне может быть найдено в более старых текстах. Поездка в библиотеку может стоить.

Монументальный текст в этой области - « Атомные транзакции » Нэнси Линч и соавт. Он представляет формальный отчет и доказательства ряда видов алгоритмов, которые вас интересуют. Он довольно формален и утомителен, поэтому может не соответствовать вашему вкусу.

Много недавней работы посвящено программной транзакционной памяти , которая применяет идеи транзакций к многопоточным приложениям. Ежегодно на эту тему публикуются десятки публикаций: на странице википедии содержится множество ссылок.

Дэйв Кларк
источник
1
спасибо Дэйв, особенно за фразу «Программная транзакционная память», я не встречал этого имени
Ник Фортескью
1
В наши дни STM - очень актуальная тема для изучения языков программирования. Идет гонка, чтобы увидеть, будут ли модели программирования на основе STM или Actor основаны на будущих параллельных (= всех) языках программирования.
Дэйв Кларк
1
Помимо STM, одним из ключевых слов для поиска в этих ссылках является MVCC. Он используется в большинстве современных СУБД: en.wikipedia.org/wiki/Multiversion_concurrency_control
Maverick Woo,
@supercooldave Я не уверен, что это гонка: я думаю, что будущие языки должны будут в той или иной степени поддерживать и то и другое.
Марк Хаманн
@Marc Harmann: образно говоря.
Дэйв Кларк