APIs & Data Architecture Backend & Data
19. Database Engines: Neon, Turso, libSQL, SQLite, PostgreSQL & postgres.js
Architect high-performance data layers across Neon Serverless Postgres, Turso edge libSQL, postgres.js, embedded SQLite, and stateful PostgreSQL with Drizzle ORM.
databases-orm.ts
typescript
// 1. NEON SERVERLESS POSTGRES (HTTP / WebSocket connection pooling for Edge & Lambdas)import { neon } from '@neondatabase/serverless';import { drizzle as drizzleNeon } from 'drizzle-orm/neon-http';import { pgTable, text, timestamp, uuid, integer } from 'drizzle-orm/pg-core';export const pgUsers = pgTable('users', { id: uuid('id').defaultRandom().primaryKey(), email: text('email').notNull().unique(), reputation: integer('reputation').default(0).notNull(), createdAt: timestamp('created_at').defaultNow().notNull()});const neonClient = neon(process.env.DATABASE_URL!);export const dbNeon = drizzleNeon(neonClient);// 2. LIBSQL & TURSO (Distributed Edge SQLite with Embedded Replicas & Sync)import { createClient } from '@libsql/client';import { drizzle as drizzleLibsql } from 'drizzle-orm/libsql';import { sqliteTable, text as sqText, integer as sqInt } from 'drizzle-orm/sqlite-core';export const sqUsers = sqliteTable('users', { id: sqText('id').primaryKey(), email: sqText('email').notNull().unique(), reputation: sqInt('reputation').default(0).notNull()});// libSQL connects to remote Turso URLs, local files ("file:local.db"), or in-memory (":memory:")const libsqlClient = createClient({ url: process.env.TURSO_DATABASE_URL ?? 'file:local.db', authToken: process.env.TURSO_AUTH_TOKEN, syncUrl: process.env.TURSO_SYNC_URL // optional embedded replica background sync});export const dbLibsql = drizzleLibsql(libsqlClient);// 3. POSTGRES.JS (Fastest Zero-Dependency Full-Featured PostgreSQL Driver)import postgres from 'postgres';import { drizzle as drizzlePostgresJs } from 'drizzle-orm/postgres-js';// Native tagged-template literals & streaming support for Node.js / Bun / Denoconst queryClient = postgres(process.env.DATABASE_URL!, { max: 10, idle_timeout: 20, connect_timeout: 10});export const dbPostgresJs = drizzlePostgresJs(queryClient);// 4. EMBEDDED SQLITE (better-sqlite3 / bun:sqlite / node:sqlite)import Database from 'better-sqlite3';import { drizzle as drizzleSqlite } from 'drizzle-orm/better-sqlite3';const sqlite = new Database('local.db');sqlite.pragma('journal_mode = WAL'); // Enable Write-Ahead Logging concurrencyexport const dbSqlite = drizzleSqlite(sqlite);// 5. NODE-POSTGRES (Standard pg Connection Pool)import { Pool } from 'pg';import { drizzle as drizzlePg } from 'drizzle-orm/node-postgres';const pool = new Pool({ connectionString: process.env.DATABASE_URL, max: 20 });export const dbPg = drizzlePg(pool);Modern Database Engines & Drizzle ORM
Selecting the right database engine and transport protocol determines application latency, edge compatibility, concurrency limits, and operational complexity.
- Neon Serverless Postgres: Separates compute from storage, scaling compute to zero when idle and executing queries over sub-millisecond HTTP/WebSocket connections to solve serverless lambda connection starvation.
- Turso & libSQL: Distributed SQLite for global edge deployments powered by libSQL. Features embedded local file replicas that execute reads directly from local in-memory/file storage with zero network hops.
- postgres.js: The fastest full-featured PostgreSQL client for Node.js, Bun, and Deno. Features zero dependencies, tagged-template literal queries, and native type serialisation.
- SQLite & better-sqlite3: The world's most widely deployed database engine. In-process, zero-configuration with Write-Ahead Logging (WAL) concurrency, ideal for local development, embedded software, and single-container deployments.
- PostgreSQL (Stateful): The industry-standard ACID relational database with rich JSONB indexing, pgvector similarity search, and advanced transactional guarantees.
- Drizzle ORM: Zero-runtime TypeScript SQL query builder that maps type-safe schemas directly to SQL dialects without heavy query translation overhead.
Database Architecture Matrix Engine Evaluator
Neon Serverless Postgres Serverless HTTP / WS
Cold Start: < 10ms (Scale to Zero Compute)Fully-managed PostgreSQL architecture with compute and storage separated. Executes queries via sub-millisecond HTTP proxies to eliminate TCP pool exhaustion in serverless edge lambdas.
Transport Protocol: Stateless HTTP Query Proxy / WebSockets
Edge Compatibility: Native (Cloudflare Workers, Vercel Edge, Deno, Bun)
Replication & Branching: Instant Copy-on-Write Database Branching
Drizzle Driver Initialisation:
import { neon } from '@neondatabase/serverless';
import { drizzle } from 'drizzle-orm/neon-http';
const sql = neon(process.env.DATABASE_URL!);
export const db = drizzle(sql);Type-Safe Query Builder Simulator Drizzle AST → SQL
Compiled SQL (PostgreSQL): Drizzle AST Output
SELECT "id", "email", "role", "reputation" FROM "users" WHERE "reputation" >= 50 ORDER BY "reputation" DESC LIMIT 5;
Serverless Connection Pool Guard Pooling Protocol
TCP Pool Capacity
Pool Utilization: 12 / 20 Connections (60%)
Active Architecture: Stateless HTTP connection pooling enables unlimited concurrent serverless invocations.