`

.NET应用访问数据库之数据库的开销问题 后续篇(二)通信量和通信次数的较量

阅读更多

 

  通信量是说一次通信传输的数据量,可以使用KB或者MB来衡量的量。通信次数是说一次打开数据库,执行数据库操作,然后返回数据(或者没有返回),算作一次通信。

  今天就这个问题在MSN中和几个人进行了交流,一个是MVP,一个是在群里,一个是和一位数据库方面的高手。具体内容如下:

  和MVP的交流内容,将MVP的姓名替换了。

  

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->查看与此联系人的全部对话记录
  
MVP 说:
你看看对象定义应该就清楚了吧
 jorden008@hotmail.com 说:
用reflector
有这么个问题,通信量和通信次数,那个更重要呢?是一次通信的量大点,减少通信次数,
 还是每次通信量小点,通信次数多点没有关系呢
 来如何权衡呢
  
加密助手 说:
 
--- 系统提示: 以下会话未被加密 ---
MVP 说:
 都重要
 一般远呈调用
 推荐做法是 少次数,多数据
 当然,这个数据量也不能太大
 jorden008@hotmail.com 说:
 远程调用是什么概念呢
MVP 说:
 不同机器
 不同进程
 jorden008@hotmail.com 说:
 我现在是一个互联网应用
 是不是就可以理解为远程调用呢?内网是不是不算远程调用了呢?
MVP 说:
 不是
 互联网应用时浏览器和服务器之间的调用
 远程调用
-----服务器之间的,ok?
 jorden008@hotmail.com 说:
 C
/S算不算远程调用呢
MVP 说:
 算
 jorden008@hotmail.com 说:
 那就是了,我现在是silverlight
+wcf,一种在浏览器中运行的C/S
MVP 说:
 恩,算是吧
 jorden008@hotmail.com 说:
 B
/S都是服务器在工作,在client端都是html
MVP 说:
 对的
 jorden008@hotmail.com 说:
 好的,谢谢建议兄
 具体这个量有没有什么大概的数值呢
 现在用httpwatch看的话,有100K之多
MVP 说:
 100K算正常吧
 jorden008@hotmail.com 说:
 大概多少算作上线呢
MVP 说:
 一般通讯量都算猪呢工程
 不知道
 凭经验
 jorden008@hotmail.com 说:
 猪??
 猪呢工程??

MVP 说:
 一般1M一下都算正常 吧
 jorden008@hotmail.com 说:
 主要是怕用户体验不好,响应的慢,好的谢谢
 还有就是互联网应用的数据库调用失败率大概多少呢
MVP 说:
 没这种说法吧
 jorden008@hotmail.com 说:
 因为有的时候本来可以在一个存储过程中搞一个事务的,但是担心失败,有一个是必须的,一个不是必须的,就想是不是应该分开了,不必须的失败了就算了,这样就造成了两次通信
 有的时候可以写一个存储过程,然后里面写上三个sql,一个事务搞定,但是怕失败,不敢了,就只要写三个存储过程,分三次调用
MVP 说:
 数据库?
 jorden008@hotmail.com 说:
 是的
MVP 说:
 三个存储过程也可以一个事物啊
 jorden008@hotmail.com 说:
 还是怕失败啊
MVP 说:
 事物失败不是正常的吗?
 不失败要事物干吗?
 jorden008@hotmail.com 说:
 原来一个事务怕失败,就搞成三个失误了
 我就是说这种失败的几率有多少呢
MVP 说:
 三个就不失败了?
 靠
 没这种说法吧
 jorden008@hotmail.com 说:
 这么说吧,第一个失败了,是业务不允许的,失败了就是要报错,客户要重新点击,但是第二个是记录日志,如果失败了,可以允许,客户就不用管的,只是给系统来用的
 但是这两个放在一个事务,是不是不好呢?
MVP 说:
 不好
 日志记录放在事物之外
 jorden008@hotmail.com 说:
 还有就是一些其他的,例如有一个表维护用户的最后通信时间,用来做超时自动下线的
 用户每次进行业务操作的时候,都会更新这张表 
 就说业务操作和更新在线用户表是不是该放在一个事务呢
MVP 说:
 这个也可以事物之外
 jorden008@hotmail.com 说:
 事务之外就变成两次通信了
MVP 说:
 不是
 你不是C
/S
 吗?
 C
/S要避免client和server的多次通讯
 jorden008@hotmail.com 说:
 C
/S就不是两次通信了吗
MVP 说:
 server 和db之间该怎么干就怎么干
 你不是在sliverlight中调ado吧?
 jorden008@hotmail.com 说:
 server是说application server吧
MVP 说:
 yes
 jorden008@hotmail.com 说:
 silveright也不让我调用ado啊
MVP 说:
 恩
 jorden008@hotmail.com 说:
 silveright不能直接连接数据库,只能通过服务,例如webservice、wcf这些东西
MVP 说:
 server和db的多次通讯不是用一个connection?
 clinet
-server 通讯次数要少
 jorden008@hotmail.com 说:
 server和db的多次通信应该不是一个吧
MVP 说:
 server
-db通讯次数要少
 但是,有时候性能跟功能是不可兼得的
 向你的场景,显然要用三次数据库通讯
 jorden008@hotmail.com 说:
 通信次数还是应该优先的,要少,就是在通信量允许的情况下,尽量减少通信次数,是不是可以这么理解呢
MVP 说:
 恩
 在功能允许的情况下,尽量减少通讯次数
 一般的业务,数据量问题可以忽略的,除非是一次加载大量数据的场景
 jorden008@hotmail.com 说:
 就想你说的1M应该可以算作正常
MVP 说:
 看什么场景
 没有绝对的标准
 jorden008@hotmail.com 说:
 视情况而定

 

  在群中的交流信息

  

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->查看与此联系人的全部对话记录
  
  
 jorden008@hotmail.com 说:
 有这么个问题,通信量和通信次数,那个更重要呢?是一次通信的量大点,减少通信次数,
 还是每次通信量小点,通信次数多点没有关系呢
 来如何权衡呢

用户1 说:
 你的通信量大是不是说每次交互的时间很长啊
 要不然这两个应该是同一个概念啊
 jorden008@hotmail.com 说:
 不是的,是交互的数据量大,怕传输时间长,响应慢,显示就慢
 怎么会是一个概念呢
 一个是每次10M,就两次通信
 一个是每次1M,需要通信20词
加密助手 说:
 
--- 系统提示: 以下会话未被加密 ---
用户1 说:
 那就一次10M啦,这样应该会比每次1M的快吧
 jorden008@hotmail.com 说:
 10M这个量如何控制呢,也许5M更合适吧,就是个问题
加密助手 说:
 
--- 系统提示: 以下会话未被加密 ---
用户1 说:
 这个,没有太过经验.....
 呵呵
Mog 说:
 是数据传输粒度问题吧。我觉得小一点好,够客户端一次显示用就行了
 粒度大的话,我想会不会出现某时刻并发量过大,造成阻塞
 jorden008@hotmail.com 说:
 粒度小才会并发过大吧
 粒度小导致通信量增大,并发的几率就大了
用户1 说:
 这个可以采用一种折中的数据量啊
Mog 说:
 粒度大的话,处理时间长。
 jorden008@hotmail.com 说:
 对
 就是那个更优先一点
Mog 说:
 我想设计时把粒度控制设为可配置吧,根据以后运行环境来调整
Gary.Chen 说:
 Yo
 Yo Yo Yo
 jorden008@hotmail.com 说:
 不是什么都可以做成配置的
Gary.Chen 说:
 jorden哥
 jorden008@hotmail.com 说:
 我这个又不是硬件,做流量控制的
 这个是方法调用,然后传输实体类,如何配置呢
 what GaryChan
Gary.Chen 说:
 你在说什么
?分享一下
 jorden008@hotmail.com 说:
  有这么个问题,通信量和通信次数,那个更重要呢?是一次通信的量大点,减少通信次数,
 还是每次通信量小点,通信次数多点没有关系呢
 来如何权衡呢

Gary.Chen 说:
 看你应用场合了
 我碰到跟你一样的问题
 我昨天跟PM讨论过,采取了频繁请求来做
 但是我害怕频繁请求会导致通道故障,宿主会不会废掉
 我个人建议的做法是少量通信次数
+分段获取数据
 你可以用分段字节流来获取
 我这里有个demo,上次发过了
 Fred Xu.DBSC 说:
 demo在哪里可以下载
Gary.Chen 说:
 我上次发给过你们吧
 Fred Xu.DBSC 说:
 重发一下吧
Gary.Chen 说:
 ......
 这个是针对大数据量传输的解决方案
 jorden008@hotmail.com 说:
 哦
 请给我一个吧
 谢谢了
Gary.Chen 说:
 要的人发EMAIL
 Fred Xu.DBSC 说:
 fred_xu666@hotmail.com
 jorden008@hotmail.com 说:
 是不是那个拆解为byte【】,然后在客户端组合的办法呢
Gary.Chen 说:
 对


 

  和数据库开发方面的高手的交流内容

  

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->查看与此联系人的全部对话记录
  
数据库开发高手 说:
现在硬件完全能应付的来
 jorden008@hotmail.com 说:
好吧,谢谢了,回头交流
数据库开发高手 说:
好的。
8
  
 jorden008@hotmail.com 说:
 有这么个问题,通信量和通信次数,那个更重要呢?是一次通信的量大点,减少通信次数,
 还是每次通信量小点,通信次数多点没有关系呢
 来如何权衡呢
加密助手 说:
 
--- 系统提示: 以下会话未被加密 ---
数据库开发高手 说:
 这个都跟网络有关系吧

 感觉应该是量大点 

 jorden008@hotmail.com 说:
 因为是互联网应用,网络就是平均水平算
lye2000000_super@hotmail.com 说(
10:46):
 通信次数还要等待的

 jorden008@hotmail.com 说:
 通信次数要等待是什么意思
加密助手 说:
 
--- 系统提示: 以下会话未被加密 ---
数据库开发高手 说:
 每次连接可能会等待啊

 jorden008@hotmail.com 说:
 哦,那就是说两者可以量优先,在量允许的范围内,尽量减少通信次数
数据库开发高手 说:
 对 

 jorden008@hotmail.com 说:
  还有就是互联网应用的数据库调用失败率大概多少呢
 因为有的时候本来可以在一个存储过程中搞一个事务的,但是担心失败,有一个是必须的,一个不是必须的,就想是不是应该分开了,不必须的失败了就算了,这样就造成了两次通信
加密助手 说:
 
--- 系统提示: 以下会话未被加密 ---
数据库开发高手 说:
 提交到服务器了。怎么会出现你说 情况呢?

 jorden008@hotmail.com 说:
 有的时候可以写一个存储过程,然后里面写上三个sql,一个事务搞定,但是怕失败,不敢了,就只要写三个存储过程,分三次调用
数据库开发高手 说:
 呵呵呵。怎么会这样呢?调要了存储过程了。那么就会一起执行。都是在数据里执行
 貌似这个是理解错了吧
 分三次出错 几率不是更大?

 jorden008@hotmail.com 说:
 这么说吧,第一个失败了,是业务不允许的,失败了就是要报错,客户要重新点击,但是第二个是记录日志,如果失败了,可以允许,客户就不用管的,只是给系统来用的
 但是这两个放在一个事务,是不是不好呢?

 还有就是一些其他的,例如有一个表维护用户的最后通信时间,用来做超时自动下线的
 用户每次进行业务操作的时候,都会更新这张表 
 就说业务操作和更新在线用户表是不是该放在一个事务呢

数据库开发高手 说:
 都放在存储过程里不就行了吗?

 提交之后都在服务器运行

 你说 这种状况很难出现吧

 运行着就出问题了。挺难出现 

 那样第一个存储过程也会出这种事情 
 jorden008@hotmail.com 说:
 所以我问题你存储过程出错的几率有多大呢?
数据库开发高手 说:
 呵呵。不会太大

 比网络出错 几率要小
 jorden008@hotmail.com 说:
 那就是小很多恶劣
数据库开发高手 说:
 是啊。
 如果要求不严格。那就分开。这个对整体影响不大 
 jorden008@hotmail.com 说:
 恩

 

 

  结论

  通信次数还是应该优先考虑的,要少,但是要在通信量允许的情况下,尽量减少通信次数,通信量1M应该还算正常。这个也要考虑网络环境等外界因素。

分享到:
评论

相关推荐

    ado[1].net中文手册 学习 ado.net的重要资料

    使用数据库锁和数据库连接之类资源的应用程序不能很好地为大量用户服务,因为用户对这些有限资源的需求最终将超出其供应。 ADO.NET 通过鼓励程序员节省有限资源来实现可缩放性。由于所有 ADO.NET 应用程序都使用对...

    asp.net下SQLite(轻量级最佳数据库) 原理分析和开发应用

    概述 SQLite介绍 自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分。... Richard Hipp发布,它的减少应用程序管理数据的开销,SQLite可移植性好,很容易使用,很小,高效而且可靠。 SQLite

    数据库连接池技术详解

    对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技术。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。 在较为完备的数据库连接池实现中,可根据...

    JAVA在SQLite嵌入式数据库中的应用.rar

    SQLite 作为一个开源的嵌入式数据库产品,具有系统开销小,检索效率高的特性,适用于手机、PDA、机顶盒设备等电器,并且作为嵌入式数据库在可下载的消费类应用程序中运行的很好。这篇文章介绍嵌入式数据库产品SQLite...

    ASP.NET Core 7.0是一个开放源代码和跨平台框架,用于构建基于现代云的互联网连接应用程序.rar

    ASP.NET Core 应用可运行于 .NET Core 和完整的 .NET Framework 之上。 构建它的目的是为那些部署在云端或者内部运行(on-premises)的应用提供一个优化的开发框架。它由最小开销的模块化的组件构成,因此在构建你的...

    6数据库系统习题.pdf

    A、数据共享 B、数据分布 C、网络开销小 D、DBMS 和应用分开 15.由于进程数目少,内存开销和进程通讯开销小,因此_____是较优的一种。 A、N 方案 B、2N 方案 C、M+N 方案 D、N+1 方案 16. 数据库系统软件包括_____...

    ASP.NET Core 是一个开源和跨平台框架,用于构建基于云的现代互联网连接应用程序

    ASP.NET Core 是一个开源和跨平台框架,用于构建基于云的现代互联网连接应用程序,例如 Web 应用程序、IoT 应用程序和移动后端。ASP.NET Core 应用在 .NET 上运行,这是一个免费、跨平台的开源应用程序运行时。它的...

    Asp.NET性能优化之局部缓存

    上面场景中的1,如果整个页面的缓存失效都定为10分钟,则势必增加性能开销,所以最好的策略是页面的不同部分采用不同的缓存失效时长。对于场景2也一样,我们不应该为了迁就某个BANNER不能应用缓存,就让整个页面都不...

    asp.net社区交流系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目

    asp.net 社区交流系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,或者以上版本,使用c#语言开发。 二、功能介绍 网络社交...

    ADO.NET连接池示例

    因为打开和关闭数据库连接开销比较大,所以连接池对于与数据库链接资源的控制上,加快客户端程序的效率都有很大地帮助。 示例中会看到如何控制连接池个数,链接对象关闭连接放回链接池中,有其他连接对象打开连接时...

    ASP.NET Core开源跨平台的框架.zip

    为您提供ASP.NET Core 跨平台框架下载,ASP.NET Core是一个开放源代码和跨平台框??架,用于构建基于现代云的互联网连接应用程序,例如Web应用程序,IoT应用程序和移动后端。ASP.NET Core应用程序在.NET Core(一个的...

    论文研究-图数据库中的相似性搜索算法研究与应用.pdf

    图数据库的相似性搜索是一个非常重要的研究内容,图的相似性匹配属于图同构的判定问题,是NP完全问题,传统的高开销搜索的方法已经不能满足复杂图查询的需要;另外,由于图数据库的复杂性和特殊性,已有的优化算法不能...

    分布式数据库(“分布计算”概念发展)

    随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上。这时集中式数据库系统表现出它的不足:数据按实际需要已在网络上分布存储,再采用集中式处理,...

    IronTrackSQL监控和剖析数据库操作

    其中,IronEye SQL 用于监测 Java 应用和数据库服务器之间查询开销的时间,诊断在性能方面是否存在着相关问题,让开发人员在测试之前就能发现问题。IronEye 于 2003 年 10 月 1 日开始基于 Apache Software License ...

    什么是NoSQL数据库?

    关系型数据库和NoSQL数据库 什么是NoSQL 大家有没有听说过“NoSQL”呢?近年,这个词极受关注。看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会没有必要了呢?”但实际上,它是...

    嵌入式数据库SQLite

    嵌入式数据库SQLite与Java2009-01-06 19:54SQLite作为一个开源的嵌入式数据库产品,具有系统开销小,检索效率高的特性,适用于手机、PDA、机顶盒设备等电器,并且作为嵌入式数据库在可下载的消费类应用程序中运行的...

    JSP技术在Web数据库中的应用研究

    而不是一个复杂的软件,用户根据浏览器显示的Web页面信息发出一系列的命令和请求,如对数据库的增加、修改、删除、查询等, 由服务器凋用数据库负责对请求进行处理,并将结果作为响应返回给浏览器端,这就降低了用户...

    数据库连接池(database connection pool)是在 Java 中用于管理数据库连接的一种技术

    在传统的数据库连接方式中,每次与数据库建立连接时都需要进行一系列的网络通信和身份验证操作,这样的开销较大并且会影响应用程序的性能。而连接池则通过预先创建一定数量的数据库连接,并将这些连接保存在一个池中...

    VB快速访问SQL数据库方法的研究

    在 VB 应用程序中调用 ODBC API 函数,进行数据成组绑定,减少应用程序访问 SQL 数据库时数据转换的系统开销和网络传输开销,使应用程序高速访问 SQL 数据库。详细介绍了如何在 VB 中调用 ODBC API 函数和加快访问 SQL ...

    人事管理系统 数据库大作业.doc

    数据库大作业 :人事管理系统 报告中包括:数据库的背景及功能需求、数据库的概念结构设计、数据库的逻辑结构设计、关键问题论述、自我总结 部分展示: 一、数据库的背景及功能需求 人事管理系统,属于ERP的一个部分...

Global site tag (gtag.js) - Google Analytics