解決問題:數據庫分表可以解決單表海量數據的查詢性能問題,分庫可以解決單台數據庫的並發訪問壓力問題
應用場景:在沒分庫分表情況下當訂單表數量超過1000萬條以上,我們需要對訂單表按照業務進行分庫分表(當超過500萬條數據數據庫查詢用索引效率大大下降)
技術方案:一般都采用第三方工具,當當網的sharding-jdbc,阿里TDDL、mycat和Cobar等插件
數據分表實現策略:一般采用業務進行分,比如訂單表,如果是用戶訂單那么按照用戶id后兩位(當數據量不是很大情況下)取模存到不同的數據庫表中,如果是商家訂單那么按照商家id后兩位(當數據量不是很大情況下)取模存到不同的數據庫表中
數據庫環境:一般采用一個主機(或者多個,公司有錢),安裝多個數據庫,設置不同數據庫端口而已,就是一個阿里雲服務器上裝多個數據庫不同端口而已
主從復制:一般采用主從復制,新增和修改都在主庫,查詢都是在從庫中,一般一對多
分庫分表查詢:當訂單頁面需要根據會員姓名、手機號碼、訂單號、下單開始時間、下單結束時間等等,設計到多個模塊一起關聯查詢時,
采用如下方案:
1.對不可變字段做沉余,方便查詢,比如用戶姓名,在金融平台用戶實名后姓名不能更改.
2.根據阿里規則:各個模塊不要做關聯查詢,避免join。比如:上述訂單表查詢,首先到會員數據庫中查詢,然后在到訂單表中查詢。
規則:既然分庫分表就不要join查詢。
重點:(1).一般會員id使用UUID,那么首先要進行hash獲取到整數值,然后進行去模操作
(2).所有數據根據數據庫表數量進行取模
(3).必須對數據庫查詢關鍵字段添加索引,提高查詢效率
————————————————
版權聲明:本文為CSDN博主「工作QQ感冒的石頭」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_39291929/article/details/80795221