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 に設定することです。
現時点で、DB のサイズは約 1.5 Gb で、このテーブルに対して 1 秒あたり 100 から 500 のクエリが発生し、すぐにこれはさらに大きくなります。これらの約 75% は選択で、残りは更新と削除です。データは非常に不安定です。これにより、MyISAM でハングし、InnoDB で多くのデッドロックが発生します。
私はすでに SimpleDB を試しましたが、Rails コードを変更して動作させるのに約 18 時間かかりましたが、今では単純な選択に 1 秒から 6 秒かかり、常に一貫しているわけではありません。私はそれを大量にmemcacheしなければなりませんでしたが、それは大きな欠点です.DBと画面上で最大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を知るにはどうすればよいですか?わかりませんが、すべて間違っているのでしょうか?
ありがとう!