<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>SingleTable</title><description>DynamoDB single-table design patterns, schema guides, and expert schema reviews.</description><link>https://singletable.dev/</link><item><title>DynamoDB On-Demand vs Provisioned: The Math, Not the Marketing</title><link>https://singletable.dev/blog/dynamodb-on-demand-vs-provisioned/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-on-demand-vs-provisioned/</guid><description>AWS makes on-demand sound effortless and provisioned sound risky. The pricing tells a different story. Here&apos;s the actual break-even math, the operational trade-offs, and when each is the right call.</description><pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Idempotency Keys: The Right Way to Deduplicate Writes</title><link>https://singletable.dev/blog/dynamodb-idempotency-keys/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-idempotency-keys/</guid><description>Stripe-style idempotency keys, implemented correctly with DynamoDB. The pattern, the failure modes, and how to combine the idempotency record with the actual write.</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Pagination Done Correctly</title><link>https://singletable.dev/blog/dynamodb-pagination/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-pagination/</guid><description>LastEvaluatedKey is opaque, queries can return empty pages with more data behind them, and exposing the raw token to clients leaks your schema. The full pagination playbook.</description><pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Transactions vs Conditional Writes: When Each Is the Right Tool</title><link>https://singletable.dev/blog/dynamodb-transactions-vs-conditional/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-transactions-vs-conditional/</guid><description>Conditional writes give you single-item atomicity for free. Transactions give you multi-item atomicity at 2x the cost. Knowing which one to reach for is half the battle.</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Streams: Fan-Out, CDC, and Projections</title><link>https://singletable.dev/blog/dynamodb-streams-fanout-cdc/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-streams-fanout-cdc/</guid><description>Streams turn DynamoDB into a source of truth for everything else. Three patterns - fan-out, change data capture, and read-model projections - that should be in every DynamoDB engineer&apos;s toolkit.</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table Pattern: Notifications and Inbox</title><link>https://singletable.dev/blog/pattern-notifications-inbox/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-notifications-inbox/</guid><description>How to model a notification inbox in DynamoDB. Unread counts, sparse index for filtering, fan-out delivery, and mark-all-read without a full table scan.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table Pattern: Hierarchical Data</title><link>https://singletable.dev/blog/pattern-hierarchical-data/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-hierarchical-data/</guid><description>How to model trees, category hierarchies, and org charts in DynamoDB. Adjacency list for parent-child traversal, materialized path for subtree queries.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Schema Pattern: GraphQL Resolvers</title><link>https://singletable.dev/blog/pattern-graphql-resolvers/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-graphql-resolvers/</guid><description>A single-table DynamoDB schema designed for GraphQL APIs - field-level resolvers, DataLoader batching, and avoiding N+1 without giving up on a single-table design.</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB TTL: Soft Deletes, Expiry, and the Patterns Around Them</title><link>https://singletable.dev/blog/dynamodb-ttl-soft-delete/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-ttl-soft-delete/</guid><description>TTL is more than auto-expiry. Used right, it powers soft deletes, retention windows, and archival flows - for free. Used wrong, it deletes data you needed.</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Composite Sort Key begins_with Not Working: Fix It</title><link>https://singletable.dev/blog/dynamodb-composite-sort-key-begins-with/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-composite-sort-key-begins-with/</guid><description>DynamoDB begins_with on a composite sort key fails silently when the key template format doesn&apos;t match exactly. Here&apos;s what&apos;s wrong and how to fix it.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate></item><item><title>ElectroDB: Collection vs Entity (When to Use Each)</title><link>https://singletable.dev/blog/electrodb-collection-vs-entity/</link><guid isPermaLink="true">https://singletable.dev/blog/electrodb-collection-vs-entity/</guid><description>ElectroDB Collections let you query multiple entity types in one DynamoDB call. Here&apos;s exactly when to use a collection vs querying entities separately.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Adding an Access Pattern to DynamoDB After Launch</title><link>https://singletable.dev/blog/dynamodb-add-access-pattern-later/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-add-access-pattern-later/</guid><description>Your schema is in production and you need a query you didn&apos;t design for. Here&apos;s the decision tree: add a GSI, reshape data, or accept the limitation.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Schema Pattern: Event Sourcing</title><link>https://singletable.dev/blog/pattern-event-sourcing/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-event-sourcing/</guid><description>An append-only event log in DynamoDB - aggregates, events, snapshots, and cross-aggregate event-type queries. Plus the projection patterns that make event sourcing actually usable.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Hot Partitions and Write Sharding: A Practical Guide</title><link>https://singletable.dev/blog/dynamodb-hot-partitions-write-sharding/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-hot-partitions-write-sharding/</guid><description>Hot partitions throttle silently until they don&apos;t. The fix is write sharding - but only in the right places. Here&apos;s where, how, and what it costs.</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate></item><item><title>How to Query DynamoDB Single-Table Design Without Scanning</title><link>https://singletable.dev/blog/dynamodb-query-without-scan/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-query-without-scan/</guid><description>Every query that avoids a scan uses a partition key. Here&apos;s how to design your key structure so every access pattern is a targeted query, not a Scan.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table Design: Too Many GSIs?</title><link>https://singletable.dev/blog/dynamodb-too-many-gsis/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-too-many-gsis/</guid><description>Hitting the 20-GSI limit or paying too much for global indexes? Here&apos;s how to consolidate, overload, and rethink GSI design in single-table DynamoDB.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB vs Postgres for Real-Time Chat: An Honest Comparison</title><link>https://singletable.dev/blog/dynamodb-vs-postgres-chat/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-vs-postgres-chat/</guid><description>Message ordering, pagination, read receipts, and fan-out in chat apps. When DynamoDB beats Postgres and when you should reach for something else entirely.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Schema Pattern: Gaming Leaderboard</title><link>https://singletable.dev/blog/pattern-gaming-leaderboard/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-gaming-leaderboard/</guid><description>A DynamoDB schema for game leaderboards - daily, weekly, seasonal, and global - with player stats and session history. Includes the &apos;when to use Redis instead&apos; tradeoff.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Sparse Indexes: The Highest-Leverage Pattern Nobody Explains</title><link>https://singletable.dev/blog/dynamodb-sparse-indexes/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-sparse-indexes/</guid><description>A sparse GSI indexes only the items where the key is set. That tiny detail unlocks workflow queues, soft deletes, flagged-content lists, and &apos;needs attention&apos; dashboards - cheaply.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB vs Postgres for SaaS: An Honest Comparison</title><link>https://singletable.dev/blog/dynamodb-vs-postgres-saas/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-vs-postgres-saas/</guid><description>Multi-tenancy, per-tenant isolation, usage analytics, schema migrations - when DynamoDB beats Postgres for SaaS backends and when it doesn&apos;t.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table Pattern: Many-to-Many Relationships</title><link>https://singletable.dev/blog/pattern-many-to-many/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-many-to-many/</guid><description>How to model many-to-many relationships in DynamoDB single-table design. Team membership, user tags, and follower graphs with adjacency lists and GSI inverses.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table vs Multi-Table Design: The Real Difference</title><link>https://singletable.dev/blog/dynamodb-single-table-vs-multi-table/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-single-table-vs-multi-table/</guid><description>When should all your entity types share one DynamoDB table vs live in separate tables? A practical comparison with a decision framework.</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Schema Pattern: Marketplace (Two-Sided)</title><link>https://singletable.dev/blog/pattern-marketplace/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-marketplace/</guid><description>A complete single-table DynamoDB schema for a two-sided marketplace - buyers, sellers, listings, orders, and mutual reviews. Access patterns, GSIs, and ElectroDB code.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB GSI Design: When to Add One vs Reshape Your Sort Key</title><link>https://singletable.dev/blog/dynamodb-gsi-vs-sort-key/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-gsi-vs-sort-key/</guid><description>Most teams reach for a GSI when a new access pattern shows up. Half the time, the cleaner answer is reshaping the sort key. A framework for deciding.</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table Pattern: Analytics Events</title><link>https://singletable.dev/blog/pattern-analytics-events/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-analytics-events/</guid><description>A production-ready DynamoDB schema for high-volume analytics events with write-sharded ingestion, session aggregation, and TTL-based data lifecycle.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table Pattern: Workflow/State Machine</title><link>https://singletable.dev/blog/pattern-workflow-state-machine/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-workflow-state-machine/</guid><description>A production-ready DynamoDB schema for workflow execution with ordered steps, state transitions, and execution history.</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table Pattern: Inventory Management</title><link>https://singletable.dev/blog/pattern-inventory-management/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-inventory-management/</guid><description>A production-ready DynamoDB schema for inventory management with atomic stock updates, warehouse tracking, and movement history.</description><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table Pattern: Content Management (CMS)</title><link>https://singletable.dev/blog/pattern-content-management/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-content-management/</guid><description>A production-ready DynamoDB schema for a headless CMS with articles, authors, categories, tags, and content versioning.</description><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Cost Optimization: The 5 Levers That Actually Matter</title><link>https://singletable.dev/blog/dynamodb-cost-optimization/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-cost-optimization/</guid><description>Practical DynamoDB cost optimization - from capacity mode selection to projection tuning - with real cost calculations.</description><pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table Pattern: Booking/Scheduling</title><link>https://singletable.dev/blog/pattern-booking-scheduling/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-booking-scheduling/</guid><description>A production-ready DynamoDB schema for booking and scheduling with atomic slot reservation, provider availability, and double-booking prevention.</description><pubDate>Mon, 27 Apr 2026 00:00:00 GMT</pubDate></item><item><title>ElectroDB vs DynamoDB-Toolbox vs Dynamoose: Which DynamoDB ORM?</title><link>https://singletable.dev/blog/electrodb-vs-dynamodb-toolbox/</link><guid isPermaLink="true">https://singletable.dev/blog/electrodb-vs-dynamodb-toolbox/</guid><description>A practical comparison of the three main DynamoDB ORMs for TypeScript - what each is best at and when to use it.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table Pattern: IoT Time-Series</title><link>https://singletable.dev/blog/pattern-iot-time-series/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-iot-time-series/</guid><description>A production-ready DynamoDB schema for IoT device readings with time-range queries, TTL-based data lifecycle, and pre-computed aggregations.</description><pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table Pattern: Chat/Messaging</title><link>https://singletable.dev/blog/pattern-chat-messaging/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-chat-messaging/</guid><description>A production-ready DynamoDB schema for chat and messaging with conversations, paginated messages, read receipts, and unread counts.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate></item><item><title>The 5 Most Common DynamoDB Single-Table Design Mistakes</title><link>https://singletable.dev/blog/dynamodb-single-table-mistakes/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-single-table-mistakes/</guid><description>Every one of these came from real schema reviews and community conversations. Here&apos;s what goes wrong and how to fix it.</description><pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate></item><item><title>When Order Duplication Is and Isn&apos;t Acceptable in DynamoDB</title><link>https://singletable.dev/blog/dynamodb-order-duplication/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-order-duplication/</guid><description>The e-commerce orders pattern writes each order to two partition keys. Is that always the right call? A clear framework for when to duplicate and when not to.</description><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate></item><item><title>What Queries Your DynamoDB Schema Explicitly Doesn&apos;t Support</title><link>https://singletable.dev/blog/dynamodb-unsupported-queries/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-unsupported-queries/</guid><description>Every DynamoDB schema is a set of bets. The queries you&apos;re not supporting are as important as the ones you are - and most teams never write them down.</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Schema Migrations: The Guide Nobody Wrote</title><link>https://singletable.dev/blog/dynamodb-schema-migrations/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-schema-migrations/</guid><description>Schema changes in DynamoDB are possible - they&apos;re just different from SQL migrations. A practical guide to attribute changes, key structure changes, GSI additions, and ElectroDB versioning.</description><pubDate>Sat, 07 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Single-Table vs Table-Per-Tenant in DynamoDB: The Real Tradeoffs</title><link>https://singletable.dev/blog/dynamodb-single-table-vs-table-per-tenant/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-single-table-vs-table-per-tenant/</guid><description>Why not just give each tenant their own table? A cost comparison, operational analysis, and decision framework for SaaS multi-tenant DynamoDB.</description><pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table Pattern: Social Media Feed</title><link>https://singletable.dev/blog/pattern-social-media-feed/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-social-media-feed/</guid><description>Fan-out on write vs fan-out on read - the two approaches to social feeds in DynamoDB, when to use each, and a production-ready schema with ElectroDB.</description><pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB vs Postgres for E-Commerce: An Honest Comparison</title><link>https://singletable.dev/blog/dynamodb-vs-postgres-ecommerce/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-vs-postgres-ecommerce/</guid><description>I&apos;ve built e-commerce backends on both. Here&apos;s when each wins - and when you&apos;ll regret the choice.</description><pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Tenant Isolation: Application-Layer vs IAM LeadingKeys</title><link>https://singletable.dev/blog/dynamodb-tenant-isolation/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-tenant-isolation/</guid><description>Two approaches to tenant isolation in DynamoDB - and when the complexity of IAM actually pays off over application-layer scoping.</description><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate></item><item><title>ULIDs vs UUIDs vs Timestamps for DynamoDB Sort Keys</title><link>https://singletable.dev/blog/dynamodb-sort-key-ulid-uuid/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-sort-key-ulid-uuid/</guid><description>Why your sort key choice determines which access patterns are possible - and when to use ULIDs to get the best of both worlds.</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Single-Table Pattern: E-Commerce Orders</title><link>https://singletable.dev/blog/pattern-e-commerce-orders/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-e-commerce-orders/</guid><description>A production-ready DynamoDB schema for e-commerce orders with 8 access patterns, status-based GSI, and full ElectroDB entity definitions.</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate></item><item><title>When DynamoDB Single-Table Design Is the Wrong Choice</title><link>https://singletable.dev/blog/when-not-to-use-single-table-design/</link><guid isPermaLink="true">https://singletable.dev/blog/when-not-to-use-single-table-design/</guid><description>A DynamoDB advocate&apos;s honest take on when single-table design hurts more than it helps - and a framework for deciding.</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Fundamentals: The Mental Model Before the Schema</title><link>https://singletable.dev/blog/dynamodb-fundamentals/</link><guid isPermaLink="true">https://singletable.dev/blog/dynamodb-fundamentals/</guid><description>Before single-table design makes sense, you need to understand how DynamoDB actually constrains you. This is the post that makes everything else on this site legible.</description><pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate></item><item><title>DynamoDB Schema Pattern: SaaS Multi-Tenant</title><link>https://singletable.dev/blog/pattern-saas-multi-tenant/</link><guid isPermaLink="true">https://singletable.dev/blog/pattern-saas-multi-tenant/</guid><description>A complete single-table DynamoDB schema for SaaS multi-tenant apps. Access patterns, PK/SK design, GSIs, sample data, and ElectroDB entity code.</description><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Why I&apos;m Building a Visual DynamoDB Schema Designer</title><link>https://singletable.dev/blog/why-im-building-this/</link><guid isPermaLink="true">https://singletable.dev/blog/why-im-building-this/</guid><description>I&apos;ve built production DynamoDB apps with 6+ GSIs per entity. The schema design process is still spreadsheets and guesswork. I&apos;m fixing that.</description><pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate></item></channel></rss>