D
Dingyin
Unregistered / Unconfirmed
GUEST, unregistred user!
我的目标是配合MIDAS设计出稳定高效的中间层MTS组件,
web和普通Windows应用程序两种客户端,中间层应该能被两种客户端共享。
通过这种开发学习探索三层分布式应用的方法和模式。
目前实现了帖子的浏览功能:房间列表,房间主题分页显示,查看帖子
经过简化的基本模型是这样的
浏览器------------------ASP交互对象
(数据模板)
|
应用程序(数据模板)-------协调对象-----数据对象-----数据库
MTS里的对象都是无状态对象。
碰到的第一个问题是web和Windows程序间的差异和分布式应用的特性带来的。
即http协议的请求应答模式使普通的html页面很难保持一定量的状态数据
而应用程序则可以。
一开始并没有考虑这种差异,根据李维的建议,数据对象分成了若干个
包括房间对象,主题对象,回应对象,和一个主题索引对象。
最后一个对象的设计是为了加快速度和实现分页显示的任意跳转功能。
后来的设计则取消了这个对象,而增加了一个主题分页索引表。
应用程序客户端浏览功能的逻辑是这样的:
通过协调对象
1。房间对象,取得房间列表
2。主题索引对象,根据用户选择的房间,取得该房间所有主题的索引
3。主题对象,根据用户选择的莫房间的页面号,查询主题索引对象,
取得该页主题的起始关键字和下页主题的起始关键字,
再取得该页面的所有主题列表
4。回应对象,根据用户选择的主题,取得该主题及回应的详细信息。
问题在于主题索引对象,在客户端是应用程序的情况下,在选择了莫个房间后,
只需查询一次主题索引对象,以后的操作都可以利用此次查询的数据。
但对于web客户端的html页面,保存主题索引对象的数据以供各次操作共享则成了一个问题
我要怎么做呢?我想到过html页面用框架的隐藏帧保存数据,不过这种方式使html页面变复杂了
我不想这样。
那只好把主题索引对象的创建移动到了主题对象内,现在问题就来了,在于效率和必要
即使MTS有数据库池和对象池,这种每次查看分页的操作都要创建调用索引对象,
尤其是在数据量大的情况下,实在是很慢,所以我取消了主题索引对象,
把它的功能合并到了主题对象内,但问题依然没有解决。
我想问题实质在于MTS没有实现对象池,而数据库池的功能又是通过对象池来实现的(?)
为了资源共享以服务大量的客户端,MTS又要求尽量使用无状态对象。
一个问题是数据量大,一个问题是数据库连接没有共享
对前一个问题,我的解决办法是在数据库中增加了一个主题分页索引表。
这个表的操作是在主题对象内进行。
有三个字段:房间关键字,主题关键字,页号。
房间的主题每隔20个抽取一个写到此表中,算一页。
这样对于请求房间莫页主题列表的操作,只需根据房间关键字和页号,
从分页索引表中取得两条记录:包括了本页起始主题关键字,和下页起始主题关键字
主题对象就可以取得该页的主题列表了。
在Web客户端的情况下,这个表的增加使主题分页列表的操作速度有了实质上的提高。
在我的机器上(IIS,MTS本机运行,赛扬500,128M),很快的在各页间跳转时,
感觉上都是在0.x秒以内,但如果间歇了一段时间(大约是10秒以内吧),在跳转到别的页时,
则又要花费两三秒的时间。
那么这么慢的问题在哪呢,对象被释放了?数据库连接被释放了?
如果只是在我自己的机器上运行,我可以调用EnableCommit,不调用SetComplete
让这些对象始终在内存中,这样该不会有问题了。
但在实际的Web应用中这显然不可能。
***************那么在MTS中,这个问题该如何解决呢?*****************************
COM+实现了对象池,应该可以解决这个问题,但COM+对能放到对象池中的对象又有些限制
我还没有试验过,不知道针对MTS设计的对象在COM+中能不能利用对象池。
请各位大侠对这个问题和相关的MTS,COM+,MIDAS问题发表意见
web和普通Windows应用程序两种客户端,中间层应该能被两种客户端共享。
通过这种开发学习探索三层分布式应用的方法和模式。
目前实现了帖子的浏览功能:房间列表,房间主题分页显示,查看帖子
经过简化的基本模型是这样的
浏览器------------------ASP交互对象
(数据模板)
|
应用程序(数据模板)-------协调对象-----数据对象-----数据库
MTS里的对象都是无状态对象。
碰到的第一个问题是web和Windows程序间的差异和分布式应用的特性带来的。
即http协议的请求应答模式使普通的html页面很难保持一定量的状态数据
而应用程序则可以。
一开始并没有考虑这种差异,根据李维的建议,数据对象分成了若干个
包括房间对象,主题对象,回应对象,和一个主题索引对象。
最后一个对象的设计是为了加快速度和实现分页显示的任意跳转功能。
后来的设计则取消了这个对象,而增加了一个主题分页索引表。
应用程序客户端浏览功能的逻辑是这样的:
通过协调对象
1。房间对象,取得房间列表
2。主题索引对象,根据用户选择的房间,取得该房间所有主题的索引
3。主题对象,根据用户选择的莫房间的页面号,查询主题索引对象,
取得该页主题的起始关键字和下页主题的起始关键字,
再取得该页面的所有主题列表
4。回应对象,根据用户选择的主题,取得该主题及回应的详细信息。
问题在于主题索引对象,在客户端是应用程序的情况下,在选择了莫个房间后,
只需查询一次主题索引对象,以后的操作都可以利用此次查询的数据。
但对于web客户端的html页面,保存主题索引对象的数据以供各次操作共享则成了一个问题
我要怎么做呢?我想到过html页面用框架的隐藏帧保存数据,不过这种方式使html页面变复杂了
我不想这样。
那只好把主题索引对象的创建移动到了主题对象内,现在问题就来了,在于效率和必要
即使MTS有数据库池和对象池,这种每次查看分页的操作都要创建调用索引对象,
尤其是在数据量大的情况下,实在是很慢,所以我取消了主题索引对象,
把它的功能合并到了主题对象内,但问题依然没有解决。
我想问题实质在于MTS没有实现对象池,而数据库池的功能又是通过对象池来实现的(?)
为了资源共享以服务大量的客户端,MTS又要求尽量使用无状态对象。
一个问题是数据量大,一个问题是数据库连接没有共享
对前一个问题,我的解决办法是在数据库中增加了一个主题分页索引表。
这个表的操作是在主题对象内进行。
有三个字段:房间关键字,主题关键字,页号。
房间的主题每隔20个抽取一个写到此表中,算一页。
这样对于请求房间莫页主题列表的操作,只需根据房间关键字和页号,
从分页索引表中取得两条记录:包括了本页起始主题关键字,和下页起始主题关键字
主题对象就可以取得该页的主题列表了。
在Web客户端的情况下,这个表的增加使主题分页列表的操作速度有了实质上的提高。
在我的机器上(IIS,MTS本机运行,赛扬500,128M),很快的在各页间跳转时,
感觉上都是在0.x秒以内,但如果间歇了一段时间(大约是10秒以内吧),在跳转到别的页时,
则又要花费两三秒的时间。
那么这么慢的问题在哪呢,对象被释放了?数据库连接被释放了?
如果只是在我自己的机器上运行,我可以调用EnableCommit,不调用SetComplete
让这些对象始终在内存中,这样该不会有问题了。
但在实际的Web应用中这显然不可能。
***************那么在MTS中,这个问题该如何解决呢?*****************************
COM+实现了对象池,应该可以解决这个问题,但COM+对能放到对象池中的对象又有些限制
我还没有试验过,不知道针对MTS设计的对象在COM+中能不能利用对象池。
请各位大侠对这个问题和相关的MTS,COM+,MIDAS问题发表意见