Schism управляемый рабочей нагрузкой подход к репликации и разделению баз данных

       

C.2 Маршрутизация запросов и операций обновления


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

Наша система предоставляет приложениям для задания операторов интерфейс JDBC. Получив такой оператор, наш компонент маршрутизации выполняет следующие шаги: i) разбирает этот оператор, ii) извлекает из раздела WHERE предикаты над атрибутами таблицы, iii) сопоставляет атрибуты со схемой разделения для получения списка целевых разделов. Затем координатор распределенных транзакций управляет выполнением оператора на нескольких машинах.

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

Разделение работает наиболее эффективно, если в разделе WHERE большинства запросов используются атрибуты разделения. Именно поэтому на фазе толкования Schism пытается использовать атрибуты, наиболее часто используемые в разделах WHERE.



Содержание раздела