Я работаю над созданием системы распределенных баз данных с использованием Akka.У меня есть код для системы баз данных, которая работает на одной машине, но хочет сделать ее распределенной.Но у меня есть трудности в понимании и подходе к созданию.Вот что я подумываю о создании простой системы dist-DB, и в конце у меня есть несколько вопросов.
Я создаю мастер-узел и 2 рабочих узла (скажем, пока).После создания отношения (таблицы) в БД я посылаю мастеру сообщение, чтобы распределить это отношение, которое должно разделить отношение на 2 (количество рабочих) порций и создать подчиненные отношения в рабочих узлах.
def receive: Receive = {
case distributeTable(r: Relation) => {
worker1 ! createNewRelation(r1)
worker2 ! createNewRelation(r1)
for (i <- 0 until r.rows/2) {
worker1 ! add(r1, r(i));
}
for (i <- r.rows/2 until r.rows) {
worker2 ! add(r1, r(i));
}
}
}
Теперь любой запрос к БД, полученный от пользовательского объекта, будет отправлен мастеру, который затем отправляется рабочим узлам, выполняется на подотношениях (меньшие таблицы) на этих узлах и отправляет результаты мастеру.В зависимости от запроса мастер выполняет любую дополнительную задачу с этими результатами и отправляет конечный результат объекту пользователя.
Правильно ли я думаю о том, как должна работать распределенная БД?
Является ли реализацияиз distributeTable
правильно?
Есть ли способ сгруппировать все рабочие узлы и отправить сообщения, чтобы они были распределены между ними?Я хочу избежать написания задач для отдельного рабочего узла.Например: вместо worker1 ! msg1
, worker2 ! msg1
.Есть ли способ, которым я делаю workers ! msg1
, и он будет отправлен на все рабочие узлы.
Если это так, как в этом случае собрать возвращаемые значения от всех рабочих на мастере.