讨论一下使用pb11 webservice开发时三层时如何尽量减少数据交互量

lingdove 2010-10-04 09:36:37
现在好多PB webservice三层的中间件都是用getfullstate和setfullstate来传送和处理数据窗口中数据,也包含这个版块里面的好多例程与网上的例程.如果按照这种办法,要达到EASERVER的性能是不太可能的.
下面是武汉源启的性能测试介绍:
PBntierBuilder:V3.1
PowerBuilder:V9.0
应用服务器:Sybase EAServer 5.3
适配器:PB WinForm+EAS IIOP
数据库:MS SQLServer2000
带宽状况:
武汉-武汉同城武汉(服务端,10M 专线)- 武汉(客户端,1M ADSL)
武汉-北京异地武汉(服务端,10M 专线)- 北京(客户端,2M 有线电视宽带)
武汉-上海异地武汉(服务端,10M 专线)- 上海(客户端,1M ADSL)
武汉-台北两岸武汉(服务端,10M 专线)- 台北(客户端,2M ADSL)
测试环境
检索(Retrieve)不同记录条数下的耗时情况(秒)
100 行1000 行10000 行100000 行
本地局域网( 0.062 0.172 0.390 1.953
互联网
武汉-武汉同城0.172 0.110 0.563 7.688
武汉-北京异地0.109 0.171 0.905 7.613
武汉-上海异地0.188 0.171 0.625 5.093
武汉-台北两岸0.330 0.410 0.941 6.469

当然,不知道它服务器是什么配置,搞不好是4核+16G内存的,另外每条记录中的字段数也没说明,呵呵..
如果只有一个数值字段的话,那么就不用EASERVER,用我这种方式也能达到这个水平了.

我现在的服务器是WIN2003,赛扬2.93G+2G内存+3M ADSL,硬盘是7200转的普通串口硬盘.
客户端AMD双核2.1G+2G内存+2M ADSL (同城)如果网络正常的话
100行 10个字段 压缩后为906BYTE: 0.3至0.5秒
7000行 2个字段其中一个为100个字符 压缩后为61300BYTE: 2.5-5秒
感觉有时候快有时慢,但上面的数值为平均值(不要开迅雷或者其它下载软件,不然速度立即下降很多),我想这个跟网速多少也有点关系.

不使用getfullstate/setfullstate方法,使用下面方法流程:
1.客户端送入数据窗口名称(千万不要上传语法,这样又不见了几K的数据量),服务器端根据数据窗口名称从PBD或者数据库取得语法后,生成数据窗口,检索数据.
2.服务器端对数据窗口使用saveas函数(不知道能不能使用object.data)来获取,压缩后回传.
3.客户端使用importfile导入数据,导入后更改各行STATUS,让其保持retrieve后状态.
4.客户端修改数据,保存更新的时候使用getchange获取数据压缩后传送到服务端.
5.服务端接到数据后,用setchange函数后update数据窗口.

需要注意地方:
1.服务端SAVEAS数据后,必须把所有DDDW也saveas并按数据窗口方式回传,这样子才能处理下拉子数据窗口.
2.对于有分组的数据窗口,不知道这种主要获取数据后,分组有没有问题,未测试.
3.如果数据交互速度提高了,可以将业务和控制处理功能放在客户端,但是这样子处理的话,好像就不是三层结构了.
4.如果业务控制和处理放在服务端,则不能使用这种方式,这种方式会丢失数据窗口大部份状态和标识.
5.交互数据时,如果数据超过一定值,最好采用分页并且分段传输,这样不会给客户感觉死机了一样.

getfullstate:其实就是整个数据窗口复制.包括语法,数据,缓冲区数据,各行列状态.如果采用getfullstate,客户端是不用放数据窗口的.
setfullstate:与getfullstate对应.
getchange:类似getsqlpreview,只是取数据窗口部份修改内容,我分析过里面的数据,不外是inset into .. values...和update ...set a=... where a...和delete等语法.如果没有修改的数据是不会生成语法的.
setchange:与getchange对应.

其实不使用getchange/setchange,而且通过打包上传getsqlpreview(),服务端进行setsqlpreview后来更新数据应该也是可行的办法,不过没有测试过.

希望大家讨论一下,看看还有没有别的更好的办法来提高使用WEBSERVICE开发三层的性能.

不是说PB做网络应用性能不行,只是有很多地方都没有研究透.

国庆放假在家,突然想起这个问题,写得比较乱,见谅.

...全文
2510 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
sbks 2012-08-17
  • 打赏
  • 举报
回复
更正我的看法:减少数据交互量有必要.因为最近用电信3g流量卡测试了一下webservice应用,几千行的数据,十几分钟还没出得结果,接收流量已经达7M左右,下载速度平均为20k/s左右
sbks 2012-08-11
  • 打赏
  • 举报
回复
个人认为,对于中小企业的内部ERP系统而言,数据交互量倒不是影响速度的因素.因为:

1.在线使用人数远远小于网站型的系统
2.一万行数据的blob大吗?应该不大吧,但应用真的用到返回一万行数据到客户端吗?还真没那个必要.在webservice端就进行业务处理后,返回的数据顶多也就千把行.再者,如果真的要返回上万行的数据,可以自行做个分段

所以,数据交互量的大小,不是pb的webservice的考虑因素
sun_ce 2012-02-14
  • 打赏
  • 举报
回复
支持,非常感谢
cqwally 2010-11-30
  • 打赏
  • 举报
回复
也谈谈自己的看法。
有必要使用三层架构来开发PB的系统吗?
为什么要用PB开发B/S程序?因为PB开发速度快。转成3层架构,再加上啥压缩等等,这个速度快的特性,基本上就不占什么优势了。
如果系统必须要用三层架构来做,为啥不直接用java或者.net来做呢?
所以我认为:
如果用PB开发系统,主要目的就是一个快,啥2层3层的不用考虑。
如果必须3层,直接换开发语言。

个人愚见,请各位老大指正。
DYFDWX 2010-11-30
  • 打赏
  • 举报
回复
顶,楼上的
pb c/s
.net b/s
wuzongan 2010-11-29
  • 打赏
  • 举报
回复
说句实在话,webserver 真的很慢,我们公司现大也支持两种方式连接数据,一种是webservice,一种ado方式直接连接数据,客户可以根据需求选择两者之一,最后所有的客户都选择后者,所以webservice最后只剩下销售时售前忽忧客户的一个卖点,没有任何实际作用。
gavinjiang 2010-10-08
  • 打赏
  • 举报
回复
说的就是.net webservice,经过测试不行,不知道你用的pb是什么版本的,具体的开发和功能实现是怎么样的?
lingdove 2010-10-08
  • 打赏
  • 举报
回复
应该不会吧?我现在做好的BLOB处理这一块,可以上传10M或者更大的文件到数据库去,也可以从数据库下载下来.怎么会转换不成功呢?另外不要用SOAP,我是用.net的WEBSERVICE.
gavinjiang 2010-10-08
  • 打赏
  • 举报
回复
如果用ado.net 一般我想也是这个去连接数据库,本身就支持数据库连接池;我想用powerbuilder去开发.net webservice一个比较致命的问题就是byte和blob转换的问题,如果数据量大的话转换很慢或者根本不成功,要处理好。
lingdove 2010-10-08
  • 打赏
  • 举报
回复
如果能搞成多线程不知道会不会快很多,呵呵..不用一点一点传.两端再加个数据校验.呵呵.
现在传2.5M的文件要20-30秒.传10M的文件要100-150秒.
平均起来上传速度还有100来K,感觉可以的啦.
只是不知道为干什么下载比较慢,上传一般在20-25秒内,下载同样的数据要27-33秒内.
gavinjiang 2010-10-08
  • 打赏
  • 举报
回复
哦,我说呢
lingdove 2010-10-08
  • 打赏
  • 举报
回复
pb11.5 2506版.
上传时先将数据压缩后分批,然后分批上传到服务器,服务器缓存起来,接收到最后一批数据时,再组合.
下载时先由服务器SELECT出数据,根据每段大小分配好,返回段数和缓存名称,然后服务端再一批一批获取,最后再组合后解压.
下载就比较快,上传比较慢,这个可能跟网络有关系.

有点奇怪的是上传的时候服务器CPU占用率很低,但是客户端占用率高.

不知道分段大约是分一段大小多少比较合适?现在我分成64K,上传时会有点停顿.
lingdove 2010-10-08
  • 打赏
  • 举报
回复
我想问一下,你们公司的产品最多支持多少用户同时在线?处理起来效果如何?
我主要是怕按这种思路去设计系统,不要到时候不稳定就麻烦,而且客户端有时候也是很多的,可能有几百个.
mz_jenny 2010-10-07
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 lingdove 的回复:]
mz_jenny
能否讲讲实例池技术吗?
[/Quote]
这个东西涉及公司的产品 再说 要实现好这个 要从组件的架构与外部的动态库 相结合 比较复杂 一时半会说不上来 我的实现也相当复杂 如果你初次开发 建议先别实现这个
lingdove 2010-10-07
  • 打赏
  • 举报
回复
mz_jenny
能否讲讲实例池技术吗?
lingdove 2010-10-06
  • 打赏
  • 举报
回复
现在还有一个问题,不知道PB做的WEBSERVICE多用户同时并发访问时的性能如何?
有没有兄弟测试过???
lixuan815245937 2010-10-06
  • 打赏
  • 举报
回复
大家说的很好啊
gavinjiang 2010-10-06
  • 打赏
  • 举报
回复
免费的解决方案:
1、powerbuilder基于webservice的三层
2、powerbuilder基于COM+的三层
lingdove 2010-10-06
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 mz_jenny 的回复:]
基于webservice的三层提高性能的主要方法:
1.实例池技术 这个在eas上系统已经实现 在IIS其实也可以自己实现 将数据库连接和实例缓存 这样就不用每次都连接数据库或读pb的库文件了[/Quote]

将数据库连接和实例缓存,这个具体怎么处理?能指导一下吗?
fang3307 2010-10-06
  • 打赏
  • 举报
回复
有没有免费的中间层?

easerver只有开发版
jboos虽然免费,但是pb11使用需要插件,该插件sybase提供开发版,没在网上找到破解的
加载更多回复(22)

662

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder Web 应用
社区管理员
  • Web 应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧