日韩性视频-久久久蜜桃-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为什么需要中间件_究竟为什么要引入数据库中间件的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲精品国产成人无码 | 91视频免费看 | 三级黄色av | 神马午夜我不卡 | 欧美视频在线观看一区 | 国产伦精品一区二区三区视频黑人 | aa黄色片 | 成人在线播放网站 | 国产aⅴ激情无码久久久无码 | 久草视频福利 | 久久久夜色精品亚洲 | 精品三级视频 | 一区二区在线视频 | 福利视频一区 | 我要看免费黄色片 | a毛片在线免费观看 | 毛片女人| 久久精品aⅴ无码中文字字幕重口 | 一区二区三区免费在线观看 | 激情欧美一区二区 | 国产高清黄色 | 亚洲色欧美另类 | 欧美精品一区二区在线观看 | 一级片观看 | 日韩美女福利视频 | 99热播| 最新视频在线观看 | 成年人免费在线观看网站 | 国产精品第100页 | 永久免费汤不热视频 | 日韩两性视频 | 久久五| 校园春色中文字幕 | 国产精品女人久久久 | 久久免费视频网站 | 亚洲av成人一区二区 | 天天曰| 黑人精品无码一区二区三区 | 天堂中文在线网 | 欧美日韩亚洲天堂 | 国产在线精品自拍 | 欧美视频一区在线观看 | 日本一区二区三区网站 | 久久99久| 中文一区在线 | 啪啪啪毛片 | 91蜜桃视频 | 国产精品久久久国产盗摄 | 成人小视频免费观看 | 亚洲性少妇 | 一区二区三区四区中文字幕 | 亚洲熟妇无码一区二区三区导航 | 精品国精品国产自在久不卡 | xxxxhdvideos| 日韩欧美视频二区 | 日韩欧美中字 | 国产五十路 | 黄色三级视频 | 免费欧美一区 | 四虎午夜影院 | 国产中文欧美日韩在线 | 永久黄网站 | 小柔好湿好紧太爽了国产网址 | 懂色aⅴ国产一区二区三区 亚洲欧美国产另类 | 国产无遮挡又黄又爽又色视频 | 日韩一区二区在线观看视频 | 天天摸天天射 | 木木影院| mm131亚洲精品| 婷婷五月综合久久中文字幕 | 色免费视频 | 亚洲综合色婷婷 | 天天操夜夜草 | 欧美一区视频 | 岛国毛片在线观看 | 亚洲播播| 99久久国产免费 | 欧美人与禽猛交乱配 | 北条麻妃一区二区三区在线观看 | 国产成人av在线 | 国产精品久久久久桃色tv | 欧美黄色网| 精品在线观看一区 | 亚洲欧美一区二区精品久久久 | 日本黄色录象 | 99国产精品久久久久 | 91人人看 | 精品爆乳一区二区三区无码av | 8x8ⅹ国产精品一区二区二区 | 亚洲一区在线看 | 肉色超薄丝袜脚交一区二区图片 | 男人的天堂手机在线 | 麻豆成人在线视频 | 99久久婷婷国产一区二区三区 | 亚洲一区精品在线观看 | 亚洲中文字幕第一区 | 在线免费91| 亚色图 | 精品久久久av |