What Is Amazon DynamoDB? NoSQL in Plain English
Amazon DynamoDB is AWS's serverless database: a giant lookup table that answers in a few milliseconds whether it holds five hundred records or five billion, charges nothing for requests while your app sleeps, and never shows you a server. How does it stay that fast at any size? Here's the honest answer most introductions skip: it stays fast by refusing. DynamoDB simply won't let you ask the kinds of questions that make databases slow — there are no joins, no "scan everything and figure it out" queries in its comfort zone. You file every record under a key, you fetch it by that key, and that deal holds at any scale. One more thing the pricing page won't volunteer: the famous "free forever" tier — enough for roughly 200 million requests a month — only applies in the billing mode that is not the default. This post explains the whole machine in plain English, with Jake's repair shop as the test lab, per tradition.
The notebook that outgrew itself
Jake's repair shop tracked every job in a spiral notebook for years: ticket number, customer name, what's wrong, what happened. It worked beautifully at fifty tickets. At five hundred, finding "that laptop from March with the coffee spill" meant flipping pages while the customer waited. The spreadsheet that replaced the notebook had the same disease in a nicer shirt — search got slower as the file grew, and one afternoon it took eleven seconds to find a ticket while a customer drummed her fingers on the counter. Eleven seconds is a short time everywhere except a service counter.
In our Lambda post, Jake's shop got a function that resizes photos the moment they're uploaded. At the end of that post we asked the obvious next question: the function did the work — but where does the record of the work live? Ticket numbers, customer names, repair status, dates. That's a database question, and for the serverless world, AWS's answer is DynamoDB. Over chai, Jake asked the only question that matters to him: "Will it still be instant when I have ten years of tickets in it?" Yes. And the reason why is the best part of the story.
What DynamoDB actually is
Ethan explains it with the post office: "A librarian and a post office clerk both store things for you, but they work differently. Ask the librarian for 'every book about ships published before 1950' and she'll walk the shelves — a wonderful service that takes longer the bigger the library gets. The post office clerk does one thing: you say 'box 4127,' and he walks straight to box 4127. He doesn't search. He doesn't care if the building has forty boxes or forty thousand — box 4127 is exactly where box 4127 always is. DynamoDB is the post office. A relational database is the library."
Technically, DynamoDB is a NoSQL key-value and document database. You create a table, and every record — DynamoDB calls them items — is filed under a key you choose. An item is a flexible bundle of fields (name, status, date, anything), and items in the same table don't have to share the same fields, which feels lawless if you come from spreadsheets and liberating about ten minutes later. The design grew out of Amazon's own hard lesson: in the early 2000s, holiday shopping rushes kept pushing their traditional databases to the edge, and the company concluded that for the shopping cart — where every millisecond and every failure is money — they needed a store that traded query flexibility for speed that never degrades. That internal system's descendants became DynamoDB, and Amazon still runs its own retail machinery on this design. When you create a table, you're borrowing the architecture Amazon built because their library kept buckling — you get the post office they wished they'd had.
The trick: it never gets slower — because it refuses to
Here's the shock most tutorials bury: DynamoDB's speed guarantee isn't a heroic feat of engineering piled on top of a normal database. It comes from subtraction. Joins — the relational operation that combines two tables on the fly — don't exist. Ad-hoc "find me everything matching this description" queries exist only as a slow, discouraged operation called a scan. What remains is a short list of operations that all share one property: their cost doesn't grow with the size of the table. Fetch by key. Write by key. Read a range within one key. That's the menu.
Under the hood, DynamoDB spreads your items across many machines using the partition key — every key hashes to a specific partition, so a lookup goes straight to the right machine, exactly like the clerk walking to box 4127. When your data grows, AWS quietly adds partitions. When traffic spikes, more machines answer. You never see any of it. The published promise is single-digit-millisecond response times at any scale, and the reason the promise is keepable is precisely that the dangerous questions are off the menu. It's the only database that gets described honestly in one sentence: it's fast because it won't let you be slow.
Tables, items, and keys — the whole vocabulary in one table
If you've touched Excel or any SQL database, you already know most of DynamoDB's concepts under other names. Here's the translation card:
| Spreadsheet / SQL world | DynamoDB world | Jake's shop version |
|---|---|---|
| Sheet / table | Table | "RepairTickets" |
| Row | Item | One repair job |
| Column | Attribute (flexible per item) | Status, device, notes |
| Primary key | Partition key (+ optional sort key) | Customer phone + repair date |
| JOIN across tables | Doesn't exist — by design | — |
The partition key is the one decision worth slowing down for, because it's the label everything is filed under. Jake's first instinct — ticket number — works for "pull up ticket 8841" but can't answer "show me everything for this customer." Filing under customer phone number as the partition key, with repair date as the sort key, lets the shop ask both "everything for 555-0182" and "her repairs from July" — instantly, at any size. A sort key orders items within one partition key, which is what turns a lookup table into a filing cabinet with history. Design the key around the questions you'll actually ask; that single habit is 80% of DynamoDB skill.
The two billing modes — and the free-tier fine print
DynamoDB has two ways of charging, and the difference matters more than any other fact on this page. On-demand mode — the default, and the right answer for most people — charges per request: you pay for exactly the reads and writes that happen, and an idle table costs nothing in request charges. Provisioned mode reserves a steady rate of reads and writes per second (measured in "capacity units"), like paying for a lane on a highway whether or not you drive in it — cheaper for heavy, steady, predictable traffic.
Now the fine print that this series exists to catch. AWS's famous permanent free tier for DynamoDB — 25 GB of storage plus 25 write and 25 read capacity units per month, enough by AWS's own arithmetic for up to about 200 million requests a month, free forever — is real and genuinely never expires. But capacity units are a provisioned-mode concept. Leave your table in the on-demand default, and there is no free request allowance at all — every read and write is billed from the first one. The trap is small in dollars (as you'll see below, the sums are comic) but large in principle: the mode AWS steers you into is not the mode the free tier lives in. For a learning table, either answer is fine — on-demand pennies or provisioned-free — as long as you know you're choosing. And regardless of mode, the Budget alert you set up in the billing post stands guard behind you.
What it costs in real numbers (Jake's shop does the math)
US East on-demand pricing, current as of August 2026, standard table class:
| What | On-demand price | Worth noticing |
|---|---|---|
| Writes | ~$0.625 per million | Writes cost 5× reads — design accordingly |
| Reads | ~$0.125 per million | A million lookups: one-eighth of a dollar |
| Storage | ~$0.25 per GB-month | First 25 GB free, every month, forever |
| Idle table (on-demand) | $0.00 in request charges | The Lambda pairing: nothing runs, nothing bills |
Jake's shop, generously estimated: 500 new tickets a month, each updated a few times — call it 5,000 writes — plus 50,000 lookups from the counter and the status page his Lambda function serves. The math: 5,000 writes × $0.625 per million = $0.003. 50,000 reads × $0.125 per million = $0.006. Ten years of tickets might reach 100 MB — a rounding error inside the free 25 GB. Total database bill: about one cent a month, and the answer at the counter arrives in milliseconds whether the table holds March's tickets or a decade's. The notebook cost more than that in ink. This is the honest reason the serverless pairing is beloved: a Lambda function that runs only when triggered, writing to a database that bills only when asked, is an entire backend that costs pocket lint until the day it has real users.
When DynamoDB is the wrong choice
This series doesn't sell tools, so here's the other side. DynamoDB's refusal to join is a superpower exactly until your application is made of joins. If your product is reports — "revenue by region by month for products tagged X" — you'd be fighting the database daily; a relational engine (AWS's RDS, running MySQL or PostgreSQL) answers those in one line of SQL. Ad-hoc analytics on DynamoDB means scans, and scans are the one operation that gets slower and pricier as the table grows — using a post office as a library, walking box to box asking each one what's inside.
Honest decision line: if you can list the handful of questions your app asks ("get this ticket," "this customer's history," "this order's status"), DynamoDB will answer them at any scale for pennies. If your questions change weekly, or the word "dashboard" appears anywhere in the plan, start relational — you can always move the hot, simple lookups to DynamoDB later; teams do exactly that migration all the time. And if you already know SQL and are building something small, there's no shame in the tool you know: a tiny RDS instance is a fine home for a tiny app. The exam answer and the honest answer agree here, which is refreshing.
Try it in ten minutes — no SQL, no servers
This is the least intimidating hands-on in AWS. In the console:
- Open DynamoDB from the console search bar and click Create table.
- Table name:
RepairTickets. Partition key:CustomerPhone(String). Sort key:RepairDate(String). Leave every other default — that includes on-demand mode — and click Create table. - When it turns Active, open it and click Explore table items → Create item. Fill the two keys, then use Add new attribute to bolt on anything —
Device: laptop,Status: waiting-for-part. Notice nobody asked you to declare columns first. Save it. - Add two or three more items, same customer, different dates. Then in the query panel, query for that phone number: every visit comes back, newest to oldest, instantly. That's the partition-key-plus-sort-key pattern doing its whole job.
And the guardrails, because this series never skips them:
- Confirm your Budget alert exists (five minutes, free, covered step-by-step in the billing post). A learning table can't hurt you, but the habit is the point.
- If you want the table to ride the permanent free tier instead, switch it to provisioned mode (table → Additional settings → Read/write capacity) at 25 WCU / 25 RCU or below — remembering that's the mode where the free allowance actually lives.
- Delete test tables when you're done playing. Free-tier storage makes it painless to keep them, but tidy accounts age better.
If you're here for the certification
DynamoDB is the backbone database of the AWS Certified Developer – Associate exam — key design, capacity modes, and the on-demand-versus-provisioned trade show up relentlessly — and it stars in Solutions Architect – Associate scenarios as the standard answer to "serverless application needs a database with millisecond reads at scale." The pattern the exams reward is the one this post taught: match the database to the questions the app asks, and reach for DynamoDB when the access pattern is known and the scale is unknown. If the broader AI-and-cloud career path is what brought you here, our AWS AI & ML certification series connects these same building blocks to the newer exams, and the series hub keeps every post in reading order.
Frequently asked questions
What is Amazon DynamoDB in simple terms?
AWS's serverless database: a giant lookup table that stores records and returns them in a few milliseconds whether it holds five hundred or five billion. No database server to set up, patch, or resize — create a table, write items, done.
Is DynamoDB free to use?
There's a permanent free allowance: 25 GB of storage plus 25 write and 25 read capacity units monthly — enough, by AWS's own math, for up to about 200 million requests a month. The catch: it applies to provisioned mode only; the on-demand default has no free request allowance.
Is DynamoDB a SQL database?
No — it's NoSQL, key-value and document style. You fetch items by key instead of writing SQL, and joins don't exist. That restriction is deliberate: it's why the speed never degrades.
What is the difference between DynamoDB and MySQL or RDS?
MySQL/RDS gives flexible queries, joins, and reports, with speed that depends on data size and tuning. DynamoDB forbids the flexible queries and in exchange guarantees few-millisecond answers at any scale, serverless. Pick by the questions your app asks.
What is a partition key?
The label every item is filed under — a ticket number, a phone number. DynamoDB uses it to walk straight to the right internal shelf, which is why key lookups are instant. It's the most important design decision in the whole tool.
What is the difference between on-demand and provisioned mode?
On-demand bills per request (~$0.625/million writes, ~$0.125/million reads) and costs nothing while idle. Provisioned reserves a fixed read/write rate per second — cheaper for steady heavy traffic, and the mode where the free tier lives. On-demand is the default and right for spiky or unknown loads.
How much does DynamoDB actually cost?
US East, on-demand: about $0.625 per million writes, $0.125 per million reads, ~$0.25 per GB-month of storage after the free 25 GB. A small app doing tens of thousands of requests a month costs under a cent.
Can DynamoDB really handle any amount of traffic?
That's its core promise. Items are spread across machines by partition key; growth means AWS adds partitions behind the scenes, and responses stay in single-digit milliseconds. Amazon runs its own shopping cart this way.
Why doesn't DynamoDB support joins?
Joins are the operation whose cost multiplies as tables grow — the reason big relational databases slow down. DynamoDB removes them so every remaining operation stays cheap and predictable at any size. Need joins daily? That's your sign to go relational.
Do I pay for DynamoDB when nobody is using my app?
In on-demand mode, no request charges while idle — only storage, and 25 GB of that is free. A dormant hobby project costs $0.00, which is exactly why it pairs so well with Lambda.
How does DynamoDB work with AWS Lambda?
They're the classic serverless pair: something happens, a Lambda function runs, and DynamoDB is where it reads and writes its records. Neither bills while idle, neither shows you a server, both scale on their own.
Is my data safe in DynamoDB?
Every table is automatically replicated across multiple availability zones in your region, and encrypted at rest by default. On-demand backups and point-in-time recovery cover the "I deleted the wrong thing" day.
What is a sort key and do I need one?
An optional second key part that orders items within one partition key — all of one customer's repairs by date, for example — enabling range questions like "her tickets from July." Simple lookup tables skip it; anything with per-key history wants it.
Can I run reports and analytics on DynamoDB?
Not comfortably. Whole-table scans get slower and pricier as data grows, and there are no SQL-style aggregations. The normal pattern is exporting or streaming the data into an analytics tool — or choosing a relational database when reporting is the main job.
Which AWS certification covers DynamoDB?
It's central to Developer – Associate and a fixture in Solutions Architect – Associate scenarios — usually as the answer to "serverless app needs a fast database," with the trade-offs from this post as the tested material.
Do I need to know servers or SQL to try DynamoDB?
Neither. The console walkthrough above — create table, add items, query them back — involves zero SQL and zero server administration. Ten honest minutes, and the free tier means the experiment costs nothing worth mentioning.
- What Is AWS Lambda? Serverless in Plain English
The other half of the serverless pair — the code that writes into this database. - What Is Amazon S3? Cloud Storage Explained in Plain English
Files go in S3, records go in DynamoDB — the division of labor every AWS app uses. - AWS Billing in Plain English: Free Tier, Budgets, and Traps
The Budget-alert setup this post leans on — five minutes, free, do it first. - Learn AWS for Free — the full series in reading order
Every stop on this road, from "what is AWS" to here, in one place.
Next stop in the series: Jake's shop now has a function that does the work and a database that remembers it — but customers still can't reach any of it from a browser. The front door that turns a Lambda function and a DynamoDB table into a real, public web address is Amazon API Gateway. That's the next post — chai's on Jake, per tradition. If anything here didn't click, tell us through the contact page and we'll sharpen it; this series only works if every stop makes sense before the bus moves.