你應該使用哪個云數據庫?
云計算的基本原則是采用一次性和可更換的多臺機器,這對采用云計算技術以及在云中實施的數據庫系統的功能有直接影響。
傳統數據庫大致可以分為并行優(yōu)先(例如MongoDB或Teradata)或單存儲系統優(yōu)先(例如PostgreSQL或MySQL)。這兩個類別都有其核心設計固有的局限性。這些限制的程度部分是成熟度的函數。但是,對于某些核心架構決策來說,可能無法有效支持特定功能。
例如,Greenplum有序列,但Redshift沒有,盡管這兩者都是PostgreSQL的衍生物。而BigQuery沒有序列,但Teradata有序列,盡管在傳統意義上它們并不是真正的序列。
云數據庫屬于相同的類別,而新系統明顯傾向于并行優(yōu)先。云計算系統的基本屬性是機器的可擴展性和可替換性的并行性。
在單系統優(yōu)先類別中,云計算實例化往往側重于傳統單機產品的管理成本、升級和可靠性(RPO/RTO),例如Heroku PostgreSQL、Amazon Aurora(PostgreSQL/MySQL)、Google cloud SQL(PostgreSQL/MySQL)和Azure SQL(SQL Server)。
在并行優(yōu)先類別中,實際上有兩個子類別:SQL/關系類別(BigQuery、Snowflake、Redshift、Spark、AzureSynapse)和DHT/NoSQL(BigTable、Dynamo、Cassandra、Redis)類別。這種區(qū)別與是否存在類似SQL的語言關系不大,而與系統中數據的物理布局是否經過調整以便通過散列快速查找鍵進行單行訪問,或者使用排序合并和篩選操作進行批量訪問有關。
并行優(yōu)先關系數據庫通常依賴于一個或多個原生云存儲系統。這些存儲系統總是并行優(yōu)先構建,并公開一個非常有限的get-object/put-object API,它通常允許對數據進行分區(qū),但不允許高性能隨機訪問。這限制了數據庫實現高級持久數據結構(例如索引),在許多情況下,還限制了可變數據的能力。
因此,使用原生存儲的云計算實現往往依賴于微分區(qū)的順序讀寫而不是索引。根據對象名稱,存儲級對象往往只有一條物理訪問路徑。索引必須在底層存儲的外部實現,即使這樣做了,底層云存儲API也可能使在存儲級別對象中實際使用地址或字節(jié)偏移量變得困難。
云計算的優(yōu)點
(1) 云平臺是為用戶管理的基礎設施。
在云中,部署、可靠性和管理是用戶關注的問題。從電源、軟件安裝和硬件到操作系統管理和安全(從加固到入侵檢測)的堆棧的所有層都由云計算供應商管理。
云計算供應商免費試用產品的便利性可以幫助用戶啟動并運行初始實驗,然后在需要時擴展到大規(guī)模,這在傳統的內部部署系統中是困難的。
另一個好處是云計算供應商提供了許多標準化流程來與第三方SaaS產品集成。其結果是云計算供應商讓基礎設施成為別人的問題,因此用戶可以專注于其核心業(yè)務。
(2) 效率。
云計算可以最大化資源利用率。與非云系統相比,云計算系統向數據庫應用程序公開資源利用控制要常見得多。云計算技術可以平滑負載,將其移動到低需求的時間段,并且可以優(yōu)先考慮交互式和關鍵業(yè)務作業(yè)。
當然,云計算供應商可以利用大規(guī)模采購的效率、負載共享和極高的利用率。僅這些規(guī)模參數就可以成為遷移到云平臺的理由。更不用說使用供應商的專業(yè)知識進行強化和入侵檢測的好處了。
與規(guī)模密切相關的是云計算供應商能夠以低廉的價格提供被動存儲,這使得無論是出于實驗或分析原因,還是出于備份或審計,更容易保留更長的歷史數據窗口,并且更加經濟高效地實施時間旅行等功能,可以從歷史角度檢查數據。
當然,繁重的數據處理負載可以通過使用云計算供應商的規(guī)模臨時向外擴展來解決,當然用戶會為此付出代價。
(3) 經濟性。
除了規(guī)模和效率的經濟性之外,云計算供應商的會計機制傾向于將存儲和處理的成本數據暴露到單個查詢級別。這允許用戶對任何給定分析的成本收益做出合理的商業(yè)決策,并相應地做出優(yōu)化決策。事實上,有時用戶可能會決定通過擴展云計算規(guī)模來擴大和簡化分析的結構,而不是花費時間和精力來塑造一個“穩(wěn)健的分析”,這可能更便宜、更準確。
云計算的弱點
(1) 云平臺是為用戶管理的基礎設施。
云計算具有一組與大型機截然不同的故障域。云平臺上的分布式計算是共享的基礎設施(計算、存儲、網絡),這可能會受到更多的干擾,其中任何一個故障都可能導致交互性失敗或暫時性工作失敗。在極少數情況下,即使是云計算供應商的自動化管理也會通過更改系統的屬性或行為對客戶體驗產生負面影響。
(2) 效率。
與傳統的內部部署系統相比,大多數云計算數據庫仍然不成熟。云數據庫缺乏更成熟產品的特性。有些功能可能永遠不會被引入,因為完全分布式、易發(fā)生故障的平臺的概念使它們不切實際。
許多基于云的并行關系系統對于特定的數據庫變異(INSERT、UPDATE、DELETE)操作的效率顯著降低,這在某些用例中可能會導致問題。
當然,云計算與內部部署系統或托管在其他云平臺中的系統之間的額外延遲往往會迫使云計算基礎設施整合。用戶往往被迫首先選擇地理位置和云計算供應商,然后實際上僅限于其云計算供應商提供的服務。
(3) 經濟性。
云計算的成本遵循與內部部署截然不同的曲線:擴展容量非常容易??刂瞥杀咀兊酶永щy。另一方面,如果成本有上限的話,則在達到成本上限后提交的交互式作業(yè)可能會被拒絕。這增加了一層復雜性,傳統數據庫管理員需要學習這些知識才能創(chuàng)建成功的部署。
當然,被云計算供應商鎖定對于企業(yè)來說很普遍。云平臺之間的遷移并不比內部部署系統之間的遷移容易。
用戶有如此多的產品可供選擇,但并沒有一種產品具有所有功能。最重要的第一步是確定所有必需工作流的基本屬性或行為,并確保所選的云計算供應商有能力提供這些服務,而每個行為可能來自不同但至少弱集成的產品。因此不要期望像Oracle公司或Teradata公司提供的產品提供“一切”服務。