首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL Server中,哪种方法更快?返回通过DataTable使用的XML数据还是原始数据?

问在SQL Server中,哪种方法更快?返回通过DataTable使用的XML数据还是原始数据?
EN

Stack Overflow用户
提问于 2009-08-29 20:09:42
回答 4查看 1.4K关注 0票数 1

服务器的可伸缩性是我们最关心的问题。我正在尝试尽可能多地在客户端进行处理,因为SQL server 2008不支持JSON,但它支持XML……

我想,如果我返回我的数据(使用FOR XML EXPLICIT),然后在C# (BRL层)中,我可以只使用一个SqlDataReader调用来读取整个XML,然后将其传递给客户机(JQuery)。

这种方法不是比使用DataTable使用C#中的原始数据并通过via服务将其返回给客户端(在服务器上)更快和更具伸缩性吗?同样,这里的关键点是服务器可伸缩性。

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2009-08-29 20:27:18

如果服务器可伸缩性对您来说是个问题,为什么您希望服务器必须向下发送大量文本,而不是驱动程序能够理解的本机形式的“原始”数据呢?如果您最终希望将数据作为JSON提供服务,我不认为在数据库和web服务端添加额外的XML转换会有什么帮助。如果可以用XML将其发送给客户端,那么您确定希望客户端读取的格式与数据库紧密相关吗?对我来说,这听起来不像是一个好的耦合级别。一旦需要对格式进行任何更改,就会突然返回到解析XML,修改它,然后重新序列化它。

当然,关于性能的规范建议适用于这里:当有疑问时,测量。虽然我强烈怀疑使用XML会使这里的事情稍微变慢,而不是更快,但我当然建议您测量它而不是猜测。

您甚至确定这方面的性能是一个问题吗?从设计的角度来看,我会采用非XML的方式--如果您将XML直接传递给客户机,那么耦合级别太高,如果不这样做,那么XML不会提供任何显著的好处。

至于可伸缩性:我不认为序列化会特别影响代码的伸缩性。它将允许向上扩展(更强大的服务器)和向外扩展(更多相同功能的服务器),而不会出现额外的问题。它不像是引入了一个额外的“单一主机”,这将导致瓶颈。如果有什么不同的话,我希望非XML路由通过在数据库服务器上施加非常少的负载来提高可伸缩性(这可能被证明是难以扩展的瓶颈)。这是基于这样一种猜测,即将结果序列化为XML比使用原生的有线协议数据表示要花费更多的精力而且我怀疑SQL server中的XML序列化已经得到了相当大的优化。再一次,我强烈建议您在选择一条或另一条道路之前,先衡量差异(并牢记其他因素)。

票数 5
EN

Stack Overflow用户

发布于 2009-08-29 20:33:46

与直接从SQL server输出C#相比,采用XML方法肯定会消耗更多的CPU周期。不过,这里还有其他的考虑因素。SQL服务器是否在web服务器上?如果不是,则必须考虑从SQL到web服务器的网络带宽。从SQL到web服务器的本地流比XML小。与额外的CPU周期相比,这可能是更大的瓶颈。此外,理解您的只是在谈论服务器性能,但json是一个更紧凑的流,可以发送给客户端,更容易处理,给用户带来更好的体验。

布赖恩

票数 0
EN

Stack Overflow用户

发布于 2009-08-29 20:41:17

使用FOR XML将SQL记录集转换为XML是一项开销非常大的操作。当您查看执行计划时,您将看到计划中将数据转换为XML的步骤使用了非常大比例的CPU处理能力。

对于系统来说,以本机格式返回数据并让C#中间层从那里处理数据更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1352258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档