新聞中心
隨著大數(shù)據(jù)應用的不斷發(fā)展,數(shù)據(jù)庫技術(shù)也在不斷地進步和完善。數(shù)據(jù)量的增長,極大地促進了數(shù)據(jù)庫服務商進行創(chuàng)新,提出了“數(shù)據(jù)庫水平分片”的概念。這種技術(shù)的應用,不僅可以讓數(shù)據(jù)庫系統(tǒng)具有更強的擴展性,而且還能提高數(shù)據(jù)庫的性能和安全性。

本文主要講解數(shù)據(jù)庫水平分片技術(shù),它是如何產(chǎn)生的、它解決了什么問題以及在大數(shù)據(jù)應用中的應用。
1.什么是數(shù)據(jù)庫水平分片?
數(shù)據(jù)庫水平分片是指將一個原本較大的數(shù)據(jù)庫,按照某種規(guī)則來切分成多個小的數(shù)據(jù)庫,每個數(shù)據(jù)庫存儲不同的數(shù)據(jù),然后再將這些小數(shù)據(jù)庫分布在不同的物理機器上,從而達到分布式存儲和處理的目的。這種方式可以提高數(shù)據(jù)庫系統(tǒng)的并發(fā)性和可用性,使其更加穩(wěn)定和可靠。
2.數(shù)據(jù)庫水平分片的產(chǎn)生背景?
隨著互聯(lián)網(wǎng)的不斷發(fā)展,大數(shù)據(jù)成為了當前發(fā)展的趨勢,網(wǎng)絡規(guī)模和數(shù)據(jù)量也不斷增大,讓傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)難以支撐如此之多的數(shù)據(jù)量。傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)采用的主從架構(gòu),只能通過增加服務器的硬件配置來擴展,而這樣的方式并不能很好地解決數(shù)據(jù)庫擴展性的問題。
因此,人們開始探尋新的解決方案,于是產(chǎn)生了數(shù)據(jù)庫水平分片技術(shù),這種方法采用分布式架構(gòu),將一個較大的數(shù)據(jù)庫分割成多個小的數(shù)據(jù)庫,并分配到不同的物理機器上,分散處理大量的數(shù)據(jù),這樣就能夠有效地解決擴展性和數(shù)據(jù)性能問題,提高數(shù)據(jù)庫的性能和可用性。
3.數(shù)據(jù)庫水平分片有哪些優(yōu)點?
(1)高可用性:由于數(shù)據(jù)庫水平分片的存儲方式是分布式的,當某一個數(shù)據(jù)庫出現(xiàn)問題時,其他的數(shù)據(jù)庫節(jié)點可以自動接管,不會影響整個系統(tǒng)的運行。
(2)可擴展性:通過將大的數(shù)據(jù)庫切分成小的數(shù)據(jù)庫,可以自由添加新的節(jié)點進行擴展,實現(xiàn)水平擴展,而不用像傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)那樣需要增加硬件配置,這樣可極大地降低成本,提高效益。
(3)更高的性能:由于將一個大的數(shù)據(jù)庫分割成多個小的數(shù)據(jù)庫,每個小的數(shù)據(jù)庫都有一個獨立的存儲區(qū)域,因此可以實現(xiàn)多節(jié)點并行處理,從而提高了查詢和操作的效率。
(4)更高的安全性:由于將大的數(shù)據(jù)庫切分成小的數(shù)據(jù)庫存儲,每個節(jié)點的數(shù)據(jù)相對較小,使得攻擊者難以一次性獲取到所有的數(shù)據(jù),從而保證了數(shù)據(jù)的安全性。
4.數(shù)據(jù)庫水平分片的實現(xiàn)方式?
(1)哈希分片:將大的數(shù)據(jù)庫中的數(shù)據(jù)分成多份,然后通過哈希算法將數(shù)據(jù)分配到不同的節(jié)點上,由節(jié)點來處理分配的數(shù)據(jù),從而實現(xiàn)了分布式存儲和管理。
(2)區(qū)域分片:根據(jù)數(shù)據(jù)的位置信息將數(shù)據(jù)分割成多個區(qū)域,然后將每個區(qū)域分配到不同的節(jié)點,同樣實現(xiàn)了分布式存儲和管理。
5.數(shù)據(jù)庫水平分片的應用場景?
數(shù)據(jù)庫水平分片的應用場景主要是分布式處理和大數(shù)據(jù)存儲。在互聯(lián)網(wǎng)領域中,分布式架構(gòu)和巨量的數(shù)據(jù)處理就需要通過數(shù)據(jù)庫水平分片技術(shù)來實現(xiàn)。
例如,淘寶和天貓等電商平臺,通過使用數(shù)據(jù)庫水平分片技術(shù),將所有數(shù)據(jù)按照一定規(guī)則分割成多個小的數(shù)據(jù)庫,再將這些數(shù)據(jù)分散到不同的物理節(jié)點上。當高峰期來臨,系統(tǒng)會不斷地水平擴展,從而保證業(yè)務的穩(wěn)定性和可靠性。
數(shù)據(jù)庫水平分片是當前大數(shù)據(jù)應用技術(shù)中的必備技能,應用廣泛。通過數(shù)據(jù)庫水平分片技術(shù),不僅能夠提高數(shù)據(jù)庫系統(tǒng)的擴展性和性能,更能提升系統(tǒng)的可用性和安全性。在當前大數(shù)據(jù)應用中,數(shù)據(jù)庫水平分片技術(shù)是新一代數(shù)據(jù)庫架構(gòu)之一,將會扮演著越來越重要的角色。
成都網(wǎng)站建設公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設、網(wǎng)站制作、網(wǎng)頁設計及定制高端網(wǎng)站建設服務!
Mysql某個表有近千萬數(shù)據(jù),CRUD比較慢,如何優(yōu)化?
數(shù)據(jù)千萬級別之多,占用的存儲空間也比較大,可想而知它不會存儲在一塊連續(xù)的物理空間上,而是鏈式存儲在多個碎片的物理空間上。可能對于長字符串的比較,就用更多的時間查找與比較,這就導致用更多的時間。
可以做表拆分,減少單表字段數(shù)量,優(yōu)化表結(jié)構(gòu)。
在保證主鍵有效的情況下,檢查主鍵索引的字段順序,使得查詢語句中條件的字段順序和主鍵索引的字段順序保持一致。
主要兩種拆分 垂直拆分,水平拆分。
垂直分表
也就是“大表拆小表”,基于列字段進行的。一般是表中的字段較多,將不常用的, 數(shù)據(jù)較大,長度較長(比如text類型字段)的拆分到“擴展表“。 一般是針對 那種 幾百列的大表,也避免查詢時,數(shù)據(jù)量太大造成的“跨頁”問題。
垂直分庫針對的是一個系統(tǒng)中的不同業(yè)務進行拆分,比如用戶User一個庫,商品Product一個庫,訂單Order一個庫。 切分后,要放在多個服務器上,而不是一個服務器上。為什么? 我們想象一下,一個購物網(wǎng)站對外提供服務,會有用戶,商品,訂單等的CRUD。沒拆分之前, 全部都是落到單一的庫上的,這會讓數(shù)據(jù)庫的單庫處理能力成為瓶頸。按垂直分庫后,如果還是放在一個數(shù)據(jù)庫服務器上, 隨著用戶量增大,這會讓單個數(shù)據(jù)庫的處理能力成為瓶頸,還有單個服務器的磁盤空間,內(nèi)存,tps等非常吃緊。 所以我們要拆分到多個服務器上,這樣上面的問題都解決了,以后也不會面對單機資源問題。
數(shù)據(jù)庫業(yè)務層面的拆分,和服務的“治理”,核冊“降級”機制類似,也能對不同業(yè)務的數(shù)據(jù)分別的進行管理,維護,監(jiān)控,擴展等。 數(shù)據(jù)庫往往最容易成為應用系統(tǒng)的瓶頸,而數(shù)據(jù)庫本身屬于“有狀態(tài)”的,相對于Web和應用服務器來講,是比較難實現(xiàn)“橫向擴展”的。 數(shù)據(jù)庫的連接資源比較寶貴且單機處理能力也有限,在高并發(fā)場景下,垂直分庫一定程度上能夠突破IO、連接數(shù)及單機硬件資源的瓶頸。
水平分表
針對數(shù)據(jù)量巨大的單張表(比如訂單表),按照某種規(guī)則(RANGE,HASH取模等),切分到多張表里面去。 但是這些表還是在同一個庫中,所以庫級別的數(shù)據(jù)庫操作還是有IO瓶頸。不建議采用。
水平分庫分表
將單張表的數(shù)據(jù)切分到多個服務器上去,每個服務器具有相應的庫與表,只是表中數(shù)據(jù)不同。 水平分庫分表能夠有效的緩解單機和單庫的性能瓶頸和壓力,突破IO、連接數(shù)、硬件資源等的瓶頸。
水平分庫分表切分規(guī)則
1. RANGE
從0到10000一個表,10001到20230一個表;
2. HASH取模
一個商場系統(tǒng),一般都是將用戶,訂單作為主表,然后將和它們相關的作為附表,這樣不會造成跨庫事務之類的問題。 取用戶id,然后hash取模,分配到不同的數(shù)據(jù)庫上。
3. 地理區(qū)域
比如按照華東,華南,華北這樣來區(qū)分業(yè)務,七牛云應該就是如此。
4. 時間
按照時間切分,就是將6個月前,甚至一年前的數(shù)據(jù)切出去放到另外的一張表,因為隨著時間流逝,這些表的數(shù)據(jù) 被查詢的概率變小,所以沒必要和“熱數(shù)據(jù)”放在一起,這個也是“冷熱數(shù)據(jù)分離”。
分庫分表后面臨的問題
事務支持
分庫分表后,就成了分布式事務了。如果依賴數(shù)據(jù)庫本身的分布式事務管理功能去執(zhí)行事務,將付出高昂的性能代價; 如果由應用程序去協(xié)助控制,形成程序邏輯上的事務,又會造成編程方面的負擔。
跨庫join
只要是進行切分,跨節(jié)點Join的問題是不可避免的。但是良好的設計和切分卻可以減少此類情況的發(fā)生。解決這一問題的普遍做法是分兩次查詢實現(xiàn)。在之一次查詢的結(jié)果集中找出關聯(lián)數(shù)據(jù)的id,根據(jù)這些id發(fā)起第二次請求得到關聯(lián)數(shù)據(jù)。
跨節(jié)點的count,order by,group by以及聚合函數(shù)問題
這些是一類問題,因為它們都需要基于全部數(shù)據(jù)進行計算。多數(shù)的代理都不會自動處理合并工作。解決方案:與解決跨節(jié)點join問題的類似,分別在各個節(jié)點上得到結(jié)果后在應用程序端進行合并。和join不同的是每個結(jié)點的查詢可以并行執(zhí)行,因此很多時候它的速度要比單一大表快很多。但如果結(jié)果集很大,對應用程序內(nèi)存的消耗是一個問題。改瞎宏
數(shù)據(jù)遷移,容量規(guī)劃,擴容等問題
來自淘寶綜合業(yè)務平臺團隊,它利用對2的神棗倍數(shù)取余具有向前兼容的特性(如對4取余得1的數(shù)對2取余也是1)來分配數(shù)據(jù),避免了行級別的數(shù)據(jù)遷移,但是依然需要進行表級別的遷移,同時對擴容規(guī)模和分表數(shù)量都有限制。總得來說,這些方案都不是十分的理想,多多少少都存在一些缺點,這也從一個側(cè)面反映出了Sharding擴容的難度。
ID問題
一旦數(shù)據(jù)庫被切分到多個物理結(jié)點上,我們將不能再依賴數(shù)據(jù)庫自身的主鍵生成機制。一方面,某個分區(qū)數(shù)據(jù)庫自生成的ID無法保證在全局上是唯一的;另一方面,應用程序在插入數(shù)據(jù)之前需要先獲得ID,以便進行SQL路由.
一些常見的主鍵生成策略
UUID
使用UUID作主鍵是最簡單的方案,但是缺點也是非常明顯的。由于UUID非常的長,除占用大量存儲空間外,最主要的問題是在索引上,在建立索引和基于索引進行查詢時都存在性能問題。
Twitter的分布式自增ID算法Snowflake
在分布式系統(tǒng)中,需要生成全局UID的場合還是比較多的,twitter的snowflake解決了這種需求,實現(xiàn)也還是很簡單的,除去配置信息,核心代碼就是毫秒級時間41位 機器ID 10位 毫秒內(nèi)序列12位。
跨分片的排序分頁
一般來講,分頁時需要按照指定字段進行排序。當排序字段就是分片字段的時候,我們通過分片規(guī)則可以比較容易定位到指定的分片,而當排序字段非分片字段的時候,情況就會變得比較復雜了。為了最終結(jié)果的準確性,我們需要在不同的分片節(jié)點中將數(shù)據(jù)進行排序并返回,并將不同分片返回的結(jié)果集進行匯總和再次排序,最后再返回給用戶。
數(shù)據(jù)庫水平分片的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關于數(shù)據(jù)庫水平分片,大數(shù)據(jù)應用中的必備技能:數(shù)據(jù)庫水平分片解析,Mysql某個表有近千萬數(shù)據(jù),CRUD比較慢,如何優(yōu)化?的信息別忘了在本站進行查找喔。
創(chuàng)新互聯(lián)-老牌IDC、云計算及IT信息化服務領域的服務供應商,業(yè)務涵蓋IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心)服務、云計算服務、IT信息化、AI算力租賃平臺(智算云),軟件開發(fā),網(wǎng)站建設,咨詢熱線:028-86922220
標題名稱:大數(shù)據(jù)應用中的必備技能:數(shù)據(jù)庫水平分片解析(數(shù)據(jù)庫水平分片)
網(wǎng)頁網(wǎng)址:http://www.5511xx.com/article/ccesohg.html


咨詢
建站咨詢
