傳統(tǒng)觀點認為,關(guān)系型數(shù)據(jù)庫的可伸縮性和健壯性都不足以支撐需要大量連接且吞吐量巨大的物聯(lián)網(wǎng),以及物聯(lián)網(wǎng)應(yīng)用程序所需的各種特性。但我知道這不是真的,因為Oracle的客戶多年來就一直在這么做。他們是怎么做到的呢?
首先,讓我們確保在物聯(lián)網(wǎng)的含義上達成一致。官方的定義是通過互聯(lián)網(wǎng)實現(xiàn)萬物互聯(lián),并使它們能夠發(fā)送和接收數(shù)據(jù)。物聯(lián)網(wǎng)涉及到各種各樣的設(shè)備,從手表、電視、電話到烤箱、冰箱,以及專為連接和共享數(shù)據(jù)而制成的“智能”煤氣表。并且在某些時候,需要收集這些數(shù)據(jù)用于信息挖掘。
從數(shù)據(jù)庫的角度來看,組織需要捕獲從物聯(lián)網(wǎng)設(shè)備發(fā)送的大量數(shù)據(jù),消化這些數(shù)據(jù),然后根據(jù)業(yè)務(wù)需要進行數(shù)據(jù)挖掘。對于企業(yè)來說,提取和快速分析這些數(shù)據(jù)對于保持其在當(dāng)今需要全天候、100%正常運行的商業(yè)世界中保持其競爭優(yōu)勢至關(guān)重要。要實現(xiàn)這個目標(biāo)可以采用許多不同的形式,而其中的大多數(shù)都可以很好地與經(jīng)過優(yōu)化的關(guān)系數(shù)據(jù)庫和硬件一起工作。
到底是使用SQL還是NoSQL?
一個常見的誤解是要想支撐起物聯(lián)網(wǎng)的工作負載就必須使用NoSQL數(shù)據(jù)庫,因為其所需的數(shù)據(jù)攝取率超過了傳統(tǒng)關(guān)系數(shù)據(jù)庫的能力。但事實并非如此,Oracle的許多客戶都證明了這一點。我們發(fā)現(xiàn),一個經(jīng)過優(yōu)化的關(guān)系數(shù)據(jù)庫在Oracle RAC集群的單個節(jié)點中攝取的數(shù)據(jù)比在某些整個NoSQL環(huán)境中攝取的數(shù)據(jù)還要多。注意,我說的是一個優(yōu)化了的關(guān)系數(shù)據(jù)庫。
總體而言,物聯(lián)網(wǎng)工作負載的特征是需要進行大量小型、輕量級的數(shù)據(jù)轉(zhuǎn)換,通常包括復(fù)雜的數(shù)據(jù)類型,如地理空間數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)(視頻或音頻記錄)。因此,例如,從腕帶收集健身數(shù)據(jù)的公司將會使用地理空間數(shù)據(jù)(記錄步行路線)以及步數(shù)、心率等。
盡管最近被大肆宣傳,但高攝取量的工作負載并不是一個新概念。例如,我們的一個電信客戶每秒處理著數(shù)百萬個呼叫記錄,每天增加多達18TB的數(shù)據(jù)。
在關(guān)系數(shù)據(jù)庫上運行的股票交易所每秒將記錄180,000條消息,每天增加多達15TB的數(shù)據(jù)。
那么他們又是怎么做到的呢?關(guān)鍵是保證數(shù)據(jù)庫的可伸縮性、靈活性以及提供實時分析的速度。在篩選非結(jié)構(gòu)化數(shù)據(jù)時使用經(jīng)過優(yōu)化的硬件也是獲得成功的重要因素。
搭建大規(guī)模物聯(lián)網(wǎng)的關(guān)鍵1:數(shù)據(jù)庫的可伸縮性
可伸縮性是指系統(tǒng)提供的與可用硬件資源成比例的吞吐量的能力,并且僅受可用硬件資源的限制。擴展Oracle數(shù)據(jù)庫系統(tǒng)有兩種不同的方法:實時應(yīng)用集群(Real Application Clusters)和數(shù)據(jù)庫分片(sharding)。
實時應(yīng)用集群(RAC)可以使任何打包或定制的應(yīng)用程序都能夠不加修改的在連接到共享存儲的服務(wù)器池中運行。如果池中的服務(wù)器出現(xiàn)故障,數(shù)據(jù)庫將繼續(xù)在其余服務(wù)器上運行。當(dāng)需要更多的處理能力時,您只需將另一臺服務(wù)器添加到池中,而不會導(dǎo)致任何停機。
Sharding則允許將大型數(shù)據(jù)庫分為較小的數(shù)據(jù)庫或分片,每個數(shù)據(jù)庫或分片都可以存儲在不同的硬件上。想象一下,一家全球零售公司擁有一個龐大的關(guān)系數(shù)據(jù)庫,其中包含所有可用商品的分片數(shù)據(jù);數(shù)據(jù)庫的每個分片都將包含目錄的一部分。
當(dāng)查詢請求特定窗口的小部件時,數(shù)據(jù)庫服務(wù)器知道這些小部件類型存儲在哪個分片上并將直接從那里檢索數(shù)據(jù)。這種模式在全球經(jīng)濟下的另一個好處是,可以為每個國家創(chuàng)建一個分片,并將當(dāng)?shù)胤ㄒ?guī)應(yīng)用于該特定分片。例如,德國要求將所有德國數(shù)據(jù)物理存儲在本國境內(nèi)。使用分片技術(shù)就很容易做到這一點。
目前,大多數(shù)大規(guī)模操作的數(shù)據(jù)庫都提供分片技術(shù),包括MongoDB、Microsoft SQL Server和PostgreSQL。但僅僅將數(shù)據(jù)進行分片是不夠的。同樣重要的是能夠有效地運行跨分片查詢,因為這將大大減少獲得完整業(yè)務(wù)視圖所需的時間。
物聯(lián)網(wǎng)的一個關(guān)鍵要求是能夠快速獲取大量數(shù)據(jù)。因此,無論數(shù)據(jù)在何處暫存,該存儲的帶寬需要比數(shù)據(jù)庫本身更能控制負載的速度。畢竟,數(shù)據(jù)的加載速度永遠不會超過讀取速度。如果網(wǎng)絡(luò)讀取速度不能超過每秒200兆字節(jié),那么數(shù)據(jù)的加載速度也就不能超過每秒200兆字節(jié)。
可伸縮性的其他重要組成部分是數(shù)組插入的使用(與單行插入不同)、并行執(zhí)行和外部表的使用。
搭建大規(guī)模物聯(lián)網(wǎng)的關(guān)鍵2:數(shù)據(jù)庫的靈活性
靈活性是指能夠快速、輕松地適應(yīng)變化的能力。當(dāng)下的物聯(lián)網(wǎng)仍處于起步階段,每臺設(shè)備都可能有新的使用案例。能夠輕松地適應(yīng)數(shù)據(jù)格式的變化是至關(guān)重要的。當(dāng)遇到這種需求時,開發(fā)人員通常會轉(zhuǎn)向JSON。JSON極大地簡化了應(yīng)用程序開發(fā),因為它允許在應(yīng)用程序和數(shù)據(jù)庫中使用相同的無模式表示。
分區(qū)也是實現(xiàn)靈活性的關(guān)鍵。分區(qū)使大量數(shù)據(jù)更易于管理,提高整體性能,并且對應(yīng)用程序完全透明。分區(qū)的另一個好處是可以將歷史數(shù)據(jù)存儲在單獨的分區(qū)中,從而可以將數(shù)據(jù)壓縮并移動到較低的存儲層。這樣,即使將數(shù)據(jù)用于數(shù)據(jù)挖掘,也不會減慢實時查詢的速度。
搭建大規(guī)模物聯(lián)網(wǎng)的關(guān)鍵3:實時分析
如果無法及時分析數(shù)據(jù)以達到影響業(yè)務(wù)成果的目的,所有這些加快數(shù)據(jù)接收和數(shù)據(jù)存儲的技巧都將毫無用處。在一天結(jié)束時,企業(yè)必須使用數(shù)據(jù),這意味著需要將數(shù)據(jù)取出。
對于一個全球性的零售組織來說,其中的一個目標(biāo)可能是需要及時匯總所有分片上銷售的產(chǎn)品,以確定當(dāng)下全球***的10種產(chǎn)品。
而對于一家國際電信公司來說,同樣的數(shù)據(jù)庫體系結(jié)構(gòu)可能在幾個不同的方面都有所幫助。它們的大多數(shù)查詢來自客戶,因此它們可以使用分片和分區(qū)技術(shù)來從查詢的執(zhí)行中消除大部分的數(shù)據(jù)存儲,從而滿足客戶所期望的速度。
在內(nèi)部,業(yè)務(wù)經(jīng)理則希望能夠減少客戶流失并提高盈利能力,因此他們挖掘分片和分區(qū)中的數(shù)據(jù),尋找特定模式來確定哪些客戶可能會取消他們的服務(wù),或者他們可以主動向客戶提供哪些額外的產(chǎn)品(如國際化的數(shù)據(jù)計劃)。
例如,他們可能會提取被取消賬單并分析客戶的歷史賬單。分析在客戶離開之前發(fā)生了什么?有什么共同的模式嗎?在他們轉(zhuǎn)到另一家供應(yīng)商之前,是否有很大一部分人透支了他們的數(shù)據(jù)并連續(xù)收到了三筆大額賬單?
一旦確定了這些模式,就可以采取積極主動的步驟來保持他們的業(yè)務(wù)。例如,在客戶經(jīng)歷了兩次數(shù)據(jù)超支后,客戶代表就可以聯(lián)系他們,提供一個包含更多數(shù)據(jù)的不同計劃,以避免客戶流失。
要進一步了解關(guān)于簡化數(shù)據(jù)庫設(shè)計和針對物聯(lián)網(wǎng)工作負載進行優(yōu)化的硬件,可以查看Oracle提供的有關(guān)于此的白皮書。
來源:51CTO