Rate-Limited Operation

Scan, Query and Count operations can be rate-limited based on the consumed capacities returned from DynamoDB. Simply specify the rate_limit argument when calling these methods. Rate limited batch writes are not currently supported, but if you would like to see it in a future version, please add a feature request for it in Issues.

Note

Rate-limiting is only meant to slow operations down to conform to capacity limitations. Rate-limiting can not be used to speed operations up. Specifying a higher rate-limit that exceeds the possible writing speed allowed by the environment, will not have any effect.

Example Usage

Suppose that you have defined a User Model for the examples below.

from pynamodb.models import Model
from pynamodb.attributes import (
    UnicodeAttribute
)


class User(Model):
    class Meta:
        table_name = 'Users'

    id = UnicodeAttribute(hash_key=True)
    name = UnicodeAttribute(range_key=True)

Here is an example using rate-limit in while scanning the User model

# Using only 5 RCU per second
for user in User.scan(rate_limit=5):
    print("User id: {}, name: {}".format(user.id, user.name))

Query

You can use rate-limit when querying items from your table:

# Using only 15 RCU per second
for user in User.query('id1', User.name.startswith('re'), rate_limit = 15):
    print("Query returned user {0}".format(user))

Count

You can use rate-limit when counting items in your table:

# Using only 15 RCU per second
count = User.count(rate_limit=15)
print("Count : {}".format(count))