如何构建/协调多个数据库?

时间:2016-04-25 07:37:55

标签: database database-design

想象一下拥有数十家公司的大公司,每家公司都有自己的网站,每个网站都有自己独特的功能要求

  • 每个网站上的大多数数据都是针对该网站的

    • 每个网站都可以编辑自己的数据
  • 有些数据将在所有网站上共享

    • 将允许中央CMS编辑此数据,但其他网站可以读取和使用该数据

e.g。假设您正在为一家拥有多家子公司的公司规划基础设施,这些公司生产不同类型的产品,一些属于同一类别(谷物,食品),另一些属于完全不同的类别(书籍,工具)。有些是营销网站,有些是CRM,有些是在线商店

  • 有一系列影响所有产品的监管要求
  • 每家公司都应该管理自己的产品符合每项要求的状态
  • 当新要求浮出水面时,有关该要求的详细信息只应输入一次

如何协调多个数据库?

编辑:根据Bob的建议添加更多信息

感谢您提出难以置信的深刻见解!

  • 合规性数据未在每个网站内共享,孤立
  • 共享数据仅在一个企业范围的数据库上,它们大多是“[东西]的类型”
  • 没有确定的实例列表,但它们将被用于填充个别网站的CMS下拉列表。
  • 共享数据的更改每年会发生几次。
  • 理想情况下,更改会在几分钟内反映出来,但一小时左右应该可以接受
  • 共享数据量非常低。
  • 所有数据库都是新的,决定哪个数据库正在等待当前调查。
  • 子系统将公开REST api

3 个答案:

答案 0 :(得分:2)

以下是我看到过这种方法的一些方法,您需要根据特定业务领域的详细信息考虑每个结构的含义。所有这些都可以工作,但如果他们要去工作,就必须仔细设置。

一个用于共享信息的数据库和一个用于客户端特定信息的每个客户端的数据库。设置整个应用程序,以便您在登录时放入应用程序的第一件事是客户端,它连接到正确的客户端。如果用户将处理倍数,人们可能还必须有一种方法来更改客户端。

如果完全需要孤立的话,为每个客户端分开服务器。数据库更改是通过脚本(并在源代码管理中)进行的,并根据需要应用于每个服务器。因此,对中央数据库的更改可能会有一个作业,可以将任何数据更改推送到其他服务器

一个数据库中的所有数据,但确保每个表都有一个client_id,以便客户端始终正确过滤数据。您可以按客户端设置单独的视图,以便用户只能看到他们应该看到的客户端。这仅在每个客户端的数据基本上以相同形式存在时才有效。

由于您处于监管环境中,我强烈建议您创建一个审核数据库,该数据库由数据库触发器更新(永远不会从应用程序进行审核,您将丢失对数据的更改)。

答案 1 :(得分:1)

我不认为这个问题足够明确,无法得到一个答案。但是有一些可能性。

在许多情况下,如果您拥有共享数据,则希望拥有该信息的单一所有权。它可以在数据库中,在excel文件中(然后可以转换为csv并定期加载到所有dbs上)或其他形式。细节取决于准确分享的内容。

现在在这种情况下,听起来你将会有一些负责某些共享信息的法律部门,他们将管理这些数据,然后将这些数据共享给其他网站。这可能是由他们管理的应用程序完成的,这些应用程序聚合来自其他公司的信息,或者可能是推送到他们系统的数据。

最后一点:

软件在促进人类解决人类问题的过程中处于最佳状态,而不是在尝试直接解决这些问题时。在这些情况下,您可能需要一个良好的人工解决方案,然后查看软件可以做些什么来支持它。很多问题(谁拥有这些信息?)已经解决了,你只需要自动完成已经完成的工作。

答案 2 :(得分:1)

我同意克里斯的观点,即使在两组问题之后,仍有一大堆可能的解决方案。例如,如果数据库是相同的技术,并且共享数据以相同的方式存储在每个数据库中,则可以从中央数据库执行数据库级复制到其他数据库。是否可以为每个应用程序分配2个单独的dbs(一个具有共享内容,另一个具有未共享内容?) - 这会影响复制类型。

或者您可以拥有一个纯粹的代码解决方案,其中在更新中央数据库的GUI中单击发布会调用一组API,这些API也会更新其他数据库。或者微服务 - 更新中央数据库还会在共享队列上创建一条消息,该消息由服务提取,每个服务都会查看不同的数据库,并以对该数据库有意义的任何形式应用更新。

这取决于(已经提及的事项)您的组织的技术战略是什么,您已经拥有哪些技术和技能,等等。

所以这是一个架构问题,因为它是一个db问题。