架构设计之分布式数据访问

1:前言

看到这个题目也许有的朋友会问对数据访问层扩展为分布式有没有意义,因为不管怎样到最后都是对数据库进行访问,瓶颈在数据库上。对于这个问题我的答案是“我们提供分布式的查询能力然后和缓存结合让数据库中的数据缓存起来”。解决这个问题后我们来进入正题,如何对数据访问层进行封装。其实数据访问层的方法我们常用的是ExecuteDataset,ExecuteNonQuery,ExecuteReader,ExecuteScalar等这四个方法。

2:类图

 

3:原理

WCF中可以返回序列化的对象而DataRead是不能被序列化的(网上有人说可以让一个序列化的对象持有DataRead属性,这个方法根本不行) 

这里我们就说说如何通过WCF来返回DataReader。

看过底层代码(System.Data.SqlClient)的都知道,微软在实现ExecuteReader这个方法的时候是用了一个类似于游标的东西。每Read一次游标就向下走一行。

这里我们可以借鉴这个思想。我们首先把所有IDataReader中的方法定义到契约中。然后让客户端实现该契约,这样客户端每Read一次服务端也同样Read一次。这样我们就可以获取到该行相应的字段值了。不过这种方法要求WCF的实例模型是PerSession而并发模型是Multiple。

4:一些问题

WCF在开启信道的时候如果通过这种方法

 new ChannelFactory<IAdoHelper>(EndpointconfigKey).CreateChannel();

在压力测试的时候会报错。只有通过以下方法

new ChannelFactory<IAdoHelper>(bind, address).CreateChannel();

还有就是WCF中的信道池不知道怎么开启。MaxConnection好像不起作用,因此自己就实现了对象池来解决信道池的问题。【哪位仁兄知道不吝赐教】 


分布式缓存 

分布式文件系统 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值