錯誤決定影響一生!在 Amazon 中應如何選擇數據庫?
隨着技術的不斷發展,數據分析工具已經從傳統的方式進化成雲端數據庫。作為雲端時代的大哥,亞馬遜也提供了兩個基於雲端的數據庫服務:Amazon Redshift 和 Amazon Relational Database Service(RDS)。
儘管 Amazon Redshift 和 RDS 都是雲端服務,但它們應用的地方一定有差異。在採用這兩項服務之前,你首先要了解清楚幾個問題:
一:你能否像 Amazon Redshift 一樣把數據加進來?
如果你的企業已經部署了 Data Warehouse 或資料系統,那麼你肯定花了很多時間和精力開發個人化的 ETL Script 來載入數據。如果你想要使用 Redshift 服務,那麼就必須修改 Script 來適應 Redshift 的數據載入方式。
將數據載入到 Redshift 的最佳方式是通過一個遠端電腦(Simple Storage Service(S3) 服務或使用 AWS Elastic MapReduce)。它們是採用複製和並行的方式來載入數據,它還可以在載入的過程中對數據進行壓縮。
如果你的 ETL Script 中嵌入了比較複雜的邏輯,那你可以將最終的輸出重新安排到一個文件或 S3,然後使用複製指令進行載入;Redshift 亦可對你的 ETL 流程進行修改,但如果 ETL Script 可以重複使用,只要把修改後的業務邏輯配置當中,便可使用 Redshift,而它亦特別適用於數據量大的系統。
二:你是否願意改用基於 PostgreSQL 的數據庫?
RDS 支援多個類型的數據庫,包括 MySQL、Oracle、SQL Server 和 PostgreSQL。如果你的分析數據庫使用了一些特定功能,例如 Oracle 的查詢,那麼你就需要慎重考慮是否採用新的服務了。因為你需要把特定的文件代碼進行修改,然後才能夠使用 Amazon CloudSearch 服務。而且除了 Redshift 之外,你還需要對 CloudSearch 進行配置與維護。
這時,你可以通過 Amazon RDS 繼續使用之前已經部署的關聯式資料庫和相關的特定功能。
除了搜索之外,你還可以使用與索引和強行限制這樣更細緻的功能。Redshift 使用 UTF-8 字符,而新版本的 SQL Server 更支援 UTF-16,這意味著將數據映射到 UTF-8 會存在一定的挑戰,這個過程中可能會存在一些陷阱。
如果你對使用 PostgreSQL 數據庫沒有特殊要求,那麼 Redshift 的優勢你便應能體驗得到,它將成為你的最佳雲端 Data Warehouse。
三:你的 Data Warehouse 是否需要較高的擴展性和可用性?
擴展關聯式資料庫是一項非常考驗 DBA 的工作。你可以在大型伺服器上部署亞馬遜 Data Warehouse 然後進行擴展,直到它無法滿足你的要求。記住,擴展並不會增加可用性,單台電腦故障的隱憂將一直存在。
如果你已經精通備份維護以及採用指令來改善性能的話,那麼一個可擴展的 RDS 對於你來說已經不算什麼。如果不熟悉這些工作,那除了維護 RDS 之外,你還需要額外進行高可用性和擴展性的維護。
AmazonRedshift 採用伺服器 Cluster 的部署方式,它的擴展更加容易。通過向 RedshiftCluster 添加節點,它可以提供強大性能。也就是說如果你在雙節點的基礎上再添加兩個節點,那麼它的性能也將提升兩倍。在節點發生故障的時候,Redshift 還會負責恢復的工作。發生故障的節點將被新的節點取代,而數據則可以從 S3 中自動進行還原。
如果擴展性和可用性對於你的企業是很重要的話,那 Redshift 會是一個好的選擇。
四:你的應用是否需要強制進行完整性限制?
你很難想像一個關聯式資料庫管理系統會要求完整性限制,Redshift 就沒有……這個情況主要是出於性能方面的考慮。在寫入操作完成之前,如果對每個節點進行查詢然後等待回應的話,那麼系統的時間一定會出現問題。
所以載入過程之中需要進行 Primary Key、Foreign Key 和 Superkey 限制的檢查。如果你的應用必須要完整限制,那麼 RDS 服務將會是更好的選擇。
如果你可以接受 Redshift 的限制性質,Redshift 的另一款 Data Warehouse,會是不錯的選擇。特別是在數據量比較大的情況下,Redshift 幾乎是你唯一的選擇。而 RDS對於小一些的資料庫部署將更加適合。