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 / Deno
const 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 concurrency
export 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.