数据库 – 比SQL更好的语言存储过程
对于使用诸如Transact-SQL或PL / SQL之类的语言,将某些业务逻辑实际提交到存储过程所需的限制和冗长度,我越来越感到失望.我希望将一些当前的数据库转换为Oracle,并利用其对
Java存储过程的支持,但该选项目前不可用.
您会以支持其他语言的存储过程的数据库的方式推荐哪些替代方案? 解决方法在数据库管理器中拥有更多聪明的查询语言存在一些架构障碍.主要的是查询优化器. SQL的设计约束之一是它只能使用查询优化器可访问的结构.这意味着语言及其功能与查询执行引擎和查询计划优化器的功能相当紧密.另一个主要的设计约束是数据库系统的机械性质 – 数据库编程几乎是独特的,因为它具有机械组件.查询性能受到磁头搜索和旋转延迟(数据到达磁头前的等待时间)的机械约束的限制. 这有效地排除了许多聪明的抽象,这可能会使SQL更强大或更容易使用.许多数据库管理系统使用可用于脚本编写的过程备选方案来补充SQL.但是,它们与DBMS交互 > Oracle’s PL/SQL和 这些语言的一个主要限制是与查询的有限交互 挖掘存储引擎的这个级别是(a)如果功能完全可用,那么有点深奥(所以大多数人都不会有这样做的技能)和(b)可能比在SQL中编写查询更麻烦.查询优化器的限制意味着您可能永远不会得到从Python(甚至是C#或Java)可能获得的SQL的排除级别. 有效查询的最小阻力的路径可能是 这可能会成为一个麻烦,并导致大量的样板SQL代码.唯一真正的选择是手工编码的SQL或代码生成系统.代码生成的一个简单的例子是由元数据生成SQL的框架提供的CRUD功能.在诸如Oracle Warehouse Builder或Wherescape Red之类的ETL工具中可以看到一个更复杂的例子,它通过从模型生成大量存储过程代码来工作. 正是因为这个原因,我发现自己正在半规则地建立一种或另一种代码生成系统.任何模板系统都将为此做好准备 – 从CherryTemplate开始,里程已经相当不错,但有很多这样的项目. Code Generation in Action是一本关于这个主题的好书,作者使用了一个基于ruby的系统,名字叫做我的名字. 编辑:如果您看到一个程序代码块的“显示估计执行计划”,您会注意到每个语句都有自己的查询计划.查询优化算法只能在单个SQL语句上工作,因此一个过程将具有一个林的查询计划.因为程序代码可以具有’side-effects‘,所以您无法使用查询优化中使用的type of algorithms来代码.这意味着查询优化器无法全局优化程序代码块.它只能优化单个SQL语句. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |