Alex DeBrie
alexdebrie.com · Personal blog · on HN since 2018
Alex DeBrie writes about AWS, especially DynamoDB data modeling, single-table design, and API Gateway.
What HN saysHN commenters point to his single-table design article as the main reference for DynamoDB data modeling and recommend it to people designing similar databases.
28HN people shared it
9linked it in comments
44stories submitted
271story points
3 years agolast shared
2018people per year2026
Most-shared posts
- 1Single-Table Design with Dynamodb7 people · 12 points · first shared 2020 · 1 comments on HN
- 2Inconsistent Thoughts on Database Consistency4 people · 57 points · first shared 2022 · 8 comments on HN
- 3The Three DynamoDB Limits You Need to Know3 people · 8 points · first shared 2021 · discussion on HN
- 4A Detailed Overview of AWS API Gateway3 people · 7 points · first shared 2019 · discussion on HN
- 5How to model one-to-many relationships in DynamoDB3 people · 3 points · first shared 2020 · discussion on HN
- 6DynamoDB Scales Where Relational Databases Don’t2 people · 16 points · first shared 2020 · 1 comments on HN
- 7Building a Developer Community2 people · 5 points · first shared 2020 · discussion on HN
- 8Everything you need to know about DynamoDB Partitions2 people · 5 points · first shared 2021 · discussion on HN
- 9Get Faster GitHub Search with Livegrep2 people · 1 points · first shared 2019 · discussion on HN
- 10AWS API Performance Comparison: Serverless vs. Containers1 people · 125 points · first shared 2019 · 54 comments on HN
- 11Getting Started with Serverless in 20191 people · 9 points · first shared 2019 · discussion on HN
- 12I (Still) Like the Serverless Framework over the CDK1 people · 6 points · first shared 2024 · discussion on HN
- 13My DynamoDB Wish List1 people · 3 points · first shared 2019 · discussion on HN
- 14Why the PIE theorem is more relevant than the CAP theorem1 people · 3 points · first shared 2019 · discussion on HN
- 15The Missing Guide to AWS API Gateway Access Logs1 people · 2 points · first shared 2021 · discussion on HN
What HN people wrote when they linked it
jedberg · 2020-09-14
I didn't look super closely, but it looks like your database works similarly to DynamoDB, in which case it could use similar data modeling. Here is a great post on single table design for DynamoDB that would probably be mostly applicable here:
https://www.alexdebrie.com/posts/dynamodb-single-table/
The post author actually wrote an entire book on data modeling with a single key/value table.
nslog · 2023-04-10
Stopped reading when this guy started talking about Single Table DDB being best practice and linking to AWS when he clearly did zero research on AWS recommendations with GraphQL including from the AWS Hero Alex Debrie he mentions:
https://www.alexdebrie.com/posts/dynamodb-graphql/
https://aws.amazon.com/blogs/mobile/single-table-vs-multi-table-dynamo…
https://aws.amazon.com/blogs/mobile/enhancing-dynamodb-single-table-de…
Also he mentions the race condition around clients connecting to the backend between queries and mutations, then in the same breath says the DataStore client handles this but also it's mistake is being reliant on Subscriptions? This contradiction doesn't make sense.
There are some legit bugs in this article though that I've seen, like that Analytics one. It's really a Pinpoint issue though when you dig under the covers that I've been waiting for them to solve for years.
belter · 2024-01-10
Your example itself shows why you would not want to do this. The database still has to read through all the rows up to the OFFSET point...
You are not supposed to do the same query patterns. My argument is that you can substitute your relational database, by changing the app and the layout of the data to match the proper patterns for DynamoDB.
"Migrating to DynamoDB from a relational database" - https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/migra…
""How to model one-to-many relationships in DynamoDB" - https://www.alexdebrie.com/posts/dynamodb-one-to-many/
deely3 · 2023-08-11
And if you don't want to spend money, you can get idea from this article:
https://www.alexdebrie.com/posts/dynamodb-single-table/
Im really curious about real life performance on different databases, especially in situation where RAM is smaller than database size.
rattray · 2023-07-04
If anyone's looking for an open-source search tool for grepping across repos (or even one large repo) at insane speed, I highly recommend livegrep:
https://github.com/livegrep/livegrep
Demo at https://livegrep.com/search/linux
We used it at Stripe and it was quite popular; often, searching even a single repo was faster on livegrep than with ripgrep locally.
A post reviewing it: https://www.alexdebrie.com/posts/faster-code-search-livegrep/
A post by its creator, nelhage, on its impact: https://blog.nelhage.com/post/reflections-on-performance/ and another on its architecture: https://blog.nelhage.com/2015/02/regular-expression-search-with-suffix…
ctvo · 2023-04-10
> It's just odd to me that I had to make this change in the first place. I wonder how many millions of dollars AWS is raking in just because devs are unaware of things like that.
AWS documentation very clearly outlines the behavior of a query and a scan. The internet is full of guides [1][2] on how to model your data so you utilize queries vs. scans.
If the developers at your company misuse a product, and aren't aware of these features when does personal responsibility come in? How is AWS as a platform suppose to discern that the trade-off with a GSI is what you want, and how is this scenario not generalized to every product? People misuse SQL databases all the time, for example.
1 - https://www.alexdebrie.com/posts/dynamodb-single-table/
2 - https://www.sensedeep.com/blog/posts/2021/dynamodb-singletable-design.…
mulmen · 2021-08-25
No2SQL is just physically implementing a normalized logical model on a NoSQL database instead of an RDBMS. That can be done with classes, methods, and attributes (OOP) providing RDBMS functionality like constraints and data types.
In DynamoDB you can use a single table model [1] to construct collections, which are similar to joins. The partition key is like a foreign key in an RDBMS. The sort key is like a combination of the normalized table identifier and primary key.
All of this can be as transparent to the business logic as it is in an RDBMS.
[1]: https://www.alexdebrie.com/posts/dynamodb-single-table/
whalesalad · 2020-09-30
This approach sounds very similar to using a single table in DynamoDB: https://www.alexdebrie.com/posts/dynamodb-single-table/
abd12 · 2020-04-08
Thank you! Glad you found DynamoDBGuide.com helpful :)
Yep, I do talk about aggregations in the book. One strategy that I've discussed is available in a blog post here[0] and involves using DynamoDB Transactions to handle aggregates.
If you're looking for large-scale aggregates for analytics (e.g. "What are my top-selling items last month?"), I have an Analytics supplement in the Plus package that includes notes on different patterns for analytics w/ DynamoDB.
Let me know if that helps!
[0] - https://www.alexdebrie.com/posts/dynamodb-transactions/#handling-count…