Основная идея управления параллельными транзакциями на основе многоверсионности (multiversion concurrency control, MVCC) заключается в том, что в базе данных допускается существование нескольких «версий» одного и того же элемента данных, что позволяет улучшить ряд характеристик СУБД, наиболее важных для следующих категорий приложений. Приложения, для которых требуется эффективное выполнение запросов, не изменяющих данные, например для Web-приложений. Специфика такого рода систем в том, что в подавляющем большинстве транзакций осуществляется лишь выборка данных [6, 84]. Система должна минимизировать время ожидания результата пользователем. Приложения, ориентированные на поддержку совместной работы. В таких системах для многих пользователей требуется одновременное выполнение операций чтения и изменения одних и тех же данных. В этом случае использование обычного двухфазного протокола синхронизации транзакций может привести к тому, что почти любое действие будет приводить к тупику. Приложения реального времени, для которых требуется быстрый отклик и высокая степень параллельности. В качестве примера такого приложения можно привести систему резервирования авиабилетов, в которой число параллельно выполняемых транзакций может быть весьма велико [29, 40, 57]. Типичная транзакция для такой системы проверяет наличие свободных мест на некоторый рейс. Конфликт двух транзакций (в одной из которых изменяется количество свободных мест, а во второй выясняется, есть ли еще свободные места на рейс) не обязательно является серьезным. Вместо блокировки данных о рейсе, которая может привести к длительному ожиданию со стороны оператора, можно позволить второй транзакции прочитать старую версию данных. Это не вызовет ошибки, если только первая транзакция не обнуляет число свободных мест. 61 |
Основная идея управления параллельными транзакциями на основе многоверсионности (multiversion concurrency control, MVCC) заключается в том, что в базе данных допускается существование нескольких «версий» одного и того же элемента данных, что позволяет улучшить ряд характеристик СУБД, наиболее важных для следующих категорий приложений. Приложения, для которых требуется эффективное выполнение запросов, не изменяющих данные, например для Web-приложений. Специфика такого рода систем в том, что в подавляющем большинстве транзакций осуществляется лишь выборка данных [6, 84]. Система должна минимизировать время ожидания результата пользователем. Приложения, ориентированные на поддержку совместной работы. В таких системах для многих пользователей требуется одновременное выполнение операций чтения и изменения одних и тех же данных. В этом случае использование обычного двухфазного протокола синхронизации транзакций может привести к тому, что почти любое действие будет приводить к тупику. Приложения реального времени, для которых требуется быстрый отклик и высокая степень параллельности. В качестве примера такого приложения можно привести систему резервирования авиабилетов, в которой число параллельно выполняемых транзакций может быть весьма велико [29, 40, 57]. Типичная транзакция для такой системы проверяет наличие свободных мест на некоторый рейс. Конфликт двух транзакций (в одной из которых изменяется количество свободных мест, а во второй выясняется, есть ли еще свободные места на рейс) не обязательно является серьезным. Вместо блокировки данных о рейсе, которая может привести к длительному ожиданию со стороны оператора, можно позволить второй транзакции прочитать старую версию данных. Это не вызовет ошибки, если только первая транзакция не обнуляет число свободных мест. |