




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
數(shù)據(jù)庫中間件架構設計和實現(xiàn)技術中心·架構部羅立樹關于我易寶支付核心開發(fā)阿里巴巴商品線(內部統(tǒng)稱Offer,基于Cobar)服務化落地負責人,中文站開放平臺負責人京東網(wǎng)站交易部架構師百度高級開發(fā)工程師,負責LBS地圖商戶中心架構和團購架構方面的工作Contents一些概念讀寫分離?HA(高可用性)?分庫分表?事務和分布式事務?數(shù)據(jù)一致性?數(shù)據(jù)庫性能關鍵點?CAP理論帶著疑問思考假如你來設計一套中間件你會怎么設計?你認知的數(shù)據(jù)庫中間件都有哪些?他們相對于我們的解決方案都有哪些優(yōu)點???Contents現(xiàn)狀中間件解決的問題簡化開發(fā),降低分庫分表復雜度分庫分表透明化統(tǒng)一配置管理提供監(jiān)控鏈接管理HA支持LoadBlance支持提供更好的擴展能力中間件解決的問題Contents實現(xiàn)方式應用硬編碼實現(xiàn)DAL封裝(或者ORM封裝)JDBC基于Mysql客戶端協(xié)議基于客戶端的訪問模式Mysql協(xié)議訪問模式實現(xiàn)方式比較比較項DAL方式ORM方式JDBC客戶端方式mysql協(xié)議方式實現(xiàn)難度低中高較高應用代碼復雜度高無無無性能高高高中透明性支持糟糕良好良好很好運維健壯性很好很好很好較弱部署結構復雜度輕量級輕量級輕量級較重耦合問題和業(yè)務代碼耦合和框架耦合和jdbc版本耦合和mysql客戶端交互協(xié)議版本耦合,數(shù)據(jù)庫&協(xié)議升級問題數(shù)據(jù)庫版本關聯(lián)數(shù)據(jù)庫無關數(shù)據(jù)庫無關數(shù)據(jù)庫無關僅局限mysql擴展能力較復雜良好良好良好線上修改影響范圍小小小大跨語言支持難度大難度大難度大容易數(shù)據(jù)庫服務器連接較多較多較多較少單庫事務支持支持支持支持不支持分布式事務支持,性能差支持,性能差支持,性能差不支持方案選擇方案選擇解析沒有完美的解決方案,只有適合的方案公司現(xiàn)狀:90%以上應用是java代碼成本考慮:輕量級使用物理成本低項目進度考慮:有一個快速的實現(xiàn),逐步完善系統(tǒng)健壯性考慮:基于代理的方案健壯性差一些開發(fā)難度(人力成本):基于mysql協(xié)議的開發(fā)難度較大,不可控集群性能上考慮基于mysql協(xié)議的可以引入,但是方案上存在架構中心化的缺陷Contents功能規(guī)劃設計的原則模塊化職責分離支持封裝和擴展…相關課題比較大,可以在下一次分享中講述用戶視覺常用分庫分表的方式schema表名實例相同不同相同不同不同相同相同相同不同不同相同不同相同不同不同不同不同不同路由的方式ID段(range)Hash(mod)時間其他方式……領域對象BatchItem每一條語句的執(zhí)行當做一個batch項Function分庫分表路由規(guī)則Interceptor攔截器Executorsql執(zhí)行器Merger結果合并處理器NodeAnalyzersql語法節(jié)點分析器Transaction事務抽象NameNode分表namenode抽象DataNode數(shù)據(jù)訪問節(jié)點抽象…….分庫分表的策略/***常用的方式有:*1.基于ID段的*2.基于hash的*3.按日期等*@authorluolishu
*/publicinterfaceFunction{/***執(zhí)行方法返回下標*@paramparameterskey為字段名,大寫開頭,value為字段在sql中的值*@returnnamenode的下標*/intexecute(intsize,Map<String,Object>parameters);}并行Query支持支持寫入,更新,查詢到多個庫和表的同一線程操作事務支持支持單庫事務不支持分布式事務(簡單支持)結果合并單庫單表查詢的不需要合并不帶分庫分分表字段:
聚集函數(shù)
groupby
orderby…limit
having
Join支持語句:Select*fromt_userujoint_cityconu.city_id=c.idwhereuser_id=‘luolishu’約束:不支持跨庫join,被join的表要保證所有數(shù)據(jù)一致性嵌套查詢Select*fromt_userwheret_city_idin(selectidfromt_citywherecountry=‘china’)嵌套查詢-約束約束:不支持跨庫,被子查詢的表要保證所有數(shù)據(jù)一致性聚集函數(shù)Selectmin(id),max(age),avg(age),sum(age),count(age)fromt_user;聚集函數(shù)-解析idagename112chen315li517huang722huangidagename216zhang419liu632chen866huang122?664266?133416624.87501998mergeAvg(age)=sum(age)/count(age)SELECTMIN(id),MAX(age),AVG(age),SUM(age),COUNT(age)FROMt_user1SELECTMIN(id),MAX(age),AVG(age),SUM(age),COUNT(age)FROMt_user2聚集函數(shù)-使用約束目前僅僅支持min,max,avg,count,sumGroupby中用到聚集函數(shù),需要在結果中出現(xiàn)(今后可以考慮自動補全)Groupby語句:Selectmin(id),max(age),avg(age),sum(age),count(age),namefromt_userGroupbyname;Groupby-解析idagename112chen315li517huang722huangidagename216zhang419liu632chen866huang112?121chen522?392huang315?151li632?321chen866?661huang419?191liu216?161zhang13222442chen566351053huang31515151li41919191liu21616161zhangmergeGroupby-使用約束groupby字段需要出現(xiàn)在結果集里DISTINCTDistinct=groupby所有resultcolumnOrderbySelectmin(id)asmin,max(age),avg(age),sum(age),count(age),namefromt_userGroupbynameOrderbymin;Orderby-解析idagename112chen315li517huang722huangidagename216zhang419liu632chen866huang112chen315li517huang722huang112chen315li216zhang517huang419liu722huang632chen866huangmerge216zhang419liu632chen866huangGroupby語句:Selectmin(id),max(age),avg(age),sum(age),count(age),namefromt_userGroupbynameOrderbynameLimit5Groupby,Orderby,limit-解析idagename112chen315li517huang722huangidagename216zhang419liu632chen866huang11212121chen52219.5392huang31515151li63232321chen86666661huang41919191liu13222442chen566351053huang31515151limergeLimit…offsetSelectmin(id)asmin,max(age),avg(age),sum(age),count(age),usernamefromt_userGroupbyusernameOrderbyminlimit10offset100;Limit…offset使用建議避免往后翻頁比較多的查詢涉及到翻頁需求,可以考慮走外部索引(search、cache或者索引表等)Having…Selectavg(age),namefromt_userhavingavg(age)>30約束條件:having中的條件字段必須要出現(xiàn)在結果集中Groupby,Orderby,limit-解析idagename112chen315li517huang722huangidagename216zhang419liu632chen866huang?chen112?huang239?li11532chen13266huang16619liu11916zhang11635huangmergeSelectavg(age),namefromt_user1groupbynameSelectavg(age),namefromt_user2groupbyname22chen24435huang310515li11519liu11916zhang116having使用約束總結避免join避免子查詢避免跨庫不使用分布式事務,盡量強調最終一致性分頁不要取offset較大的值Group,orderby,having等條件必須要出現(xiàn)在結果集里ContentsGO語言+MysqlC++lib數(shù)據(jù)層訪問虛擬化支持redis,mongodb,文件等存儲方式Contents5分鐘完成分庫分表ContentsMaven依賴<dependency><groupId>com.bj58</groupId><artifactId>oceanus-client</artifactId><version>0.0.1-SNAPSHOT</version></dependency>接入方式公司內部組件:core、dao基于datasource標準修改DAO依賴版本<dependency><groupId>com.bj58.spat</groupId><artifactId>com.bj58.spat.dao</artifactId><version>2.0.0-SNAPSHOT</version></dependency>修改Core依賴版本<dependency><groupId>com.bj58.spat</groupId><artifactId>com.bj58.spat.core</artifactId><version>2.0.3-SNAPSHOT</version></dependency>修改datasourceDataSourcedataSource=newDataSourceWrapper(ds);配置項<bean/><threadpool/><datanode/><namenode/><table/><bean/>配置屬性:id—唯一標識class—bean的實現(xiàn)類<bean/>配置示例<beanid="function1"class="com.bj58.oceanus.core.shard.HashFunction"/><threadpool/>配置屬性:id—線程池唯一標識size—線程池大小<threadpool/>配置示例<threadpoolid=“default”size=“50”/>默認線程池,可以不配<threadpoolid=“userThreadPool”size=“500”/>指明線程池<datanode/>配置屬性:id—唯一屬性標識slaves—從屬節(jié)點parent—父ID
子屬性采用名字標識當做key<datanode/>配置示例<datanodeid="datanode1"><url><![CDATA[jdbc:mysql://localhost:3306/showcase?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull]]></url><username>root</username><password>123456</password><driverClassName>com.mysql.jdbc.Driver</driverClassName><initialSize>5</initialSize><maxActive>20</maxActive><maxWait>6000</maxWait><maxIdle>3</maxIdle></datanode><datanode/>配置示例—繼承<datanodeid="datanode3"slaves="datanode3"parent="datanode1"><url><![CDATA[jdbc:mysql://localhost:3306/showcase?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull]]></url></datanode><namenode/>配置屬性:id—唯一標識
loadbalance—負載均衡策略<namenode/>配置示例<namenodeid="abstract"loadbalance=""><datanodes><datanoderef="writenode1"access-mode="READ-WRITE"weight="10"/><datanoderef="writenode2"access-mode="READONLY"weight="10"/><datanodeid="datanode111"><url><![CDATA[jdbc:mysql://localhost:3306/showcase?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull]]></url><username>root</username><password>123456</password><driverClassName>com.mysql.jdbc.Driver</driverClassName><initialSize>5</initialSize><maxWait>60000</maxWait><maxIdle>150</maxIdle></datanode></datanodes></namenode><table/>配置屬性:
name:抽象出的數(shù)據(jù)庫表differ-name:是否生成表名
threadpool:指定線程池
columns:分庫分表字段
<table/>配置示例1<tablename="t_user"differ-name="true"threadpool="id"><columns><columnname="id"/></columns><namenodesrange="1-2"ref="abstract"/>
<functiontype="script"language="javascript">if($ID==1||$ID==3||$ID==5||$ID==7){return0;}else{return1;}</function></table>分庫分表策略實現(xiàn),這里采用javascript的方式返回namenode的下標,下標從0開始分庫分表字段配置<table/>配置示例2<tablename="users2"differ-name="true"threadpool="id"><columns><columnname="id"/></columns><namenodes><namenoderef="users1"tablename="t_user1"/>
<namenodeid="users22"tablename="t_user2"schema="showcase2"><datanodes><datanodeid="datanode141"><url><![CDATA[jdbc:mysql://localhost:3306/showcase?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull]]></url>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度國際貿易知識產權傭金協(xié)議
- 二零二五年度分手補償協(xié)議書及子女教育費用承擔
- 2025年度股份代持股份占比調整合同協(xié)議書模板
- 2025年度酒店餐飲服務兼職員工合同
- 二零二五年度隱名股東股權轉讓及管理權移交協(xié)議
- 二零二五年度足療養(yǎng)生店轉讓與品牌授權使用合同
- 二零二五年度學校食堂租賃協(xié)議書(含智能點餐系統(tǒng)建設)
- 二零二五年度文化旅游項目介紹費合作協(xié)議書
- 初中校長發(fā)言稿
- 安全教育領導發(fā)言稿
- 2024年大學英語四級詞匯和語法全真模擬試題及答案(共六套)
- 人工智能崗位招聘筆試題及解答(某大型央企)2025年
- 緊急停車按鈕的安全設置要求
- 2024年玩具陀螺項目可行性研究報告
- 城區(qū)綠地養(yǎng)護服務費項目成本預算績效分析報告
- v建筑主墩雙壁鋼圍堰施工工藝資料
- 新部編人教版六年級道德與法治下冊全冊全套課件
- 我國互聯(lián)網(wǎng)公司資本結構分析-以新浪公司為例
- 【藍天幼兒園小一班早期閱讀現(xiàn)狀的調查報告(含問卷)7800字(論文)】
- 糧油機械設備更新項目資金申請報告-超長期特別國債投資專項
- 個體戶的食品安全管理制度文本
評論
0/150
提交評論