各位三层高手请进:数据处理问题请教。大家都来交流交流吧。

书生 2003-02-28 10:41:38
最近在摸索三层MIDAS开发的一些问题。
情况是这样的:我不走DCOM,直接走scktsrvr,服务器端使用DataSetProvider1,ADOConnection1,ADOQuery1连接数据库。注册服务以后,客户端SocketConnection1+ClientDataSet1+DataSource1+DBGrid1;
目前的问题有:1、采用这种分布式处理在前端进行数据更新和删除等不需要返回结果集的情况下,速度奇快!更新10W条记录基本上是点完客户端按纽,服务器就执行完毕了。但是一旦是需要返回的select等,客户端速度就大打折扣,单个客户端返回5000条记录的时候还可以忍受,大概是8秒,还不算多客户端并发的情况。如果上了1W条记录如果我是用户都不能忍受了。实测的是单客户端25000条记录返回是37秒。如果并发???
我的问题是:各位高人有在项目开发中采用过MIDAS分布式开发的么?在远程数据集的传送上是不是有哪些属性需要设置?或者有哪些特别需要注意的?请指教。
2、多客户端并发的问题:服务器端在处理客户端提交的请求时是否采用了多线程处理机制,还是排队处理???
目前我的测试反映为:一个客户端select * (2W条) ,一个select top 50;前一个先提交,第二个马上提交(呵呵,我们两个人喊1,2,3然后差不多一起点按纽,大家别笑啊 ^_^ ),这种情况下,服务器端并没有进行小结果集传送的优先处理,都要等待很长时间,2的先完成,1也马上完成。
针对这种现象请教:是否有什么属性或者方法可以避免查询少量数据集的用户可以优先获得处理??不用等待和需要返回大量数据集的命令同时处理??

敬请各位高人释疑。有兴趣的朋友也欢迎一起探导MIDAS。大家多交流心得。觉得现在
在MIDAS和COM真正能玩的很熟悉的人很少啊,很大一部分都是知道怎么做,不能讲明白为什么这么做。大家一起谈谈,可能会有很多收获,不要都把自己知道的一部分藏起来啊!
----书生
...全文
46 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
leapmars 2003-03-28
  • 打赏
  • 举报
回复
在 CB 中没有实现真正的多线程应用程序服务器,但 Delphi 实现了。建议楼主用 Delphi 来做服务器端。 如果非要用 CB 来做,需要修改 ATL 和 VCL 的源码。可以参考http://expert.csdn.net/Expert/topic/1181/1181432.xml?temp=.5154993
mawu1026 2003-03-23
  • 打赏
  • 举报
回复
lluunn007 (书生):
我和您碰到的问题相同
开发的系统已运行有两年。
虽说系统运行还可以,但还有提高的余地。
我采用的时WebConnnect + midas + ADO,现在我想提供系统的性能,主要是服务器端的性能,不知该如何处理。
Win2000服务器当连接数达到一定数量时,就报超过并发数。
服务器端的程序为dll形式,由DLLHOST程序启动,但是单进程,多线程,如果改为多进程就好了
期待者与你交流
书生 2003-03-13
  • 打赏
  • 举报
回复
: ljwlover(天涯浪子)
是的,使用DCOM方式确实不能进行Internet通讯,防火墙也是穿不透。
由于客户端可能需要在远程发布使用所以才使用了Socket方式。
土著巫师 2003-03-13
  • 打赏
  • 举报
回复
请各位买一套李维关于分布式数据库方面的书吧,机械工业出版社,一共三本,别怕化这几个银子。

祝各位好运;别再试来试去了。这个世界什么都要自己做累不累?
houzy123 2003-03-13
  • 打赏
  • 举报
回复
我用sql 2k +dcom的c/s方式
一,在sql 2k最好对table建立clustered索引,我有一个table内有最少500万条记录,在没有clustered时select 700多条记录,大约5分钟,在clustered时用0.1秒,当然where 的字段也是针对clustered索引的字段
二,保存数据时尽可能用update 和 insert语句,如果用applyupdates(-1)在多用户时,慢得要命,而且有时保存不了数据,当然用SQL 2K的PROCEDURE作update和insert也不错
WhyAndAnswer 2003-03-13
  • 打赏
  • 举报
回复
我用100K左右的数据做测试:
三层(SELECT * FROM TABLE)PACKETRECORD=10 客户端OPEN一下,其时间大约是APPSERVER 6分钟 客户端约12分钟
二层 客户端OPEN一下,约12秒

二个相差太远了
我想三层如此之慢,还用在远程上,实在不是个好东西
各位有何建议
cuptbluesky 2003-03-12
  • 打赏
  • 举报
回复
up
天涯浪子 2003-03-12
  • 打赏
  • 举报
回复
Wingsun(孙春阳) 兄:
你建议千万不要使用Socket通讯方式,最好使用DCOM方式。我感到困惑的是DCOM通讯方式到底能不能运行在Internet上???
这一点大家说法不一哟。我初步测试的结果是不能运行在Internet上的。
请看下面两篇文档:
(1) DCOM动态的选择1024~65535之间的网络端口,在这些端口上Internet和Intranet之间的通信是不被允许的,所以不可能在Internet上可靠的使用DCOM通讯协议(尽管它在Intranet上表现的很完美)。此外,DCOM要用135端口实现一些重要的功能,而通常安装的防火墙要限制135端口的访问。(摘自MSDN英文版)
(2) DCOM是使用RPC进行通讯的。利用RPC功能进行通信时,就会向对方电脑的135端口询问可以使用那个端口进行通讯。这样,对方的电脑就会告知可以使用的端口号,实际的通讯将使用这个端口来进行。135端口起的是动态的决定实际的RPC通讯使用的端口的端口映射功能。(摘自一网络安全文章)

由上面文档可以看出,用DCOM方式是无法运行于Internet上的(只能在Intranet上表现良好),而且也解释了为什么穿不透防火墙。

想听听Wingsun(孙春阳) 兄关于这方面的高见~!
buider 2003-03-11
  • 打赏
  • 举报
回复
用corba怎么返回数据集,我觉得用corba对数据库处理不是很方便。如果用cb提供的 corbamidas
例子的方法,比socketconnection要慢多了,我最近刚好做这个,各种办法都用了。
用activate form怎么样,我们的项目用这个方法好像好点,但是ocx控件下载太慢
daniel_tao 2003-03-11
  • 打赏
  • 举报
回复
up
书生 2003-03-05
  • 打赏
  • 举报
回复
呵呵,记得什么时候有时间,约上其他几个人,浦东那边的,来我这边会会。
上周末温三和一个同事来我这撮了顿。我亲自下厨的哦。
Jinglihui 2003-03-05
  • 打赏
  • 举报
回复
陆小鬼,混得不错啊,红星了啊!!!你敢和我装大爷?!!!!

daniel_tao(长空)
我的那个项目是用D6做的 ,现在实现分布有三种主要和途径:1MS的COM/DCOM,2 Corba,3 J2EE,对于D6我们只能选择前二者,在设计的初期对比1和2实现的复杂度(考虑电信的网络复杂度在内)就采用了Corba,对于MS的DCOM/COM我只是懂得一起概念:)帮不上什么忙了
从各人的感情上,我喜欢Corba,不喜欢COM/DCOM,很简单的一个理由,就是COM/DCOM只能用在MS的系统,而CORBA就不一样了
书生 2003-03-05
  • 打赏
  • 举报
回复
to: Jinglihui(雪狐)
我靠,你个死经历辉,连你家陆大爷都不认识了。而且居然未征得我的同意,就盗用
偶的网名。
什么时候有空带上你老婆来我这吃顿饭,我搬家了。
不讲了,气愤中,电话联系。
daniel_tao 2003-03-04
  • 打赏
  • 举报
回复
To Jinglihui(雪狐)
以前DCOM你用的是BCB开发的吗?你是怎样解决多线程问题的!(AppServer端的)
BCB好像在这没有很好的支持。
Jinglihui 2003-03-04
  • 打赏
  • 举报
回复
我们本来也是要用DCOM的,但是电信的客户端从95到xp都有,配置起来很费事,配置防火墙也很费劲,我不是安全专家,可不敢随便弄他们的防火墙,用Corba就简单很多了
Jinglihui 2003-03-04
  • 打赏
  • 举报
回复
这里谁叫玉笛书生啊?:)想认识一下,我在其它论坛的名字叫这个!
我做过上海电信的项目,三层分布,用的是Corba,有兴趣可以共同学习探讨
sh_lhjing@263.net
WhyAndAnswer 2003-03-04
  • 打赏
  • 举报
回复
搞错了,我是加了Lookup字段(1k*1k)的,所以才要6s,
没有Lookup字段,是<1s
WhyAndAnswer 2003-03-04
  • 打赏
  • 举报
回复
我用DCOM的,速度也是奇慢啊
连SQL server 2000,1k条记录,要6s,如果加上其它字段,真不可忍受啊,
所以我想设时间段,象csdn那样的处理,定最近n天内的记录
天涯浪子 2003-03-03
  • 打赏
  • 举报
回复
我对BCB + MIDAS + DCOM 做三层结构程序大概有一年多的经验了,大多是靠自己摸索过来的,至今还有不少问题感到困惑!

对你的问题,我可以给出如下解决方案:
1、DCOM最常用的有两种线程模型:Apartment和Single(具体概念可以看书)。对于小数据量的操作,通常使用Apartment模型;对于需要大数据量传递的情况,你可以使用Single模型。所以你的应用服务器程序可以建立两组应用服务器。(可以参看《精通C++ Builder 5程序设计高级教程》519-521页)
2、每屏可以显示的数据量总是有限的,所以你不必把几W条记录一下子提取到客户端,可以分段增量提取(可以参看《C++ Builder 5开发人员指南》25.3.5)
猛禽 2003-03-03
  • 打赏
  • 举报
回复
书生兄,我是在上海,我的MAIL:raptorz@163.com

其实我对BCB做三层没什么经验,只要和数据库相关的东东,我一向是用DELPHI做的。不过太可怕以前用BCB做三层有一段时间了,正好他这两天在上海,他说他后来就是因为这个串行的问题才改用DELPHI做的。
其实从CB改DELPHI还是比较容易的,或者你可以只把中间层用DELPHI做。
SOCKET的速度和稳定性的确比DCOM差一点,但带来的好处也是很多的,至少不用受制于WINDOWS的安全机制,适用性会好很多,因为很多用户不喜欢用WINDOWS的域用户管理。
加载更多回复(23)

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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