0

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を知るにはどうすればよいですか?わかりませんが、すべて間違っているのでしょうか?

ありがとう!

4

2 に答える 2

1

しかし、あなたのケースは DynamoDB に適していると思います。

次の方法で実行できます。

match_idとを 1 つの複合属性に入れ、prop_type_idこの属性を範囲キーにします。その間、Idハッシュキーとしてみましょう。

次に、 「射影」を使用market_idしてセカンダリ ローカル インデックスを設定することもできます。selection_Id次に、別のセカンダリ ローカル インデックスもセットアップすることができますTitle

于 2013-05-17T05:52:02.777 に答える