拆分資料庫有以下優點:
1.便於資料備份,拆分後的資料庫,只需要備份後端資料庫就行了。
2.便於程式公升級與維護,當主程式功能改進時,只需要替換前端程式就行了。
垂直(縱向)拆分:是指按功能模組拆分,比如分為訂單庫、商品庫、使用者庫...這種方式多個資料庫之間的表結構不同。
水平(橫向)拆分:將同乙個表的資料進行分塊儲存到不同的資料庫中,這些資料庫中的表結構完全相同。
▲(縱向拆分)
▲(橫向拆分)
1,實現原理:使用垂直拆分,主要要看應用型別是否合適這種拆分方式,如系統可以分為,訂單系統,商品管理系統,使用者管理系統業務系統比較明的,垂直拆分能很好的起到分散資料庫壓力的作用。業務模組不明晰,耦合(表關聯)度比較高的系統不適合使用這種拆分方式。但是垂直拆分方式並不能徹底解決所有壓力問題,例如 有乙個5000w的訂單表,操作起來訂單庫的壓力仍然很大,如我們需要在這個表中增加(insert)一條新的資料,insert完畢後,資料庫會針對這張表重新建立索引,5000w行資料建立索引的系統開銷還是不容忽視的,反過來,假如我們將這個表分成100個table呢,從table_001一直到table_100,5000w行資料平均下來,每個子表裡邊就只有50萬行資料,這時候我們向一張只有50w行資料的table中insert資料後建立索引的時間就會呈數量級的下降,極大了提高了db的執行時效率,提高了db的併發量,這種拆分就是橫向拆分
2,實現方法:垂直拆分,拆分方式實現起來比較簡單,根據表名訪問不同的資料庫就可以了。橫向拆分的規則很多,這裡總結前人的幾點,
(1)順序拆分:如可以按訂單的日前按年份才分,2023年的放在db1中,2023年的db2,以此類推。當然也可以按主鍵標準拆分。
優點:可部分遷移
缺點:資料分布不均,可能2023年的訂單有100w,2023年的有500w。
(2)hash取模分: 對user_id進行hash(或者如果user_id是數值型的話直接使用user_id的值也可),然後用乙個特定的數字,比如應用中需要將乙個資料庫切分成4個資料庫的話,我們就用4這個數字對user_id的hash值進行取模運算,也就是user_id%4,這樣的話每次運算就有四種可能:結果為1的時候對應db1;結果為2的時候對應db2;結果為3的時候對應db3;結果為0的時候對應db4,這樣一來就非常均勻的將資料分配到4個db中。
優點:資料分布均勻
缺點:資料遷移的時候麻煩;不能按照機器效能分攤資料 。
(3)在認證庫中儲存資料庫配置
就是建立乙個db,這個db單獨儲存user_id到db的對映關係,每次訪問資料庫的時候都要先查詢一次這個資料庫,以得到具體的db資訊,然後才能進行我們需要的查詢操作。
優點:靈活性強,一對一關係
缺點:每次查詢之前都要多一次查詢,會造成一定的效能損失。
資料庫方面
1.儲存過程和函式的區別 儲存過程是使用者定義的一系列sql語句的集合,涉及特定表或其它物件的任務,使用者可以呼叫儲存過程,而函式通常是資料庫已定義的方法,它接收引數並返回某種型別的值並且不涉及特定使用者表。2.事務是什麼?事務是作為乙個邏輯單元執行的一系列操作,乙個邏輯工作單元必須有四個屬性,稱為...
資料庫方面
一 分頁 1.mysql的分頁查詢 sql 可以是單錶的查詢語句,也可以是多表的聯合查詢語句 firstindex 其實的索引 pagesize 每頁顯示的記錄數 select o.from sql o limit firstindex,pagesize 示例如下 select from t ani...
資料庫方面常見面試題
1 說出資料連線池的工作機制是什麼 j2ee 伺服器啟動時會建立一定數量的池連線,並一直維持不少於此數目的池連線。客戶端程式需要連線時,池驅動程式會返回乙個未使用的池連線並將其表記為忙。如果當前沒有空閒連線,池驅動程式就新建一定數量的連線,新建連線的數量有配置引數決定。當使用的池連線呼叫完成後,池驅...