日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql为什么需要中间件_究竟为什么要引入数据库中间件

發布時間:2025/3/12 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql为什么需要中间件_究竟为什么要引入数据库中间件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不少朋友經常會問我以下問題:

58到家有沒有使用數據庫中間件

使用了什么數據庫中間件,是自研,還是第三方

怎么實現的,是基于客戶端的中間件,還是基于服務端的中間件

使用中間件后,join/子查詢/集函數/事務等問題是怎么解決的

你是不是也有類似的疑問?

然而,“究竟為什么要引入數據庫中間件”卻很少有人問及。“架構師之路”文章思路,以解決“為什么”為優先,借著近期撰寫互聯網分層架構系列文章,講一講這個核心問題:

究竟為什么要引入數據庫中間件

經過連續分層架構演進,DAO層,基礎數據服務化,通用業務服務化,前后端分離之后,一個業務系統的后端結構如上:

web-view層通過http接口,從web-data獲取json數據(前后端分離)

web-data層通過RPC接口,從biz-service獲取數據(通用業務服務)

biz-service層通過RPC接口,從base-service獲取數據(基礎數據服務)

base-service層通過DAO,從db獲取數據(DAO)

db存儲數據

隨著時間的推移,數據量會越來越大,base-service通過DAO來訪問db的性能會越來越低,需要開始考慮對db進行水平切分,一旦db進行水平切分,原來很多SQL可以支持的功能,就需要base-service層來進行特殊處理:

有些數據需要路由到特定的水平切分庫

有些數據不確定落在哪一個水平切分庫,就需要訪問所有庫

有些數據需要訪問全局的庫,拿到數據的全局視野,到service層進行額外處理

更具體的,對于前臺高并發的業務,db水平切分后,有這么幾類典型的業務場景及應對方案。特別強調一下,此處應對的是“前臺”“高并發”“db水平切分”的場景,對于后臺的需求,將通過前臺與后臺分離的架構處理,不在此處討論。

一:partition key上的單行查詢

典型場景:通過uid查詢user

場景特點:

通過patition key查詢

每次只返回一行記錄

解決方案:base-service層通過patition key來進行庫路由

如上圖:

user-service底層user庫,分庫patition key是uid

uid上的查詢,user-service可以直接定位到庫

二、非patition key上的單行查詢

典型場景:通過login_name查詢user

場景特點:

通過非patition key查詢

每次只返回一行記錄

解決方案1:base-service層訪問所有庫

如上圖:

user-service通過login_name先查全庫

結果集在user-service再合并,最終返回一條記錄

解決方案2:base-service先查mapping庫,再通過patition key路由

如上圖:

新建mapping庫,記錄login_name到uid的映射關系

當有非 patition key的查詢時,先通過login_name查詢uid

再通過patition key進行路由,最終返回一條記錄

解決方案3:基因法

關于“基因法”解決非patition key上的查詢需求詳見《分庫后,非patition key上訪問的多種解決辦法》。

三、patition key上的批量查詢

典型場景:用戶列表uid上的IN查詢

場景特點:

通過patition key查詢

每次返回多行記錄

解決方案1:base-service層訪問所有庫,結果集到base-service合并

解決方案2:base-service分析路由規則,按需訪問

如上圖:

base-service根據路由規則分析,判斷出有些數據落在庫1,有些數據落在庫2

base-service按需訪問相關庫,而不是訪問全庫

base-service合并結果集,返回列表數據

四、非patition key上的夸庫分頁需求

關于分庫后,夸庫分頁的查詢需求,詳見《業界難題,夸庫分頁的四種方案》。

五、其他需求…

本文寫到這里,上述一、二、三、四、五其實都不是重點,base-service層通過各種各樣的奇技淫巧,能夠解決db水平切分后的數據訪問問題,只不過:

base-service層的復雜度提高了

數據的獲取效率降低了

當需要進行db水平切分的base-service越來越多以后,此時分層架構會變成下面這個樣子:

底層的復雜性會擴散到各個base-service,所有的base-service都要關注:

patition key路由

非patition key查詢,先mapping,再路由

先全庫,再合并

先分析,再按需路由

夸庫分頁處理

這個架構圖是不是看上去很別扭?如何讓數據的獲取更加高效快捷呢?

數據庫中間件的引入,勢在必行。

這是“基于服務端”的數據庫中間件架構圖:

base-service層,就像訪問db一樣,訪問db-proxy,高效獲取數據

所有底層的復雜性,都屏蔽在db-proxy這一層

這是“基于客戶端”的數據庫中間件架構圖:

base-service層,通過db-proxy.jar,高效獲取數據

所有底層的復雜性,都屏蔽在db-proxy.jar這一層

結論:

當數據庫水平切分,base-service層獲取db數據過于復雜,成為通用痛點的時候,就應該抽象出數據庫中間件,簡化數據獲取過程,提高數據獲取效率,向上游屏蔽底層的復雜性。

任何脫離業務的架構設計,都是耍流氓。

“為什么”比“怎么樣”更重要。

閱讀前序文章,“分層架構設計”的背景與來龍去脈更加清晰:

若有收獲,隨手幫轉喲。

總結

以上是生活随笔為你收集整理的mysql为什么需要中间件_究竟为什么要引入数据库中间件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩一级片av| 我想看毛片 | 欧美一级做性受免费大片免费 | 天天弄天天干 | 毛片免费全部无码播放 | 欧美在线精品一区 | av我不卡 | 免费在线观看网址入口 | 天天色图片 | 亚洲免费色 | 日韩99 | 99久久久无码国产精品性色戒 | 国产私密视频 | 在线观看日韩国产 | 少妇高清精品毛片在线视频 | 亚洲色妞 | 韩国女主播一区二区 | 日韩理论在线 | 成人动漫在线免费观看 | 自拍偷拍视频网站 | 青草视频网 | 日韩三级在线 | 黄色男女网站 | 黄网址在线观看 | 欧美日韩一级黄色片 | 欧美午夜精品理论片a级按摩 | 久久www视频 | 男女免费看 | 国产福利一区二区视频 | 欧美春色| 性xx紧缚网站 | 欧美不卡 | 日本xxxxxxxxx | 久久久久久久久久久久97 | 久草高清视频 | 福利在线播放 | 调教撅屁股啪调教打臀缝av | 少妇一级淫免费播放 | 国产自产视频 | 国产欧美日韩三区 | 欧美性天堂 | 欧美性天天 | 久久av秘一区二区三区 | 黄色a免费 | 亚洲视频在线一区二区 | 久久成人在线观看 | 男人天堂视频网 | 免费看黄色一级视频 | 熟女少妇一区二区三区 | 国产精品久久久久久无人区 | 深爱激情五月婷婷 | av在线首页 | 成人丁香婷婷 | 永久免费看片 | 日韩av一区二区三区 | 玩弄少妇人妻 | 久久综合社区 | 夜夜夜夜骑 | 又黄又爽又色视频 | 天天综合天天添夜夜添狠狠添 | 有码中文| 生活片av | av在线a| 亚洲熟女综合色一区二区三区 | 少妇无套内谢久久久久 | 国产亚州av| 亚洲精品激情 | 国产伦精品一区二区三区视频黑人 | 亚洲AV成人无码久久精品同性 | 秋霞国产精品 | 少妇一级淫片免费看 | 黄色av免费| 一二三av| 99热影院 | 久草免费在线观看 | 欧美综合在线视频 | 天堂av成人 | 大尺度做爰啪啪床戏 | 国产午夜精品久久久久久久久久 | 二区三区在线观看 | 九色视频在线观看 | 欧洲黄色片 | 午夜黄色剧场 | 亚洲高清中文字幕 | 伊人久久九 | 国产精品久久不卡 | 舒淇裸体午夜理伦 | 91涩漫成人官网入口 | 久久超碰在线 | 五月婷婷欧美 | 亚洲熟妇一区二区 | 国产在线激情视频 | 在线看网站 | 亚洲精品喷潮一区二区三区 | 不卡一二三 | 日韩中文字幕av电影 | 亚洲一区二区三区在线免费观看 | 亚洲一区欧美激情 | 日本国产精品视频 |