gpt4 book ai didi

sql - 过程数据库代码与多个数据库调用

转载 作者:搜寻专家 更新时间:2023-10-30 23:38:44 24 4
gpt4 key购买 nike

所以这是一个相当高级的问题......

我正在设计一个数据库,但不确定将管理复杂查询的过程逻辑放在哪里。我看到两个可能的选项,如下所示:

1) 在过程数据库代码中定义逻辑。

例如,在数据库中(例如:PLpgSQL):

create function A …
create function B …
create function C …
create function main {
a = select * from A() …
b = select * from B() … where a …
c = select * from C() … where b …
return c;
}

然后在周围的服务器环境中(例如:Node.js):

result = query(‘main’);

2) 在周围的服务器环境中定义逻辑,并简单地对较简单的数据库函数进行多个数据库调用

例如,在数据库中:

create function A …
create function B …
create function C …

然后在周围的服务器环境中:

a = query(‘A’);
b = query(‘B … where a …’);
c = query(‘C … where b …’);

本质上,我问的是将代码放入过程数据库语言与在周围服务器环境中编写查询的优点,和/或运行过程数据库代码与从周围服务器进行多个数据库调用相关的速度权衡环境。

谢谢! :)

最佳答案

优秀但有争议的问题。我在这里有很多经验,所以我可以说:

  1. 只有当您可以节省很多往返行程时,节省往返行程才有意义,并且
  2. 真正的好处在别处。

存储过程的最大好处是它们使您能够考虑将功能封装在接口(interface)后面,然后优化该功能。换句话说,节省 2 次往返并不是什么大问题,但能够优化所涉及的查询通常会节省更多。如果接口(interface)健全且封装良好,这将带来显着的好处。

主要的缺点是人们可能会滥用存储过程,将非事务性的东西放入其中(比如发送电子邮件)等等,再加上通常你无法有效地扩展参数列表这一事实在不破坏封装契约的情况下(我不认为可变参数函数是解决这个问题的主要方法)。 Oracle 当然有基于修订的版本来帮助解决后一个问题,但 PostgreSQL 没有。而不是在 postgresql 上,我倾向于将服务定位器写入存储过程来解决这个问题。

关于sql - 过程数据库代码与多个数据库调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37910329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com