Friday, November 6, 2026
HomeBig DataHow We Lowered DynamoDB Prices by Utilizing DynamoDB Streams and Scans Extra...

How We Lowered DynamoDB Prices by Utilizing DynamoDB Streams and Scans Extra Effectively

[ad_1]

Lots of our customers implement operational reporting and analytics on DynamoDB utilizing Rockset as a SQL intelligence layer to serve stay dashboards and functions. As an engineering workforce, we’re continuously looking for alternatives to enhance their SQL-on-DynamoDB expertise.


dynamodb-12-rockset

For the previous few weeks, we now have been exhausting at work tuning the efficiency of our DynamoDB ingestion course of. Step one on this course of was diving into DynamoDB’s documentation and performing some experimentation to make sure that we have been utilizing DynamoDB’s learn APIs in a means that maximizes each the soundness and efficiency of our system.

Background on DynamoDB APIs

AWS provides a Scan API and a Streams API for studying information from DynamoDB. The Scan API permits us to linearly scan a whole DynamoDB desk. That is costly, however generally unavoidable. We use the Scan API the primary time we load information from a DynamoDB desk to a Rockset assortment, as we now have no technique of gathering all the info aside from scanning by way of it. After this preliminary load, we solely want to observe for updates, so utilizing the Scan API could be fairly wasteful. As a substitute, we use the Streams API which supplies us a time-ordered queue of updates utilized to the DynamoDB desk. We learn these updates and apply them into Rockset, giving customers realtime entry to their DynamoDB information in Rockset!

Dynamo Ingester Architecture

The problem we’ve been endeavor is to make ingesting information from DynamoDB into Rockset as seamless and cost-efficient as attainable given the constraints introduced by information sources, like DynamoDB. Following, I’ll talk about a number of of points we bumped into in tuning and stabilizing each phases of our DynamoDB ingestion course of whereas retaining prices low for our customers.

Scans

How we measure scan efficiency

In the course of the scanning part, we goal to constantly maximize our learn throughput from DynamoDB with out consuming greater than a user-specified variety of RCUs per desk. We wish ingesting information into Rockset to be environment friendly with out interfering with present workloads working on customers’ stay DynamoDB tables.

Understanding methods to set scan parameters

From very preliminary testing, we observed that our scanning part took fairly a very long time to finish so we did some digging to determine why. We ingested a DynamoDB desk into Rockset and noticed what occurred throughout the scanning part. We anticipated to constantly devour all the provisioned throughput.

Initially, our RCU consumption seemed like the next:

Scan Initial RCU

We noticed an inexplicable stage of fluctuation within the RCU consumption over time, significantly within the first half of the scan. These fluctuations are unhealthy as a result of every time there’s a significant drop within the throughput, we find yourself lengthening the ingestion course of and growing our customers DynamoDB prices.

The issue was clear however the underlying trigger was not apparent. On the time, there have been a number of variables that we have been controlling fairly naively. DynamoDB exposes two essential variables: web page dimension and section rely, each of which we had set to mounted values. We additionally had our personal price limiter which throttled the variety of DynamoDB Scan API calls we made. We had additionally set the restrict this price limiter was imposing to a hard and fast worth. We suspected that one among these variables being sub-optimally configured was the possible reason behind the huge fluctuations we have been observing.

Some investigation revealed that the reason for the fluctuation was primarily the speed limiter. It turned out the mounted restrict we had set on our price limiter was too low, so we have been getting throttled too aggressively by our personal price limiter. We determined to repair this drawback by configuring our limiter based mostly on the quantity of RCU allotted to the desk. We are able to simply (and do plan to) transition to utilizing a user-specified variety of RCU for every desk, which can enable us to restrict Rockset’s RCU consumption even when customers have RCU autoscaling enabled.

public int getScanRateLimit(AmazonDynamoDB consumer, String tableName,
                            int numSegments) {
    TableDescription tableDesc = consumer.describeTable(tableName).getTable();
    // Notice: this may return 0 if the desk has RCU autoscaling enabled
    last lengthy tableRcu = tableDesc.getProvisionedThroughput().getReadCapacityUnits();
    last int numSegments = config.getNumSegments();
    return desiredRcuUsage / numSegments;
}

For every section, we carry out a scan, consuming capability on our price limiter as we devour DynamoDB RCU’s.

public void doScan(AmazonDynamoDb consumer, String tableName, int numSegments) {
    RateLimiter rateLimiter = RateLimiter.create(getScanRateLimit(consumer, 
                                                 tableName, numSegments))
    whereas (!completed) {
        ScanResult consequence = consumer.scan(/* feed scan request in */);
        // do processing ...
        rateLimiter.purchase(consequence.getConsumedCapacity().getCapacityUnits());
    }
}

The results of our new Scan configuration was the next:

Dynamo After RCU

We have been completely satisfied to see that, with our new configuration, we have been capable of reliably management the quantity of throughput we consumed. The issue we found with our price limiter delivered to gentle our underlying want for extra dynamic DynamoDB Scan configurations. We’re persevering with to run experiments to find out methods to dynamically set the web page dimension and section rely based mostly on table-specific information, however we additionally moved onto coping with among the challenges we have been going through with DynamoDB Streams.

Streams

How we measure streaming efficiency

Our aim throughout the streaming part of ingestion is to reduce the period of time it takes for an replace to enter Rockset after it’s utilized in DynamoDB whereas retaining the price utilizing Rockset as little as attainable for our customers. The first price issue for DynamoDB Streams is the variety of API calls we make. DynamoDB’s pricing permits customers 2.5 million free API calls and fees $0.02 per 100,000 requests past that. We wish to attempt to keep as near the free tier as attainable.

Beforehand we have been querying DynamoDB at a price of ~300 requests/second as a result of we encountered loads of empty shards within the streams we have been studying. We believed that we’d must iterate by way of all of those empty shards whatever the price we have been querying at. To mitigate the load we placed on customers’ Dynamo tables (and in flip their wallets), we set a timer on these reads after which stopped studying for five minutes if we didn’t discover any new data. Provided that this mechanism ended up charging customers who didn’t even have a lot information in DynamoDB and nonetheless had a worst case latency of 5 minutes, we began investigating how we may do higher.

Decreasing the frequency of streaming calls

We ran a number of experiments to make clear our understanding of the DynamoDB Streams API and decide whether or not we may cut back the frequency of the DynamoDB Streams API calls our customers have been being charged for. For every experiment, we diverse the period of time we waited between API calls and measured the typical period of time it took for an replace to a DynamoDB desk to be mirrored in Rockset.

Inserting data into the DynamoDB desk at a continuing price of two data/second, the outcomes have been as follows:

Dynamo Table 1

Inserting data into the DynamoDB desk in a bursty sample, the outcomes have been as follows:

Dynamo Table 2

The outcomes above confirmed that making 1 API name each second is a lot to make sure that we keep sub-second latencies. Our preliminary assumptions have been incorrect, however these outcomes illuminated a transparent path ahead. We promptly modified our ingestion course of to question DynamoDB Streams for brand new information solely as soon as per second so as give us the efficiency we’re on the lookout for at a a lot decreased price to our customers.

Calculating our price discount

Since with DynamoDB Streams we’re instantly accountable for our customers prices, we determined that we wanted to exactly calculate the price our customers incur as a result of means we use DynamoDB Streams. There are two components which wholly decide the quantity that customers will likely be charged for DynamoDB Streams: the variety of Streams API calls made and the quantity of knowledge transferred. The quantity of knowledge transferred is essentially past our management. Every API name response unavoidably transfers a small quantity (768 bytes) of knowledge. The remainder is all consumer information, which is barely learn into Rockset as soon as. We targeted on controlling the variety of DynamoDB Streams API calls we make to customers’ tables as this was beforehand the motive force of our customers’ DynamoDB prices.

Following is a breakdown of the price we estimate with our newly reworked ingestion course of:

Dynamo Table 3

We have been completely satisfied to see that, with our optimizations, our customers ought to incur nearly no extra price on their DynamoDB tables resulting from Rockset!

Conclusion

We’re actually excited that the work we’ve been doing has efficiently pushed DynamoDB prices down for our customers whereas permitting them to work together with their DynamoDB information in Rockset in realtime!

It is a simply sneak peek into among the challenges and tradeoffs we’ve confronted whereas working to make ingesting information from DynamoDB into Rockset as seamless as attainable. If you happen to’re excited about studying extra about methods to operationalize your DynamoDB information utilizing Rockset try a few of our latest materials and keep tuned for updates as we proceed to construct Rockset out!

Different DynamoDB sources:



[ad_2]

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments