database - 数据库是否应该仅用于持久性

标签 database web-applications three-tier

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

最佳答案

您在 3 层架构中没有使用数据库的哪些“功能”?想必我们充分利用了 SQL 以及所有数据管理、分页、缓存、索引、查询优化和锁定功能。

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

我认为将其放入应用服务器有两个原因:

1).可扩展性。如果数据库太忙,则添加更多数据库引擎相对困难。跨多个数据库对数据进行分区确实很棘手。因此,请将业务逻辑拉出到应用程序服务器层。现在我们可以有许多应用程序服务器实例都执行业务逻辑。

2).可维护性。原则上,存储过程代码可以编写良好、模块化且可重用。实际上,用 OO 语言(例如 C# 或 Java)编写可维护的代码似乎要容易得多。由于某种原因,存储过程中的重用似乎是通过剪切和粘贴进行的,因此随着时间的推移,业务逻辑变得难以维护。我承认,有了纪律,这种情况就不会发生,但目前纪律似乎很短缺。

我们确实需要小心谨慎,真正充分利用数据库查询功能,例如避免将大量数据拉到应用服务器层。

关于database - 数据库是否应该仅用于持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2955098/

相关文章:

java - JSF2 : navigation flow question

asp.net-mvc - DataAnnotations 或在服务中手动验证?

sql - 为什么 MySQL 会返回类似 'returned an empty result set' 或 'n row(s) affected' 的消息?

sql - SQL Server 中非聚集索引的解决方法最大键长度

python - 如何在python网页中获取当前URL?

c# - 三层应用架构是必要的吗?

java - 三层架构风格如何运作?一些方便的例子

php - Codeigniter动态数据库连接

python - pysqlite2中数据库对象和游标对象有什么区别?

tomcat - 如果 Tomcat 服务器具有多个 Web 应用程序,则将 sitemap.xml 和 robots.txt 放在哪里