对做3件事的存储过程的1次异步调用与对做一件事的储存过程的3次异步调用
本文关键字:异步 调用 一件 3次 过程 存储过程 3件 1次 对做 | 更新日期: 2023-09-27 18:19:37
并不是说当前设置一个执行3件事的存储过程花费的时间太长。但是,当用户能够看到一定数量的信息时,为了加快速度,这可能是有用的。
我有一个使用async/await
模式运行的存储过程,它返回3组独立的数据。它们都不需要其他2个,所以顺序和谁先完成都不是问题。因此,在整个SP运行并返回之前,用户不会在网页上看到任何内容。
除了更多的代码(这是不可取的)之外,将该SP拆分为3个独立的SP并对这些SP进行3个独立async
调用是否更有意义?
顺便说一句,仍然有一个SP,但有一个新的@Which
参数有意义吗?这意味着当@Which = 1
查询此数据时,当@Which = 2
查询该数据时,依此类推。或者,尝试通过3个单独的async
调用多次运行同一SP时,是否会出现某种滞后?
我做了一些研究-为什么我更喜欢单身';等待任务。WhenAll';多次等待?这是一个很好的信息,但不是真的适合我的问题。
一如既往,这个问题没有正确或错误的答案。然而,有一些开发模式专门解决了这一问题。
我不认为让一个存储过程返回多个结果集是一件坏事,但是您提到了结果集是相互独立的。我对这句话的理解是,SP正在执行3个不同的工作单元,并且可以、应该、也将有一个不依赖于另一部分操作结果的结果集。我认为,这使单一责任原则失效。https://en.wikipedia.org/wiki/Single_responsibility_principle
如果您曾经必须更新存储过程的一部分,那么现在您必须接触整个存储过程,并可能更改与请求的更改无关的内容。
如果您只需要提取存储过程结果的一部分,那么您仍然需要提取过程中的所有结果集,这可能是没有原因的。
现在我可能会争辩说,如果所有3个结果集都依赖于相同的工作数据集,这将是一种可以接受的方法。一个工作集,需要保证它们在所有结果集中都是相似的。比如说一个详细的结果集和几个不同的聚合版本,或者一些具有特定连接条件的东西。理想情况下,还有其他方法可以处理其中的一些问题。
从数据库可维护性的角度来看,我建议将这3个调用/存储过程分开。
是的,假设三个SP不相互竞争,您应该能够将它们拆分为3个,或者在参数内部拥有相同的存储过程分支,而不会出现任何问题。你选择这两个选项中的哪一个是个人偏好,但我会选择3个sproc,如果它们做3个逻辑上完全独立的事情。