我正在使用Akka创建分布式数据库系统。我有可在单台机器上工作的数据库系统的代码,但想使其分布。但是我在理解和创作方法上有困难。这就是我想创建一个简单的dist-DB系统的想法,最后我几乎没有疑问。
我创建一个主节点和2个工作节点(现在说)。在数据库中创建了一个关系(表)之后,我向主控发送了一条消息以分发此关系,该关系应将该关系分为2个(工作人员数)块,并在工作人员节点中创建子关系。
<template>
<v-carousel cycle>
<v-carousel-item
v-for="(item,i) in items"
:key="i"
:src="item.url"
>
</v-carousel-item>
</v-carousel>
</template>
<script>
import { db } from "../firebase/firestore";
export default {
name: 'Carousel',
props: {
msg: String
},
data(){
return{
items: []
}
},
firestore(){
return{
items: db.collection('Carousel')
}
console.log(this.items);
},
created(){
console.log(this.items);
}
}
</script>
现在,对于从用户对象发出的对DB的任何查询,都将被发送到master,然后进一步发送到worker节点,并在这些节点上的子关系(较小的表)上执行并将结果发送到master。根据查询,master将对这些结果执行任何其他任务,并将最终结果发送给用户对象。
我对分布式数据库的工作方式是否正确?
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
,它将被发送到所有工作节点。
如果是这样,在这种情况下,如何从主服务器上的所有工人那里收集返回值。
答案 0 :(得分:0)
听起来像您想要Router
。您可以使用一个参与者,并且基本上可以全部复制一个ActorSystem
或在整个网络中分布在不同的ActorSystem
上,其中每个参与者系统可以在一个数据库中具有一个局部性。
答案 1 :(得分:0)
从您的问题来看,您似乎想使用akka远程处理
https://doc.akka.io/docs/akka/2.5/remoting.html和akka工作负载模式http://letitcrash.com/post/29044669086/balancing-workload-across-nodes-with-akka-2