首页 > 解决方案 > 在理解 Akka 方面需要帮助

问题描述

我正在使用 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 的所有工作人员那里收集返回值。

标签: scalaakkadistributeddistributed-database

解决方案


听起来你想要一个Router. 您可以使用一个参与者并基本上复制全部内容,ActorSystem也可以分布在网络上ActorSystem的不同网络中,其中每个参与者系统都可以对数据库的一个分片具有本地性。

https://doc.akka.io/docs/akka/2.5/routing.html


推荐阅读