Чтобы упростить задачу для разработчиков, процедуры вызываются одинаково, независимо от их типа. Внутренне существуют различные типы многораздельных процедур, поскольку они обеспечивают некоторую оптимизацию, хотя многое еще предстоит сделать, и некоторые проекты H-Store провели исследования в этих областях.
Транзакции MP по-прежнему в конечном итоге включают отправку задач в быть сделано на всех разделах. Единственное исключение, которое вы заметили, - это специальная транзакция с двумя разделами, которая используется только для перебалансировки данных во время добавления или сокращения elasti c.
Разделы состоят из одного или нескольких сайтов (на отдельных серверах) в зависимости от kfactor. Эти сайты остаются в синхронизации c без 2P C, требуя детерминированных c процедур. Разделы работают через очередь в очереди так быстро, как позволяет время процесса (или локальное время выполнения). Все сайты обрабатывают как чтение, так и запись.
Задачи MP, отправленные в эти очереди разделов, должны ожидать завершения всех ожидающих элементов до sh. Вот почему существует пул из 20 (по умолчанию) потоков для чтения MP. Это позволяет отправлять 20 задач одновременно, так что при следующем считывании MP обычно не нужно ждать 2 сетевых прыжка + максимальное время ожидания очереди + время обработки, прежде чем он сможет даже встать в очередь.
Чтения MP, которые не являются «однократными», будут Java процедурами с несколькими вызовами voltExecute SQL (), такими как процедура, в которой последующие SQL запросы зависят от результатов предыдущих запросов. Когда эти транзакции отправляют задачи в разделы, разделы должны ждать максимального времени ожидания очереди + время обработки + 2 сетевых прыжка, прежде чем они смогут выполнить следующую часть транзакции.
Запись MP также может иметь несколько Вызовы voltExecute SQL (), плюс они должны ждать окончательного сигнала фиксации, так что все это задерживает прогресс на разделах.
Есть, конечно, примеры транзакций MP, которые не должны включать все разделов и может извлечь выгоду из будущих оптимизаций, но это не так просто, как может показаться для базы данных, которая должна поддерживать долговечность диска, k-safety, elasti c add и shrink, многокластерную активно-активную репликацию, и многие другие функции, которые были добавлены в VoltDB на протяжении многих лет с тех пор, как он вырос из проекта H-Store.
Раскрытие информации: я работаю в VoltDB