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