2016-04-25 70 views
1

想象一下,几十家企业的大公司,每一个都有自己的网站,每个网站都会有自己独特的功能需求如何构建/协调多个数据库?

  • 每个网站上的大多数数据将具体到该网站

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

    • 将会有一个CMS中央是可以编辑这些数据,但其他网站可以读取和使用数据

例如说你正在计划一家拥有多个子公司的基础设施,这些子公司生产不同种类的产品,其中一些属于同一类别(谷类食品),另一些属于完全不同的类别(书籍,工具)。有些营销网站,有些是CRM,有些是网上商店

  • 有监管要求影响所有产品
  • 每个公司都应该设法每个需求
  • 自身产品合规状态列表
  • 当一个新的要求的表面,只应进入有关该要求的详细信息,一旦

怎样的多个数据库进行协调?

编辑:每Bob的建议

增加了更多的信息感谢您的令人难以置信的有见地的问题!

  • 合规性数据不共享的,每个站点
  • 共享数据仅仅是一个企业范围的数据库内竖井式,他们将主要是“类型的[事物]”
  • 没有确凿的列表他们将被使用的实例,但目前它将为单个站点填充CMS下拉菜单。
  • 对共享数据的更改每年会发生几次。
  • 理想情况下,更改将在几分钟内反映出来,但一个小时左右应该是可以接受的
  • 共享数据量非常低。
  • 所有数据库都是新的,决定哪些数据库正在进行当前调查。
  • 子系统将暴露REST API
+1

了解这两个列表如何结合会非常有帮助:合规性数据是否共享?什么数据是共享的(除了可能的合规数据)以及它用于什么?它多久改变一次?在需要共享数据的所有地方需要如何快速和可靠地进行变更?您希望在更改流中使用哪种数据量?这些数据库是否已经存在?他们是否(或者如果他们目前不存在)必须是相同类型的数据库,例如SQL Server/MySQL等?是否有任何由子系统公开的API? –

+0

非常感谢你提出的令人难以置信的见解!法规遵从性数据不是共享的,共享数据只在一个企业范围内的数据库上,它们大多数是“类型的[东西]”,没有确切的使用实例列表,但是目前它将用于填充CMS个别网站的下拉菜单。它每年会改变几次。理想的变化会在几分钟内反映出来,但一个小时左右应该是可以接受的。共享数据量非常低。所有的数据库都将是新的,决定哪个正在进行调查。子系统会暴露REST API – CheapSteaks

+0

我还没有完成问题;-)。共享数据是否会存储在不同子系统中的相同结构中,或者可能以不同方式存储?你是否有编码或数据库中的房屋风格/更多的内部技能?这组子系统是否已经绑定在一起,例如通过共享消息总线?这些子系统在网络方面是否彼此靠近?你所描述的问题似乎是一个很小的同步 - 低音量,不是经常的,没有问题的延迟要求,一致性不是太繁重。 –

回答

1

我与克里斯同意,即使在这两个组的问题,还有一个大组可能的解决方案。例如,如果数据库是相同的技术,并且共享数据以相同方式存储在每个数据库中,则可以执行从中央数据库到其他数据库的数据库级复制。每个应用程序有两个独立的数据库(一个是共享的,一个是不共享的?) - 这会影响复制的类型。

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

这取决于(其中包括已经提到的事情),你已经在公司内部,等您公司的技术战略是什么,什么样的技术和技能。

因此,这是一个架构问题,因为它是一个数据库问题。

+0

谢谢!数据库级复制和2个单独的数据库听起来很有吸引力。是否有应用程序(或db?)必须为最终用户规范化数据的名称? – CheapSteaks

+0

通过规范最终用户的数据,你的意思是什么? –

+0

对不起 - 我锁定了我的评论,所以我不能编辑它。如果你的意思是“复制”,那么它通常被称为复制或同步。例如在MySQL中:http://dev.mysql.com/doc/refman/5.7/en/replication.html –

1

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

在很多情况下,如果您有共享数据,您希望拥有该信息的单一所有权。它可能在数据库中,在一个excel文件中(然后可以变成csv并定期在所有dbs上加载)或其他形式。细节取决于完全共享的内容。

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

的最后一点:

软件是其最好的时候,它有利于人类的解决人类的问题,而不是当它试图直接解决这些问题。在这些情况下,您可能需要一个良好的人工解决方案,然后查看软件可以采取哪些措施来支持该解决方案。很多问题(谁拥有这些信息?)已经被解决了,您将简单地自动完成已经完成的任务。

2

这里有一些方法我看到这个处理,你需要考虑根据您的特定业务领域的细节每个结构的影响。所有人都可以工作,但如果他们要去工作,都必须小心设置。

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

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

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

而且因为你在一个监管环境,我强烈建议你创建一个由数据库触发器更新审核数据库(从来没有从应用程序审核,您将失去对数据的更改),每个数据库。

+0

上感谢您的建议!监管的例子只是我们可能拥有的那种数据结构的一个例子,但考虑到审计是一个好主意 – CheapSteaks