分割槽和分片的區別 MySQL分割槽與分片的差異

2021-10-13 03:57:39 字數 1450 閱讀 9763

要了解分割槽與分片之間的差異,首先我們需要知道什麼是分片與分割槽。分片:分片sharding 不是一門新技術,而是乙個相對簡樸的軟體理念。眾所周知,mysql 5 之後才有了資料表分割槽功能,那麼在此之前,很多 mysql 的潛在使用者都對 mysql 的擴充套件性有所顧慮,而是否具備分割槽功能就成了衡量乙個資料庫可擴充套件性與否的乙個關鍵指標(當然不是唯一指標)。資料庫擴充套件性是乙個永恆的話題,mysql 的推廣者經常會被問到:如在單一資料庫上處理應用資料捉襟見肘而需要進行分割槽化之類的處理,是如何辦到的呢? 答案是:sharding。  sharding 不是乙個某個特定資料庫軟體附屬的功能,而是在具體技術細節之上的抽象處理,是水平擴充套件(scale out,亦或橫向擴充套件、向外擴充套件)的解決方案,其主要目的是為突破單節點資料庫伺服器的 i/o 能力限制,解決資料庫擴充套件性問題。

通過一系列的切分規則將資料水平分布到不同的db或table中,在通過相應的db路由 或者 table路由規則找到需要查詢的具體的db或者table,以進行query操作。這裡所說的「sharding」通常是指「水平切分」, 這也是本文討論的重點。具體將有什麼樣的切分方式呢和路由方式呢?行文至此,讀者難免有所疑問,接下來舉個簡單的例子:我們針對乙個blog應用中的日誌來說明,比如日誌文章(article)表有如下字段:article_id(int),title(varchar(128)),content(varchar(1024)),user_id(int)所謂的特定的使用者,用資料庫的字段表示就是「user_id」。就是這個「user_id」,它就是我們需要的分庫的依據和規則的基礎。我們可以這樣做,將user_id為 1~10000的所有的文章資訊放入db1中的article表中,將user_id為10001~20000的所有文章資訊放入db2中的 article表中,以此類推,一直到dbn。 這樣一來,文章資料就很自然的被分到了各個資料庫中,達到了資料切分的目的。要想獲得目標資料,這時候我們利用db路由的功能 來查詢儲存相應的資料在那台伺服器上。看到這裡,是不是覺得這個和表分割槽很像?確實很多地方,分割槽和分片有很多的相似之處,但他們又有什麼區別呢?

sharding與資料庫分割槽(partition)的區別有的時候,sharding 也被近似等同於水平分割槽(horizontal partitioning),網上很多地方也用水平分割槽來指代 sharding,但我個人認為二者之間實際上還是有區別的。的確,sharding 的思想是從分割槽的思想而來,但資料庫分割槽基本上是資料物件級別的處理,比如表和索引的分割槽,每個子資料集上能夠有不同的物理儲存屬性,還是單個資料庫範圍內的操作,而 sharding 是能夠跨資料庫,甚至跨越物理機器的。

mysql分片與分割槽的區別

mysql5.1提供的分割槽(partition)功能確實可以實現表的分割槽,但是這種分割槽是侷限在單個資料庫範圍裡的,它不能跨越伺服器的限制。如果能夠保證資料量很難超過現有資料庫伺服器的物理承載量,那麼只需利用mysql5.1提供的分割槽(partition)功能來改善資料庫效能即可;否則,還是考慮應用sharding理念吧,spider storage engine就是乙個不錯的選擇。

mysql分片 分割槽 mysql分割槽 分片

range分割槽案例 按照日期的年分表,通過year函式獲取分割槽鍵的具體年份,values less 表示少於1991年的放入p0,類推 時間函式,to days和 to seconds 我當前版本5.5支援 可以讓你更精確的分到天甚至秒.partition p3 values less than...

hadoop 分片 分割槽概念

參考部落格 輸入分片 input split 在進行map計算之前,mapreduce會根據輸入檔案計算輸入分片 input split 每個輸入分片 input split 針對乙個map任務,輸入分片 input split 儲存的並非資料本身,而是乙個分片長度和乙個記錄資料的位置的陣列。had...

hadoop 分片 分割槽概念

輸入分片 input split 在進行map計算之前,mapreduce會根據輸入檔案計算輸入分片 input split 每個輸入分片 input split 針對乙個map任務,輸入分片 input split 儲存的並非資料本身,而是乙個分片長度和乙個記錄資料的位置的陣列。hadoop 2....