2013-04-29 32 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上设置另一个辅助本地索引。