Как BaseX обрабатывает параллелизм?

Я смотрю на использование BaseX в качестве более гибкой базы данных.

Как это обрабатывает параллелизм базы данных? Как это работает в сценарии веб-приложения, где два разных пользователя могут обновлять одни и те же данные и эффективно получать "грязное чтение"?

1 ответ

Решение

Как это работает в сценарии веб-приложения, где два разных пользователя могут обновлять одни и те же данные и эффективно получать "грязное чтение"?

Будьте уверены: транзакции изолированы друг от друга, так что обновленные аномалии не могут возникнуть.

Как это обрабатывает параллелизм базы данных?

Посмотрите вики-страницу BaseX об управлении транзакциями, где этот подход подробно описан. Отказ от ответственности: я реализовал более новую блокировку базы данных для BaseX во время моей дипломной работы, поэтому я участвую в проекте.

BaseX применяет несколько механизмов для предотвращения коллизионных транзакций. Старая блокировка процесса (которую все еще можно включить с помощью GLOBALLOCK option) просто запрещает множественные запросы внутри процесса, параллельное выполнение может быть достигнуто для нескольких экземпляров базы данных, в то время как базовая изоляция достигается за счет блокировок файловой системы для каждой базы данных (без каких-либо гарантий в отношении взаимоблокировок, ...).

Более новая блокировка базы данных изолирует параллельные транзакции, применяя двухфазную блокировку на уровне базы данных. Таким образом, два запроса, обращающиеся к нескольким базам данных, выполняются параллельно, если они обращаются к разным базам данных, в противном случае одному из них придется подождать (но они точно не будут выполняться одновременно). Недостатком является то, что, поскольку мы хотим поддерживать выполнение без взаимоблокировок, мы пошли на строгую двухфазную блокировку, которая извлекает все блокировки базы данных перед выполнением запроса, но страдает от штрафа, так как определить, к каким базам данных будет осуществляться доступ, довольно сложно в динамическом режиме. язык как XQuery, часто с глобальными блокировками на всех базах данных.

В будущем (данное время позволяет, а расписание не установлено) некоторые оптимизации находятся в очереди, особенно ослабляя строгость двухфазной блокировки и оптимистический контроль параллелизма, который я уже оценил в своей диссертации, что принесло бы большие выгоды при параллельном выполнении, особенно для сценарии веб-приложений.

Другие вопросы по тегам