Database design 将MySQL表移动到AWS DynamoDB-如何设置?
我在RDS实例上有一个表:Database design 将MySQL表移动到AWS DynamoDB-如何设置?,database-design,amazon-web-services,amazon-dynamodb,Database Design,Amazon Web Services,Amazon Dynamodb,我在RDS实例上有一个表: +--------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------------+------+-----+---------+----------------+
+--------------+---------------------+------+-----+---------+----------------+
| 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 | |
+--------------+---------------------+------+-----+---------+----------------+
我们为索引找到的最佳设置是在匹配id、属性类型id、选择id和市场id上设置它们
此时数据库的大小约为1.5GB,我们可以每秒对该表进行100到500次查询,很快,查询速度将大大提高。其中大约75%是选择,其他是更新和删除。数据非常不稳定。这导致MyISAM挂起,InnoDB出现大量死锁
我已经尝试过SimpleDB,除了花大约18个小时来修改Rails代码来使用它之外,现在一个简单的select需要1到6秒,而且并不总是一致的。我不得不对它进行大量内存缓存,但这是一个主要的缺点——我们希望数据在数据库中更新,并且最多每8秒左右在屏幕上更新一次
希望在DynamoDB上实现这一点,它有望在高流量场景中表现得更好
现在的挑战是,我们需要基于以下内容进行搜索:
-id(可以是任何东西,只要它们是唯一的,但我们在查询时并不总是使用它)
-匹配id
-道具类型标识
-头衔
-选择标识
-市场标识
-状态(0..2)
通常我们查询匹配id和属性类型id,或者查询匹配id、属性类型id、市场id和选择id。基于标题的查询很少,但无法避免。身份也一样
我们有没有办法为DynamoDB建模?
我知道它们只支持5个索引,而且它们还要求ID在任何时候都是已知的。我不知道,但也许我做错了整件事,我怎么能不先查数据就知道ID呢
谢谢 正如您所注意到的,本地二级索引不适合您的查询模式
此时,您需要使用多个DynamoDB表构建自己的索引,这意味着您的应用程序需要同时写入主表和作为主表索引的表。例如,主表的散列键可能是“id”,索引表的散列键可能是“match_id”,范围键可能是“id”。正如您所注意到的,本地二级索引不适合您的查询模式
此时,您需要使用多个DynamoDB表构建自己的索引,这意味着您的应用程序需要同时写入主表和作为主表索引的表。例如,主表的散列键可能是“id”,索引表的散列键可能是“match_id”,范围键可能是“id”。但我认为您的情况适合DynamoDB 可以这样做: 将
match_id
和prop_type_id
放入一个复合属性,并将该属性设置为范围键。同时,让Id
作为散列键
然后,您可以在market\u id
上使用selection\u id
“projected”设置二级本地指数。
然后,您可能还想在
标题上设置另一个二级本地索引。但我认为您的案例适合DynamoDB
可以这样做:
将match_id
和prop_type_id
放入一个复合属性,并将该属性设置为范围键。同时,让Id
作为散列键
然后,您可以在market\u id
上使用selection\u id
“projected”设置二级本地指数。
然后,您可能还想在标题上设置另一个二级本地索引。编辑以确保问题(因为这是一个问题)以粗体标记,以便可以轻松查看,这样我的帖子就不会因为不是问题而被垃圾。事实就是这样。谢谢:)编辑以确保问题(因为这是一个问题而存在)以粗体字体标记,这样可以很容易地看到,这样我的帖子就不会因为不是问题而被垃圾。事实就是这样。谢谢:)是的。看起来我们根本不能用DDB。是的。看来我们根本不能用DDB。