2012-03-20 6 views
2

現在、Ruby AWS SDKのItemCollection#クエリメソッドは、データセット全体を返します。私はページングの可能性についてRuby AWS SDKのソースコードを調べましたが、ページネーションに最も近いオプションは:limitであり、改ページはありません。ItemsCollection#クエリによるページ設定?

前の結果を含むクエリ動作が停止項目の主キー、:AmazonのDynamoDBのAPIによる照会操作のための(HTTP、ないルビー)のドキュメントはLastEvaluatedKeyキーレスポンスとページネーションがある可能性が示唆しますセット。この値を使用して、新しい要求でこの値を除外して新しい操作を開始します。 クエリ結果セット全体が完了すると(つまり、操作が「最後のページ」を処理したとき)、LastEvaluatedKeyはnullになります。

だから私は:limitオプションを追加して、私の最後のItem後に範囲値については、次のクエリを実行してページングを行うことができますが、その後、私は、私は完全なクエリを実行しない限り、総数が何であるか見当がつかない。

ページ作成をより簡単に行う方法はありますか?

答えて

1

必要に応じて、完全なページャを構築する可能性がCount and ScannedCount特に、Query and Scan in Amazon DynamoDBを参照してください、2つの要求が必要になります:

アマゾンDynamoDBのスキャンとQuery APIは2つの 明確な目的のためにカウント値を使用します。代わりに一致するアイテムのリストの要求で

、あなたがにアマゾン DynamoDBのをしたい場合は、スキャン フィルタまたはクエリの条件に一致するアイテムの合計数を提供trueにCountパラメータを設定し、

レスポンスで、Amazon DynamoDBは、要求内の一致するアイテムの数のカウント値を返します。 検索フィルタ の照合項目またはクエリ条件が1MBを超える場合、Countには、という要求に一致する項目の合計数が の部分カウントが含まれています。リクエストに一致するアイテムの合計数を にするには、その後の リクエストでLastEvaluatedKeyを使用します。 Amazon DynamoDBが LastEvaluatedKeyを返さなくなるまで、リクエストを繰り返します。

[重点鉱山]

最初にあなたはおそらく先行一致するアイテムの数を照会すると、その後、オンデマンドでのみ特定のページを要求するだろう、複雑なロジックを避けるために、です。

幸運を祈る!

+1

これは私が恐れていたケースでした。 Ruby SDKを使用しているので、#queryメソッドでこれを達成できるかどうかはわかりませんか?私は 'count:true'オプションを追加しようとしましたが、それでも' Enumerator'を返します。 –

+0

@ JohnK.Chow:実際には刺激的です - 私はDevOpsのトピックの外でRubyを使用しないので、これを自分で試していません。 APIは[ItemCollection](http://docs.amazonwebservices.com/AWSRubySDK/latest/AWS/DynamoDB/ItemCollection)のドキュメントです。html)は実際には '#query'の' count'パラメータを実際にはリストしていません。専用の '#count'メソッドではなく、テーブルscan_を使ってコレクション内のアイテムを数えると思います。 [スキャン](http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_Scan.html)の特徴は、ドキュメントのバグでしょうか? –

+0

クエリAPIは、同じハッシュキー値を持つレコードしかカウントできません。 「すべてのレコード」を数える唯一の方法はスキャンです。 –

関連する問題