许多具有3层体系结构的Web应用程序都在应用程序服务器中进行所有处理,并使用数据库进行持久性,只是为了具有数据库独立性。在为数据库支付了大量金额后,进行所有处理,包括在应用程序服务器上的批处理,而不使用数据库的功能似乎是浪费。我很难说服人们,我们需要最好地利用两全其美。

有帮助吗?

解决方案

这取决于您的应用程序。您应该设置内容,以便您的数据库做数据库非常有用的事情。在应用程序层中,您将不想处理八个唱片的八个台式连接。也没有对数百万行进行总操作,以散发一些摘要信息。

另一方面,如果您只是在做很多事情,那么您就不会因为将这个昂贵的数据库视为愚蠢的存储库而损失太多。但是简单的数据模型可以使自己以申请为中心的“处理”有时会导致您走上不可预见的无效率。设计结。您会发现自己在应用程序层中处理记录集。以开始近似SQL连接的方式查找事物。最终,您将这些东西痛苦地重构回到数据库层,在那里它们更有效地运行数量级...

因此,这取决于。

其他提示

您在3层考古中不使用数据库的“功能”?大概我们将SQL利用为完整,以及所有数据管理,分页,缓存,索引,查询优化和锁定功能。

我猜该论点是我们所谓的“业务逻辑”应在哪里实施。在应用程序服务器或数据库存储过程中。

我看到将其放在应用程序服务器中的两个原因:

1)。可伸缩性。如果数据库太忙,很难添加更多数据基础引擎。在多个数据库中分区数据确实很棘手。因此,将业务逻辑拉出到App Server层。现在,我们可以拥有许多执行业务逻辑的应用程序服务器实例。

2)。可维护性。原则上,存储的过程代码可以写得很好,模块化和重新固定。实际上,用oo语言(例如c#或java)编写可维护的代码似乎容易得多。由于某种原因,在存储过程中重复使用似乎是通过剪切和粘贴进行的,因此随着时间的流逝,业务逻辑变得难以维护。我会承认,通过纪律,这并不需要发生,但是纪律似乎目前处于短缺状态。

我们确实需要谨慎地将数据库查询功能真正利用,例如避免将大量数据拉到App Server层。

否。它们也应用于业务规则执法。

las,DBMS大狗要么不够胜任,要么不愿意支持这一点,这使得这是理想的不可能,并将其顾客置于主要的兑现股牛。

我已经看到一个应用程序(由一个非常聪明的人设计),上面有表格的表格:

id | one or two other indexed columns | big_chunk_of_serialised_data

在应用程序中访问它很容易:有些方法可以加载一个(或一组)对象,必要时对其进行测试。并且有一些方法将对象序列化为数据库。

正如预期的那样(但仅在事后看来,可悲的是),在很多情况下,我们想以某种方式在该应用程序之外查询DB!解决这是各种方法:应用程序中的一个临时查询界面(在获取数据中增加了几层间接方向);重复使用应用程序代码的某些部分;手工编写的挑选代码(有时用其他语言);并且仅需在没有任何挑剔的块中就可以做任何领域。

我可以很容易地想象几乎所有应用都发生了同样的事情:只是 便利 能够访问您的数据。因此,我认为我会非常反对将序列化数据存储在真实的数据库中 - 除了节省的情况大于复杂性的增加(一个示例是存储32位INTS的示例)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top