1. 程式人生 > >Amazon DynamoDB, 面向互聯網應用的高性能、可擴展的NoSQL數據庫

Amazon DynamoDB, 面向互聯網應用的高性能、可擴展的NoSQL數據庫

單個 相對 分布式系統 強一致性 數據集 osql 搭建 dynamodb ngs

DynamoDB是一款全面托管的NoSQL數據庫服務。客戶能夠很easy地使用DynamoDB的服務。同一時候享受到高性能,海量擴展性和數據的持久性保護。

DynamoDB數據庫是Amazon在2012年1月18日公布的。

它融入了亞馬遜在大規模非關系型數據庫和雲計算領域積累的多年豐富經驗。事實上早在2007年。亞馬遜就以前公布了一篇論文。深入討論了AmazonDynamo所使用的設計理念和實現技術,而且討論了怎樣在大規模擴展的同一時候提供高可靠的數據保護的問題。

最初的Dynamo設計基於一系列核心原則。以實如今分布式系統中搭建高可靠、高擴展系統。

如今的Amazon DynamoDB,繼續基於這些設計原則來構建。可是同一時候融入了Amazon多年以來在非關系型數據庫和雲計算領域積累的寶貴經驗,比方Amazon SimpleDB和AmazonS3服務的技術。客戶能夠很easy的方式使用到全然托管的數據庫服務。

AmazonDynamoDB 是高性能、可擴展的NoSQL數據庫。今天的互聯網應用的用戶、流量和數據都在不斷地增長。數據庫怎樣非常好地擴展。以滿足互聯網應用對容量和性能的需求是讓非常多客戶頭疼的問題。DynamoDB非常好地攻克了這一難題。使用DynamoDB。開發人員能夠從相對小的規模開始,在應用吸引了很多其它用戶的時候,對應地添加DynamoDB的表的性能。

DynamoDB中的表沒有不論什麽容量限制。通過分布式的技術。DynamoDB把用戶對一個表的數據和流量請求分布在足夠數量的server上,以滿足並發請求的性能要求。同一時候,在面對不論什麽規模的請求的時候,DynamoDB都能夠提供能夠預測的高性能低延時的用戶體驗。

我們在國內的客戶,木瓜移動,就是採用了DynamoDB的數據庫服務,在RTB實時競價的在線移動營銷領域獲得成功。AppFlood是木瓜移動公布的移動實時競價的廣告平臺。作為AppFlood的核心組件,數據庫的性能非常大程度上決定平臺的實時競價的能力。

非常多因素,如網絡通訊延遲、數據庫數據讀取的延遲、定價算法的延遲都可能造成競價過程超時。提供穩定的高性能、低延遲響應的DynamoDB,非常大程度上幫助木瓜移動搭建成功的RTB平臺。

DynamoDB給用戶提供了例如以下價值:

  • 使用簡單。DynamoDB幫助用戶處理全部的數據庫管理工作,從硬件資源配置,安裝配置,分布式集群的搭建。和日常的系統維護。開發人員能夠從繁瑣的數據庫管理工作解放出來。

    作為全然托管的數據庫,你不須要專家的技能來管理DynamoDB的安裝-你的開發人員全然能夠獨立完畢。訪問DynamoDB的時候,能夠通過簡單地API的方式。眼下通過只13個API,你就能夠實現對DynamoDB數據庫的表的管理,查詢檢索操作。單個項目Item的訪問和實現批量存取項目。

  • 可擴展。Amazon DynamoDB的設計,沒有不論什麽容量上得限制。能夠把單個表的數據,分布在多個可用區內的多臺server上。來滿足容量和吞吐的需求。

  • 高性能。在高並發請求的情況下。DynamoDB仍然能夠保證非常低的延時。

    由於全部數據都存儲在固態磁盤上。所以能夠保證持續的高性能。

    執行在同一個區域的EC2上的應用程序,在訪問DynamoDB的數據對象的時候,通常能夠在server端體驗到個位數毫秒的響應時間。更重要的是,DynamoDB的表的性能是能夠預測的。即使在數據增長的情況下。由於DynamoDB分布式的特點。仍然能夠維持穩定的低延時的響應。DynamoDB在後臺把你的數據在大量資源之間進行分區和在須要的時候又一次分區,從而能夠在大規模訪問的情況下還能提供非常高的IO性能。

  • 持久和高可用。AmazonDynamoDB自己主動地在至少3個數據中心內復制數據。每一個寫操作。在至少寫入兩個節點之後,才會返回寫成功確認。

    在不論什麽一個節點或者磁盤發生損壞的時候。數據都會及時的又一次復制數據和又一次分區。

    這樣能夠確保在各種復雜的故障出現的時候,DynamoDB仍然能夠正常的提供服務,你全然不須要操心由於物理故障造成的數據丟失的情況。

除了上述的優點之外,作為一款雲上的全面托管的數據庫服務,DynamoDB還有非常多不同的地方。比較特別是它提供預先配置的吞吐量目標。

曾經大家在使用數據庫的時候。想要準確的獲得你所預期的性能指標,包含響應時間和吞吐量。是一件非常復雜的事情。你須要配置不同的硬件資源。包含CPU。內存,存儲容量和性能等等,然後期望這樣特定的硬件資源能夠非常好地支撐你的數據庫的性能需求。但實際上。你想要的數據庫性能是響應時間,和每秒鐘支持事務量,它們和硬件資源之間沒有準確的相關性。

非常多時候數據庫的性能容量規劃都像一個科研項目。充滿了不確定性。DynamoDB非常好地攻克了這個問題。

用戶在開始創建DynamoDB的表的時候,能夠配置應用所須要支持的吞吐量目標。你能夠分別指定表每秒鐘支持多少個讀取和寫入的請求。完畢目標設定後。DynamoDB將會為你預留必要的機器資源,從而確保僅僅要是在給定的並發訪問量以下,應用就能夠享受到個位數毫秒的低延時的高速響應。

更重要的是,預配置的性能容量目標不是一成不變的。

假設你的數據庫的訪問量有了大幅度的增長,你能夠隨時調大DynamoDB的表的容量目標,從而支撐很多其它的訪問請求。對應地,假設你的應用不再須要之前預配置的並發訪問容量。你還能夠靈活地減少預配置的容量指標。從而幫你減少成本。

使用DynamoDB能夠讓開發人員靈活地開發應用程序。DynamoDB是模式自由的。這樣用戶不會被限制在某一個特定的數據模型裏。傳統的SQL數據庫中,表的模式在創建的時候就定義好。

你不能改動或者添加新的列到一個已經創建好的表中。Amazon DynamoDB沒有一個固定的模式,這樣開發人員能夠隨時給表添加新的屬性。靈活的數據模型能夠讓開發人員更加方便地進行敏捷開發和應用的高速叠代更新。

當然,和不論什麽分布式的系統一樣,使用DynamoDB也須要註意一致性的問題。DynamoDB把一致性的選擇權交給開發人員,讓開發人員自由地選擇適合自己應用的一致性模型。

在讀取數據的時候,開發人員能夠選擇採用強一致性的方式,還是終於一致性的方式來讀取數據。

假設是終於一致性的方式,意味著應用在剛提交一個寫操作之後,假設立即進行讀取,可能無法讀取到最新的數據,可是終於你會讀的一致的數據。

終於一致性的模型能夠在最大程度上確保服務的可用性,而且改善性能。比較典型的場景是大家在網上購物時使用的購物車。或者站點的評論信息等等。這些場景對於一致性沒有非常嚴格的要求。

假設選擇採用強一致性的方式讀取數據,可能會犧牲一定程度的性能和服務的可用性。優點是在不論什麽情況下都能夠訪問到最新的數據。軟件開發也比較簡單。

比較典型的用例是須要強一致性的場景。比方網上購物時提交訂單的場景。

須要使用強一致性來確保同一商品不會同一時候銷售給兩個不同的客戶。

使用DynamoDB的成本是能夠預測。DynamoDB的定價模式很easy。基於每月每GB的存儲容量。和每月預配置的讀取和寫入的吞吐量容量單位計費。容量比較easy理解。吞吐量容量單位是個比較重要,大家也比較陌生的概念。每一個讀取容量單位(或者寫入容量單位)支持每秒鐘進行1次讀取(或者寫入)1個項目(item)。每一個讀取操作最大4KB大小,每一個寫入操作最大1KB大小。

超出大小的項目(item)須要額外的性能吞吐容量。

舉個樣例,比方你配置了1000個讀取吞吐量容量單位,和1000個寫入性能的吞吐量容量單位。

這樣的情況下你的表將能夠支撐每秒鐘1000個讀取操作,和1000個寫入操作。假設是終於一致性的方式來讀取的話,你的表將能夠支撐每秒2000個讀取操作。

DynamoDB還提供了其它功能來進一步提高應用訪問的性能, DynamoDB能夠創建和維護針對主鍵屬性的索引。應用程序把須要查詢的主鍵提交給數據庫。就能非常快地獲得所相應的數據集。除此之外,Amazon DynamoDB還支持創建全局和本地的二級索引。使用二級索引,能夠讓應用程序在查詢主鍵以外的其它屬性時。也能夠獲得非常好的性能。客戶能夠對一個表創建一個或者多個二級索引,然後對索引執行查詢query的操作。

Amazon DynamoDB能讓用戶以簡單而且經濟有效地方式存儲和檢索隨意規模的數據。同一時候提供高並發下地低時延的響應。對於吞吐量的保證和幾毫秒的低時延響應,使DynamoDB很適合遊戲、廣告、移動等等基於互聯網的應用程序。

假設您想要了解更具體的信息。能夠訪問DynamoDB頁面。




Amazon DynamoDB, 面向互聯網應用的高性能、可擴展的NoSQL數據庫