数据库设计:我应该何时使用多个数据库?

时间:2018-03-19 22:11:49

标签: mysql node.js mongodb transactional relational

背景

我正在尝试构建应用的后端服务。此应用程序具有用户可以加入的房间。当用户加入房间时,他/她可以通过套接字与其他用户交换一些数据。在房间外,用户可以查看他/她加入的房间内发生的交易的处理数据。房间清单,房间信息和房间内的数据交易应存储在数据库中。

我的想法是创建一个包含一个数据库的项目,但是,有经验的开发人员建议将数据库分成两个:

  1. 使用MongoDB存储房间内发生的数据交易的人。
  2. 使用MySQL存储和返回房间列表,房间信息以及房间内发生的事情的分析。
  3. 使用多个数据库时遇到的问题:

    我做了一些研究,根据我的理解,不建议使用多个数据库,但如果数据不相关则可以实施。显示分析将需要处理在房间内发生的数据交易,并显示房间的信息。如果我使用两种数据库方法,我将需要从两个数据库中检索数据以实现此目的。

    问题:

    我个人认为使用单一数据库方法更容易,因为我不会将房间内外的数据视为“不相关”。我是否错过了何时使用多个数据库的重要观点?

    提前致谢。祝你有个美好的一天。

1 个答案:

答案 0 :(得分:2)

你可以从两个角度来看待这个问题;技术和实用。

从技术上讲,如果预计后端会变得非常复杂或缩放,建议将其分解为多个微服务,每个微服务都负责一项小任务。理想情况下,这些小型服务应该可以帮助您实现关注点分离,因此每个服务只能处理一个数据。如果其他服务需要阅读和/或修改该数据,他们必须通过负责服务。

在这种情况下,根据每个服务正在处理的数据,您可以选择适当的数据库。例如,如果您有事务数据,则可以使用MySQL,MongoDB用于大型无模式内容,或者如果要执行文本搜索,则可以使用Elasticsearch。

实际上,建议从一个服务和数据库开始小规模(如果您希望尽快开发应用程序),然后随着时间的推移将其分解为多个服务,因为您需要添加和/或改进功能。 / p>

要记住多点。首先,如果您希望拥有庞大的用户群,则应该从一开始就使用正确的架构开始开发,以避免出现扩展问题。其次,有时一个数据库无法执行您需要的任务。例如,在MySQL中进行文本搜索效率非常低。最后,没有绝对正确的做事方式。但是你做了一件事,明天另一个朋友可能会出现,并问你为什么不按他/她的方式去做。最重要的是开始做,然后一路学习和改进。 Facebook是用MySQL开始的,它最初运行良好。今天可以存活一种数据库吗?我怀疑答案是否定的,但他们是否有必要添加他们现在拥有的所有N个数据库?

祝你好运!