国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MYSQL數據庫數據拆分之分庫分表總結

2024-07-24 12:53:56
字體:
來源:轉載
供稿:網友

數據存儲演進思路一:單庫單表

單庫單表是最常見的數據庫設計,例如,有一張用戶(user)表放在數據庫db中,所有的用戶都可以在db庫中的user表中查到。

數據存儲演進思路二:單庫多表

隨著用戶數量的增加,user表的數據量會越來越大,當數據量達到一定程度的時候對user表的查詢會漸漸的變慢,從而影響整個DB的性能。如果使用mysql, 還有一個更嚴重的問題是,當需要添加一列的時候,mysql會鎖表,期間所有的讀寫操作只能等待。

可以通過某種方式將user進行水平的切分,產生兩個表結構完全一樣的user_0000,user_0001等表,user_0000 + user_0001 + …的數據剛好是一份完整的數據。

數據存儲演進思路三:多庫多表

         隨著數據量增加也許單臺DB的存儲空間不夠,隨著查詢量的增加單臺數據庫服務器已經沒辦法支撐。這個時候可以再對數據庫進行水平區分。

Mysql數據庫分庫分表規則

         設計表的時候需要確定此表按照什么樣的規則進行分庫分表。例如,當有新用戶時,程序得確定將此用戶信息添加到哪個表中;同理,當登錄的時候我們得通過用戶的賬號找到數據庫中對應的記錄,所有的這些都需要按照某一規則進行。
路由

         通過分庫分表規則查找到對應的表和庫的過程。如分庫分表的規則是user_id mod 4的方式,當用戶新注冊了一個賬號,賬號id的123,我們可以通過id mod 4的方式確定此賬號應該保存到User_0003表中。當用戶123登錄的時候,我們通過123 mod 4后確定記錄在User_0003中。
 

下面是分庫分表產生的問題,及注意事項

1.   分庫分表維度的問題

假如用戶購買了商品,需要將交易記錄保存取來,如果按照用戶的緯度分表,則每個用戶的交易記錄都保存在同一表中,所以很快很方便的查找到某用戶的購買情況,但是某商品被購買的情況則很有可能分布在多張表中,查找起來比較麻煩。反之,按照商品維度分表,可以很方便的查找到此商品的購買情況,但要查找到買人的交易記錄比較麻煩。

所以常見的解決方式有:

     a.通過掃表的方式解決,此方法基本不可能,效率太低了。
     b.記錄兩份數據,一份按照用戶緯度分表,一份按照商品維度分表。
     c.通過搜索引擎解決,但如果實時性要求很高,又得關系到實時搜索。

2.   聯合查詢的問題

聯合查詢基本不可能,因為關聯的表有可能不在同一數據庫中。

3.   避免跨庫事務

避免在一個事務中修改db0中的表的時候同時修改db1中的表,一個是操作起來更復雜,效率也會有一定影響。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浑源县| 梅河口市| 华坪县| 丁青县| 理塘县| 乌拉特前旗| 陇川县| 历史| 新晃| 崇礼县| 河北省| 莱西市| 白山市| 赤峰市| 吕梁市| 河池市| 海宁市| 宝坻区| 来宾市| 体育| 常山县| 砚山县| 玉田县| 南澳县| 葫芦岛市| 绵阳市| 富蕴县| 温州市| 公安县| 和顺县| 安溪县| 巴东县| 师宗县| 门源| 沙田区| 柞水县| 西吉县| 绵阳市| 南京市| 延庆县| 佛冈县|