dataflow

Basics → choose & scale

Contact
Level 1 · Beginnerlesson

Read and write a relational schema so later choices are not guesses.

What is a database?

Before SQL or Postgres, get clear on the pieces: raw data, a database, the DBMS that manages it, and how your app connects. This whole path exists so that by Level 7 you can **choose** an engine and **scale** from a handful of requests to billions — without skipping the fundamentals.

Data is facts your system cares about — users, orders, events. A database is an organized collection of that data designed for reliable storage and retrieval. A DBMS (database management system) is the software that stores, queries, secures, and recovers that collection. Spreadsheets hold data; they are not a DBMS.

How an app reaches the database

Rendering diagram…

  • Database server — process that accepts connections and runs queries
  • Database client — tool or library that talks to the server (psql, DBeaver, your app)
  • Database driver — language-specific adapter (node-postgres, JDBC, psycopg)
  • Connection pooling — reuse connections instead of opening one per request
  • Schema objects — tables, views, functions, triggers, indexes live inside the DBMS

Think of the DBMS as the operating system for your data: it owns durability, concurrency, and query execution — not just “storing files.”

A common beginner mix-up: the database (the collection, e.g. `shop`) vs the DBMS (PostgreSQL) vs the server (the process listening on port 5432). Your app never “talks to a table” directly — it talks to the server through a driver. Later levels add pooling, replicas, and extra stores — still on top of this picture.

Takeaways

  • Data ≠ database ≠ DBMS — learn the distinction early
  • Apps talk through drivers and usually a connection pool
  • The server is responsible for correctness and recovery, not just storage

Engine matrix

Compare databases

Traits from the architect trade-off model — click a row to open side-by-side compare.

Vs

Wide-column

Wide-columnCQL by partition keyLimited / lightweightTunable / eventualHorizontalHighHuge distributed writes, IoT ingest

Analytical

ColumnarAnalytical SQLLimited / batch-orientedEventual / append-friendlyHorizontal shardsMedium–highMassive analytics, event warehouses

Distributed SQL

RelationalSQLDistributed ACIDStrong (serializable)HorizontalHighGlobal SQL, multi-region OLTP

Analytical

Columnar (embedded)Analytical SQLLocal ACID-ishSingle-processVertical / localVery lowLocal analytics, notebooks

Key-value

Key-value / documentKey + indexesLimited ACIDTunableHorizontal (managed)Low (managed)Serverless apps, session/state at scale

Search

Inverted index / docsFull-text DSLNo multi-doc ACIDNear-real-timeShards + replicasMedium–highSearch, log analytics UI

Time-series

Time-seriesFlux / SQL-ishLimitedEventual / localCluster optionsMediumSensors, infra metrics

Document

Document (BSON)JSON queries / aggregationMulti-doc ACID (limited)TunableHorizontal (sharding)MediumFlexible product catalogs, content

Relational

RelationalSQLACID (InnoDB)StrongVertical + replicasLow–mediumWeb apps, CMS, OLTP

Graph

Property graphCypher traversalsACIDStrongMostly vertical (+ fabric)MediumGraphs, fraud, recommendations

Relational

Relational (+ JSONB)SQLFull ACIDStrongVertical + replicasLow–mediumOLTP apps, SaaS, e-commerce

Vector

Vectors + payloadANN similarityLimitedEngine-specificHorizontal optionsMediumSemantic / AI search

Key-value

Key-value / structuresCommands by keyLimited / MULTISingle-node strongCluster / replicasLow–mediumCache, sessions, rate limits

Wide-column

Wide-columnCQL by partition keyLimitedTunableHorizontalHighHigh-throughput distributed writes

Distributed SQL

RelationalSQLDistributed ACIDStrongHorizontalHighScale-out MySQL workloads

Time-series

Relational time-seriesSQLACIDStrongVertical + replicasMediumMetrics, IoT, event history