【问题标题】:Need help in understanding Akka在理解 Akka 方面需要帮助
【发布时间】: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 ! msg1worker2 ! msg1。有没有办法让我做workers ! msg1,它将被发送到所有工作节点。
如果是这样,在这种情况下如何从 master 的所有工作人员那里收集返回值。

【问题讨论】:

    标签: scala akka distributed distributed-database


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 2018-01-11
        • 1970-01-01
        • 2011-02-17
        • 2012-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多