zoukankan      html  css  js  c++  java
  • 架构设计之分布式数据访问

    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好像不起作用,因此自己就实现了对象池来解决信道池的问题。【哪位仁兄知道不吝赐教】 


    分布式缓存 

    分布式文件系统 


  • 相关阅读:
    [原]如何在Android用FFmpeg+SDL2.0之同步视频
    鹤山市五泉酒厂 (“侨乡情”酒 )
    买酒的网站(转)
    泥鳅、黄鳝有关技术。
    国产 冰葡萄酒 主要生产地、品牌
    对症治疗过敏性鼻炎,依巴斯汀比氯雷他定更有效
    魔筎精粉制作 ----新化联系人
    拉肚子使用的常见药物
    一些WCF DS 的资料(参考)
    SHAREPOINT 2013 + PROJECT 2013 资料网站
  • 原文地址:https://www.cnblogs.com/tommyli/p/1493069.html
Copyright © 2011-2022 走看看