Thursday, 03 Apr 2025

5 min read

DynamoDB: A Comprehensive Getting Started Guide

DynamoDB is a fully managed, highly scalable NoSQL database service offered by AWS. If you're looking to learn how it works or want to improve your existing skills, this guide is for you.

You'll start with the basics, learn how to create a DynamoDB table, and see how to write and read data using the AWS SDK. Step by step, you'll get comfortable working with DynamoDB and understand how it fits into modern cloud applications.

Table of Contents

  • Introduction to DynamoDB
  • DynamoDB: Key Concepts
  • Setting Up the Environment
  • Creating a Table in DynamoDB
  • Writing and Reading Data in DynamoDB
  • Conclusion

Introduction to DynamoDB

Amazon DynamoDB, a flagship offering in Amazon's extensive range of web services, is a key-value and document database that delivers single-digit millisecond performance at any scale. It's a fully managed, multi region, multi master, durable database with built-in security, backup and restore, and in-memory caching for internet-scale applications.

Unlike traditional SQL databases that use a fixed schema, DynamoDB is schema-less. This means you're not required to define the structure of your data before starting to use it. Instead, each record or item only needs to have a unique key.

One of the main reasons DynamoDB stands out in the NoSQL world is due to its seamless scalability. You don't need to worry about the underlying infrastructure or managing servers. All you need to specify is the read and write capacity units, and DynamoDB takes care of the rest.

DynamoDB supports both key-value and document data models. It can store JSON, HTML, XML, and more, allowing a wide range of applications and use cases, from gaming and AdTech to IoT and many other mobile, web, gaming, ad tech, and IoT applications.

DynamoDB: Key Concepts

Understanding the core components of DynamoDB is crucial for working effectively with this service. Here are a few key concepts and examples to help illustrate them:

  • Tables: In DynamoDB, data is stored in tables. Think of a table as a group of items. For example, you could have a "Users" table that stores data for all your application's users.
  • Items: Each data entry in a table is known as an item, comparable to a row in a relational database. An item in the "Users" table, for example, might represent a single user and contain attributes like "UserId", "Name", and "Email".
  • Attributes: Attributes are the fundamental data elements of items. Each item is composed of one or more attributes, which can be considered analogous to columns in a relational database. For instance, for an item in the "Users" table, the attribute "Name" might have the value "John Doe".
  • Primary Key: Each item in a DynamoDB table is uniquely identified by a primary key, preventing two items from having the same key. There are two types of Primary Keys:
  • Partition Key: A simple primary key, composed of one attribute known as the partition key. DynamoDB uses the partition key's value as input to an internal hash function, which determines the partition or physical location on which the data is stored.
  • Composite Key: A composite primary key, composed of two attributes. The first attribute is the partition key, and the second attribute is the sort key. DynamoDB uses the partition key to hash and distribute the data across multiple partitions. Within each partition, data is stored in order of the sort key. This combination allows for efficient querying and sorting.
  • Secondary Indexes: These are optional structures that you can create on a table to provide more querying flexibility. DynamoDB supports two types of secondary indexes: Local Secondary Index (LSI) and Global Secondary Index (GSI). LSIs allow you to designate alternate sort keys, while GSIs allow for both alternate partition and sort keys. These indexes can provide a performance boost when dealing with complex queries

With the basics out of the way, let's look at how we can start using DynamoDB with JavaScript.

Setting Up the Environment

To get started, you need to set up AWS SDK. Install it using npm:

npm install @aws-sdk/client-dynamodb

‍Creating a Table in DynamoDB

Creating a table in DynamoDB is the first step towards harnessing the power of this NoSQL database service. Each table in DynamoDB requires a unique name, a primary key (which identifies each item uniquely), and a specification for read and write capacity units.

Here’s a simple example of how to create a table using the createTable method.

// Importing necessary modules
const { DynamoDBClient, CreateTableCommand } = require("@aws-sdk/client-dynamodb");

// Set up DynamoDB client
const dbclient = new DynamoDBClient({ region: "us-west-2" });

async function createTable() {
    const params = {
        TableName: "MyTable",
        KeySchema: [
            { AttributeName: "Id", KeyType: "HASH" },
            { AttributeName: "Name", KeyType: "RANGE" }
        ],
        AttributeDefinitions: [
            { AttributeName: "Id", AttributeType: "N" },
            { AttributeName: "Name", AttributeType: "S" }
        ],
        ProvisionedThroughput: { ReadCapacityUnits: 5, WriteCapacityUnits: 5 }
    };
  
    const command = new CreateTableCommand(params);
    const response = await dbclient.send(command);
    console.log("Table Created:", response);
}

createTable().catch(console.error);

In our example, we create a table called "MyTable". Our primary key is a composite of two attributes - "Id" and "Name". The attribute "Id" serves as the partition key, and "Name" as the sort key. This composite primary key ensures that each item in our table can be uniquely identified by a combination of "Id" and "Name".

We specify our read and write capacity units as 5 each. These units determine the number of consistent reads or writes per second that our table can handle before throttling.

Writing and Reading Data in DynamoDB

With our table in place, we can start storing and retrieving data. To illustrate this, we will walk you through a simple example of adding and retrieving an item in our "MyTable".

const { PutItemCommand, GetItemCommand } = require("@aws-sdk/client-dynamodb");

// Write Data
async function putData(id, name) {
    const params = {
        TableName: "MyTable",
        Item: {
            "Id": {N: id.toString()},
            "Name": {S: name}
        }
    };
  
    const command = new PutItemCommand(params);
    const response = await dbclient.send(command);
    console.log("Item added:", response);
}

// Read Data
async function getData(id, name) {
    const params = {
        TableName: "MyTable",
        Key: {
            "Id": {N: id.toString()},
            "Name": {S: name}
        }
    };
  
    const command = new GetItemCommand(params);
    const response = await dbclient.send(command);
    console.log("Item retrieved:", response.Item);
}

putData(1, "MTechZilla").catch(console.error);
getData(1, "MTechZilla").catch(console.error);

When writing data, we use the PutItemCommand. Here, we are adding an item with "Id" as 1 and "Name" as "MTechZilla".

When reading data, we use the GetItemCommand. We specify the "Id" and "Name" of the item we want to retrieve. This command returns the entire item with the specified primary key if it exists.

Understanding these basic write and read operations is the stepping stone for performing more complex data manipulations and queries in DynamoDB.

Conclusion

We've covered the key concepts, shown you how to create a table, and explored basic operations to add and retrieve data. DynamoDB's key strengths lie in its scalability, speed, and the seamless integration it offers with other AWS services, making it an excellent choice for applications both big and small.

Remember, hands-on experience is crucial when working with DynamoDB, so keep practicing what you've learned today. Happy coding, and enjoy exploring all that DynamoDB has to offer!

Need expert help building scalable cloud solutions like this? Contact us for a free consultation to turn your ideas into powerful applications.

Contact Us

Chat With Our Founding Engineer

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

LET'S CONNECT