mysql 表与表之间的条件比对_Mysql分库分表面试题(mysql高可用方案解析)
數據庫數據過大的系統架構-mysql分庫分表高可用
如果當你的數據量達到千萬級,億級的時候,我們用常規的方式去做優化那么效果可能就不是很好了。這已經不是說性能的問題了,而是數據量響應的處理問題了,所以我們需要針對根本的問題去使用對應的技術去進行徹底的解決
如果對于這塊技術內容不是很熟悉的話,或者沒有去真正接觸到這樣的一個大項目實戰,那么你在面試的時候你可能就只能答出一些技術名詞來了,而有一些解決方案,細節問題你可能就答不上來了,可能你就嗝屁了。
1.目前準備做數據庫水平切分,需要注意什么關鍵問題?目前了解需要避免跨庫事務。
答:(1)需要注意分庫patition key的選取,要保證兩個均衡:數據量的均衡,請求量的均衡。
(2)庫后,需要注意分之前用SQL滿足的需求是否還能滿足,需要怎么改進滿足,例如max, min, avg, sum都需要在服務層再做一次聚合。
(3)夸庫事務,分布式事務,在吞吐量是主要矛盾的互聯網場景,目前沒有能夠很好解決的方案,盡量避免。
2.如果分庫分表的情況下碰到要對一個表或多個表關聯并且按多個字段為條件進行檢索的情況下怎么辦呢?
答:分庫后join怎么辦:
(1)前端用戶側業務,流量大,并發大,join真的很少,58同城用戶庫幾億數據,帖子庫300億數據,沒有join。
(2)如果真要join,分庫后冗余數據、索引表、分頁,for循環低效查詢 -> 總能解決的,只是看性能是不是主要矛盾、一致性是不是主要矛盾了。
(3)拆成小sql是互聯網的玩法,互聯網很少用join、子查詢、視圖、外鍵、用戶自定義函數、存儲過程的。當然,我指面向用戶側的高并發業務。
如果你對于索引的優化還不是非常了解的話,也可以看看以下我整理的mysql索引面試題
IT架構師luke:Mysql索引面試題(精品)?zhuanlan.zhihu.com3.采用hash取模方式的表擴容策略及采用一致性hash分表的表擴容策略如何實現?
答:數據庫水平切分的方式,常用的有兩種:
(1)hash取模:user_id%2=0為0庫,user_id%2=1為1庫。
(2)數據分段:user_id屬于[0, 1億]為0庫,屬于[1億, 2億]為2庫。
方案一
優點:簡單、數據均衡、負載均衡。
缺點:擴容困難,要遷移數據,%2變%3麻煩。
方案二
優點:簡單、數據均衡、擴容簡單。
缺點:負載不均衡,大號段的庫往往壓力更大。
大部分互聯網公司使用方案一。
4.設定網站用戶數量在千萬級,但是活躍用戶數量只有1%,如何通過優化數據庫提高活躍用戶訪問速度?
答:(1)可以使用MySQL的分區,把活躍用戶分在一個區,不活躍用戶分在另外一個區,本身活躍用戶區數據量比較少,因此可以提高活躍用戶訪問速度。
(2)還可以水平分表,把活躍用戶分在一張表,不活躍用戶分在另一張表,可以提高活躍用戶訪問速度。
5.分庫分表之后,id 主鍵如何處理
(1)數據庫自增 id
這個就是說你的系統里每次得到一個 id,都是往一個庫的一個表里插入一條沒什么業務含義的數據,然后獲取一個數據庫自增的一個 id。拿到這個 id 之后再往對應的分庫分表里去寫入。
(2)設置數據庫 sequence 或者表自增字段步長
可以通過設置數據庫 sequence 或者表的自增字段步長來進行水平伸縮。
6.現在有一個未分庫分表的系統,未來要分庫分表,如何設計才可以讓系統從未分庫分表動態切換到分庫分表上?
答:雙寫遷移方案。同時寫倆庫,老庫和新庫。然后系統部署之后,新庫數據差太遠,用之前說的導數工具,跑起來讀老庫數據寫新庫,寫的時候要根據 gmt_modified 這類字段判斷這條數據最后修改的時間,除非是讀出來的數據在新庫里沒有,或者是比新庫的數據新才會寫。導完一輪之后,有可能數據還是存在不一致,那么就程序自動做一輪校驗,比對新老庫每個表的每條數據,接著如果有不一樣的,就針對那些不一樣的,從老庫讀數據再次寫。反復循環,直到兩個庫每個表的數據都完全一致為止。
7.你們具體是如何對數據庫如何進行垂直拆分或水平拆分的?
一般來說,垂直拆分,你可以在表層面來做,對一些字段特別多的表做一下拆分;水平拆分,你可以說是并發承載不了,或者是數據量太大,容量承載不了,拆了,按什么字段來拆。分表,你如果哪怕是拆到每個庫里去,并發和容量都ok了,但是每個庫的表還是太大了,那么你就分表,將這個表分開,保證每個表的數據量并不是很大。
8.分庫分表的拆分方式有?他們分別主要解決什么問題?
(1)水平切分,主要解決單表過大造成的性能問題,單表過大造成的單服務器空間問題。
(2)垂直切分,主要解決表與表之間資源爭用問題,鎖爭用機率小,實現核心與非核心的分級存儲,如UDB登陸庫拆分成一級二級三級庫,數據庫同步壓力問題。
如果你喜歡我寫的技術文章以及面試總結,歡迎關注收看我的視頻,并且點贊、收藏、關注我哦。
IT架構師luke:Redis面試題(BAT大廠真題)?zhuanlan.zhihu.com我是luke,感謝你的關注!
IT架構師luke:laravel面試題(全網最全必考面試題)?zhuanlan.zhihu.comIT架構師luke:分布式消息中間件-RabbitMQ面試題(必問)?zhuanlan.zhihu.com據說點贊,喜歡,收藏了的小伙伴面試必過,拿到心儀offer!
面試系列文章,視頻,簡歷集體上線,距離漲薪,心儀offer就差一步,你還在等什么?
知乎視頻?www.zhihu.com總結
以上是生活随笔為你收集整理的mysql 表与表之间的条件比对_Mysql分库分表面试题(mysql高可用方案解析)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全新的企业通讯软件 FreeEIM 2.
- 下一篇: vc6怎么看错误在哪_周杰伦超话第一!微