2016-05-31 65 views
0

我工作的项目将被部署到多个“房间”。每个房间都有它自己的服务器,运行node.js的一个实例,每个房间都会有某种形式的数据存储。 (数据库风格尚未确定)。需要关于node.js/DB结构的建议

每个房间都必须能够完全自行操作...所以如果我们有5个房间,并且有4个房间关闭,最后一个房间应该能够在没有其他房间的情况下继续工作。到目前为止没有问题...

棘手的部分是,房间之间有一些共享数据...例如用户帐户。所以如果一个房间添加了一个用户,该用户应该能够在所有房间中登录。
这也将是很好,如果Node.js的情况下,如果可能的其他房间一个进行了更改的记录,通知,以便在需要他们可以重新加载数据...

我一直在寻找MongoDB副本集,但我不相信这是我的问题的最佳解决方案。

我也一直在考虑一个解决方案,其中每个房间负责其数据库,并在其他node.js实例广播一个事件来通知新用户时更新它。问题在于,如果一个房间在一天内脱机,它将无法赶上停机期间所做的更改。

我们没有在这里看到大量的数据......这里有足够的数据库知识指向正确的方向吗?

回答

1

没有必要让每个房间都有自己的数据库。

你打算做的是有一个单一的中央数据库,可以是SQL/NoSQL。这个中央数据库可以集群在多台机器上,以实现可靠性,可用性,数据分片,负载平衡以及拥有数据库集群而不是单台机器的许多其他好处。对于不同的数据库系统,这可以做的方式是不同的。这里有很多:mysql,redis,postgresql等等。你可以看看他们。

所有的节点实例都会从该中央数据库中读写。当一个新用户被添加到某个地方时,不需要实例通知对方并更新他们自己的本地数据库。这完全没有必要。在这种情况下,即使某个节点在一天内脱机,也能够在再次联机时从中央数据库访问所有新数据。这是你应该遵循的设计。

有多个数据库实例,每个房间一个,在服务器级别上实现协调层的总数为NO。这种协调应该在数据库层本身完成,并且所有的服务器实例都应该能够联系数据库,而数据库又是一致的和更新的。

我希望这个答案有助于指导你。