【发布时间】:2018-10-11 10:51:04
【问题描述】:
我正在使用 Akka 创建一个分布式数据库系统。我有一个数据库系统的代码,它可以在单台机器上工作,但想让它分布式。但我在理解和创作方法上有困难。这是我创建一个简单的 dist-DB 系统的想法,最后我有几个问题。
我创建了一个主节点和 2 个工作节点(比如现在)。在 DB 中创建关系(表)后,我向 master 发送消息以分发此关系,该关系应将关系划分为 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));
}
}
}
现在对于从用户对象给出的 DB 上的任何查询,将被发送到主节点,并进一步发送到工作节点,并在这些节点上的子关系(较小的表)上执行并将结果发送到主节点。根据查询,master 对这些结果执行任何附加任务并将最终结果发送给用户对象。
我认为分布式数据库应该如何工作是正确的吗?
distributeTable的实现是否正确?
有没有办法将所有工作节点分组并发送消息,以便在它们之间分配?我想避免为单个工作节点编写任务。例如:而不是worker1 ! msg1,worker2 ! msg1。有没有办法让我做workers ! msg1,它将被发送到所有工作节点。
如果是这样,在这种情况下如何从 master 的所有工作人员那里收集返回值。
【问题讨论】:
标签: scala akka distributed distributed-database