




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据访问层开发实践许超前手机之家2010年04月03日mEiwpw!1黑SLim/-.I11,丄it*II11mEiwpw!1黑SLim/-.I11,丄it*II11目录前言关于数据访问层(DataAccessLayer)关于DalDal的产生Dal的发展Dal21.xDal22.xDal的未来5)关于我们6)Q&AmEiwpw!1黑SLim/-.I11,丄it*II11关于数据访问层引用维基百科:ADataAccessLayer(DAL)isalayerofacomputerprogramwhichprovidessimplifiedaccesstodatastoredinpersisten
2、tstorageofsomekind,suchasanentity-relationaldatabase.Thisdataaccesslayerisusedinturnbyotherprogrammodulestoaccessandmanipulatethedatawithinthedatastorewithouthavingtodealwiththecomplexitiesinherentinthisaccess.关于数据访问层(续)应用程序DataAccessLayer文件APIDBDAL在系统中的位置1IMobi/e手机之赢关于Dal-软件定位mEiwpw!1黑SLim/-.I11,丄i
3、t*II11关于Dal-软件定位mEiwpw!1黑SLim/-.I11,丄it*II11关于Dal-概览mEiwpw!1黑SLim/-.I11,丄it*II11Dal是手机之家开发的数据访问层软件的产品名。Dall0、Dal21.x、Dal22.x及Dal2x则是该软件的不同版本系列的一个引用。Dal是手机之家研发团队近几年在开发和运营上的经验的总结以及智慧的结晶。开发Dal的目的是为了解决在构建大中型网站时遇到的和数据访问有关的诸多问题,如怎样使得分表透明化,怎样使得缓存存取清除自动化,怎样才能更好地防止服务单点故障等等。Dall0是一个具有里程碑意义的版本,但在很多方面仍然欠考虑。Dal2
4、1.x是一个经过精心设计、认真编写,具有较高可用性的分布式数据访问层,是综合数据代理(如MySQLProxy)、名值对缓存(如Memcached)、集群等等思想而构建的一个软件系统。Dal22.x是目前的最新系列,引入了很多新特性:如分布式事务,支持数据库主从等等。1)不但具备了memcached和mysqlproxy的优点,还避免了两者的缺点。2)Dal作为一个中间件,应保持语言中立、数据库中立。3)让系统在数据访问层上具备分布式计算能力。4)不造ORM轮子,只是发明访问数据的接口。关于Dal-核心概念mEiwpw!1黑SLim/-.I11,丄it*II11关于Dal-核心概念mEiwpw!
5、1黑SLim/-.I11,丄it*II111)透明分片透明,缓存透明,主从透明。2)虚库(逻辑库)和实库(物理库)虚库:不是一个真正存在的库。也叫逻辑库。实库:是真实存在的库。也叫物理库。3)虚表(逻辑表)和实表(物理表)虚表:不是一个真正存在的表。也叫逻辑表。实表:是真实存在的表。也叫物理表。4)分片(分表)分片可以分布在同一个库中,也可以在多个库中。也叫分表。5)映射虚库T实库;虚表T实表;应用列名T数据库列名;6)条目缓存和查询缓存7)辅助索引8)分片情况:不分片、分片无辅助索引、分片有辅助索引9)面向库的开发方式这是指,Dal自动从数据库获得需要的信息,而不是由应用开发人员在配置文件里
6、显示配置。开发人员要配的只是分表的规则、连接池的使用、缓存的使用等。只在应用层需要和数据库不一样的信息时(如字段名),才在配置文件里显式写出。列名IDPIDIMobile手机之家mEiwpw!1黑SLim/-.I11,丄it*II11mEiwpw!1黑SLim/-.I11,丄it*II11关于Dal-设计指导思想Dal总体上设计成(Core+Plugins)的形式。Core负责一些不可插件化(或难以插件化)的组件,Plugins则是那些可插化的组件。我们定的是机制,提供的是策略;机制是软件目标和宗旨的体现,一般是不能轻易改变的,而策略则应当是能比较简单地进行切换的。那么,Core即机制,Plu
7、gins即策略。mEiwpw!1黑SLim/-.I11,丄it*Ii11Dal的产生Dal的产生-多数现有系统的经典问题1)由于webserver可以直接访问dbserver,在高峰阶段,并发量比较大,导致dbserver经常down掉。2)添加缓存代码以降低数据库访问压力,但由于开发人员自己控制缓存使得:a)缓存访问逻辑混杂在系统的各个角落,造成代码维护成本上升。b)开发人员根据自己的喜好来控制缓存的KEY和VALUE,造成缓存混乱。c)开发人员既要负责业务逻辑的编写,还要负责缓存管理,造成编程复杂度提高、开发效率低下。Dal的产生-多数现有系统的经典问题(续)3)在分表的情况下,程序员需要
8、考虑和编写大量繁杂的和分表有关的代码:a)需要根据规则计算出数据的存取目标是在哪个分表当中。b)如果取回的数据分布在不同的分表中,需要合并结果。c)由于大表切分后变成了多个小的分表,对于有排序要求的查找,需要通过建立并查找辅助索引来解决。d)如果一套分表有多个辅助索引,需要寻找最优辅助索引。DaI的产生-Dall.O应需而生DaI的产生-Dall.O应需而生MySQLiMobWe手机之;EDal的产生-Dall.O的典型用法(续)Dal的产生-Dall.O的典型用法(续)Dal的产生-Dall.0的典型用法接口采用APIInvocation+CallChain的方式,所有的方法名取自SQL关键
9、字,方便记忆。1)增:DataAccessor:insert()-table(imobile.postdb_post)-data(array(post_id=1,.)-dup()-execute();删:DataAccessor:delete()-table(imobile.post.db_post)-where(post_id,IN,array(1,2,3)-limit(3)-execute();TFl改:DataAccessor:update()-table(imobile.postdb_post)-data(array(level=0)-where(user_id,limit(10)-e
10、xecute();查:DataAccessor:select()-table(imobile.post.db_post)-columns(post_id)-where(array(threadd=1,forumd=2)-getAll();Dal的产生-Dall.0的成效Dal的产生-Dall.0的成效4啊勒4啊勒Dall.0使得数据库的QPS从儿千降到儿百,缓存命中率稳定在60%80%之间。Dall.0还标准化了调用接口,简化了编程,使程序员在业务逻辑层面不再关心缓存与分表问题,极大地提高了生产力。讣Dal的产生-Dall.0的问题讣Dal的产生-Dall.0的问题BLW期妙加A.;但是,Da
11、ll.O仍然有很多不足:Dal1.0直接和数据库打交道。如果操作的数据分布在不同的分表中,为了提高性能,需要并行处理。但是PHP不好做到。为了保证索引和分表数据的一致性,需要引入事务。但是Dall.0没有。Dal1.0直接针对MySQL编码,万一将来需要采用其它的数据库,怎么办?MyCached和Memcached在不同的进程,很多情况下需要两次请求才能组合出完整的数据。如果需要支持其它的语言,怎么办?要弥补这些不足,必须从根本上进行重新设计。如果说Dal1.0是为易用性而设计,那么Dal2x就是为性能、可用性等等而设计。4IMobiJe手机之康mEiwpw!1黑SLim/-.I11,丄it*
12、Ii11手机之康Dal的发展Dal的发展-Dal21.x大图怠WS,.Dal的发展-DalServer21.x大图DALPDal的发展-Dal21.x在手机之家系统中的位置MySQL应用I读写数据写消息Dal2.1.x读写数据M3每分钟调一次发送更新任务消息队列服务搜索更新!客户端丿搜索索引服务L回调应用程序、内置消息队列Mobile手机之紊|Dal的发展-Dal2.1.x/Dall.O性能简单对比|Dal的发展-Dal2.1.x/Dall.O性能简单对比.*3喚琴.*3喚琴测试方法:每次涉及1个记录,循环10000次,每次涉及的记录都不相同。Dal21.xinsert:8.215306997
13、2992s,8.2881560325623s,8.2909779548645sdelete:8.928288936615s,8.4321990013123s,8.039489030838supdate:8.9594140052795s,7.6687839031219s,7.580326795578sselect:7.9645628929138s,3.0665209293365s,3.0304710865021sDal1.0insert:42.473783969879s,43.072340011597s,42.900885105133sdelete:25.484493017197s,25.382
14、812976837s,25.41899895668supdate:74.74593091011s,74.557103872299s,74.246424913406sselect:14.060505151749s,9.7374119758606s,6.5931770801544s.*3喚琴IDal的发展-Dal2.1.x/Dal1.0对比结果分析在增、删、改、查四类查询当中,Dal21x都比Dall0有了很大的提升。原因在于:减少了一次socket请求、采用了异步消息处理机制、弓I入连接池及优化了算法等等。Dal的发展-Dal21.x/Memcached简单性能对比测试方法Dal21.xMemc
15、ached1.4.2每次获取1个,循环10000次,每次获取的记录都不相冋10.839928150177s(全部不命中的情况)3.0760769844055s3.1021270751953s3.0667681694031s1.9119760990143s1.8506801128387s1.8564429283142s1.8201019763947s每次获取10000个,执行1次,所有的记录都不相同。0.64966702461243s0.55020594596863s0.52798008918762s0.57868385314941s0.28920984268188s0.288759946823
16、12s0.28748893737793s0.27671718597412sDaI的发展-Dal2.1.x/Memcached对比结果分析从时间消耗的数量级来看,DaI21.x和Memcachedl42属于同一个级别;从时间消耗的绝对值来看,DaI21x还是有一定的差距。那么这1/31/2的时间消耗都花在哪了?主要是在协议解析及查询分析上。|Dal的发展-Dal2.1.x的问题|Dal的发展-Dal2.1.x的问题|Da啲发展-Dal2.1.x的成效.*3喚琴以下是手机之家某个时刻4组Dal服务的缓存命中率统计快照:1)entryCacheHits=1999443615(96.53%)entry
17、CacheMisses=71820652(3.47%)2)entryCacheHits=728834651(82.44%)entryCacheMisses=155230407(17.56%)3)entryCacheHits=717269426(93.35%)entryCacheMisses=51101159(6.65%)4)entryCacheHits=217927450(74.06%)entryCacheMisses=76326220(25.94%)其中,2)组服务命中率低的原因是:上面跑的是论坛,全动态的,更新频繁;4)组服务命中率低的原因是:应用层又做了缓存了,到Da啲冷请求变多了。1)
18、Dal21.x采用的是内置缓存,而且存放的数据结构也不好(大量的Map及字符串),在缓存数据量大的情况下,JVM不堪重负,将进行频繁的GC。在高峰情况下,甚至会出现全GC,这时客户端connectiontimeout就频繁出现了2)不支持分布式事务。这使得在分片分布在多个库的情况下,数据的完整性得不到保证。而跨查询事务问题更是得不到解决。3)不能简单的支持数据库主从。4)缓存不能简单地进行外置。5)不好在高峰时段进行配置Reload。6)不管分不分片,都得写一大堆配置。7)内置消息队列占用太多内存。8)不能把dal作为嵌入式包来使用。Dal的发展-Dal22.x大图Dal的发展-Dal22.x大图数据库集群Cach#dDB#aCache#brDB#b1缓存集群DB#dDB#dIDa啲发展-Dal2.2.x重要变更IDa啲发展-Dal2.2.x重要变更1)自动生成条目(实体)类,用于缓存数据库记录。数据已经有了类型,同时有望缓解JVMGC问题。2)支持分布
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 骨盆骨折术后发热护理措施
- 鸟类自然笔记课件
- 金融科技的崛起与挑战试题及答案
- 把握学习节奏2024年特许金融分析师考试试题及答案
- CFA考试重点章节试题及答案
- 天津市四校联考2024-2025学年高二上学期期末语文试题(解析版)
- 山东省潍坊第七中学2024-2025学年高一下学3月考试语文卷·解析版
- 餐饮股东年终总结
- 提升CFA答题技能的试题及答案
- 2024年特许金融分析师考试网络资源试题及答案
- 《25 黄帝的传说》公开课一等奖创新教学设计及反思
- 脊柱关节外科个案护理
- 半导体芯片产品供应链分析
- 挑战杯调研报告正文
- 《天润乳业公司偿债能力存在的问题及对策9000字》
- 2025年高考数学复习解答题提优思路(新高考专用)专题08数列求和(奇偶项讨论求和)练习(学生版+解析)
- 国开(河北)2024年秋《现代产权法律制度专题》形考作业1-4答案
- 电动摩托车项目可行性实施报告
- 甲壳素、壳聚糖材料
- DB11T 485-2020 集中空调通风系统卫生管理规范
- 化学检验员(四级)理论考试题及答案
评论
0/150
提交评论