leveldb与设计模式-创新互联

Iterator模式:

在江海等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计、网站建设 网站设计制作按需制作网站,公司网站建设,企业网站建设,高端网站设计,营销型网站建设,外贸网站建设,江海网站建设费用合理。

 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。leveldb中include/leveldb.h定义了iterator基类,访问某层sst、某个sst内部kv、某个memtable内部kv、整个DB内部kv都需要迭代器,都是通过继承iterator来实现自己的迭代器版本。这样做能将容器中遍历数据的职能和其他职能分离开来,遵守了单一职能原则;增加新的聚合类时,只需继承iterator基类实现新的迭代器版本,遵守了开闭原则。另外,SkipList的迭代器使用内部类实现,提高了封装性,利于获取其外部类的全部访问权限。

责任链模式:

 是对象的行为模式。使多个对象都有机会处理请求,将这些对象连成一条链,并沿着这条链传递请求。compaction是leveldb的核心设计、比较复杂的部分。因此比较好的逻辑是将复杂的职能分离开来,交由若干函数依次处理(这里的对象换成了函数,涉及MaybeScheduleCompaction、BackgroundCall、BackgroundCompaction、DoCompactionWork、InstallCompactionResults等等),MaybeScheduleCompaction负责判断是否已经schedule了compaction、DB是否正被删除、是否有错误、是否需要compaction,BackgroundCall负责判断是否后台没有其他线程执行且没有后台错误,BackgroundCompaction负责判断是否为人工合并以及为compaction做准备工作(比如需要compaction的文件),DoCompactionWork则是真正的compaction的工作,InstallCompactionResults负责构造一个新的edit,并调用LogAndApply函数生成新的leveldb版本。

代理模式:

 当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问。leveldb中LRUHandle、BlockHandle、EnvWrapper的设计均体现了代理模式。LRUHandle可以理解为LRUCache采用了引用计数的代理类,类似于智能指针,首先减小了LRUCache复制的庞大开销,LRUHandle也方便了对LRUCache的LookUp、Insert、LRU_Append、LRU_Remove等的操作。BlockHandle是Block的代理类,指出了Block的偏移和大小,方便读取Block。关于EnvWrapper,leveldb中的Env主要封装了操作系统的文件接口、后台线程的调度以及锁的实现,Env是抽象基类,PosixEnv继承实现Env,而EnvWrapper即是Env子类PosixEnv的代理类。

建造者模式:

 是较为复杂的创建型模式,将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。leveldb中的具体应用有TableBuilder、BlockBuilder、FilterBlockBuilder、VersionSet::Builder等。TableBuilder负责构造Table,而TableBuilder的成员有BlockBuilder、FilterBlockBuilder,前者负责构造index block和data block,后者负责构造meta block。VersionSet::Builder负责版本的构建和更新等工作。建造者模式将产品的使用者不必了解产品内部组成细节,也不必参与产品的构建过程;而且将复杂产品的创建过程分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:leveldb与设计模式-创新互联
分享路径:http://scyanting.com/article/jojos.html