【问题标题】:How can I divide one database to multi databases?如何将一个数据库划分为多个数据库?
【发布时间】:2020-02-20 21:47:06
【问题描述】:

我想分解我的应用程序以采用微服务架构,我需要想出一个可靠的策略来将我的数据库 (Mysql) 拆分为多个与我的应用程序对齐的小型数据库 (mysql)。

【问题讨论】:

  • 好的。但是什么分贝? :p 你给 0 信息..
  • 我有一个 mysql 数据库,我想将该数据库的一部分拆分为微服务
  • 还是太宽泛了。你用过 ORM 吗?
  • 我有一个 symfony 应用程序,我使用教义将数据保存在单个数据库中。现在我想将我的整体应用程序分解为微服务并为每个微服务创建数据库
  • 我想你不想拆分你的代码库并且仍然为不同的应用程序使用相同的代码?所以这包括你的数据库模型。还是您想拆分模型?

标签: microservices monolithic


【解决方案1】:

TL;DR:取决于场景和每个服务的作用

虽然对此没有明确的答案,因为这真的取决于你的需求以及每个服务应该做什么,你可以想出一个通用的起点(假设你不需要保留现有的数据库类型) .

假设您有一个用于电子商务的单一应用程序,并且您希望将该应用程序拆分为更小的服务,每个服务都有自己的数据库。 您可以使用的方法是创建一些服务来处理网站的某些部分:例如,您可以拥有一项服务来处理用户身份验证,一项用于订单,一项用于产品,一项用于发票等等......

现在,每个服务都将拥有自己的数据库,接下来还有一个问题:特定服务应该拥有哪个数据库?因为这种架构的优点之一是每个服务都可以有自己的数据库,所以例如产品服务可以有一个非关系数据库,比如 MongoDB,因为它所做的只是获取产品的详细信息,所以你不必管理任何关系。

另一方面,订单服务可能有一个关系数据库,因为您希望在订单和该订单的发票之间保持关系。但是等等,发票是由发票服务处理的,那么如何在不共享数据库的情况下保持这两者之间的关系呢?嗯,这是这种方法的“问题”之一:您必须保持服务独立,同时还要让它们相互通信。我们应该怎么做?这里也没有明确的答案......一种方法可能是将所有发票详细信息也传递给订单服务,或者您可以在保存订单时仅传递发票 ID,然后通过 API 调用检索发票发票服务,或者您可以将发票所需的所有相关详细信息传递到订单服务中的 API 端点,该端点将这些数据存储到数据库中的特定表中(因为大多数时候您不需要整个实际对象) 等等...可能性无穷无尽...

【讨论】:

  • 我想把我当前的数据库分解成几个数据库。我有一个 mysql 数据库,我想将该数据库的一部分拆分为微服务
  • 那么正如我上面提到的你必须创建几个mysql数据库并将你想要提取的表放入其中。然后,您可以选择将表保留在现有数据库中或删除它们,因为您不再需要它们(当然,如果完全确定这不会导致任何问题)
  • 但是他有一个 ORM 系统,如果你只是复制它并扔掉一些表,它就会崩溃..
  • 是的,当然这不会是一项痛苦的任务,但是如果您在共享数据库中不再需要这些表,那么您可能不需要访问这些表的 ORM 代码单体代码,所以你也应该删除那段代码。不幸的是,(还)没有魔术按钮可以将应用程序从单片系统转换为微系统
猜你喜欢
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多