scala - 在理解 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 的所有工作人员那里收集返回值。
解决方案
听起来你想要一个Router
. 您可以使用一个参与者并基本上复制全部内容,ActorSystem
也可以分布在网络上ActorSystem
的不同网络中,其中每个参与者系统都可以对数据库的一个分片具有本地性。
推荐阅读
- java - Java 获取资源,因为流总是返回 null
- angular - 有没有办法在重新打开浏览器时使用服务人员来克服 CORS 问题
- azure - 是否可以在 Azure 政府云 (EA) 中创建开发/测试订阅
- vue.js - 用 Vuejs 绑定颜色
- r - 使用条件过滤多个列 - R
- here-api - 无法解析时间
- javascript - 如何在 JavaScript 或 html 中实现与 Google Chrome 的“空缓存和硬重新加载”相同的功能?
- wso2 - 使用后 OutSequence 出现问题
- html - 绝对位置在滚动上没有固定位置
- process - 先到先服务算法