从其他数据库访问数据 - 系统架构

时间:2010-12-17 16:50:21

标签: database architecture

我有一个我们最近开发的系统 - 一个SQL服务器数据库上的Web应用程序。 SQL服务器数据库已被设置为“多租户”数据库,我们的网站有许多不同的“安装”访问同一数据库。

我们有另一个应用程序沿着类似的路线运行,主要区别在于它有许多不同的“安装”都访问它们自己的单独数据库。

所有这些网站都在同一台服务器上运行,所有数据库都驻留在同一个SQL服务器实例中。

我们的每个客户都拥有这些系统中的一个,到目前为止,我们在这两个系统之间进行了一些相当轻松的集成,这些系统已通过Web服务调用进行处理。

我们现在有一个新的变化,要求我从多租户系统返回一个数据列表,但是根据存储在另一个系统的数据库中的标准对其进行过滤。我可以看到一些方法,但是想知道是否有人有任何明智的想法:

  1. 再次使用Web服务 - 不喜欢这个想法,因为它意味着获取数据列表并为每个单独的项目调用,这既慢又丑。

  2. 在数据库层中编写一些动态SQL,以便在.dbo.table上进行连接,这也有点难看,并且很难维护。

  3. 将数据从一个数据库复制到另一个数据库。这是我正在趋向于的地方,但随后存在数据不同步的风险。

  4. 我想对我的多租户数据库中的视图做一些聪明的事情,但我不希望每次为第二个系统创建新数据库时都要创建一个单独的视图集...... / p>

2 个答案:

答案 0 :(得分:1)

取决于商家规模,我选择了#1#2

#1更像是scalabe,对异类客户有好处,但更难实现和维护。由于您没有公共API,因此可以转到#2

#2需要专家DBA且非常容易出错

#3是IMO最糟糕的解决方案,因为裁员会发生,而且以后很难解决。

我建议的是短期计划和长期计划。在短期内使用#1#2,同时重新设计您的数据库。然后,您可以将新数据模型添加到系统,它可以与传统dbase共存。当你确保它的功能切换到新的数据库但仍然保持lgacy系统。最后,当新数据库在一段时间后从电路中退出传统数据库时没有问题。

答案 1 :(得分:0)

请勿更改数据模型。这很危险。只需在它上面制作另一个抽象包装。

您可以在另一台服务器上复制数据库,并让这个新包装器与数据副本一起使用。 如果发生任何数据损坏,只需恢复到主副本。