我在 RDS 实例上有这张表:
+--------------+---------------------+------+-----+---------+----------------+
| 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 上设置它们。
目前数据库的大小约为 1.5 Gb,我们每秒对该表进行 100 到 500 次查询,很快这个数据会更高。其中大约 75% 是选择,其他是更新和删除。数据非常不稳定。这会导致 MyISAM 挂起和 InnoDB 出现大量死锁。
我已经尝试过 SimpleDB,除了需要大约 18 个小时来修改我们的 Rails 代码以使用它之外,现在一个简单的选择需要 1 到 6 秒之间的任何时间,而且它并不总是一致的。我不得不对其进行大量内存缓存,但这是一个主要缺点 - 我们希望数据在数据库中更新,并且最多每 8 秒左右在屏幕上更新一次。
想把它移到 DynamoDB 上,希望它能在高流量场景中表现得更好。
现在的挑战是我们需要根据以下内容进行搜索: - id(可以是任何东西,只要它们是唯一的,但我们在查询时并不总是使用它) - match_id - prop_type_id - title - selection_id - market_id -状态 (0..2)
通常我们查询 match_id 和 prop_type_id,或者 match_id、prop_type_id、market_id 和 selection_id。基于标题的查询很少见,但无法避免。状态也一样。
有没有一种方法可以为 DynamoDB 建模?
我知道它们只支持另外 5 个索引,而且它们还要求始终知道 ID。如果不先查找数据,我应该如何知道 ID,我不知道,但也许我做错了整个事情?
谢谢!