所有事情都是平等的,并且以最简单的形式,哪个更快?
1.)调用Web服务方法
2.)对数据库的调用
例如,假设您有一个简单的Web服务,它只返回一个在X时间内计算的整数。您还有一个数据库,当以正确的方式查询时,也需要X时间来计算答案。 (因此计算时间在两种情况下相同)在这两种情况下,假设两个方向的数据量相同,例如,单个32位整数,为简单起见。
到目前为止,Web服务和数据库的计算时间完全相同。
环境是应用程序所在的1个应用程序服务器,以及同时拥有Web服务和数据库的另一个服务器。除了重复调用Web服务或数据库的应用程序之外,环境中没有任何其他操作。 这一切都在一个局域网中,因此任何网络延迟都是相同的。
从更快的应用程序,对数据库的调用,或对Web服务的调用?
我想,我想要分离的是哪个更重。设置,打开,关闭,拆除数据库连接的速度是否比Web服务慢,或者它是否相同?此外,如果还有其他事情,例如从Web服务解析结果,它们如何影响速度?
答案 0 :(得分:6)
O(1)并不是指任何时间长度。单个操作在Web服务上可能需要0.001毫秒,在数据库中需要100秒,它们都可以使用O(1)函数: http://en.wikipedia.org/wiki/Big_O_notation
很难知道你在问什么。如果您询问访问本地数据库是否通常比通过Internet访问类似服务更快,那么我希望通常答案是本地数据库会更快。通过互联网对Web服务的调用有很多开销,并且通过互联网进行的通信相对较慢。 Evan在一台慢速计算机上,数据库每秒可以执行数千个简单查询。相比之下,通过互联网访问,您很幸运每秒可获得50次往返请求,甚至无法计算在服务器上执行请求的操作所需的时间。
如果您要问网络中的服务器是否可以通过避免数据库和直接计算结果来更快地提供数据,那么答案取决于它。在这种情况下对数据库的调用会增加不必要的开销,如果其中的数据可以在独立函数中轻松计算。这个问题的答案与“网络服务”没有任何关系。在函数中计算答案或使用数据库查询访问答案是否更快?正如我所说,答案取决于您必须使用的特定功能的复杂性,并将其计算时间与直接从数据库访问答案(或部分答案)的开销相比较。
简而言之,你问题的答案取决于你究竟在问什么。它也可能有助于了解为什么你问的问题。我怀疑真正的答案是,这可能不是你需要担心的事情,除非你有特殊情况需要优化,否则不是真正的实际问题。
如果您担心web服务和数据库都在局域网上的速度比较,我很确定数据库的开销小于Web服务。应用程序通常维护与db的有状态连接,而对web服务的请求是通过http,这是无状态的,相对较高的开销,并且较慢。可能是错的。最好的答案是启动简单的Web服务,查询,以及(1)测量使用两种方法检索结果所花费的时间,并进行比较,和/或(2)创建一个打开大量线程并执行一些加载的应用程序测试
警告:如果您的应用程序未维护打开的连接或无法访问与db的连接池,则db替代方案可能会更慢。初始创建db连接可能相对较慢。但这不应该影响事物,因为你应该编写你的应用程序,以便始终保持开放的连接。
答案 1 :(得分:3)
根据实际经验,我会说数据库调用明显更快。
答案 2 :(得分:2)
这完全取决于您使用的网络拓扑和语言。如果你正在谈论C#......我的钱几乎每次都会在数据库调用上更快。
您对数据库服务器的调用将通过本机协议进行。一切都将得到优化。
如果您正在调用Web服务,则需要一些机制将请求发送到Web服务器,等待Web服务器响应,然后解析Web服务调用的结果进入你的代码。
答案 3 :(得分:2)
可以说,一般来说,网络服务中的网络延迟(通常通过互联网)会比调用数据库(通常是局域网或其他东西,这更快)而不是一个人与互联网的联系。)
当然,这对设置/软件/等等做了很多假设,这有效地将它简化为苹果和橙子的比较,这从来都不是一个好的答案。
答案 4 :(得分:1)
算法复杂性只是影响系统整体性能的一个变量。其他因素可能包括网络延迟或网络带宽,尤其是当返回数据的大小不同时。
如果在本地计算机上运行相同的O(1)算法,与在另一个大陆的计算机上运行算法并且需要通过网络发送相同结果相比,您将获得更快的结果。
如果在物理上不同的计算机上完成调用,其他因素可能包括原始CPU速度。
这就是为什么过早优化是万恶之源。
编辑:
我认为它现在更依赖于系统的细节,即您正在使用的数据库软件,或者您的Web服务是从静态网页读取数据还是动态生成数据。 / p>
但我开始忽略你为什么提出这个问题。你好像说两种方法花费的时间相同。因此,如果他们花费相同的时间,你怎么能问哪个更快?显然他们同样快。你需要告诉我们更多关于他们停止服用相同时间的方式和时间。
答案 5 :(得分:1)
O(1)没有指定速度,它指定了随着基础数据变大所需的“增长”时间。常数从等式中删除。这意味着对于一些非常小的N,O(N ^ 2)可以小于O(N)。
Web服务是一种连接某些功能的方法。除了网络延迟,实时受到服务实际执行的约束。例如,下面可能有一个数据库。如果它只返回一个Integer,那么计算时间大多是微不足道的,请求受网络的限制。
数据库需要解析查询,构建查询树,对其进行优化,然后对一系列缓存和文件应用一些搜索算法。如果你只是将一个Integer插入一个简单的表或一个无表格的SQL调用,那么获取数据可能是微不足道的,它将占用CPU的整个事务包装。
在解析简单的SQL并打回表格结果之前,你能不能来回服务器?大多数情况下,这些天我说这是一个折腾。有些网络比其他网络更快,而有些数据库和服务器相当不错。没有什么是确定的。
一般来说,Web服务是否比数据库更快?是的,当且仅当服务是微不足道的(如果它隐藏了数据库,那么它显然只是额外的时间)。数据库是一个庞大的引擎,虽然它们多年来变得更快,但它们的事务完整性基础级别指定了大量的最低CPU使用率。它们的速度较慢,因为它们正在做更多的工作。与网络访问背后隐藏的一些显式最小计算形成对比。 fibber或千兆网络可以快速移动数据。完成工作的工作要少得多。
当然,我们不用自定义编写的Web服务替换数据库的原因是时间。编写它需要很长时间,然后保持最新。比将其关闭到数据库并接受它的性能更多的努力。
保罗。
答案 6 :(得分:1)
恕我直言,我会说数据库通话会更快。我这样说是因为开销要少得多。由于HTTP协议和SOAP标记的冗长,您的数据会更加臃肿。这种膨胀数据包装和拆包需要额外的成本。使用存储过程调用,您可以使用输出参数返回单个int而不是结果集,以使其更轻。
答案 7 :(得分:0)
如果我们假设您正在与不同的服务器进行Web和数据库调用的通信,那么它们是否会完全相同,因为这两个请求都是通过TCP / IP传输的?可以比较的唯一事情就是通过线路的比特发回的实际结果有多大。