我应该在哪里访问我的数据库

时间:2014-09-15 09:16:49

标签: database design-patterns client-server data-access-layer

我很好奇你将如何处理数据库访问。

我们建议您有一台计算机,它将您的数据库作为其服务器工作的一部分托管,并且有多个客户端PC,其上有一些需要从该数据库获取信息的客户端软件

AFAIK有2种方法可以做到这一点

  1. 每个客户端软件直接连接到数据库
  2. 每个客户端软件连接到服务器端软件,该软件连接到数据库作为某种数据访问层。
  3. 所以我想知道的是: 每个解决方案的专业和反对意见是什么? 还有其他解决方案可能“更好”地完成这项工作

2 个答案:

答案 0 :(得分:1)

我绝对会使用建议编号2.没有客户端应用程序应该在没有经纪人的情况下与数据存储区通信,即:

ClientApp - > WebApi - > DatabaseBroker.class - > MySQL的

当您分离关注点并为数据存储区定义有组织的吞吐量时,这是完成此操作的合理方法。

一些好处是:

  1. 将客户端与数据库分离

  2. 您可以将所有升级,添加和可操作性集中在所有客户的一个位置(DatabaseBroker.class)

  3. 它是非常可扩展的

  4. 对业务逻辑的安全性

  5. 用这个非专业人士的例子来想想:

    海军陆战队不允许将自己的武器带到战场(客户端应用直接与DB对话)。相反,他们从军械库(API)结账武器。军械库控制着所有武器,修理和升级(来自数据库的数据)并确定谁得到了什么。

答案 1 :(得分:0)

你所描述的听起来像两种不同的multitier architectures。 第一点与两层匹配,第二点可以是三层。

  

AFAIK有2种方法可以做到这一点

您可以将应用程序划分为多个物理层,因此,您会发现适合此架构(n层)的案例比上述更多。

  

每种解决方案的专业和反对意见是什么?

通常,将应用程序分层的动机是实现某种非功能性需求(可维护性,可用性,安全性等),问题是当您添加额外的层时,您还会增加复杂性,例如:应用程序组件需要相互通信,当它们分布在多台计算机中时,这将更加困难。

  

其他解决方案可能会“更好”地完成这项工作。

我不确定你的“工作”是什么意思,但请注意你不需要添加额外的层来访问数据库。如果您在几台计算机上安装了桌面应用程序,那么传统的客户端/服务器(双层)模型就足够了。但是,基于Web的应用程序需要额外的层来与浏览器进行交互。在这种情况下,数据库访问不是添加此额外层的动机。