【问题标题】:Implementing functionality/code directly in database system直接在数据库系统中实现功能/代码
【发布时间】:2008-10-08 23:35:06
【问题描述】:

如今,RDBMS 软件包提供了大量超出标准数据存储和检索的功能。例如,SQL Server 可以发送电子邮件、公开 Web 服务方法以及执行 CLR 代码以及其他功能。但是,我一直试图将我的数据库服务器的处理量限制为尽可能地只存储和检索数据,原因如下:

  • 数据库服务器比 Web 服务器更难扩展
  • 在我从事的许多项目中,DB 服务器比 Web 服务器繁忙得多,因此空闲容量更少
  • 它可能会使您的数据库服务器受到安全攻击(例如 Web 服务)

我的问题是,与架构中的其他服务器相比,您如何决定应该在您的数据库服务器上直接实现多少功能或代码?您对开始新项目的人有什么建议?

【问题讨论】:

标签: database


【解决方案1】:

我知道 Microsoft SQL Server 和 Oracle 确实在推动对所有事情都使用存储过程,这有助于封装关系架构并为通常不那么容易编写 SQL 查询的软件开发人员创建一个更加程序化的接口。

但是你的应用程序逻辑的一半是用 PL/SQL(或 T-SQL 或其他)编写的,另一半是用你的应用程序语言编写的,Java 或 PHP 或 C# 等。DBA 通常负责编码程序,开发人员负责其他一切。没有人可以看到和访问完整的应用程序逻辑。这往往会减慢项目的开发、测试和未来修订。

此外,软件开发工具往往不适合存储过程。用于调试、源代码控制和测试的工具和最佳实践似乎都比应用程序语言的最新技术落后了大约 10 到 15 年。

因此,如果可能的话,我倾向于远离存储过程和触发器。除非在某些情况下,一个放置良好的存储过程可以使复杂的 SQL 操作完全发生在服务器中,而不是来回打乱数据。这对于消除性能瓶颈非常有效。

在另一个方向上也可能走得太远。喜欢应用程序管理数据而不是元数据,并采用实体-属性-值或多态关联之类的设计的人会给自己带来麻烦。让数据库管理它。使用参照完整性约束(外键)。使用事务。

【讨论】:

    【解决方案2】:

    供应商有一套最佳做法。但是,您对此表示担忧。

    几年前,我支持了一个主要软件产品。少校。

    他们说“数据库是关系存储。仅此而已。”每个用户会议的人都会询问存储过程、触发器和所有这些问题。

    他们的建筑师很坚定。一旦您摆脱了普通的旧 SQL,您就会遇到支持和维护的噩梦。他们将数据库中的对象关系映射到他们的产品中,其他一切都在他们的产品中。

    这可以很好地扩展。多个应用程序服务器可以轻松共享单个数据库服务器。

    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      相关资源
      最近更新 更多