比如相同的向数据库插入一条记录的业务,相同的硬件环境下。
插入操作是放在业务层dll里和直接用存储过程的差异。我是希望把这个实现黑箱打开看看?!
开发环境:
1.windows2003+vs2003+sqlserver2000
2.windows2003+vs2005+sqlserver2005
能否在1,2条件下各自说一下,谢谢!

解决方案 »

  1.   

    个人 理解
    就是 多了 对业务逻辑Dll 函数 调用的 寻址损耗
      

  2.   

    理论上存储过程效率稍高,因为存储过程是预编译的,SQL Server对其专门优化过再执行。
      

  3.   

    拷!
    插入一条记录能有多少性能区别?我认为存储过程效率最明显体现在在复杂逻辑的情况,减少数据库跟程序的往返。网络的ping延迟远远高于程序进行逻辑判断。
      

  4.   

    个人观点,仅供参考。之所以提出这个问题,在于我这几天遇到的争论,而且想从实现的最底层探秘。我想关键点在于:1.性能。2.逻辑可读。从现在来看,以vs2003+sqlserver2000(2005可能完全不一样,没用过没有发言权)和现有项目来说。理论上把数据操作放在ado.net操作内相比较放在存储过程里性能应该是后者优一些:先说性能,放在ado.net操作内:1.adapter在更新时,要依据DataRowState判断是update,inert还是delete.2.还要在不指定列名和列值的情况下,自动对应(当然你可以自己写InsertCommand,UpdateCommand,DeleteCommand)。3.增加了网络数据传递往返。4.ado.net操作内的sql语句每次都要现编译。而存储过程不存在这样的问题。再说逻辑,有合理的逻辑定位,存储过程照样逻辑可以很清晰:1.把sql语句放在ado.net操作内可读呢,还是放在存储过程可读呢?2.业务逻辑,以一个逻辑为例:逻辑可能包含:1.验证;2.绑定到会员;3.会员升级;4.向会员发短信。这是一个事务(可以把1,2合并,因为1不牵扯写操作),这个整体是一个逻辑,每一个分步是一个操作,每一步都不可分,都能保持完整和公用性。只要不把整体逻辑放在一个存储过程里,那么是易于理解,逻辑清晰的。系统的逻辑层可以把这个逻辑体现出来。这是个共赢的局面。还有发布,修改存储过程发布快呢还是重新编译工程再考dll文件快呢?当然以上也不尽然,关键是具体问题具体分析,再就是开发的方便,项目的成功。这是我的看法,大家可以多讨论一下,谢谢!
      

  5.   

    有许多许多处理复杂系统需要考虑的事情,例如SOA、缓存服务、网状数据存储、实时数据采集、并行业务处理、跨数据库平台移植软件等等。某一种c/s关系数据库操作对于入门者也许很神奇,对于真正要求高性能的软件开发者,是太简单的东西了,不可能贪心地把那一点点关系数据库的编程当作核心。我从来没有测量出过强行要求使用存储过程有什么实际价值,我们只是从技术上允许这样编程而已。
      

  6.   

    winner2050(winner) ( ) 信誉:100    Blog   加为好友  2007-4-1 14:46:43  得分: 0  
     
     
       
    拷!
    插入一条记录能有多少性能区别?我认为存储过程效率最明显体现在在复杂逻辑的情况,减少数据库跟程序的往返。网络的ping延迟远远高于程序进行逻辑判断。  
     -----------------
    同意、!
      

  7.   

    当然是存储过程效率高了,这还用说.
    第一存储过程是预编译的,而且经过了优化,执行效率比一条条SQL语句解释执行高.
    第二存储过程只用传输一条命令和若干参数,大大节省网络带宽,提高传输速度.
    第三存储过程是封装的,而且有严格的参数检查,有利于提高安全性.所以我认为,如果是一个相对固定的逻辑,比如根据给定账号判断登录,并记下登录次数,我认为放在过程里把它"固化"比较好.
      

  8.   

    基本上,你给自己划了一个圈圈:“一切软件的核心都只是在数据库中利用4GL过程来进行数据库操作”。那么你得到相关结论也就不足为奇了。然后谈到“逻辑层”,显然已经把具体的关系数据库看的不那么重要了。如果你给QQ上另一端的朋友发送一个消息,那么对方收到消息一定要等待消息完好地保存到数据库文件吗?QQ的软件架构师并不总是回答这个问题。他关心的是各个服务的协同。同样所谓逻辑层的设计也并不回答如何将数据保存到你指定的关系数据库中的细节问题。它使用更为易理解、抽象的符号来说明问题。也许有些程序员不理解设计师为什么不用存储过程来描述逻辑,就好像民工不理解建筑设计师为什么坐在高级的办公室里就把大楼盖起来了,而自己却必须风餐露宿。因为所处的层次不同。
      

  9.   

    sp1234(没有一个儿子不是自私的)
    我明白你的意思,这是我们部门部分同事的争论,也想在这里了解一下大家的意见,我的意见是不要那么绝对,实际还是个具体问题具体分析。我也在我们内部论坛上给与了答复!你的答复很抽象,我想还是就具体问题作回答比较贴切。winner2050(winner),xray2005(风车车--要飞翔,必须靠自己!) 
    这只是个比方例子,它可以涵盖更复杂的操作,不要绝对化!
      

  10.   


    拷!
    插入一条记录能有多少性能区别?我认为存储过程效率最明显体现在在复杂逻辑的情况,减少数据库跟程序的往返。网络的ping延迟远远高于程序进行逻辑判断。