雲相關 雲資料庫拆分

2022-09-21 15:30:13 字數 899 閱讀 1615

# 資料庫水平垂直拆分

當資料庫量非常大的時候,db 已經成為系統瓶頸時就可以考慮進行水平垂直拆分了。

## 水平拆分

一般水平拆分是根據表中的某一欄位(通常是主鍵 id )取模處理,將一張表的資料拆分到多個表中。這樣每張表的表結構是相同的但是資料不同。

不但可以通過 id 取模分表還可以通過時間分表,比如每月生成一張表。

按照範圍分表也是可行的:一張表只儲存 `0~1000w`的資料,超過只就進行分表,這樣分表的優點是擴充套件靈活,但是存在熱點資料。

按照取模分表拆分之後我們的查詢、修改、刪除也都是取模。比如新增一條資料的時候往往需要一張臨時表來生成 id,然後根據生成的 id 取模計算出需要寫入的是哪張表(也可以使用[分布式 id 生成器](distributed/id-generator.md)來生成 id)。

分表之後不能避免的就是查詢要比以前複雜,通常不建議 `join` ,一般的做法是做兩次查詢。

## 垂直拆分

當一張表的字段過多時則可以考慮垂直拆分。

通常是將一張表的字段才分為主表以及擴充套件表,使用頻次較高的字段在一張表,其餘的在一張表。

這裡的多表查詢也不建議使用 `join` ,依然建議使用兩次查詢。

## 拆分之後帶來的問題

拆分之後由一張表變為了多張表,乙個庫變為了多個庫。最突出的乙個問題就是事務如何保證。

### 兩段提交

### 最終一致性

如果業務對強一致性要求不是那麼高那麼最終一致性則是一種比較好的方案。

通常的做法就是補償,比如 乙個業務是 a 呼叫 b,兩個執行成功才算最終成功,當 a 成功之後,b 執行失敗如何來通知 a 呢。

比較常見的做法是 失敗時 b 通過 mq 將訊息告訴 a,a 再來進行回滾。這種的前提是 a 的回滾操作得是冪等的,不然 b 重**訊息就會出現問題。

雲資料庫如何通過外網連線?如何連線雲資料庫?

linux系統 1.準備環境 雲伺服器 193.112.1.43 公 172.16.0.23 內 雲資料庫pgsql 內網 172.16.32.98 5432 同一私有網路,缺省內網互通 2.雲伺服器上做如下 iptables t nat a prerouting d 172.16.0.23 p t...

搜雲資料庫查詢

1。解壓 zip.001,zip.002壓縮檔案,總共30g 使用命令將兩個壓縮檔案合成1個然後再解壓就可以了 2。安裝sql server2012,注意,不能express版本,因為總共資料庫有130g,而express最大限制是10g 此外,要保證安裝sql sever的硬碟有那麼大的空間 資料...

雲資料庫使用流程

在阿里雲上購買產品,在這裡我用的是雲資料庫rds mysql版本 按照 檢視快速入門mysql版,進行建立例項和初始化配置 命令列登入雲資料庫 mysql h 內 外網位址 p 埠號 u 使用者名稱 p 4 在python連線雲資料庫 db mysql.connector.connect host ...