數(shù)據(jù)庫大數(shù)據(jù)訪問的解決方案_第1頁
數(shù)據(jù)庫大數(shù)據(jù)訪問的解決方案_第2頁
數(shù)據(jù)庫大數(shù)據(jù)訪問的解決方案_第3頁
數(shù)據(jù)庫大數(shù)據(jù)訪問的解決方案_第4頁
數(shù)據(jù)庫大數(shù)據(jù)訪問的解決方案_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、數(shù)據(jù)庫大數(shù)據(jù)訪問的解決方案當(dāng)系統(tǒng)要滿足每秒數(shù)萬次的讀寫請求的需求時(shí),我們可以用分布式計(jì)算、編寫優(yōu)良的程 序代碼、對海量數(shù)據(jù)進(jìn)行分區(qū)操作、建立廣泛的索引、建立緩存機(jī)制、加大虛擬內(nèi)存、分批 處理、使用數(shù)據(jù)倉庫和多維數(shù)據(jù)庫存儲、使用負(fù)載均衡技術(shù)、將數(shù)據(jù)庫的讀寫分離等等來解 決數(shù)據(jù)庫大數(shù)據(jù)訪問的問題。隨著互聯(lián)網(wǎng)應(yīng)用的廣泛普及,海量數(shù)據(jù)的存儲和訪問成為了系統(tǒng)設(shè)計(jì)的瓶頸問題。對于 一個(gè)大型的互聯(lián)網(wǎng)應(yīng)用,每天百萬級甚至上億的pv無疑對數(shù)據(jù)庫造成了相當(dāng)高的負(fù)載。對 于系統(tǒng)的穩(wěn)定性和擴(kuò)展性造成了極大的問題。一、那么數(shù)據(jù)庫如何處理海量數(shù)據(jù)呢?1、編寫優(yōu)良的程序代碼處理數(shù)據(jù)離不開優(yōu)秀的程序代碼,尤其在進(jìn)行復(fù)雜數(shù)據(jù)處

2、理時(shí),必須使用程序。好的程序代 碼對數(shù)據(jù)的處理至關(guān)重要,這不僅僅是數(shù)據(jù)處理準(zhǔn)確度的問題,更是數(shù)據(jù)處理效率的問題。 良好的程序代碼應(yīng)該包含好的算法,包含好的處理流程,包含好的效率,包含好的異常處理 機(jī)制等。2、對海量數(shù)據(jù)進(jìn)行分區(qū)操作對海量數(shù)據(jù)進(jìn)行分區(qū)操作十分必要,例如針対按年份存収的數(shù)據(jù),我們可以按年進(jìn)行分區(qū), 不同的數(shù)據(jù)庫有不同的分區(qū)方式,不過處理機(jī)制大體相同。例如sql server的數(shù)據(jù)庫分區(qū) 是將不同的數(shù)據(jù)存于不同的文件組下,而不同的文件組存于不同的磁盤分區(qū)下,這樣將數(shù)據(jù) 分散開,減小磁盤1/0,減小了系統(tǒng)負(fù)荷,而且還可以將口志,索引等放于不同的分區(qū)下。3、建立廣泛的索引對海量的數(shù)據(jù)處理

3、,對大表建立索引是必行的,建立索引要考慮到具體情況,例如針對大表 的分組、排序等字段,都要建立相應(yīng)索引,一般還可以建立復(fù)合索引,対 經(jīng)常插入的表則 建立索引時(shí)要小心,筆者在處理數(shù)據(jù)時(shí),曾經(jīng)在一個(gè)etl流程中,當(dāng)插入表時(shí),首先刪除 索引,然后插入完畢,建立索引,并實(shí)施聚合操作,聚合完成后,再次插入前還是刪除索 引,所以索引要用到好的時(shí)機(jī),索引的填充因子和聚集、非聚集索引都要考慮。4、加大虛擬內(nèi)存如果系統(tǒng)資源有限,內(nèi)存提示不足,則可以靠增加虛擬內(nèi)存來解決。筆者在實(shí)際項(xiàng)fi中曾經(jīng) 遇到針對18億條的數(shù)據(jù)進(jìn)行處理,內(nèi)存為1gb, 1個(gè)p42.4g的cpu,對這么大的數(shù)據(jù)量 進(jìn)行聚合操作是有問題的,提示

4、內(nèi)存不足,那么采用了加大虛擬內(nèi)存的方法來解決,在6 塊磁盤分區(qū)上分別建立了 6個(gè)4096m的磁盤分區(qū),用于虛擬內(nèi)存,這樣虛擬的內(nèi)存則增加 為4096*6 + 1024 = 25600 m,解決了數(shù)據(jù)處理中的內(nèi)存不足問題。5、分批處理海量數(shù)據(jù)處理難因?yàn)閿?shù)據(jù)量大,那么解決海量數(shù)據(jù)處理難的問題其中一個(gè)技巧是減少數(shù)據(jù) 量??梢詫A繑?shù)據(jù)分批處理,然后處理后的數(shù)據(jù)再進(jìn)行合并操作,這樣逐 個(gè)擊破,有利 于小數(shù)據(jù)量的處理,不至于面對大數(shù)據(jù)量帶來的問題,不過這種方法也要因時(shí)因勢進(jìn)行,如 果不允許拆分?jǐn)?shù)據(jù),還需要另想辦法。不過一般的數(shù)據(jù)按天、按月、按年等存儲的,都對 以采用先分后合的方法,對數(shù)據(jù)進(jìn)行分開處理。6

5、、使用數(shù)據(jù)倉庫和多維數(shù)據(jù)庫存儲數(shù)據(jù)量加大是一定要考慮olap的,傳統(tǒng)的報(bào)表可能5、6個(gè)小時(shí)出來結(jié)果,而基于cube 的查詢可能只需要幾分鐘,因此處理海量數(shù)據(jù)的利器是olap多維分析,即建立數(shù)據(jù)倉庫, 建立多維數(shù)據(jù)集,基丁多維數(shù)據(jù)集進(jìn)行報(bào)表展現(xiàn)和數(shù)據(jù)挖掘等。7、使用采樣數(shù)據(jù),進(jìn)行數(shù)據(jù)挖掘基于海量數(shù)據(jù)的數(shù)據(jù)挖掘正在逐步興起,面對著超海量的數(shù)據(jù),一般的挖掘軟件或算法往往 采用數(shù)據(jù)抽樣的方式進(jìn)行處理,這樣的誤差不會很高,大大提高了處理效率和處理的成功率。 一般采樣時(shí)要注意數(shù)據(jù)的完整性和,防止過大的偏差。筆者曾經(jīng)對1億2千萬行的表數(shù)據(jù)進(jìn) 行采樣,抽取出400萬行,經(jīng)測試軟件測試處理的誤差為千分之五,客戶

6、可以接受。還有一些方法,需要在不同的情況和場合下運(yùn)用,例如使用代理鍵等操作,這樣的好處是加 快了聚合時(shí)間,因?yàn)閷?shù)值型的聚合比對字符型的聚合快得多。類似的情況需要針對不同的 需求進(jìn)行處理。海量數(shù)據(jù)是發(fā)展趨勢,對數(shù)據(jù)分析和挖掘也越來越重要,從海量數(shù)據(jù)中提取有用信息重要而 緊迫,這便要求處理要準(zhǔn)確,精度要高,而且處理時(shí)間要短,得到有價(jià)值信息要快,所以, 對海量數(shù)據(jù)的研究很有前途,也很值得進(jìn)行廣泛深入的研究。二、下面注意講解下負(fù)載均衡技術(shù)、數(shù)據(jù)庫的讀寫分離、數(shù)據(jù)庫拆分(分布式)1、負(fù)載均衡技術(shù)負(fù)載均衡集群是市一組相互獨(dú)立的計(jì)算機(jī)系統(tǒng)構(gòu)成,通過常規(guī)網(wǎng)絡(luò)或?qū)S镁W(wǎng)絡(luò)進(jìn)行連接,rh 路由器銜接在一起,各節(jié)點(diǎn)

7、相互協(xié)作、共同負(fù)載、均衡壓力,對客戶端來說,整個(gè)群集可以 視為一臺具有超高性能的獨(dú)立服務(wù)器。實(shí)現(xiàn)原理實(shí)現(xiàn)數(shù)據(jù)庫的負(fù)載均衡技術(shù),首先要有一個(gè)對以控制連接數(shù)據(jù)庫的控制端。在這里,它截?cái)?了數(shù)據(jù)庫和程序的直接連接,市所有的程序來訪問這個(gè)中間層,然后再rh中間層來訪問數(shù)據(jù) 庫。這樣,我們就對以具體控制訪問某個(gè)數(shù)據(jù)庫了,然后還可以根據(jù)數(shù)據(jù)庫的當(dāng)前負(fù)載采取 有效的均衡策略,來調(diào)整每次連接到哪個(gè)數(shù)據(jù)庫。實(shí)現(xiàn)多據(jù)庫數(shù)據(jù)同步對于負(fù)載均衡,最重要的就是所有服務(wù)器的數(shù)據(jù)都是實(shí)時(shí)同步的。這是一個(gè)集群所必需的, 因?yàn)?,如果?shù)不據(jù)實(shí)時(shí)、不同步,那么用戶從一臺服務(wù)器讀出的數(shù)據(jù),就有別于從另一臺服 務(wù)器讀出的數(shù)據(jù),這是不能允

8、許的。所以必須實(shí)現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)同步。這樣,在查詢的時(shí)候 就可以有多個(gè)資源,實(shí)現(xiàn)均衡。比較常用的方法是moebius for sql server集群,moebius for sql server集群采用將核心程序駐留在每個(gè)機(jī)器的數(shù)據(jù)庫中的辦法,這個(gè)核心程序稱為 moebius for sql server中間件,主要作用是監(jiān)測數(shù)據(jù)庫內(nèi)數(shù)據(jù)的變化并將變化的數(shù)據(jù)同步 到其他數(shù)據(jù)庫中。數(shù)據(jù)同步完成后客戶端才會得到響應(yīng),同步過程是并發(fā)完成的,所以同步 到多個(gè)數(shù)據(jù)庫和同步到一個(gè)數(shù)據(jù)庫的時(shí)間基本相等;另外同步的過程是在事務(wù)的環(huán)境下完成的,保證了多份數(shù)據(jù)在任何時(shí)刻數(shù)據(jù)的一致性。正因?yàn)閙oebius中間件宿主

9、在數(shù)據(jù)庫中的 創(chuàng)新,讓屮間件不但能知道數(shù)據(jù)的變化,而且知道引起數(shù)據(jù)變化的sql語句,根據(jù)sql語 句的類型智能的采取不同的數(shù)據(jù)同步的策略以保證數(shù)據(jù)同步成本的最小化。寫操作4據(jù)同步sqlserversql st rvermoebiusmoebius:數(shù)據(jù)41壓縮sqlservermoebius中央控制臺客戶端寫操作2數(shù)很少,數(shù)據(jù)內(nèi)容也不人,則直接同步數(shù)據(jù)數(shù)據(jù)條數(shù)據(jù)條數(shù)很少,但是里面包含大數(shù)據(jù)類型,比如文本,二進(jìn)制數(shù)據(jù)等,則先對數(shù)據(jù)進(jìn)行壓縮 然后再同步,從而減少網(wǎng)絡(luò)帶寬的占用和傳輸所用的時(shí)間。數(shù)據(jù)條數(shù)很多,此時(shí)小間件會拿到造成數(shù)據(jù)變化的sql語句,然后對sql語句進(jìn)行解析, 分析其執(zhí)行計(jì)劃和執(zhí)行成

10、本,并選擇是同步數(shù)據(jù)還是同步sql語句到其他的數(shù)據(jù)庫中。此 種情況應(yīng)用在對表結(jié)構(gòu)進(jìn)行調(diào)整或者批量更改數(shù)據(jù)的時(shí)候非常有用。優(yōu)缺點(diǎn)(1) 擴(kuò)展性強(qiáng):當(dāng)系統(tǒng)要更高數(shù)據(jù)庫處理速度時(shí),只要簡單地增加數(shù)據(jù)庫服務(wù)器就 可以得 到擴(kuò)展。(2) 可維護(hù)性:當(dāng)某節(jié)點(diǎn)發(fā)生故障時(shí),系統(tǒng)會自動(dòng)檢測故障并轉(zhuǎn)移故障節(jié)點(diǎn)的應(yīng)用,保證數(shù) 據(jù)庫的持續(xù)工作。(3) 安全性:因?yàn)閿?shù)據(jù)會同步的多臺服務(wù)器上,可以實(shí)現(xiàn)數(shù)據(jù)集的兀余,通過多份數(shù)據(jù)來保 證安全性。另外它成功地將數(shù)據(jù)庫放到了內(nèi)網(wǎng)之中,更好地保護(hù)了數(shù)據(jù)庫的安全性。(4) 易用性:對應(yīng)用來說完全透明,集群暴露出來的就是一個(gè)ip2、數(shù)據(jù)庫的讀寫分離實(shí)現(xiàn)原理 讀寫分離簡單的說是把對數(shù)據(jù)

11、庫讀和寫的操作分開對應(yīng)不同的數(shù)據(jù)庫服務(wù)器,這樣能有效地 減輕數(shù)據(jù)庫壓力,也能減輕io壓力。主數(shù)據(jù)庫提供寫操作,從數(shù)據(jù)庫提供讀操作,其實(shí)在 很多系統(tǒng)中,主要是讀的操作。當(dāng)主數(shù)據(jù)庫進(jìn)行寫操作時(shí),數(shù)據(jù)要同步到從的數(shù)據(jù)庫,這樣 才能有效保證數(shù)據(jù)庫完整性。portal layer讀寫比率是260:1 ,ebay的讀寫分離)(ebay 的application layerwriteread主服務(wù)器應(yīng)用程序服務(wù)器(微軟數(shù)據(jù)庫分發(fā))實(shí)現(xiàn)方法在ms sql server中可以使用發(fā)布定義的方式實(shí)現(xiàn)數(shù)據(jù)庫復(fù)制,實(shí)現(xiàn)讀寫分離,復(fù)制是將一 組數(shù)據(jù)從一個(gè)數(shù)據(jù)源拷貝到多個(gè)數(shù)據(jù)源的技術(shù),是將一份數(shù)據(jù)發(fā)布到多個(gè)存儲站點(diǎn)上的有

12、效 方式。使用復(fù)制技術(shù),用戶可以將一份數(shù)據(jù)發(fā)布到多臺服務(wù)器上。復(fù)制技術(shù)可以確保分布在 不同地點(diǎn)的數(shù)據(jù)自動(dòng)同步更新,從而保證數(shù)據(jù)的一致性。sql server復(fù)制技術(shù)類型有三 種,分別是:快照復(fù)制、事務(wù)復(fù)制、合并復(fù)制。sql server主要采用出版物、訂閱的方 式來處理復(fù)制。源數(shù)據(jù)所在的服務(wù)器是出版服務(wù)器,負(fù)責(zé)發(fā)表數(shù)據(jù)。出版服務(wù)器把要發(fā)表的 數(shù)據(jù)的所有改變情況的拷貝復(fù)制到分發(fā)服務(wù)器,分發(fā)服務(wù)器包含有一個(gè)分發(fā)數(shù)據(jù)庫,可接收 數(shù)據(jù)的所有改變,并保存這些改變,再把這些改變分發(fā)給訂閱服務(wù)器。優(yōu)缺點(diǎn)(1)數(shù)據(jù)的實(shí)時(shí)性差:數(shù)據(jù)不是實(shí)時(shí)同步到口讀服務(wù)器上的,當(dāng)數(shù)據(jù)寫入主服務(wù)器后,要在下 次同步后才能查詢到。

13、(2)數(shù)據(jù)量大時(shí)同步效率差:單表數(shù)據(jù)量過大時(shí)插入和更新因索引,磁盤io等問題,性能會變 的很差。(3)同時(shí)連接多個(gè)(至少兩個(gè))數(shù)據(jù)庫:至少要連接到兩個(gè)數(shù)據(jù)數(shù)據(jù)庫,實(shí)際的讀寫操作是 在程序代碼中完成的,容易引起混亂(4)讀具有高性能高可靠性和可仲縮:只讀服務(wù)器,因?yàn)闆]有寫操作,會大大減輕磁盤io等性 能問題,大大提高效率;只讀服務(wù)器可以采用負(fù)載均衡,主數(shù)據(jù)庫發(fā)布到多個(gè)只讀服務(wù)器上 實(shí)現(xiàn)讀操作的可伸縮性。3、數(shù)據(jù)庫拆分(分布式)通過某種特定的條件,將存放在同一個(gè)數(shù)據(jù)庫中的數(shù)據(jù)分散存放到多個(gè)數(shù)據(jù)庫上,實(shí)現(xiàn)分布 存儲,通過路市規(guī)則路市訪問特定的數(shù)據(jù)庫,這樣一來每次訪問面對的就不是單臺服務(wù)器了, 而是n

14、臺服務(wù)器,這樣就可以降低單臺機(jī)器的負(fù)載壓力。垂直(縱向)拆分:是指按功能模塊拆分,比如分為訂單庫、商品庫、用戶庫.這種方式多個(gè) 數(shù)據(jù)庫之間的表結(jié)構(gòu)不同。水平(橫向)拆分:將同一個(gè)表的數(shù)據(jù)進(jìn)行分塊保存到不同的數(shù)據(jù)庫中,這些數(shù)據(jù)庫中的表結(jié) 構(gòu)完全相同。訂總庫1產(chǎn)品庫、 廠b 1dlrfl門庫應(yīng)丿用畏序服務(wù)令(縱向拆分)分區(qū)2010 分區(qū)2009 分區(qū)2008分區(qū)2007 分區(qū)2006 分區(qū)2005分區(qū)2(x)4訂單表ix 2003(橫向拆分)實(shí)現(xiàn)原理使用垂直拆分,主要要看應(yīng)用類型是否合適這種拆分方式,如系統(tǒng)可以分為,訂單系統(tǒng),商 品管理系統(tǒng),用戶管理系統(tǒng)業(yè)務(wù)系統(tǒng)比較明的,垂直拆分能很好的起到分散數(shù)

15、據(jù)庫壓力的作 用。業(yè)務(wù)模塊不明晰,耦合(表關(guān)聯(lián))度比較髙的系統(tǒng)不適合使用這種拆分方式。但是垂直 拆分方式并不能徹底解決所有壓力問題,例如有一個(gè)5000w的訂單表,操作起來訂單庫的 壓力仍然很大,如我們需要在這個(gè)表屮增加(insert) 條新的數(shù)據(jù),insert完畢后,數(shù)據(jù)庫 會針對這張表重新建立索引,5()()()w行數(shù)據(jù)建立索引的系統(tǒng)開銷述是不容忽視的,反過來, 假如我們將這個(gè)表分成100個(gè)table呢,從table_001 一直到table_100» 5000w彳亍數(shù)據(jù)平均下 來,每個(gè)子表里邊就只有50萬行數(shù)據(jù),這時(shí)候我們向一張只有50w行數(shù)據(jù)的table中insert 數(shù)據(jù)后建

16、立索引的時(shí)間就會呈數(shù)量級的下降,極大了提高了 db的運(yùn)行時(shí)效率,提高了 db 的并發(fā)量,這種拆分就是橫向拆分 實(shí)現(xiàn)方法垂直拆分,拆分方式實(shí)現(xiàn)起來比佼簡單,根據(jù)表名訪問不同的數(shù)據(jù)庫就可以了。橫向拆分的 規(guī)則很多,這里總結(jié)前人的幾點(diǎn),(1)順序拆分如可以按訂單的日前按年份才分,2003年的放在dbl中,2004年的db2,以此類推。當(dāng)然也 可以按主鍵標(biāo)準(zhǔn)拆分。優(yōu)點(diǎn):可部分遷移缺點(diǎn):數(shù)據(jù)分布不均,可能2003年的訂單有100w, 2008年的有500w。(2)hash取模分對uscr_id進(jìn)行hash (或者如果user_id是數(shù)值型的話直接使用user_id的值也可),然后用 一個(gè)特定的數(shù)字,比如應(yīng)用中需要將一個(gè)數(shù)據(jù)庫切分成4個(gè)數(shù)據(jù)庫的話,我們就用4這個(gè)數(shù) 字對user_id的hash值進(jìn)行取模運(yùn)算,也就是user_id%4,這樣的話每次運(yùn)算就有

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論