2

現在、Ruby AWS SDK の ItemCollection#query メソッドはデータセット全体を返します。ページネーションの可能性についてRuby AWS SDKソースコードを調べましたが、ページネーションに最も近いオプションは:limit、ページネーションなしです。クエリ操作に関する Amazon の DynamoDB API (Ruby ではなく HTTP) のドキュメントによると、応答キーを使用したページネーションが存在する可能性があることが示唆されていますLastEvaluatedKey

前の結果セットを含む、クエリ操作が停止した項目の主キー。この値を使用して、新しいリクエストでこの値を除外して新しい操作を開始します。クエリ結果セット全体が完了すると、LastEvaluatedKey は null になります (つまり、オペレーションが「最後のページ」を処理した場合)。

したがって、:limitオプションを追加してページングを実行し、最後の の後に範囲値の次のクエリを実行Itemできますが、完全なクエリを実行しない限り、合計数がわかりません。

ページネーションを達成するためのより良い/より簡単な方法はありますか?

4

1 に答える 1

1

ニーズに応じて、完全なページャーを構築するには 2 つのリクエストが必要になる可能性があります。Amazon DynamoDBでのクエリとスキャン、特にCount と ScannedCount を参照してください。

Amazon DynamoDB スキャンおよびクエリ API は、2 つの異なる目的でカウント値を使用します。

Amazon DynamoDB が一致するアイテムのリストではなく、スキャンフィルターまたはクエリ条件に一致するアイテムの総数を提供するようにする場合は、リクエストで Count パラメータを true に設定します。

レスポンスで、Amazon DynamoDB は、リクエスト内の一致するアイテムの数の Count 値を返します。スキャン フィルタまたはクエリ条件に一致するアイテムが 1MB を超える場合、Count には、リクエストに一致するアイテムの総数の部分的なカウントが含まれます。リクエストに一致するアイテムの完全な数を取得するには、後続のリクエストで LastEvaluatedKey を使用します。Amazon DynamoDB が LastEvaluatedKey を返さなくなるまで、リクエストを繰り返します。

[鉱山を強調]

つまり、最初は複雑なロジックを避けるために、最初に一致するアイテムの数をクエリし、その後はオンデマンドで特定のページをリクエストすることをお勧めします。

幸運を!

于 2012-03-20T01:58:01.220 に答える