Time-Series Databases: When to Reach for One
When a time-series database earns its place over a general-purpose one, and what you give up in exchange for the speed it buys you.
Category
20 articles
When a time-series database earns its place over a general-purpose one, and what you give up in exchange for the speed it buys you.
Schema design principles for MongoDB that hold up under real query patterns, not just the ones that look clean in a demo.
A tour of Redis's core data structures and the caching, rate-limiting, and leaderboard patterns each one is actually built for.
What Postgres's VACUUM process is actually cleaning up, why tables bloat despite it, and how to keep autovacuum from falling behind.
Why deadlocks happen even in well-designed schemas, how to read a deadlock log, and the lock-ordering habits that prevent them.
How common table expressions clean up nested subqueries, and how recursive CTEs turn hierarchical data into a solvable SQL problem.
An introduction to window functions — running totals, rankings, and moving averages — for anyone still reaching for self-joins and subqueries.
A practical framework for deciding when an ORM query is fine and when it's time to drop down to raw SQL, with real examples of each.
Why the N+1 query problem keeps reappearing across every ORM, how to spot it before production does, and the fixes that actually hold up.
Techniques for adding columns, changing types, and backfilling data on a live table without locking it or breaking the app mid-deploy.
How to use your database's built-in full-text search before reaching for a separate search cluster, and where it stops being enough.
A practical look at JSON and JSONB columns: when they replace a schema migration, when they hide a design problem, and how to index them.
When strict normalization protects you, when it just adds joins, and how to denormalize deliberately instead of by accident.
What synchronous and asynchronous replication actually guarantee during a failover, and why the choice is really about how much data you can lose.
A comparison of range, list, and hash partitioning strategies, when each one earns its operational complexity, and when it's premature.
Why connection pool sizing is a math problem, not a guess, and the deadlocks, leaks, and saturation bugs that show up when it's sized wrong.
How Postgres lets readers and writers proceed without blocking each other, what a snapshot actually is, and where MVCC's costs show up later.
A tour of READ UNCOMMITTED through SERIALIZABLE, the dirty reads and phantom rows each level permits, and how to pick one without guessing.
A field guide to reading EXPLAIN output, spotting sequential scans that shouldn't be there, and turning a query plan into an actual fix.
A practical walkthrough of B-tree index internals, why they dominate relational databases, and how their structure shapes real query performance.