Amazon DynamoDB - Paper Explained: Deep Dive into its Architecture and Design Principles

Arpit Bhayani

Arpit Bhayani

Sep 28, 2024 • 4 min read

Play

Introduction to Amazon DynamoDB

Amazon DynamoDB stands as the world’s most popular non-relational database, renowned for its ability to deliver consistent performance at any scale. This deep dive dissects the core concepts and architectural nuances presented in the official DynamoDB paper, revealing how it achieves such remarkable feats.

Key Characteristics

DynamoDB is distinguished by its unwavering commitment to consistent performance, even under extreme loads. Unlike many databases that falter at humongous scales, DynamoDB maintains its low-latency guarantees regardless of the data volume or traffic intensity.

Scale and Performance Highlights

To truly grasp DynamoDB’s capabilities, consider these impressive figures from the 2021 66-hour Prime Day Sale:

  • Trillions of calls to DynamoDB.
  • Peak of 89.2 million requests per second.
  • Maintained high availability throughout the entire duration.
  • Achieved single-digit millisecond performance (less than 9ms).

This level of performance and reliability is why almost all major internal Amazon services, in addition to external customers, leverage DynamoDB to store metadata and power their products.

Core Design Goals

DynamoDB’s entire design philosophy revolves around a singular, ambitious goal:

  • Consistent Performance at Scale: Guaranteeing predictable performance irrespective of data size or traffic volume.
  • Low Single-Digit Millisecond Latency: Aiming for less than 5 milliseconds in most cases.

Every architectural decision within DynamoDB is engineered to meet these stringent performance targets.

Supported Workload Patterns

Before architecting DynamoDB, Amazon identified specific workload patterns it needed to support. These patterns shaped the database’s fundamental design:

Multi-Tenancy at Scale

The infrastructure must support numerous internal and external customers simultaneously. It’s crucial to ensure that the load from one service does not negatively impact the performance of another.

High Resource Utilization

To minimize infrastructure expenditure, DynamoDB aims for very high resource utilization, avoiding bloated setups where resources are underutilized.

Boundless Table Scale

Tables should have no practical limit on size, capable of storing millions, billions, or even trillions of rows without performance degradation.

Predictable Performance

Whether dealing with megabytes or terabytes of data, the system must offer predictable and consistent performance.

High Availability and Fast Recovery

The system must be highly available, implying robust fault tolerance and rapid recovery mechanisms in case of failures.

Flexible Use Case Support

DynamoDB supports schema-less data models with basic enforcement, allowing it to cater to a wide array of use cases without rigid schema constraints.

DynamoDB Data Model and Partitioning

At its core, DynamoDB organizes data into tables, which contain collections of items. Each item is uniquely identified by a primary key.

Tables, Items, and Primary Keys

  • Primary Key: Can be composed of two parts:
    • Partition Key (mandatory): Determines which partition an item belongs to. This is crucial for data distribution.
    • Sort Key (optional): Orders items within a partition. If provided, the combination of partition key and sort key forms the unique primary key.

For example, if user_id is the partition key and timestamp is the sort key, all items for a user_id would be stored together and ordered by timestamp.

Secondary Indexes

DynamoDB offers support for secondary indexes, which are essential for querying data on attributes other than the primary key. For instance, if your primary key is user_id but you need to query users by age, a secondary index on age would enable efficient lookups without full table scans. Internally, secondary indexes are like separate DynamoDB tables, mapping the indexed value (e.g., age) to the primary key(s) of the corresponding items.

Partitioning Strategy

DynamoDB tables are logically divided into partitions. Each partition is:

  • Disjoint: No two partitions share the same data.
  • Subset of Data: Each partition holds a portion of the overall table data.
  • Contiguous Key Ranges: Partitions store data for specific, contiguous ranges of partition keys. For example, a table might be split such that apple, banana, cat go to Partition 1, dog, elephant to Partition 2, and so on. The exact split points are dynamically managed.

Data Replication and Consistency

To ensure durability and high availability, DynamoDB replicates partitions across multiple nodes and Availability Zones.

Partition Replicas

Each partition is replicated multiple times (typically three times) and distributed across different Availability Zones (think of them as distinct data centers). This redundancy ensures that if one Availability Zone or node fails, the data remains accessible from other replicas. It’s important to note these are replicas of the data, not

Arpit Bhayani

Principal Engineer II at Razorpay - building Agent Studio, Ex-staff engg at GCP Memorystore & Dataproc, Creator of DiceDB, ex-Amazon Fast Data, ex-Director of Engg. SRE and Data Engineering at Unacademy. I spark engineering curiosity through my no-fluff engineering videos on YouTube and my courses