2012-12-21 60 views
1

我正在尋找爲我的跨數據運行DynamoDB數據庫併爲需要SQL Join Queries的數據運行mysql數據庫。AWS數據庫結構 - MySQL和DynamoDB

爲了儘量保持MySQL大型/大型表(保持性能更好),我將把一些數據移動到DynamoDB中,有時需要引用MySQL中的數據。

查詢DynamoDB的某些數據和查詢MySQL,然後使用PHP(或另一種服務器端語言)執行最終數據比較以獲取所需數據返回到客戶端/瀏覽器時,編程/查詢是不是很差?

我想基本問題是:必須查詢SQL數據庫,然後將結果在PHP(或服務器端語言)中... ...這是正常還是壞主意?

THX

注:這個主要目的是數據庫規劃,以避免無法管理過大型關係型數據庫的情況。因此,要批量數據移動到的NoSQL(DynamoDB)...

回答

4

將數據分離到不同的數據存儲區是非常好的主意,每個存儲區都有其優點。

例如:

  • 你可以把BLOB在你的RDBMS(如MySQL的),但最好是在一個存儲爲Amazon S3
  • 您可以將文本文檔放入RDBMS中,並用「... LIKE%QUERY%...」查詢它們,但最好將它們放在彈性搜索或Amazon CloudSearch中。
  • 你可以把你的會話管理數據在RDBMS中,但最好是在Amazon Elastic CacheDynamoDB
  • 您可以在RDBMS的查找表,但最好是在內存或基於NoSQL的內存(如Memecached或Redis)或DynamoDB

而且,您可以不同地編寫上述語句,將所有內容存儲在MongoDB或DynamoDB中,但寧願將它們放在其他地方。

當您將數據放入不同的存儲區時,根據與數據類型和此數據使用情況相關的此數據存儲的簡單性,您可以獲得更簡單,分佈式,可擴展且通常更快的系統。

缺點是您需要在數據存儲間同步您的數據。一旦向DynamoDB添加記錄,您需要將BLOB上傳到S3,在CloudSearch中更新文檔並將記錄添加到MySQL中,並將相關行寫入日誌文件以供將來分析。當然,這是對這樣一個複雜的數據和查詢的極端情況。通常你只需要混合2或3個數據存儲。

如果您的系統中必須有事務處理,那麼同步數據將會困難得多,並且最好將所有數據都存儲在支持事務的數據存儲中。但即便如此,您仍然可以將您的交易需求限制爲部分數據,並在其他數據存儲中使用冗餘數據。例如,使RDBMS或DynamoDB中沒有引用記錄的孤立S3對象通常不是什麼大問題。

關於您正在編寫的用於處理分佈式數據的PHP(或其他編程語言)代碼,它也取決於。如果您需要數據存儲本機支持的複雜JOIN,GROUP_BY,FILTER功能,則最好使用數據庫功能。但很多時候,您的代碼可以很簡單地編寫,例如查詢正確的數據庫(例如,對CloudSearch進行文本搜索),並彙總來自不同數據存儲區的數據。

1

是ü可以肯定會利用兩個... 但也有一些優點和缺點吧..

缺點:

  • 在MySQL中你會得到ACID保證,但在Dynamo-db中沒有這樣的保證。
  • 同樣在MySQL中,您可以在Dynamo-db中編寫複雜的代碼,但不能編寫複雜的查詢。

優點:

  • 它具有分佈式散列表由此多個性能增強器的特性相比到MySQL。

您需要查看此博客以瞭解更多信息。 這是a link

你也可以使用更多的NoSql模塊,如HIVEQL。 HiveQl遠遠超過Dynamo-Db,它可以比Dynamo-db提升性能。