C.W.K.
Stream
Lesson 07 of 10 · published

SQLite vs PostgreSQL vs MySQL

~15 min · sqlite, comparison, postgres, mysql

Level 0Scout
0 XP0/80 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

DB 셋, 다른 일

이 셋이 경쟁자처럼 자주 거론되는데, 사실 다른 질문에 답하는 도구야.

속성SQLitePostgreSQLMySQL
아키텍처In-process 라이브러리Client/serverClient/server
배포파일 한 개데몬 + 설정데몬 + 설정
동시 writer한 번에 한 명 (파일당)다수, MVCC다수, MVCC
동시 reader무제한 (WAL)무제한무제한
TypingDynamic (또는 STRICT 3.37+)Strict, richStrict
ReplicationAdd-on (Litestream/LiteFS/Turso)Built-in streamingBuilt-in (binlog)
JSONJSON1 + JSONB (3.45+)JSONB nativeJSON native
Full-text searchFTS5 빌트인tsvectorFULLTEXT (InnoDB)
인증 모델파일시스템Roles + RLSUser accounts
Best fit앱 내 데이터 레이어Multi-tenant 시스템웹앱 DB tier
Principle: Feature 체크리스트가 아니라 배포 모양으로 골라. 데이터가 여러 머신에서 닿아야 하면 server 필요. 데이터가 코드 도는 자리에 살 수 있으면 SQLite 가 운영 관심사 한 층을 통째로 없애줘.

모던 SQLite 는 앱 레벨 워크로드 기준 Postgres 와의 feature gap 을 거의 닫았어 — JSON, FTS, window functions, CTE, generated columns, partial indexes, expression indexes, UPSERT, RETURNING 다 있음. 못 닫은 건 여러 머신의 다중 writer gap 이고, 그건 닫는 척도 안 해.

Code

같은 SQL, 세 엔진·sql
-- 셋 다 이 statement 그대로 돌아감
CREATE TABLE users (
  id    INTEGER PRIMARY KEY,
  email TEXT UNIQUE NOT NULL,
  name  TEXT NOT NULL
);

INSERT INTO users(email, name) VALUES ('alice@x.com', 'Alice');

SELECT id, email, name FROM users WHERE name = 'Alice';

-- 차이는 SQL 이 아니라 배포 스토리에서 생겨.

External links

Exercise

한 페이지 결정 메모 작성: 'X 한테 SQLite, Postgres, MySQL 중 뭘 쓸까?' 실제 / 가상 서비스 하나 골라. 배포 모양 (single-machine vs multi-server), write 동시성, replication 필요 여부, 운영 비용 기준으로 결정. 세 줄로 그 선택 옹호.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.