1.大數(shù)據(jù)是什么?

成都創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),靈武網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:靈武等地區(qū)。靈武做網(wǎng)站價(jià)格咨詢:18982081108
大數(shù)據(jù)是最近IT界最常用的術(shù)語之一。然而對(duì)大數(shù)據(jù)的定義也不盡相同,所有已知的論點(diǎn)例如結(jié)構(gòu)化的和非結(jié)構(gòu)化、大規(guī)模的數(shù)據(jù)等等都不夠完整。大數(shù)據(jù)系統(tǒng)通常被認(rèn)為具有數(shù)據(jù)的五個(gè)主要特征,通常稱為數(shù)據(jù)的5 Vs。分別是大規(guī)模,多樣性,高效性、準(zhǔn)確性和價(jià)值性。
據(jù)Gartner稱,大規(guī)模可以被定義為“在本(地)機(jī)數(shù)據(jù)采集和處理技術(shù)能力不足以為用戶帶來商業(yè)價(jià)值。當(dāng)現(xiàn)有的技術(shù)能夠針對(duì)性的進(jìn)行改造后來處理這種規(guī)模的數(shù)據(jù)就可以說是一個(gè)成功的大數(shù)據(jù)解決方案。
這種大規(guī)模的數(shù)據(jù)沒將不僅僅是來自于現(xiàn)有的數(shù)據(jù)源,同時(shí)也會(huì)來自于一些新興的數(shù)據(jù)源,例如常規(guī)(手持、工業(yè))設(shè)備,日志,汽車等,當(dāng)然包括結(jié)構(gòu)化的和非結(jié)構(gòu)化的數(shù)據(jù)。
據(jù)Gartner稱,多樣性可以定義如下:“高度變異的信息資產(chǎn),在生產(chǎn)和消費(fèi)時(shí)不進(jìn)行嚴(yán)格定義的包括多種形式、類型和結(jié)構(gòu)的組合。同時(shí)還包括以前的歷史數(shù)據(jù),由于技術(shù)的變革歷史數(shù)據(jù)同樣也成為多樣性數(shù)據(jù)之一 “。
高效性可以被定義為來自不同源的數(shù)據(jù)到達(dá)的速度。從各種設(shè)備,傳感器和其他有組織和無組織的數(shù)據(jù)流都在不斷進(jìn)入IT系統(tǒng)。由此,實(shí)時(shí)分析和對(duì)于該數(shù)據(jù)的解釋(展示)的能力也應(yīng)該隨之增加。
根據(jù)Gartner,高效性可以被定義如下:“高速的數(shù)據(jù)流I/O(生產(chǎn)和消費(fèi)),但主要聚焦在一個(gè)數(shù)據(jù)集內(nèi)或多個(gè)數(shù)據(jù)集之間的數(shù)據(jù)生產(chǎn)的速率可變上”。
準(zhǔn)確性,或真實(shí)性或叫做精度是數(shù)據(jù)的另一個(gè)重要組成方面。要做出正確的商業(yè)決策,當(dāng)務(wù)之急是在數(shù)據(jù)上進(jìn)行的所有分析必須是正確和準(zhǔn)確(精確)的。
大數(shù)據(jù)系統(tǒng)可以提供巨大的商業(yè)價(jià)值。像電信,金融,電子商務(wù),社交媒體等,已經(jīng)認(rèn)識(shí)到他們的數(shù)據(jù)是一個(gè)潛在的巨大的商機(jī)。他們可以預(yù)測(cè)用戶行為,并推薦相關(guān)產(chǎn)品,提供危險(xiǎn)交易預(yù)警服務(wù),等等。
與其他IT系統(tǒng)一樣,性能是大數(shù)據(jù)系統(tǒng)獲得成功的關(guān)鍵。本文的中心主旨是要說明如何讓大數(shù)據(jù)系統(tǒng)保證其性能。
2.大數(shù)據(jù)系統(tǒng)應(yīng)包含的功能模塊
大數(shù)據(jù)系統(tǒng)應(yīng)該包含的功能模塊,首先是能夠從多種數(shù)據(jù)源獲取數(shù)據(jù)的功能,數(shù)據(jù)的預(yù)處理(例如,清洗,驗(yàn)證等),存儲(chǔ)數(shù)據(jù),數(shù)據(jù)處理、數(shù)據(jù)分析等(例如做預(yù)測(cè)分析,生成在線使用建議等等),最后呈現(xiàn)和可視化的總結(jié)、匯總結(jié)果。
下圖描述了大數(shù)據(jù)系統(tǒng)的這些高層次的組件:
2.1各種各樣的數(shù)據(jù)源
當(dāng)今的IT生態(tài)系統(tǒng),需要對(duì)各種不同種類來源的數(shù)據(jù)進(jìn)行分析。這些來源可能是從在線Web應(yīng)用程序,批量上傳或feed,流媒體直播數(shù)據(jù),來自工業(yè)、手持、家居傳感的任何東西等等。
顯然從不同數(shù)據(jù)源獲取的數(shù)據(jù)具有不同的格式、使用不同的協(xié)議。例如,在線的Web應(yīng)用程序可能會(huì)使用SOAP / XML格式通過HTTP發(fā)送數(shù)據(jù),feed可能會(huì)來自于CSV文件,其他設(shè)備則可能使用MQTT通信協(xié)議。
由于這些單獨(dú)的系統(tǒng)的性能是不在大數(shù)據(jù)系統(tǒng)的控制范圍之內(nèi),并且通常這些系統(tǒng)都是外部應(yīng)用程序,由第三方供應(yīng)商或團(tuán)隊(duì)提供并維護(hù),所以本文將不會(huì)在深入到這些系統(tǒng)的性能分析中去。
2.2數(shù)據(jù)采集
第一步,獲取數(shù)據(jù)。這個(gè)過程包括分析,驗(yàn)證,清洗,轉(zhuǎn)換,去重,然后存到適合你們公司的一個(gè)持久化設(shè)備中(硬盤、存儲(chǔ)、云等)。
在下面的章節(jié)中,本文將重點(diǎn)介紹一些關(guān)于如何獲取數(shù)據(jù)方面的非常重要的技巧。請(qǐng)注意,本文將不討論各種數(shù)據(jù)采集技術(shù)的優(yōu)缺點(diǎn)。
2.3存儲(chǔ)數(shù)據(jù)
第二步,一旦數(shù)據(jù)進(jìn)入大數(shù)據(jù)系統(tǒng),清洗,并轉(zhuǎn)化為所需格式時(shí),這些過程都將在數(shù)據(jù)存儲(chǔ)到一個(gè)合適的持久化層中進(jìn)行。
在下面的章節(jié)中,本文將介紹一些存儲(chǔ)方面的最佳實(shí)踐(包括邏輯上和物理上)。在本文結(jié)尾也會(huì)討論一部分涉及數(shù)據(jù)安全方面的問題。
2.4數(shù)據(jù)處理和分析
第三步,在這一階段中的一部分干凈數(shù)據(jù)是去規(guī)范化的,包括對(duì)一些相關(guān)的數(shù)據(jù)集的數(shù)據(jù)進(jìn)行一些排序,在規(guī)定的時(shí)間間隔內(nèi)進(jìn)行數(shù)據(jù)結(jié)果歸集,執(zhí)行機(jī)器學(xué)習(xí)算法,預(yù)測(cè)分析等。
在下面的章節(jié)中,本文將針對(duì)大數(shù)據(jù)系統(tǒng)性能優(yōu)化介紹一些進(jìn)行數(shù)據(jù)處理和分析的最佳實(shí)踐。
2.5數(shù)據(jù)的可視化和數(shù)據(jù)展示
最后一個(gè)步驟,展示經(jīng)過各個(gè)不同分析算法處理過的數(shù)據(jù)結(jié)果。該步驟包括從預(yù)先計(jì)算匯總的結(jié)果(或其他類似數(shù)據(jù)集)中的讀取和用一種友好界面或者表格(圖表等等)的形式展示出來。這樣便于對(duì)于數(shù)據(jù)分析結(jié)果的理解。
3.數(shù)據(jù)采集中的性能技巧
數(shù)據(jù)采集是各種來自不同數(shù)據(jù)源的數(shù)據(jù)進(jìn)入大數(shù)據(jù)系統(tǒng)的第一步。這個(gè)步驟的性能將會(huì)直接決定在一個(gè)給定的時(shí)間段內(nèi)大數(shù)據(jù)系統(tǒng)能夠處理的數(shù)據(jù)量的能力。
數(shù)據(jù)采集過程基于對(duì)該系統(tǒng)的個(gè)性化需求,但一些常用執(zhí)行的步驟是 – 解析傳入數(shù)據(jù),做必要的驗(yàn)證,數(shù)據(jù)清晰,例如數(shù)據(jù)去重,轉(zhuǎn)換格式,并將其存儲(chǔ)到某種持久層。
涉及數(shù)據(jù)采集過程的邏輯步驟示如下圖所示:
下面是一些性能方面的技巧:
●來自不同數(shù)據(jù)源的傳輸應(yīng)該是異步的。可以使用文件來傳輸、或者使用面向消息的(MoM)中間件來實(shí)現(xiàn)。由于數(shù)據(jù)異步傳輸,所以數(shù)據(jù)采集過程的吞吐量可以大大高于大數(shù)據(jù)系統(tǒng)的處理能力。 異步數(shù)據(jù)傳輸同樣可以在大數(shù)據(jù)系統(tǒng)和不同的數(shù)據(jù)源之間進(jìn)行解耦。大數(shù)據(jù)基礎(chǔ)架構(gòu)設(shè)計(jì)使得其很容易進(jìn)行動(dòng)態(tài)伸縮,數(shù)據(jù)采集的峰值流量對(duì)于大數(shù)據(jù)系統(tǒng)來說算是安全的。
●如果數(shù)據(jù)是直接從一些外部數(shù)據(jù)庫中抽取的,確保拉取數(shù)據(jù)是使用批量的方式。
●如果數(shù)據(jù)是從feed file解析,請(qǐng)務(wù)必使用合適的解析器。例如,如果從一個(gè)XML文件中讀取也有不同的解析器像JDOM,SAX,DOM等。類似地,對(duì)于CSV,JSON和其它這樣的格式,多個(gè)解析器和API是可供選擇。選擇能夠符合需求的性能最好的。
●優(yōu)先使用內(nèi)置的驗(yàn)證解決方案。大多數(shù)解析/驗(yàn)證工作流程的通常運(yùn)行在服務(wù)器環(huán)境(ESB /應(yīng)用服務(wù)器)中。大部分的場(chǎng)景基本上都有現(xiàn)成的標(biāo)準(zhǔn)校驗(yàn)工具。在大多數(shù)的情況下,這些標(biāo)準(zhǔn)的現(xiàn)成的工具一般來說要比你自己開發(fā)的工具性能要好很多。
●類似地,如果數(shù)據(jù)XML格式的,優(yōu)先使用XML(XSD)用于驗(yàn)證。
●即使解析器或者校等流程使用自定義的腳本來完成,例如使用java優(yōu)先還是應(yīng)該使用內(nèi)置的函數(shù)庫或者開發(fā)框架。在大多數(shù)的情況下通常會(huì)比你開發(fā)任何自定義代碼快得多。
●盡量提前濾掉無效數(shù)據(jù),以便后續(xù)的處理流程都不用在無效數(shù)據(jù)上浪費(fèi)過多的計(jì)算能力。
●大多數(shù)系統(tǒng)處理無效數(shù)據(jù)的做法通常是存放在一個(gè)專門的表中,請(qǐng)?jiān)谙到y(tǒng)建設(shè)之初考慮這部分的數(shù)據(jù)庫存儲(chǔ)和其他額外的存儲(chǔ)開銷。
●如果來自數(shù)據(jù)源的數(shù)據(jù)需要清洗,例如去掉一些不需要的信息,盡量保持所有數(shù)據(jù)源的抽取程序版本一致,確保一次處理的是一個(gè)大批量的數(shù)據(jù),而不是一條記錄一條記錄的來處理。一般來說數(shù)據(jù)清洗需要進(jìn)行表關(guān)聯(lián)。數(shù)據(jù)清洗中需要用到的靜態(tài)數(shù)據(jù)關(guān)聯(lián)一次,并且一次處理一個(gè)很大的批量就能夠大幅提高數(shù)據(jù)處理效率。
●數(shù)據(jù)去重非常重要這個(gè)過程決定了主鍵的是由哪些字段構(gòu)成。通常主鍵都是時(shí)間戳或者id等可以追加的類型。一般情況下,每條記錄都可能根據(jù)主鍵進(jìn)行索引來更新,所以最好能夠讓主鍵簡單一些,以保證在更新的時(shí)候檢索的性能。
●來自多個(gè)源接收的數(shù)據(jù)可以是不同的格式。有時(shí),需要進(jìn)行數(shù)據(jù)移植,使接收到的數(shù)據(jù)從多種格式轉(zhuǎn)化成一種或一組標(biāo)準(zhǔn)格式。
●和解析過程一樣,我們建議使用內(nèi)置的工具,相比于你自己從零開發(fā)的工具性能會(huì)提高很多。
●數(shù)據(jù)移植的過程一般是數(shù)據(jù)處理過程中最復(fù)雜、最緊急、消耗資源最多的一步。因此,確保在這一過程中盡可能多的使用并行計(jì)算。
●一旦所有的數(shù)據(jù)采集的上述活動(dòng)完成后,轉(zhuǎn)換后的數(shù)據(jù)通常存儲(chǔ)在某些持久層,以便以后分析處理,綜述,聚合等使用。
●多種技術(shù)解決方案的存在是為了處理這種持久(RDBMS,NoSQL的分布式文件系統(tǒng),如Hadoop和等)。
●謹(jǐn)慎選擇一個(gè)能夠最大限度的滿足需求的解決方案。
4.數(shù)據(jù)存儲(chǔ)中的性能技巧
一旦所有的數(shù)據(jù)采集步驟完成后,數(shù)據(jù)將進(jìn)入持久層。
在本節(jié)中將討論一些與數(shù)據(jù)數(shù)據(jù)存儲(chǔ)性能相關(guān)的技巧包括物理存儲(chǔ)優(yōu)化和邏輯存儲(chǔ)結(jié)構(gòu)(數(shù)據(jù)模型)。這些技巧適用于所有的數(shù)據(jù)處理過程,無論是一些解析函數(shù)生的或最終輸出的數(shù)據(jù)還是預(yù)計(jì)算的匯總數(shù)據(jù)等。
●首先選擇數(shù)據(jù)范式。您對(duì)數(shù)據(jù)的建模方式對(duì)性能有直接的影響,例如像數(shù)據(jù)冗余,磁盤存儲(chǔ)容量等方面。對(duì)于一些簡單的文件導(dǎo)入數(shù)據(jù)庫中的場(chǎng)景,你也許需要保持?jǐn)?shù)據(jù)原始的格式,對(duì)于另外一些場(chǎng)景,如執(zhí)行一些分析計(jì)算聚集等,你可能不需要將數(shù)據(jù)范式化。
●大多數(shù)的大數(shù)據(jù)系統(tǒng)使用NoSQL數(shù)據(jù)庫替代RDBMS處理數(shù)據(jù)。
●不同的NoSQL數(shù)據(jù)庫適用不同的場(chǎng)景,一部分在select時(shí)性能更好,有些是在插入或者更新性能更好。
●數(shù)據(jù)庫分為行存儲(chǔ)和列存儲(chǔ)。
●具體的數(shù)據(jù)庫選型依賴于你的具體需求(例如,你的應(yīng)用程序的數(shù)據(jù)庫讀寫比)。
●同樣每個(gè)數(shù)據(jù)庫都會(huì)根據(jù)不同的配置從而控制這些數(shù)據(jù)庫用于數(shù)據(jù)庫復(fù)制備份或者嚴(yán)格保持?jǐn)?shù)據(jù)一致性。
●這些設(shè)置會(huì)直接影響數(shù)據(jù)庫性能。在數(shù)據(jù)庫技術(shù)選型前一定要注意。
●壓縮率、緩沖池、超時(shí)的大小,和緩存的對(duì)于不同的NoSQL數(shù)據(jù)庫來說配置都是不同的,同時(shí)對(duì)數(shù)據(jù)庫性能的影響也是不一樣的。
●數(shù)據(jù)Sharding和分區(qū)是這些數(shù)據(jù)庫的另一個(gè)非常重要的功能。數(shù)據(jù)Sharding的方式能夠?qū)ο到y(tǒng)的性能產(chǎn)生巨大的影響,所以在數(shù)據(jù)Sharding和分區(qū)時(shí)請(qǐng)謹(jǐn)慎選擇。
●并非所有的NoSQL數(shù)據(jù)庫都內(nèi)置了支持連接,排序,匯總,過濾器,索引等。
●如果有需要還是建議使用內(nèi)置的類似功能,因?yàn)樽约洪_發(fā)的還是不靈。
●NoSQLs內(nèi)置了壓縮、編解碼器和數(shù)據(jù)移植工具。如果這些可以滿足您的部分需求,那么優(yōu)先選擇使用這些內(nèi)置的功能。這些工具可以執(zhí)行各種各樣的任務(wù),如格式轉(zhuǎn)換、壓縮數(shù)據(jù)等,使用內(nèi)置的工具不僅能夠帶來更好的性能還可以降低網(wǎng)絡(luò)的使用率。
●許多NoSQL數(shù)據(jù)庫支持多種類型的文件系統(tǒng)。其中包括本地文件系統(tǒng),分布式文件系統(tǒng),甚至基于云的存儲(chǔ)解決方案。
●如果在交互式需求上有嚴(yán)格的要求,否則還是盡量嘗試使用NoSQL本地(內(nèi)置)文件系統(tǒng)(例如HBase 使用HDFS)。
●這是因?yàn)椋绻褂靡恍┩獠课募到y(tǒng)/格式,則需要對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的編解碼/數(shù)據(jù)移植。它將在整個(gè)讀/寫過程中增加原本不必要的冗余處理。
●大數(shù)據(jù)系統(tǒng)的數(shù)據(jù)模型一般來說需要根據(jù)需求用例來綜合設(shè)計(jì)。與此形成鮮明對(duì)比的是RDMBS數(shù)據(jù)建模技術(shù)基本都是設(shè)計(jì)成為一個(gè)通用的模型,用外鍵和表之間的關(guān)系用來描述數(shù)據(jù)實(shí)體與現(xiàn)實(shí)世界之間的交互。
●在硬件一級(jí),本地RAID模式也許不太適用。請(qǐng)考慮使用SAN存儲(chǔ)。
5.數(shù)據(jù)處理分析中的性能技巧
數(shù)據(jù)處理和分析是一個(gè)大數(shù)據(jù)系統(tǒng)的核心。像聚合,預(yù)測(cè),聚集,和其它這樣的邏輯操作都需要在這一步完成。
本節(jié)討論一些數(shù)據(jù)處理性能方面的技巧。需要注意的是大數(shù)據(jù)系統(tǒng)架構(gòu)有兩個(gè)組成部分,實(shí)時(shí)數(shù)據(jù)流處理和批量數(shù)據(jù)處理。本節(jié)涵蓋數(shù)據(jù)處理的各個(gè)方面。
●在細(xì)節(jié)評(píng)估和數(shù)據(jù)格式和模型后選擇適當(dāng)?shù)臄?shù)據(jù)處理框架。
●其中一些框架適用于批量數(shù)據(jù)處理,而另外一些適用于實(shí)時(shí)數(shù)據(jù)處理。
●同樣一些框架使用內(nèi)存模式,另外一些是基于磁盤io處理模式。
●有些框架擅長高度并行計(jì)算,這樣能夠大大提高數(shù)據(jù)效率。
●基于內(nèi)存的框架性能明顯優(yōu)于基于磁盤io的框架,但是同時(shí)成本也可想而知。
●概括地說,當(dāng)務(wù)之急是選擇一個(gè)能夠滿足需求的框架。否則就有可能既無法滿足功能需求也無法滿足非功能需求,當(dāng)然也包括性能需求。
●一些這些框架將數(shù)據(jù)劃分成較小的塊。這些小數(shù)據(jù)塊由各個(gè)作業(yè)獨(dú)立處理。協(xié)調(diào)器管理所有這些獨(dú)立的子作業(yè)
●在數(shù)據(jù)分塊是需要當(dāng)心。
●該數(shù)據(jù)快越小,就會(huì)產(chǎn)生越多的作業(yè),這樣就會(huì)增加系統(tǒng)初始化作業(yè)和清理作業(yè)的負(fù)擔(dān)。
●如果數(shù)據(jù)快太大,數(shù)據(jù)傳輸可能需要很長時(shí)間才能完成。這也可能導(dǎo)致資源利用不均衡,長時(shí)間在一臺(tái)服務(wù)器上運(yùn)行一個(gè)大作業(yè),而其他服務(wù)器就會(huì)等待。
●不要忘了查看一個(gè)任務(wù)的作業(yè)總數(shù)。在必要時(shí)調(diào)整這個(gè)參數(shù)。
●最好實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)塊的傳輸。在本機(jī)機(jī)型io的效率會(huì)更高,這么做也會(huì)帶來一個(gè)副作用就是需要將數(shù)據(jù)塊的冗余參數(shù)提高(一般hadoop默認(rèn)是3份)這樣又會(huì)反作用使得系統(tǒng)性能下降。
●此外,實(shí)時(shí)數(shù)據(jù)流需要與批量數(shù)據(jù)處理的結(jié)果進(jìn)行合并。設(shè)計(jì)系統(tǒng)時(shí)盡量減少對(duì)其他作業(yè)的影響。
●大多數(shù)情況下同一數(shù)據(jù)集需要經(jīng)過多次計(jì)算。這種情況可能是由于數(shù)據(jù)抓取等初始步驟就有報(bào)錯(cuò),或者某些業(yè)務(wù)流程發(fā)生變化,值得一提的是舊數(shù)據(jù)也是如此。設(shè)計(jì)系統(tǒng)時(shí)需要注意這個(gè)地方的容錯(cuò)。
●這意味著你可能需要存儲(chǔ)原始數(shù)據(jù)的時(shí)間較長,因此需要更多的存儲(chǔ)。
●數(shù)據(jù)結(jié)果輸出后應(yīng)該保存成用戶期望看到的格式。例如,如果最終的結(jié)果是用戶要求按照每周的時(shí)間序列匯總輸出,那么你就要將結(jié)果以周為單位進(jìn)行匯總保存。
●為了達(dá)到這個(gè)目標(biāo),大數(shù)據(jù)系統(tǒng)的數(shù)據(jù)庫建模就要在滿足用例的前提下進(jìn)行。例如,大數(shù)據(jù)系統(tǒng)經(jīng)常會(huì)輸出一些結(jié)構(gòu)化的數(shù)據(jù)表,這樣在展示輸出上就有很大的優(yōu)勢(shì)。
●更常見的是,這可能會(huì)這將會(huì)讓用戶感覺到性能問題。例如用戶只需要上周的數(shù)據(jù)匯總結(jié)果,如果在數(shù)據(jù)規(guī)模較大的時(shí)候按照每周來匯總數(shù)據(jù),這樣就會(huì)大大降低數(shù)據(jù)處理能力。
●一些框架提供了大數(shù)據(jù)查詢懶評(píng)價(jià)功能。在數(shù)據(jù)沒有在其他地方被使用時(shí)效果不錯(cuò)。
●實(shí)時(shí)監(jiān)控系統(tǒng)的性能,這樣能夠幫助你預(yù)估作業(yè)的完成時(shí)間。
6.數(shù)據(jù)可視化和展示中的性能技巧
精心設(shè)計(jì)的高性能大數(shù)據(jù)系統(tǒng)通過對(duì)數(shù)據(jù)的深入分析,能夠提供有價(jià)值戰(zhàn)略指導(dǎo)。這就是可視化的用武之地。良好的可視化幫助用戶獲取數(shù)據(jù)的多維度透視視圖。
需要注意的是傳統(tǒng)的BI和報(bào)告工具,或用于構(gòu)建自定義報(bào)表系統(tǒng)無法大規(guī)模擴(kuò)展?jié)M足大數(shù)據(jù)系統(tǒng)的可視化需求。同時(shí),許多COTS可視化工具現(xiàn)已上市。
本文將不會(huì)對(duì)這些個(gè)別工具如何進(jìn)行調(diào)節(jié),而是聚焦在一些通用的技術(shù),幫助您能打造可視化層。
●確保可視化層顯示的數(shù)據(jù)都是從最后的匯總輸出表中取得的數(shù)據(jù)。這些總結(jié)表可以根據(jù)時(shí)間短進(jìn)行匯總,建議使用分類或者用例進(jìn)行匯總。這么做可以避免直接從可視化層讀取整個(gè)原始數(shù)據(jù)。
●這不僅最大限度地減少數(shù)據(jù)傳輸,而且當(dāng)用戶在線查看在報(bào)告時(shí)還有助于避免性能卡頓問題。
●重分利用大化可視化工具的緩存。緩存可以對(duì)可視化層的整體性能產(chǎn)生非常不錯(cuò)的影響。
●物化視圖是可以提高性能的另一個(gè)重要的技術(shù)。
●大部分可視化工具允許通過增加線程數(shù)來提高請(qǐng)求響應(yīng)的速度。如果資源足夠、訪問量較大那么這是提高系統(tǒng)性能的好辦法。
●盡量提前將數(shù)據(jù)進(jìn)行預(yù)處理,如果一些數(shù)據(jù)必須在運(yùn)行時(shí)計(jì)算請(qǐng)將運(yùn)行時(shí)計(jì)算簡化到最小。
●可視化工具可以按照各種各樣的展示方法對(duì)應(yīng)不同的讀取策略。其中一些是離線模式、提取模式或者在線連接模式。每種服務(wù)模式都是針對(duì)不同場(chǎng)景設(shè)計(jì)的。
●同樣,一些工具可以進(jìn)行增量數(shù)據(jù)同步。這最大限度地減少了數(shù)據(jù)傳輸,并將整個(gè)可視化過程固化下來。
●保持像圖形,圖表等使用最小的尺寸。
●大多數(shù)可視化框架和工具的使用可縮放矢量圖形(SVG)。使用SVG復(fù)雜的布局可能會(huì)產(chǎn)生嚴(yán)重的性能影響。
7.數(shù)據(jù)安全以及對(duì)于性能的影響
像任何IT系統(tǒng)一樣安全性要求也對(duì)大數(shù)據(jù)系統(tǒng)的性能有很大的影響。在本節(jié)中,我們討論一下安全對(duì)大數(shù)據(jù)平臺(tái)性能的影響。
– 首先確保所有的數(shù)據(jù)源都是經(jīng)過認(rèn)證的。即使所有的數(shù)據(jù)源都是安全的,并且沒有針對(duì)安全方面的需求,那么你可以靈活設(shè)計(jì)一個(gè)安全模塊來配置實(shí)現(xiàn)。
– 數(shù)據(jù)進(jìn)過一次認(rèn)證,那么就不要進(jìn)行二次認(rèn)證。如果實(shí)在需要進(jìn)行二次認(rèn)證,那么使用一些類似于token的技術(shù)保存下來以便后續(xù)繼續(xù)使用。這將節(jié)省數(shù)據(jù)一遍遍認(rèn)證的開銷。
– 您可能需要支持其他的認(rèn)證方式,例如基于PKI解決方案或Kerberos。每一個(gè)都有不同的性能指標(biāo),在最終方案確定前需要將其考慮進(jìn)去。
– 通常情況下數(shù)據(jù)壓縮后進(jìn)入大數(shù)據(jù)處理系統(tǒng)。這么做好處非常明顯不細(xì)說。
– 針對(duì)不同算法的效率、對(duì)cpu的使用量你需要進(jìn)行比較來選出一個(gè)傳輸量、cpu使用量等方面均衡的壓縮算法。
– 同樣,評(píng)估加密邏輯和算法,然后再選擇。
– 明智的做法是敏感信息始終進(jìn)行限制。
– 在審計(jì)跟蹤表或登錄時(shí)您可能需要維護(hù)記錄或類似的訪問,更新等不同的活動(dòng)記錄。這可能需要根據(jù)不同的監(jiān)管策略和用戶需求個(gè)性化的進(jìn)行設(shè)計(jì)和修改。
– 注意,這種需求不僅增加了數(shù)據(jù)處理的復(fù)雜度,但會(huì)增加存儲(chǔ)成本。
– 盡量使用下層提供的安全技術(shù),例如操作系統(tǒng)、數(shù)據(jù)庫等。這些安全解決方案會(huì)比你自己設(shè)計(jì)開發(fā)性能要好很多。
8.總結(jié)
本文介紹了各種性能方面的技巧,這些技術(shù)性的知道可以作為打造大數(shù)據(jù)分析平臺(tái)的一般準(zhǔn)則。大數(shù)據(jù)分析平臺(tái)非常復(fù)雜,為了滿足這種類型系統(tǒng)的性能需求,需要我們從開始建設(shè)的時(shí)候進(jìn)行考量。
本文介紹的技術(shù)準(zhǔn)則可以用在大數(shù)據(jù)平臺(tái)建設(shè)的各個(gè)不同階段,包括安全如何影響大數(shù)據(jù)分析平臺(tái)的性能。
Nosql全稱是Not Only SQL,是一種不同于關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)設(shè)計(jì)方式。對(duì)NoSQL最普遍的解釋是“非關(guān)系型的”,強(qiáng)調(diào)Key-Value Stores和文檔數(shù)據(jù)庫的優(yōu)點(diǎn),而不是單純的反對(duì)RDBMS
mogodb是非關(guān)系型(NoSQL)數(shù)據(jù)庫,它文檔型數(shù)據(jù)庫。
我用過mongodb做了個(gè)小項(xiàng)目練習(xí),我簡單說說(因?yàn)槲乙擦私獠簧睿┧c傳統(tǒng)數(shù)據(jù)庫的區(qū)別吧:
最基本的區(qū)別就是數(shù)據(jù)模型的區(qū)別:
傳統(tǒng)數(shù)據(jù)庫 從大到小為數(shù)據(jù)庫,表,行。而mongodb是:數(shù)據(jù)庫,集合,文檔,BSON(類似json的二進(jìn)制數(shù)據(jù))。
傳統(tǒng)數(shù)據(jù)庫需要預(yù)定義表結(jié)構(gòu)(一經(jīng)定義,不能改變),而mongodb不需要,而且文檔結(jié)構(gòu)可變化(比如說用來相關(guān)的文檔是放在同一個(gè)集合的,但同一個(gè)集合的文檔不一定結(jié)構(gòu)都是相同的)
應(yīng)該還有,想不起來了。
數(shù)據(jù)模型不同,對(duì)應(yīng)的查詢方式也不同。傳統(tǒng)的數(shù)據(jù)庫查詢方式都是sql,而mongodb的查詢方式和sql完全不一樣。
還有其他的,如提高可靠性的方案,原子操作的級(jí)別等等也不一樣。
傳統(tǒng)數(shù)據(jù)庫的一些概念在mongodb是不存在的。
設(shè)計(jì)數(shù)據(jù)庫的時(shí)候也不一樣,傳統(tǒng)數(shù)據(jù)庫在設(shè)計(jì)時(shí)會(huì)進(jìn)行范式化規(guī)范化,而mongodb數(shù)據(jù)庫進(jìn)行設(shè)計(jì)時(shí)候往往會(huì)反范式。
下面是從百度百科拿來的:
對(duì)于NoSQL并沒有一個(gè)明確的范圍和定義,但是他們都普遍存在下面一些共同特征:
不需要預(yù)定義模式:不需要事先定義數(shù)據(jù)模式,預(yù)定義表結(jié)構(gòu)。數(shù)據(jù)中的每條記錄都可能有不同的屬性和格式。當(dāng)插入數(shù)據(jù)時(shí),并不需要預(yù)先定義它們的模式。
無共享架構(gòu):相對(duì)于將所有數(shù)據(jù)存儲(chǔ)的存儲(chǔ)區(qū)域網(wǎng)絡(luò)中的全共享架構(gòu)。NoSQL往往將數(shù)據(jù)劃分后存儲(chǔ)在各個(gè)本地服務(wù)器上。因?yàn)閺谋镜卮疟P讀取數(shù)據(jù)的性能往往好于通過網(wǎng)絡(luò)傳輸讀取數(shù)據(jù)的性能,從而提高了系統(tǒng)的性能。
彈性可擴(kuò)展:可以在系統(tǒng)運(yùn)行的時(shí)候,動(dòng)態(tài)增加或者刪除結(jié)點(diǎn)。不需要停機(jī)維護(hù),數(shù)據(jù)可以自動(dòng)遷移。
分區(qū):相對(duì)于將數(shù)據(jù)存放于同一個(gè)節(jié)點(diǎn),NoSQL數(shù)據(jù)庫需要將數(shù)據(jù)進(jìn)行分區(qū),將記錄分散在多個(gè)節(jié)點(diǎn)上面。并且通常分區(qū)的同時(shí)還要做復(fù)制。這樣既提高了并行性能,又能保證沒有單點(diǎn)失效的問題。
異步復(fù)制:和RAID存儲(chǔ)系統(tǒng)不同的是,NoSQL中的復(fù)制,往往是基于日志的異步復(fù)制。這樣,數(shù)據(jù)就可以盡快地寫入一個(gè)節(jié)點(diǎn),而不會(huì)被網(wǎng)絡(luò)傳輸引起遲延。缺點(diǎn)是并不總是能保證一致性,這樣的方式在出現(xiàn)故障的時(shí)候,可能會(huì)丟失少量的數(shù)據(jù)。
BASE:相對(duì)于事務(wù)嚴(yán)格的ACID特性,NoSQL數(shù)據(jù)庫保證的是BASE特性。BASE是最終一致性和軟事務(wù)。
NoSQL數(shù)據(jù)庫并沒有一個(gè)統(tǒng)一的架構(gòu),兩種NoSQL數(shù)據(jù)庫之間的不同,甚至遠(yuǎn)遠(yuǎn)超過兩種關(guān)系型數(shù)據(jù)庫的不同。可以說,NoSQL各有所長,成功的NoSQL必然特別適用于某些場(chǎng)合或者某些應(yīng)用,在這些場(chǎng)合中會(huì)遠(yuǎn)遠(yuǎn)勝過關(guān)系型數(shù)據(jù)庫和其他的NoSQL。
Hadoop
文件系統(tǒng):文件系統(tǒng)是用來存儲(chǔ)和管理文件,并且提供文件的查詢、增加、刪除等操作。
直觀上的體驗(yàn):在shell窗口輸入 ls 命令,就可以看到當(dāng)前目錄下的文件夾、文件。
文件存儲(chǔ)在哪里?硬盤
一臺(tái)只有250G硬盤的電腦,如果需要存儲(chǔ)500G的文件可以怎么辦?先將電腦硬盤擴(kuò)容至少250G,再將文件分割成多塊,放到多塊硬盤上儲(chǔ)存。
通過 hdfs dfs -ls 命令可以查看分布式文件系統(tǒng)中的文件,就像本地的ls命令一樣。
HDFS在客戶端上提供了查詢、新增和刪除的指令,可以實(shí)現(xiàn)將分布在多臺(tái)機(jī)器上的文件系統(tǒng)進(jìn)行統(tǒng)一的管理。
在分布式文件系統(tǒng)中,一個(gè)大文件會(huì)被切分成塊,分別存儲(chǔ)到幾臺(tái)機(jī)器上。結(jié)合上文中提到的那個(gè)存儲(chǔ)500G大文件的那個(gè)例子,這500G的文件會(huì)按照一定的大小被切分成若干塊,然后分別存儲(chǔ)在若干臺(tái)機(jī)器上,然后提供統(tǒng)一的操作接口。
看到這里,不少人可能會(huì)覺得,分布式文件系統(tǒng)不過如此,很簡單嘛。事實(shí)真的是這樣的么?
潛在問題
假如我有一個(gè)1000臺(tái)機(jī)器組成的分布式系統(tǒng),一臺(tái)機(jī)器每天出現(xiàn)故障的概率是0.1%,那么整個(gè)系統(tǒng)每天出現(xiàn)故障的概率是多大呢?答案是(1-0.1%)^1000=63%,因此需要提供一個(gè)容錯(cuò)機(jī)制來保證發(fā)生差錯(cuò)時(shí)文件依然可以讀出,這里暫時(shí)先不展開介紹。
如果要存儲(chǔ)PB級(jí)或者EB級(jí)的數(shù)據(jù),成千上萬臺(tái)機(jī)器組成的集群是很常見的,所以說分布式系統(tǒng)比單機(jī)系統(tǒng)要復(fù)雜得多呀。
這是一張HDFS的架構(gòu)簡圖:
client通過nameNode了解數(shù)據(jù)在哪些DataNode上,從而發(fā)起查詢。此外,不僅是查詢文件,寫入文件的時(shí)候也是先去請(qǐng)教N(yùn)ameNode,看看應(yīng)該往哪個(gè)DateNode中去寫。
為了某一份數(shù)據(jù)只寫入到一個(gè)Datanode中,而這個(gè)Datanode因?yàn)槟承┰虺鲥e(cuò)無法讀取的問題,需要通過冗余備份的方式來進(jìn)行容錯(cuò)處理。因此,HDFS在寫入一個(gè)數(shù)據(jù)塊的時(shí)候,不會(huì)僅僅寫入一個(gè)DataNode,而是會(huì)寫入到多個(gè)DataNode中,這樣,如果其中一個(gè)DataNode壞了,還可以從其余的DataNode中拿到數(shù)據(jù),保證了數(shù)據(jù)不丟失。
實(shí)際上,每個(gè)數(shù)據(jù)塊在HDFS上都會(huì)保存多份,保存在不同的DataNode上。這種是犧牲一定存儲(chǔ)空間換取可靠性的做法。
接下來我們來看一下完整的文件寫入的流程:
大文件要寫入HDFS,client端根據(jù)配置將大文件分成固定大小的塊,然后再上傳到HDFS。
讀取文件的流程:
1、client詢問NameNode,我要讀取某個(gè)路徑下的文件,麻煩告訴我這個(gè)文件都在哪些DataNode上?
2、NameNode回復(fù)client,這個(gè)路徑下的文件被切成了3塊,分別在DataNode1、DataNode3和DataNode4上
3、client去找DataNode1、DataNode3和DataNode4,拿到3個(gè)文件塊,通過stream讀取并且整合起來
文件寫入的流程:
1、client先將文件分塊,然后詢問NameNode,我要寫入一個(gè)文件到某個(gè)路徑下,文件有3塊,應(yīng)該怎么寫?
2、NameNode回復(fù)client,可以分別寫到DataNode1、DataNode2、DataNode3、DataNode4上,記住,每個(gè)塊重復(fù)寫3份,總共是9份
3、client找到DataNode1、DataNode2、DataNode3、DataNode4,把數(shù)據(jù)寫到他們上面
出于容錯(cuò)的考慮,每個(gè)數(shù)據(jù)塊有3個(gè)備份,但是3個(gè)備份快都直接由client端直接寫入勢(shì)必會(huì)帶來client端過重的寫入壓力,這個(gè)點(diǎn)是否有更好的解決方案呢?回憶一下mysql主備之間是通過binlog文件進(jìn)行同步的,HDFS當(dāng)然也可以借鑒這個(gè)思想,數(shù)據(jù)其實(shí)只需要寫入到一個(gè)datanode上,然后由datanode之間相互進(jìn)行備份同步,減少了client端的寫入壓力,那么至于是一個(gè)datanode寫入成功即成功,還是需要所有的參與備份的datanode返回寫入成功才算成功,是可靠性配置的策略,當(dāng)然這個(gè)設(shè)置會(huì)影響到數(shù)據(jù)寫入的吞吐率,我們可以看到可靠性和效率永遠(yuǎn)是“魚和熊掌不可兼得”的。
潛在問題
NameNode確實(shí)會(huì)回放editlog,但是不是每次都從頭回放,它會(huì)先加載一個(gè)fsimage,這個(gè)文件是之前某一個(gè)時(shí)刻整個(gè)NameNode的文件元數(shù)據(jù)的內(nèi)存快照,然后再在這個(gè)基礎(chǔ)上回放editlog,完成后,會(huì)清空editlog,再把當(dāng)前文件元數(shù)據(jù)的內(nèi)存狀態(tài)寫入fsimage,方便下一次加載。
這樣,全量回放就變成了增量回放,但是如果NameNode長時(shí)間未重啟過,editlog依然會(huì)比較大,恢復(fù)的時(shí)間依然比較長,這個(gè)問題怎么解呢?
SecondNameNode是一個(gè)NameNode內(nèi)的定時(shí)任務(wù)線程,它會(huì)定期地將editlog寫入fsimage,然后情況原來的editlog,從而保證editlog的文件大小維持在一定大小。
NameNode掛了, SecondNameNode并不能替代NameNode,所以如果集群中只有一個(gè)NameNode,它掛了,整個(gè)系統(tǒng)就掛了。hadoop2.x之前,整個(gè)集群只能有一個(gè)NameNode,是有可能發(fā)生單點(diǎn)故障的,所以hadoop1.x有本身的不穩(wěn)定性。但是hadoop2.x之后,我們可以在集群中配置多個(gè)NameNode,就不會(huì)有這個(gè)問題了,但是配置多個(gè)NameNode,需要注意的地方就更多了,系統(tǒng)就更加復(fù)雜了。
俗話說“一山不容二虎”,兩個(gè)NameNode只能有一個(gè)是活躍狀態(tài)active,另一個(gè)是備份狀態(tài)standby,我們看一下兩個(gè)NameNode的架構(gòu)圖。
兩個(gè)NameNode通過JournalNode實(shí)現(xiàn)同步editlog,保持狀態(tài)一致可以相互替換。
因?yàn)閍ctive的NameNode掛了之后,standby的NameNode要馬上接替它,所以它們的數(shù)據(jù)要時(shí)刻保持一致,在寫入數(shù)據(jù)的時(shí)候,兩個(gè)NameNode內(nèi)存中都要記錄數(shù)據(jù)的元信息,并保持一致。這個(gè)JournalNode就是用來在兩個(gè)NameNode中同步數(shù)據(jù)的,并且standby NameNode實(shí)現(xiàn)了SecondNameNode的功能。
進(jìn)行數(shù)據(jù)同步操作的過程如下:
active NameNode有操作之后,它的editlog會(huì)被記錄到JournalNode中,standby NameNode會(huì)從JournalNode中讀取到變化并進(jìn)行同步,同時(shí)standby NameNode會(huì)監(jiān)聽記錄的變化。這樣做的話就是實(shí)時(shí)同步了,并且standby NameNode就實(shí)現(xiàn)了SecondNameNode的功能。
優(yōu)點(diǎn):
缺點(diǎn):
什么是NoSQL
大家有沒有聽說過“NoSQL”呢?近年,這個(gè)詞極受關(guān)注。看到“NoSQL”這個(gè)詞,大家可能會(huì)誤以為是“No!SQL”的縮寫,并深感憤怒:“SQL怎么會(huì)沒有必要了呢?”但實(shí)際上,它是“Not Only SQL”的縮寫。它的意義是:適用關(guān)系型數(shù)據(jù)庫的時(shí)候就使用關(guān)系型數(shù)據(jù)庫,不適用的時(shí)候也沒有必要非使用關(guān)系型數(shù)據(jù)庫不可,可以考慮使用更加合適的數(shù)據(jù)存儲(chǔ)。
為彌補(bǔ)關(guān)系型數(shù)據(jù)庫的不足,各種各樣的NoSQL數(shù)據(jù)庫應(yīng)運(yùn)而生。
為了更好地了解本書所介紹的NoSQL數(shù)據(jù)庫,對(duì)關(guān)系型數(shù)據(jù)庫的理解是必不可少的。那么,就讓我們先來看一看關(guān)系型數(shù)據(jù)庫的歷史、分類和特征吧。
關(guān)系型數(shù)據(jù)庫簡史
1969年,埃德加?6?1弗蘭克?6?1科德(Edgar Frank Codd)發(fā)表了劃時(shí)代的論文,首次提出了關(guān)系數(shù)據(jù)模型的概念。但可惜的是,刊登論文的《IBM Research Report》只是IBM公司的內(nèi)部刊物,因此論文反響平平。1970年,他再次在刊物《Communication of the ACM》上發(fā)表了題為“A Relational Model of Data for Large Shared Data banks”(大型共享數(shù)據(jù)庫的關(guān)系模型)的論文,終于引起了大家的關(guān)注。
科德所提出的關(guān)系數(shù)據(jù)模型的概念成為了現(xiàn)今關(guān)系型數(shù)據(jù)庫的基礎(chǔ)。當(dāng)時(shí)的關(guān)系型數(shù)據(jù)庫由于硬件性能低劣、處理速度過慢而遲遲沒有得到實(shí)際應(yīng)用。但之后隨著硬件性能的提升,加之使用簡單、性能優(yōu)越等優(yōu)點(diǎn),關(guān)系型數(shù)據(jù)庫得到了廣泛的應(yīng)用。
通用性及高性能
雖然本書是講解NoSQL數(shù)據(jù)庫的,但有一個(gè)重要的大前提,請(qǐng)大家一定不要誤解。這個(gè)大前提就是“關(guān)系型數(shù)據(jù)庫的性能絕對(duì)不低,它具有非常好的通用性和非常高的性能”。毫無疑問,對(duì)于絕大多數(shù)的應(yīng)用來說它都是最有效的解決方案。
突出的優(yōu)勢(shì)
關(guān)系型數(shù)據(jù)庫作為應(yīng)用廣泛的通用型數(shù)據(jù)庫,它的突出優(yōu)勢(shì)主要有以下幾點(diǎn):
保持?jǐn)?shù)據(jù)的一致性(事務(wù)處理)
由于以標(biāo)準(zhǔn)化為前提,數(shù)據(jù)更新的開銷很小(相同的字段基本上都只有一處)
可以進(jìn)行JOIN等復(fù)雜查詢
存在很多實(shí)際成果和專業(yè)技術(shù)信息(成熟的技術(shù))
這其中,能夠保持?jǐn)?shù)據(jù)的一致性是關(guān)系型數(shù)據(jù)庫的最大優(yōu)勢(shì)。在需要嚴(yán)格保證數(shù)據(jù)一致性和處理完整性的情況下,用關(guān)系型數(shù)據(jù)庫是肯定沒有錯(cuò)的。但是有些情況不需要JOIN,對(duì)上述關(guān)系型數(shù)據(jù)庫的優(yōu)點(diǎn)也沒有什么特別需要,這時(shí)似乎也就沒有必要拘泥于關(guān)系型數(shù)據(jù)庫了。
關(guān)系型數(shù)據(jù)庫的不足
不擅長的處理
就像之前提到的那樣,關(guān)系型數(shù)據(jù)庫的性能非常高。但是它畢竟是一個(gè)通用型的數(shù)據(jù)庫,并不能完全適應(yīng)所有的用途。具體來說它并不擅長以下處理:
大量數(shù)據(jù)的寫入處理
為有數(shù)據(jù)更新的表做索引或表結(jié)構(gòu)(schema)變更
字段不固定時(shí)應(yīng)用
對(duì)簡單查詢需要快速返回結(jié)果的處理
。。。。。。
NoSQL數(shù)據(jù)庫
為了彌補(bǔ)關(guān)系型數(shù)據(jù)庫的不足(特別是最近幾年),NoSQL數(shù)據(jù)庫出現(xiàn)了。關(guān)系型數(shù)據(jù)庫應(yīng)用廣泛,能進(jìn)行事務(wù)處理和JOIN等復(fù)雜處理。相對(duì)地,NoSQL數(shù)據(jù)庫只應(yīng)用在特定領(lǐng)域,基本上不進(jìn)行復(fù)雜的處理,但它恰恰彌補(bǔ)了之前所列舉的關(guān)系型數(shù)據(jù)庫的不足之處。
易于數(shù)據(jù)的分散
如前所述,關(guān)系型數(shù)據(jù)庫并不擅長大量數(shù)據(jù)的寫入處理。原本關(guān)系型數(shù)據(jù)庫就是以JOIN為前提的,就是說,各個(gè)數(shù)據(jù)之間存在關(guān)聯(lián)是關(guān)系型數(shù)據(jù)庫得名的主要原因。為了進(jìn)行JOIN處理,關(guān)系型數(shù)據(jù)庫不得不把數(shù)據(jù)存儲(chǔ)在同一個(gè)服務(wù)器內(nèi),這不利于數(shù)據(jù)的分散。相反,NoSQL數(shù)據(jù)庫原本就不支持JOIN處理,各個(gè)數(shù)據(jù)都是獨(dú)立設(shè)計(jì)的,很容易把數(shù)據(jù)分散到多個(gè)服務(wù)器上。由于數(shù)據(jù)被分散到了多個(gè)服務(wù)器上,減少了每個(gè)服務(wù)器上的數(shù)據(jù)量,即使要進(jìn)行大量數(shù)據(jù)的寫入操作,處理起來也更加容易。同理,數(shù)據(jù)的讀入操作當(dāng)然也同樣容易。
提升性能和增大規(guī)模
下面說一點(diǎn)題外話,如果想要使服務(wù)器能夠輕松地處理更大量的數(shù)據(jù),那么只有兩個(gè)選擇:一是提升性能,二是增大規(guī)模。下面我們來整理一下這兩者的不同。
首先,提升性能指的就是通過提升現(xiàn)行服務(wù)器自身的性能來提高處理能力。這是非常簡單的方法,程序方面也不需要進(jìn)行變更,但需要一些費(fèi)用。若要購買性能翻倍的服務(wù)器,需要花費(fèi)的資金往往不只是原來的2倍,可能需要多達(dá)5到10倍。這種方法雖然簡單,但是成本較高。
另一方面,增大規(guī)模指的是使用多臺(tái)廉價(jià)的服務(wù)器來提高處理能力。它需要對(duì)程序進(jìn)行變更,但由于使用廉價(jià)的服務(wù)器,可以控制成本。另外,以后只要依葫蘆畫瓢增加廉價(jià)服務(wù)器的數(shù)量就可以了。
不對(duì)大量數(shù)據(jù)進(jìn)行處理的話就沒有使用的必要嗎?
NoSQL數(shù)據(jù)庫基本上來說為了“使大量數(shù)據(jù)的寫入處理更加容易(讓增加服務(wù)器數(shù)量更容易)”而設(shè)計(jì)的。但如果不是對(duì)大量數(shù)據(jù)進(jìn)行操作的話,NoSQL數(shù)據(jù)庫的應(yīng)用就沒有意義嗎?
答案是否定的。的確,它在處理大量數(shù)據(jù)方面很有優(yōu)勢(shì)。但實(shí)際上NoSQL數(shù)據(jù)庫還有各種各樣的特點(diǎn),如果能夠恰當(dāng)?shù)乩眠@些特點(diǎn)將會(huì)是非常有幫助。具體的例子將會(huì)在第2章和第3章進(jìn)行介紹,這些用途將會(huì)讓你感受到利用NoSQL的好處。
希望順暢地對(duì)數(shù)據(jù)進(jìn)行緩存(Cache)處理
希望對(duì)數(shù)組類型的數(shù)據(jù)進(jìn)行高速處理
希望進(jìn)行全部保存
多樣的NoSQL數(shù)據(jù)庫
NoSQL數(shù)據(jù)庫存在著“key-value存儲(chǔ)”、“文檔型數(shù)據(jù)庫”、“列存儲(chǔ)數(shù)據(jù)庫”等各種各樣的種類,每種數(shù)據(jù)庫又包含各自的特點(diǎn)。下一節(jié)讓我們一起來了解一下NoSQL數(shù)據(jù)庫的種類和特點(diǎn)。
NoSQL數(shù)據(jù)庫是什么
NoSQL說起來簡單,但實(shí)際上到底有多少種呢?我在提筆的時(shí)候,到NoSQL的官方網(wǎng)站上確認(rèn)了一下,竟然已經(jīng)有122種了。另外官方網(wǎng)站上也介紹了本書沒有涉及到的圖形數(shù)據(jù)庫和對(duì)象數(shù)據(jù)庫等各個(gè)類別。不知不覺間,原來已經(jīng)出現(xiàn)了這么多的NoSQL數(shù)據(jù)庫啊。
本節(jié)將為大家介紹具有代表性的NoSQL數(shù)據(jù)庫。
key-value存儲(chǔ)
這是最常見的NoSQL數(shù)據(jù)庫,它的數(shù)據(jù)是以key-value的形式存儲(chǔ)的。雖然它的處理速度非常快,但是基本上只能通過key的完全一致查詢獲取數(shù)據(jù)。根據(jù)數(shù)據(jù)的保存方式可以分為臨時(shí)性、永久性和兩者兼具三種。
臨時(shí)性
memcached屬于這種類型。所謂臨時(shí)性就是 “數(shù)據(jù)有可能丟失”的意思。memcached把所有數(shù)據(jù)都保存在內(nèi)存中,這樣保存和讀取的速度非常快,但是當(dāng)memcached停止的時(shí)候,數(shù)據(jù)就不存在了。由于數(shù)據(jù)保存在內(nèi)存中,所以無法操作超出內(nèi)存容量的數(shù)據(jù)(舊數(shù)據(jù)會(huì)丟失)。
在內(nèi)存中保存數(shù)據(jù)
可以進(jìn)行非常快速的保存和讀取處理
數(shù)據(jù)有可能丟失
永久性
Tokyo Tyrant、Flare、ROMA等屬于這種類型。和臨時(shí)性相反,所謂永久性就是“數(shù)據(jù)不會(huì)丟失”的意思。這里的key-value存儲(chǔ)不像memcached那樣在內(nèi)存中保存數(shù)據(jù),而是把數(shù)據(jù)保存在硬盤上。與memcached在內(nèi)存中處理數(shù)據(jù)比起來,由于必然要發(fā)生對(duì)硬盤的IO操作,所以性能上還是有差距的。但數(shù)據(jù)不會(huì)丟失是它最大的優(yōu)勢(shì)。
在硬盤上保存數(shù)據(jù)
可以進(jìn)行非常快速的保存和讀取處理(但無法與memcached相比)
數(shù)據(jù)不會(huì)丟失
兩者兼具
Redis屬于這種類型。Redis有些特殊,臨時(shí)性和永久性兼具,且集合了臨時(shí)性key-value存儲(chǔ)和永久性key-value存儲(chǔ)的優(yōu)點(diǎn)。Redis首先把數(shù)據(jù)保存到內(nèi)存中,在滿足特定條件(默認(rèn)是15分鐘一次以上,5分鐘內(nèi)10個(gè)以上,1分鐘內(nèi)10000個(gè)以上的key發(fā)生變更)的時(shí)候?qū)?shù)據(jù)寫入到硬盤中。這樣既確保了內(nèi)存中數(shù)據(jù)的處理速度,又可以通過寫入硬盤來保證數(shù)據(jù)的永久性。這種類型的數(shù)據(jù)庫特別適合于處理數(shù)組類型的數(shù)據(jù)。
同時(shí)在內(nèi)存和硬盤上保存數(shù)據(jù)
可以進(jìn)行非常快速的保存和讀取處理
保存在硬盤上的數(shù)據(jù)不會(huì)消失(可以恢復(fù))
適合于處理數(shù)組類型的數(shù)據(jù)
面向文檔的數(shù)據(jù)庫
MongoDB、CouchDB屬于這種類型。它們屬于NoSQL數(shù)據(jù)庫,但與key-value存儲(chǔ)相異。
不定義表結(jié)構(gòu)
面向文檔的數(shù)據(jù)庫具有以下特征:即使不定義表結(jié)構(gòu),也可以像定義了表結(jié)構(gòu)一樣使用。關(guān)系型數(shù)據(jù)庫在變更表結(jié)構(gòu)時(shí)比較費(fèi)事,而且為了保持一致性還需修改程序。然而NoSQL數(shù)據(jù)庫則可省去這些麻煩(通常程序都是正確的),確實(shí)是方便快捷。
可以使用復(fù)雜的查詢條件
跟key-value存儲(chǔ)不同的是,面向文檔的數(shù)據(jù)庫可以通過復(fù)雜的查詢條件來獲取數(shù)據(jù)。雖然不具備事務(wù)處理和JOIN這些關(guān)系型數(shù)據(jù)庫所具有的處理能力,但除此以外的其他處理基本上都能實(shí)現(xiàn)。這是非常容易使用的NoSQL數(shù)據(jù)庫。
不需要定義表結(jié)構(gòu)
可以利用復(fù)雜的查詢條件
面向列的數(shù)據(jù)庫
Cassandra、Hbase、HyperTable屬于這種類型。由于近年來數(shù)據(jù)量出現(xiàn)爆發(fā)性增長,這種類型的NoSQL數(shù)據(jù)庫尤其引人注目。
面向行的數(shù)據(jù)庫和面向列的數(shù)據(jù)庫
普通的關(guān)系型數(shù)據(jù)庫都是以行為單位來存儲(chǔ)數(shù)據(jù)的,擅長進(jìn)行以行為單位的讀入處理,比如特定條件數(shù)據(jù)的獲取。因此,關(guān)系型數(shù)據(jù)庫也被稱為面向行的數(shù)據(jù)庫。相反,面向列的數(shù)據(jù)庫是以列為單位來存儲(chǔ)數(shù)據(jù)的,擅長以列為單位讀入數(shù)據(jù)。
高擴(kuò)展性
面向列的數(shù)據(jù)庫具有高擴(kuò)展性,即使數(shù)據(jù)增加也不會(huì)降低相應(yīng)的處理速度(特別是寫入速度),所以它主要應(yīng)用于需要處理大量數(shù)據(jù)的情況。另外,利用面向列的數(shù)據(jù)庫的優(yōu)勢(shì),把它作為批處理程序的存儲(chǔ)器來對(duì)大量數(shù)據(jù)進(jìn)行更新也是非常有用的。但由于面向列的數(shù)據(jù)庫跟現(xiàn)行數(shù)據(jù)庫存儲(chǔ)的思維方式有很大不同,應(yīng)用起來十分困難。
高擴(kuò)展性(特別是寫入處理)
應(yīng)用十分困難
最近,像Twitter和Facebook這樣需要對(duì)大量數(shù)據(jù)進(jìn)行更新和查詢的網(wǎng)絡(luò)服務(wù)不斷增加,面向列的數(shù)據(jù)庫的優(yōu)勢(shì)對(duì)其中一些服務(wù)是非常有用的,但是由于這與本書所要介紹的內(nèi)容關(guān)系不大,就不進(jìn)行詳細(xì)介紹了。
總結(jié):
NoSQL并不是No-SQL,而是指Not Only SQL。
NoSQL的出現(xiàn)是為了彌補(bǔ)SQL數(shù)據(jù)庫因?yàn)槭聞?wù)等機(jī)制帶來的對(duì)海量數(shù)據(jù)、高并發(fā)請(qǐng)求的處理的性能上的欠缺。
NoSQL不是為了替代SQL而出現(xiàn)的,它是一種替補(bǔ)方案,而不是解決方案的首選。
絕大多數(shù)的NoSQL產(chǎn)品都是基于大內(nèi)存和高性能隨機(jī)讀寫的(比如具有更高性能的固態(tài)硬盤陣列),一般的小型企業(yè)在選擇NoSQL時(shí)一定要慎重!不要為了NoSQL而NoSQL,可能會(huì)導(dǎo)致花了冤枉錢又耽擱了項(xiàng)目進(jìn)程。
NoSQL不是萬能的,但在大型項(xiàng)目中,你往往需要它!
1、在本地和服務(wù)器都安裝同樣的數(shù)據(jù)庫客戶端,如oracle常用SQLPlus、MySQL常用HeiDi sql或者navicat、mssql2005則常用SQL Server Management Studio;
2、在本地通過數(shù)據(jù)庫客戶端導(dǎo)出數(shù)據(jù)庫為sql文件;
3、將sql文件遠(yuǎn)程傳遞到服務(wù)器上;
4、在服務(wù)器上用相同的數(shù)據(jù)庫客戶端將sql文件執(zhí)行一遍即可將本地?cái)?shù)據(jù)庫導(dǎo)入到服務(wù)器上。
網(wǎng)站欄目:nosql本地,noSQL數(shù)據(jù)庫
標(biāo)題URL:http://chinadenli.net/article41/dseihed.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)網(wǎng)站制作、定制開發(fā)、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)