2

テーブルには約 150.000 行のサブスクライバーの回答があり、ユーザーが勝者を選択できるようにする必要があります。

私はこれらすべてを MS SQL に実装しましたが、予想よりもトラフィックが多かったため、この特定の部分 (サブスクライバーの処理) については Amazon DynamoDB 環境に移行することをお勧めします。

MS SQLには、次のようなSPがあります。

SELECT s.name, s.guid
FROM calendars c
INNER JOIN challenges cl on cl.calendar_id = c.calendar_id
INNER JOIN challenge_answers ca on ca.calendar_id = c.calendar_id
INNER JOIN subscribers s on s.calendar_id = c.calendar_id
WHERE 
      c.calendar_id = 9 and 
      cl.day = 15 and
      ca.correct = 1 and 
      s.email not like '%@mydomain.com'
ORDER BY s.name DESC;

LINQを使用すると、最終的に.Take(25).Skip(page);

Amazon DynamoDB の は実行可能なオプションではないことを理解しているINNER JOINので、テーブルにフィールドを追加し、subscribers他のすべてのフィールドを含めることで、テーブルを 1 つだけ持つことができ、各項目にはクエリのすべてが含まれます。

Amazon DynamoDB を使用して部分的なグループのみを取得し、「ページ」を安全にスキップするための最良のアプローチは何ですか?

4

2 に答える 2

0

DynamoDB は実際にはページをスキップするようには設計されていませんが、キーに基づいて項目を取得します。クエリのような機能はかなり制限されており、基本的な操作を持つキー (ハッシュまたは範囲) にのみ適用されます。同様に、定義されたインデックスのキーを使用できますが、同じ制限が適用されます。Queryに関する追加情報を次に示します。

ページネーションに関して、DynamoDB はカーソルを提供しないため、一連のキーの反復処理を開始する場合、LastEvaluatedKey 値が各応答で null で返されるまで、すべての項目を読み取る必要があります。現時点では、特定のページへのスキップの組み込みサポートはありません。ページのインデックス テーブルを作成することでこれをエミュレートできるため、ページのアイテムをそのインデックスから直接取得できます。Chris Moyer はここで解決策を提案しています。

于 2013-11-17T20:32:16.230 に答える