2013-04-29 26 views
0

我有一個RDS實例此表:將MySQL表移動到AWS DynamoDB - 如何設置它?

+--------------+---------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+--------------+---------------------+------+-----+---------+----------------+ 
| id   | bigint(20)   | NO | PRI | NULL | auto_increment | 
| match_id  | bigint(10) unsigned | NO | MUL | NULL |    | 
| prop_type_id | bigint(10) unsigned | NO |  | NULL |    | 
| title  | varchar(45)   | NO | MUL | NULL |    | 
| odds   | double    | YES |  | NULL |    | 
| status  | tinyint(4) unsigned | YES |  | 1  |    | 
| selection_id | bigint(15)   | YES | MUL | NULL |    | 
| market_id | bigint(15)   | YES | MUL | NULL |    | 
| date_time | datetime   | NO |  | NULL |    | 
| available | int(11)    | NO |  | NULL |    | 
| source  | tinyint(4)   | YES |  | NULL |    | 
+--------------+---------------------+------+-----+---------+----------------+ 

我們發現指標最佳的設置是把它們設置在match_id,prop_type_id,selection_id和market_id。

此時DB大約是1.5 GB的大小,我們每秒100個500查詢之間隨時隨地根據此表,並很快這會高得多。其中約75%是選擇,其他則是更新和刪除。數據非常不穩定。這會導致MyISAM掛起,InnoDB造成大量死鎖。

我已經嘗試過的SimpleDB和除了服用約18小時國防部我們的Rails代碼與它的工作,現在一個簡單的選擇需要1和6秒,它並不總是一致的之間的任何地方。我不得不大量使用memcache,但這是一個主要的缺點 - 我們希望數據在數據庫中以及屏幕上每8秒鐘最多更新一次。

想動這對DynamoDB其希望可以執行高流量的情況要好得多。

現在的挑戰是,我們需要搜索基於以下幾點: - ID(這可以是任何東西,只要他們是獨一無二的,但我們查詢時並不總是使用它) - match_id - prop_type_id - 標題 - selection_id - market_id - 狀態(0..2)

一般我們查詢或者在match_id和prop_type_id,或match_id,prop_type_id,market_id和selection_id。基於標題的查詢很少見,但無法避免。地位相同。

有沒有我們可以模擬這種用於DynamoDB的方法嗎?

我知道他們只支持5除了指標,他們也需要在任何時候都知道的ID。我怎麼知道這些ID而沒有先查看數據,我不知道,但也許我做錯了所有的事情?

謝謝!

+0

編輯以確保問題(這是因爲這是一個問題)以粗體字標記,因此可以很容易地看到,所以我的帖子不會因爲不成問題而被刪除。它實際上是。謝謝:) – 2013-04-29 14:50:12

回答

3

本地二級索引不適合你的查詢模式,因爲你已經注意到了。

此時,您需要使用多個DynamoDB表構建自己的索引,這意味着您的應用程序需要同時寫入主表以及用作主表上的索引的表。例如,您的主表可能具有「id」作爲散列鍵,並且您的索引表可能具有「match_id」作爲散列鍵,而「id」作爲範圍鍵。

+0

是的。似乎我們根本沒有使用DDB。 – 2013-04-30 09:19:48

1

但我認爲你的情況適合DynamoDB。

這是可以做到這樣:

match_idprop_type_id成一個複合屬性,使此屬性的範圍鍵。同時,讓Id作爲散列鍵。

然後,您可以在market_id上設置次要本地索引selection_Id「預計」。 然後,您可能還想在Title上設置另一個輔助本地索引。