3

範囲キー CreationDate を持つメッセージテーブルがあります...

任意のページにクエリを実行するにはどうすればよいですか? 前のクエリによって返された LastEvaluatedKey を提供しなくても、これは可能ですか? つまり、クライアントもこれを追跡し、リクエストごとに返す必要があります。そして、これでは、すべての中間クエリを作成せずに任意のページにジャンプすることはできません。

ページをすばやく取得するには、PageKey = someTimestamp だけを含むさらに別のテーブル MessagePageKeys を更新する必要がありますか?

        QueryRequest queryReq = new QueryRequest();

        queryReq.WithTableName(tableName);
        queryReq.WithLimit(perPage);

        var startIndex = startPage * perPage;

        queryReq.WithExclusiveStartKey(new Key
        {
            HashKeyElement = new AttributeValue().WithN(hashKeyValue),
            RangeKeyElement = new AttributeValue().WithN(prevKey.ToString() )
        });

        // sort by newest (highest time signature)
        queryReq.ScanIndexForward = false;
4

1 に答える 1

1

いいえ、「lastEvaluatedKey」を使用しないとできません。

最後に評価されたキーが存在する必要はなく、有効なキーのみが必要であることが役立つ場合があります。たとえば、同じハッシュ キーの下に次の範囲キーがあるとします。

6
9
12
15

範囲キーが 10 より大きいすべてのものが必要な場合は、範囲キーを使用して ExclusiveStartKey を作成すると10、元に戻ります。

12
15

これを「ページ境界」のより便利な定義 (この時間、またはこの分などのすべての項目を表示したいなど) と組み合わせると、役立つ場合があります。データの消費者が「このテーブルを最後にクエリしてから他のデータがどのように変更されたかに関係なく、私の結果は 8 ページ目にある」ことを知ることはめったにないように感じます。

于 2013-03-04T03:40:49.837 に答える