資料庫水平垂直拆分
當資料庫量非常大的時候,db已經成為系統瓶頸時就可以考慮進行水平垂直拆分了。
水平拆分
一般水平拆分是根據表中的某乙個字段(主鍵id)進行取模處理,將表中的資料拆到多張表裡,這樣每張表的結構相同但資料不同。
不但可以根據id取模分表也可以按時間分表,比如每月生成一張表。 按照範圍分表也是可行的:一張表只儲存0~1000w
的資料,超過只就進行分表,這樣分表的優點是擴充套件靈活,但是存在熱點資料。
按照取模分表拆分後我們的查詢、修改、刪除也都是取模,比如新增一條資料的時候往往需要一張臨時表來生成 id,然後根據生成的 id 取模計算出需要寫入的是哪張表(也可以使用分布式 id 生成器來生成 id)。
分表之後不能避免的就是查詢要比以前複雜,通常不建議join,一般的做法是兩次查詢,
垂直拆分
當一張表的字段過多時可以考慮垂直拆分,通常是將一張表的字段拆分成主表以及擴充套件表,使用頻次較高的字段在一張表,其餘的在一張表,這裡的多表查詢也不建議使用join,依然建議使用兩次查詢,
拆分之後由一張表變為了多張表,乙個庫變為了多個庫。最突出的乙個問題就是事務如何保證。
如果業務對強一致性要求不是那麼高那麼最終一致性則是一種比較好的方案。
通常的做法就是補償,比如 乙個業務是 a 呼叫 b,兩個執行成功才算最終成功,當 a 成功之後,b 執行失敗如何來通知 a 呢。
比較常見的做法是 失敗時 b 通過 mq 將訊息告訴 a,a 再來進行回滾。這種的前提是 a 的回滾操作得是冪等的,不然 b 重**訊息就會出現問題。
資料庫拆分
一 水平切分是指,以某個欄位為依據 例如id 按照一定規則 例如取模 將乙個庫 表 上的資料拆分到多個庫 表 上,以降低單庫 表 大小,達到提公升效能的目的的方法,水平切分後,各個庫 表 的特點是 1 每個庫 表 的結構都一樣 2 每個庫 表 的資料都不一樣,沒有交集 3 所有庫 表 的並集是全量資...
資料庫拆分
1.第一步 採用分布式快取redis memcached等降低對資料庫的讀寫操作 2.第二步 如果快取使用過後,資料庫訪問量還是非常大,可以考慮資料庫讀寫分離原則。3.第三步 當我們使用讀寫分離 快取後 資料庫的壓力還是很大的時候,這就需要使用資料庫的拆分了。乙個資料庫由很多表構成,每個表對應著不同...
資料庫的拆分
使用者主表 現在要從裡面每50w資料拆分成乙個新錶,首先查詢符合要求的使用者的資料量 得到需要建表的數量 然後用開始迴圈建表存資料 this sql select count fid from t banlong push regdev where fdevice 0 and ftoken echo...