方友松的技术blog

信息技术之价值不仅体现于提高既有的业务效率;更重要的,是其本质:创造管理的智慧,推动行为的不断创新与超越!

用户操作
[即时聊天] [发私信] [加为好友]
方友松ID:truexf
78090次访问,排名1274好友0人,关注者0
truexf的文章
原创 120 篇
翻译 0 篇
转载 9 篇
评论 40 篇
Fey的公告

灌水光荣,偷盗可耻

关于
fangyousong@gmail.com
最近评论
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
sgear:交换个链接把

我的http://blog.csdn.net/sgear

同意的话在我blog里留个脚印。我会把你添加上的。
Lost_Painting:錯誤一大把啊... ...
CoolSlob:呵呵,会吹牛的人都活得好,这是现实。
半截:城管这行当,没有特别的监督管理部门.
象我这行多少还有个叫文明执法,热情服务的说法.

一个管理松懈,人员复杂,又有执法权的部门,他们能不骄横?

那么结果只有一个,政府的形象被他们毁了.
文章分类
收藏
    相册
    2006年8月南昌之行
    我要去的地方
    链接
    1. 余秋雨的blog
    2. 老鼠赟赟的blog
    3. 小虫的blog
    4. 平平的blog
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 信息系統通用緩存設計收藏

    新一篇: 笔记:VCL的诞生和设计原理 | 旧一篇: 關聯update SQL

    !請勿轉載!
     
    一、概述
    设计一个这样的通用缓存,是基于目前Erp系统中对缓存的使用没有一个统一的机制的局面,为了最大化的提高程序效能,优化对资料库的访问,简化对缓存数据的访问代码编写。以及还有一些我暂时还没有想到的好处。
     
    分为5個部分:
    1.緩存的對象類型
      a.nTCachedArray,數組類集合
      b.nTCachedDictionary,字典類集合
      c.nTCachedDataSet,數據集
    2.一個全局的TCachePool,可以換成三種對象:TCachedArray,TCachedDictionary,TCachedDataSet
    3.TCacheAgent元件,用于CachePool中的對象執行訪問和查詢
    4.一個資料表:WTCATB,用于記錄需要緩存的常用表和以SQL定义的数据
     
    以下分别说明。
     
    二、緩存的對象類型
    缓存的对象被分为两种类型:集合和DataSet,其中集合又分为以序号访问的TCachedArray和以键访问的TCachedDictionary
    每种对象都包含GUIDTimeOut属性,用于查询访问和超时管理。
    1.TCachedArray
    TCachedArray inherited from TComponent
    FItems: array of variant;
    function GUID: TGUID;
    function Get(AIndex: integer): variant;
    function Add(AValue: variant): integer;
    procedure Remove(AIndex: integer);
    function Count: integer;
    property TimeOut: integer;
    ......
    end;
     
    2.TCachedDictionary
    TCachedDictionary inherited from TComponent
    FItems: array of variant;
    function GUID: TGUID;
    function Get(AKey: string): variant;
    procedure Add(AKey: string; AValue: variant);
    procedure Remove(AKey: string);
    function Count: integer;
    property TimeOut: integer;
    ......
    end;
     
    3.TCachedDataSet
    TCachedDataSet inherited from TComponent
    function DataSet: TDataSet;
    function GUID: TGUID;
    function TableName: string;
    function SQL: string;
    property TimeOut: integer;
    property TimeOutBehavior: tbRefresh..tbFree;
    ......
    end;
     
    三、全局緩存池TCachePool
    TCachePool包括三个部分:
    1.TCachedArray列表、TCachedDictionary列表、TCachedDataSet列表
    2.一些对这些缓存对象的管理方法,包括:创建、释放、查询访问等等
    3.一张表格TCacheGrid:记录缓存中各个缓存对象的访问计数及统计信息、缓存的内存使用量等等。
    TCachePool通过外部参数文件Parameter.xml进行配置,这些参数可以是:缓存对象数量限制、缓存对象的寿命、内存使用限制、对象淘汰算法(如:以最近最少使用算法淘汰池中的对象)。
    TCachePool(全局的) inherited from TObject
    FArrayList: TList;
    FDictionaryList: TList;
    FDataSetList: TList;
    ......
    end;
     
    四、緩存訪問元件TCacheAgent
    TCacheAgent实现为一个元件,各个erp作业、以及我们现有LookupManager元件都可以通过TCacheAgent来创建、释放、访问、查询缓存池中的对象。
    TCacheAgent inherited from TComponent
    FCachePool: TCachePool;
     
    function ArrayCount: integer;
    function DictionaryCount: integer;
    function DataSetCount: integer;
     
    function NewArray: TCachedArray;
    function NewDictionary: TCachedDictionary;
    function NewDataSet: TDataSet;
     
    procedure FreeArray(AGUID: TGUID);
    procedure FreeArray(AArray: TCachedArray);
    procedure FreeDictionary(AGUID: TGUID);
    procedure FreeDictionary(ADictionary: TCachedDictionary);
    procedure FreeDataSet(AGUID: TGUID);
    procedure FreeDataSet(ADataSet: TCachedDataSet);
    procedure FreeDataSet(ADataSet: TDataSet);
     
    function GetArray(AGUID: TGUID): TCachedArray;
    function GetDictionary(AGUID: TGUID): TCachedDictionary;
    function GetDataSetByGUID(AGUID: TGUID): TCachedDataSet;
    function GetDataSetByName(ADataSetName: string): TCachedDataSet;
    function GetDataSetByTableName(ATableName: string): TCachedDataSet;
    function GetDataSetBySQL(ASQL: string): TCachedDataSet;
     
    function GetArrayItem(AGUID: TGUID; AIndex: integer): variant;
    function GetDictionaryItem(AGUID: TGUID; AKey: string): variant;
    function LookupByGUID(ATableName: string; AKeys: string; AValues: variant; AResults: variant; AOption: TLocateOption): variant;
    function LookupByName(ATableName: string; AKeys: string; AValues: variant; AResults: variant; AOption: TLocateOption): variant;
    function LookupByTablename(ATableName: string; AKeys: string; AValues: variant; AResults: variant; AOption: TLocateOption): variant;
    function LookupBySQL(ASQL: string; AKeys: string; AValues: variant; AResults: variant; AOption: TLocateOption): variant;
    ......
    end;
     
    五、資料表:WTCATB
    WTCATB表用来定义需要缓存的数据,可以是某一张表、或是一个SQL语句。设计这个表的出发点是:目前erp系统中有上千个表,有很多表是一些公用的数据,并不会经常变化,又会被经常访问。把这些表或数据缓存起来是完全合理的,但是目前我们并没有这样做法。
    FieldName      DataType          Not Null       Description
    -------------------------------------------------------------
    ID             GUID              Y              ID
    NAME           VARCHAR(20)       Y              Name
    DATATYPE       int               Y              数据类型(0: table; 1: SQL)
    DATATABLE      VARCHAR(20)                      表名
    DATASQL        VARCHAR(4000)                    SQL
    OPENTYPE       int               Y              打开类型(0: 系统启动时自动打开;1:全局,由程序在需要时打开......)
    TIMEOUT        int               Y              超时秒数
    CLOSETYPE      int               Y              关闭类型(0: 超时自动释放;1:超时自动刷新)
    MARK           VARCHAR(100)                     Mark
    DESCRIPTION    VARCHAR(200)                     注释
    ......
    --------------------------------------------------------------
     
    六、其他
    考虑对缓冲池中缓存对象的多线程访问。
     
     
    !請勿轉載!
     
     
     

    发表于 @ 2008年02月21日 21:08:00|评论(loading...)|编辑

    新一篇: 笔记:VCL的诞生和设计原理 | 旧一篇: 關聯update SQL

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © Fey