Databases & Storage
Relational, document, and vector stores — what each one indexes, what it charges you for, and the query plan that tells you which one you actually got.
- PostgreSQL in productionWhat EXPLAIN actually says once you know where the loops divide, why VACUUM is not optional, and how a table can be 500,000 rows and still choose to scan every one of them — correctly.
- Indexes, joins, and reading a query planWhy a LEFT JOIN can return more rows than either table has, how the four join types relate as sets, and where the selectivity crossover actually sits — measured, not assumed.
- MongoDBEmbed or reference, why a document's growth pattern decides the schema more than the query pattern does, and the write-amplification bug that only appears once an array stops being small.
- CosmosDB and partition keysWhy the best-distributing partition key is often the wrong one, how RU/s gets divided among partitions you don't control, and the migration you can't avoid once a key choice turns out wrong.
- NoSQL data modellingModel by access pattern, not by entity — why a NoSQL schema starts from the queries you'll run rather than the things you're storing, and what breaks when a new query arrives that the model didn't anticipate.
- pgvectorVector search inside Postgres — what you gain by not standing up a second datastore, what HNSW costs in index build time and memory, and when the "one less service" argument stops being the right trade.
- Vector databases comparedPinecone, Qdrant, and Weaviate implement the same ANN algorithms pgvector does — what actually differs is operations, filtering, and how each one degrades at the corpus size pgvector stops being comfortable.
- File formats and object storageRow-oriented versus column-oriented storage, why Parquet reads 10x less data for an analytical query than CSV, and what Delta and Iceberg add on top that a folder of Parquet files can't do alone.