程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 關於Mysql數據庫切分

關於Mysql數據庫切分

編輯:關於MYSQL數據庫
方案一
水平切分,比如按照用戶id進行切分,把不同用戶的數據分散到不同的表或不同的數據庫或不同的數據庫服務器上,然後進行主從復制數據
a.一個MySQL集群(這兒所說的集群就是Mysql的Master/Slave方式,不是MySQL Cluster),所有用戶的各種數據(bbs,blog,user)保存於某一台服務器的某一個數據庫上,下面的n表示子表的數據(用戶所在的子表根據用戶id % n計算出來,這個可以根據需要定一個值例如10,如果以後發現數據量過大,可以增大n的值比如20,此時則需要進行數據遷移,因為n的值已經變了,用戶所在子表的值也隨之發生了變化,所以必須進行數據移動,數據遷移前停止網站的各種服務,備份MySQL的數據,然後進行數據遷移,其實寫一個腳本就可以了,也不是很復雜。
Master  Slave(Slave服務器數量可以根據需要進行適當的擴充)
sns(數據庫名稱)
bbs0
bbs1
...
bbsn
blog0
blog1
...
blogn
user0
user1
...
usernb.多個MySQL集群,不同用戶的數據保存到不同的數據庫服務器上
假如一共有3個節點,散列算法是用戶ID模以服務器節點數,假設有三個用戶id分別為1,3,5,則保存數據的服務器節點為1,0,2
用戶3的數據保存在Master0
master0 slave0
sns(數據庫名稱)
bbs
blog
user用戶1的數據保存在master1
master1 slave1
sns(數據庫名稱)
bbs
blog
user用戶5的數據保存在master2
master2 slave2
sns(數據庫名稱)
bbs
blog
user方案二
垂直切分,就是按照網站的功能來進行切分,某個SNS網站,按照用戶數據、博客數據、照片數據、標簽數據等每個模塊一個獨立的數據庫或數據庫服務器,此種方案可以根據情況來看是否要做Master/Slave復制
其實下面的例子是垂直切分加上水平切分,這種切分方式的缺點就是如果需要進行關聯查詢時要跨數據庫進行操作,非常的麻煩
db server1
sns(數據庫名稱)
user0
...
userndb server2
sns(數據庫名稱)
blog0
...
blogndb server3
sns(數據庫名稱)
photo0
...
photon垂直切分及水平切分的缺點
由於采用了垂直切分或水平切分,數據分散在不同節點機器上,無法進行全局查找和統計。解決方案一是對主要的基礎數據存儲在全局表中(或者將全局數據保存在Memcache、BerkeleyDB中),便於查找和統計,但這類數據不宜太多,部分核心數據。總結最近一直在學習Mysql,其實Mysql是相當復雜的,包括Facebook、Digg、淘寶、Yahoo等很多大公司都采用了MySQL數據庫。很欣賞唐峻一句話,不要與別人比,要與自己比,挺有道理,只要自己每天比昨天進步了一點點我就很高興了。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved