10P by xguru 3달전 | favorite | 댓글 6개
  • 며칠간 SQLite를 만져보고 알게된 몇가지 놀라운 단점들
  • ALTER COLUMN은 지원되지 않음. 컬럼을 변경하기 위한 공식적인 권장 사항 "새 테이블 생성"
  • DROP CONSTRAINT는 지원되지 않음. 제약 조건을 제거하기 위한 공식적인 권장 사항 "새 테이블 생성"
  • SQLite는 컬럼에 데이터 유형이 없음. 데이터 유형(5가지만 있음)은 값에만 있으므로 어디에나 모든 것이 들어갈 수 있음
  • 지원되지 않거나 존재하지 않는 유형의 열을 요청하면 경고나 오류 없이 잘못된 작업을 수행함. CREATE TABLE my_table (id bigserial, messages jsonb[])와 같은 스키마를 올리는 것이 작동하는 것처럼 보여서 처음 하루 동안 SQLite가 serial과 배열을 지원한다고 잘못 생각함
  • CREATE TABLE my_table (...) STRICT를 사용하여 지원되는 5가지 유형인 integer, real, text, blob, any 중 하나만 허용할 수 있음
  • SQLite의 새로운 jsonb 지원에 대해 최근 많은 관심이 있었음. Postgres와 달리 jsonb는 실제로 데이터 유형이 아니라 내장 jsonb* 함수에 입출력되는 형식임. 영구 저장될 때는 5대 기본 유형 중 하나인 blob
  • timestamptz와 같은 다른 매우 중요한 유형도 누락되어 있음. 날짜/시간을 원하면 Unix 타임스탬프 integer 또는 ISO8601 형식의 string으로 저장하고 이러한 작업을 위한 여러 내장 함수가 제공됨
  • SQLite에는 스트리밍과 관련된 인상적인 기능이 있어 사용해 보고 싶지만, 초기 DX 경험은 확실히 조금 불편했음
  • 어떤 이야기에 너무 강하게 사로잡혀 있는지 궁금할 때가 있음. 예를 들어, Postgres가 정말 세계 최고의 데이터베이스인가? 이러한 경험은 확실히 나의 확신을 굳혀줌. Yes, Postgres가 최고야

왜 SQLite를 Postgres처럼 쓰려고 한걸까요?

마치 리눅스를 처음 써본사람이 “한컴오피스도 잘 안돼고 내가 하는 게임도 안 돌아가요. 역시 운영체제는 윈도우야!” 라고 하는 느낌이에요.

해커뉴스에 올라오는 sqlite 뜬소문(hype)이 과한거 아닐까요? sqlite가 별도로 운영하는 RDBMS를 대체할수 있다는 주장이 2022년부터 해커뉴스에 많이 올라왔습니다.

1: https://news.ycombinator.com/item?id=31318708
2. https://news.ycombinator.com/item?id=31152490
3. https://news.ycombinator.com/item?id=34812527
4. https://news.ycombinator.com/item?id=36208568

그외: https://hn.algolia.com//…

Postgres나 MySQL 등의 데이터베이스 제품군을 사용하기가 오버킬이라고 느껴지는 경우에는 SQLite가 충분히 매력적인 대안이 될 수 있다고 생각합니다.

예를 들어 작은 서비스의 경우에 매니지드 DB의 비용이 배보다 배꼽이 큰 경우로 작용하고, 직접 운용하기에는 또 부담이 있죠.

반면 SQLite의 경우 어느정도 규모까지는 성능상에 부족함이 없다고 하고 특히 Litestream과 같은 도구를 사용하면 운용에 부담도 거의 없어서 장점이 있는 것 같아요.

복제기능까지 갈 것도 없이 sqlite가 백업도 간편하고 서비스 데몬 상태만 관리만 하면 되니까 참 좋은데, JPA에 붙이려면 이것저것 해줘야돼서 남에게 인수인계해줘야 하는 프로젝트에선 못쓰겠더라구요. 원글과 같이 데이터 스키마를 좀더 엄격하게 다루고자 하는 의지가 있다면 그런 용도에는 맞지 않구요

제가 앞 댓글을 적다 말았는데 sqlite에 대한 뜬소문이 마치 sqlite가 만능인것처럼 착시를 불러일으킨다는 얘기를 하고 싶었습니다

SQLite가 아니라 SQLHeavy를 원하는 느낌이네요.

이런 DB도 있고 저런 DB도 있죠. SQLite는 그것대로 철학으로 운영된다는 생각을 했습니다.