2012-12-20 122 views
55

我一直在使用MySQL的公平,而現在,我很熟悉它的結構& SQL查詢等AWS MySQL的RDS VS AWS DynamoDB

目前建設AWS一個新的系統,我一直在尋找在DynamoDB。目前我只知道一點。

一個比另一個更好嗎?

DynamoDB的優點是什麼?

什麼是從MySQL查詢等過渡到這個平面樣式數據庫?

回答

32

您可以閱讀AWS的解釋here

總之,如果你主要有查詢查詢(而不是加入查詢),DynamoDB(和其他NoSQL數據庫)更好。如果您需要處理大量數據,那麼在使用MySQL(以及其他RDBMS)時將會受到限制。

您不能重複使用您的MySQL查詢或您的數據模式,但如果您花費精力學習NoSQL,則會在工具箱中添加一個重要工具。 DynamoDB提供最簡單的解決方案的情況很多。

138

真的DynamoDB和MySQL是蘋果和橘子。 DynamoDB是NoSQL存儲層,而MySQL用於關係存儲。您應根據應用程序的實際需要選擇要使用的內容。事實上,一些應用程序可能會同時使用這兩種應用程序。

例如,如果您存儲的數據不能很好地適用於可以針對單個鍵或鍵/範圍查找的關係模式(樹結構,無模式JSON表示等)那麼DynamoDB(或其他一些NoSQL商店)可能是您最好的選擇。

如果您的數據有一個定義良好的模式,可以很好地適應關係結構,並且您需要靈活地以多種不同方式查詢數據(當然需要添加索引),那麼RDS可能會成爲更好的解決方案。

使用DynamoDB作爲NoSQL存儲的主要好處是,無論您需要什麼級別,都可以保證讀/寫吞吐量,而無需擔心管理集羣數據存儲。因此,如果您的應用程序每秒需要1000次讀取/寫入操作,那麼您可以將DynamoDB表配置爲該吞吐量級別,而不必擔心底層基礎架構。

RDS具有很多與不必擔心基礎架構本身相同的好處,但是如果您最終需要執行大量寫入操作以使最大實例大小不再保持不變,那麼您沒有選項的情況下(您可以水平縮放以使用只讀副本進行讀取)。

更新說明:DynamoDb現在支持全局二級索引,因此您現在可以對散列或散列和範圍鍵組合以外的數據字段執行優化查找。

+6

如果我能把你的答案提高100,我會的。 – Salil

+0

你幾乎有你的願望100 upvotes :) – Luke

+0

你明白了! 100. –

6

使用DynamoDB時,您還應該知道DynamoDB中的項目/記錄限制爲400KB(請參閱DynamoDB Limits)。對於許多用例來說,這是行不通的。所以DynamoDB對於少數幾件事情會有好處,但不是全部。其他許多NoSQL數據庫也一樣。

89

我們剛剛將所有DynamoDB表遷移到了RDS MySQL。

雖然在特定任務中使用DynamoDB可能有意義,但在DynamoDB之上構建新系統實在是一個壞主意。最好的計劃等等,你總是需要從你的數據庫中獲得額外的靈活性。

這是我們的原因,我們從DynamoDB感動:

  1. 索引 - 更改或添加鍵上即時而無需創建一個新的表是不可能的。
  2. 查詢 - 查詢數據非常有限。特別是如果你想查詢非索引數據。連接當然是不可能的,所以你必須在代碼/緩存層上管理複雜的數據關係。
  3. 備份 - 與RDS的華麗備份相比,這種繁瑣的備份過程令人失望。
  4. GUI - 用戶體驗差,搜索有限,沒有樂趣。
  5. 速度 - 與RDS相比,響應時間有問題。您會發現自己構建了精心設計的緩存機制,以便在您爲RDS的內部緩存解決的地方進行補償。
  6. 數據完整性 - 雖然流體數據結構的概念聽起來不錯,但您的一些數據更適合「堅如磐石」。當一個小錯誤試圖破壞你的數據庫時,強打字是一件幸事。有了DynamoDB,任何事情都是可能的,事實上任何可能出錯的事情都會發生。

我們現在使用DynamoDB作爲某些系統的備份,我相信我們將來會針對特定的,明確定義的任務使用它。這不是一個糟糕的數據庫,它僅僅是爲數據庫服務100%的核心繫統。

就優勢而言,我會說可擴展性和耐久性。它的尺寸令人難以置信和透明,並且(總是)總是起來。這些都是非常棒的功能,但它們不會以任何方式彌補不利因素。

+0

它也是一個非常不同的模型,所以你真的需要了解如何使用它,我認爲它們並不是很好。 –

+4

非常具體的優點/缺點。很好的回答 – stevendesu

+5

這其中的一些已經過時了。例如,1不再是真的。 – mbroshi