▲GN⁺ 2023-12-07 | parent | ★ favorite | on: SQLite, JSONB 지원 기능 도입(sqlite.org)Hacker News 의견 JSONB에 대한 혼란이 많음 JSONB는 JSON 데이터 타입과 매우 유사하게 애플리케이션에 사용됨. 애플리케이션은 여전히 JSON 문자열을 읽고 쓰지만, 실제 JSONB 내용은 보지 못함. 동일한 SQL 함수들이 jsonb_ 접두사를 가지고 사용 가능함. JSON 데이터 타입은 디스크에 JSON으로 저장되지만, JSONB는 특별한 바이너리 형식으로 저장됨. JSON 데이터 타입은 작업을 수행하기 위해 전체 JSON을 파싱해야 하지만, JSONB는 파싱 단계를 건너뛰고 디스크 형식에 직접 작업을 수행할 수 있음. 단순히 SQLite에서 전체 JSON 블롭을 읽고 쓰는 경우 JSON 데이터 타입이 적합하지만, SQL을 사용하여 데이터를 쿼리하거나 조작하는 경우 JSONB가 더 적합함. JSONB는 Postgres에서 제공하는 포맷으로, 일반 JSON에 비해 읽기 성능이 향상되어 권장됨. PostgreSQL JSON 데이터 타입 문서 문서 저장소의 목적을 이해하는 데 몇 년이 걸렸으며, POC(Proof of Concept) 구축에 탁월함. JSON 지원 강화는 SQLite를 적합한 문서 저장소로 만드는 데 도움이 될 것임. Protobuf 메시지를 직렬화 및 역직렬화하여 전체 타입 지원을 받고, 이 컬럼을 JSONB로 만들지 않으면 검색 가능한 데이터를 다른 컬럼으로 펼칠 필요 없이 이 컬럼을 필터링할 수 있음. SQLite의 릴리스 프로세스에 대한 궁금증. 최신 릴리스는 3.44이며, JSONB는 사전 릴리스 스냅샷에 포함됨. Cloudflare의 D1과 Fly.io에서 이 기능을 사용하고 싶지만, SQLite 버전이 공개되지 않았거나 맞춤화되었을 수 있음. API 변경 사항이 SQLite 호환 덤프/쿼리 파일을 가져올 수 있다는 Cloudflare의 약속을 깨뜨릴 수 있음. JSONB를 사전 릴리스 스냅샷이나 플레이그라운드에서 시도할 수 있음. SQLite 다운로드 페이지 SQLite 플레이그라운드 JSONB 사양의 핵심 아이디어는 각 요소가 크기와 타입을 포함하는 헤더로 시작한다는 것임. JSON 사양에 크기 표시를 추가하는 것이 JSON 처리에 필요한 메모리를 줄일 수 있음을 제안함. MongoDB의 BSON에 익숙하지만 JSONB는 아님. JSONB와 BSON의 차이점에 대해 설명하는 블로그 글을 참조함. JSONB는 성능에 영향을 미침. 많은 사람들이 Postgres에서 JSONB를 알고 있을 것임. PGConf NYC 2021에서 Oleg Bartunov가 발표한 'Jsonb 성능 이해' 강연을 보는 것을 권장함. Jsonb 성능 이해 강연 영상 여러 행에 걸쳐 JSON 데이터를 압축하는 방법이 있었으면 함. 매우 유사한 블롭이 각 행에 있으며, 많은 유사한 블롭을 여러 행에 걸쳐 저장 공간을 줄이는 방법이 필요함. 내부 형식에도 불구하고 애플리케이션에서 즉시 사용 가능함. 예를 들어 Python에서의 일괄 삽입에 있어서 행 당 삽입 호출에는 눈에 띄는 오버헤드가 있음. JSONB는 CTE(Common Table Expressions)를 사용하여 성능을 개선할 수 있음. json_each는 애플리케이션에서 JSONB BLOB으로 바인딩된 매개변수를 받아들일 수 있음.
Hacker News 의견
JSONB에 대한 혼란이 많음
jsonb_접두사를 가지고 사용 가능함.JSONB는 Postgres에서 제공하는 포맷으로, 일반 JSON에 비해 읽기 성능이 향상되어 권장됨.
문서 저장소의 목적을 이해하는 데 몇 년이 걸렸으며, POC(Proof of Concept) 구축에 탁월함.
SQLite의 릴리스 프로세스에 대한 궁금증.
JSONB를 사전 릴리스 스냅샷이나 플레이그라운드에서 시도할 수 있음.
JSONB 사양의 핵심 아이디어는 각 요소가 크기와 타입을 포함하는 헤더로 시작한다는 것임.
MongoDB의 BSON에 익숙하지만 JSONB는 아님.
JSONB는 성능에 영향을 미침.
여러 행에 걸쳐 JSON 데이터를 압축하는 방법이 있었으면 함.
내부 형식에도 불구하고 애플리케이션에서 즉시 사용 가능함.
json_each는 애플리케이션에서 JSONB BLOB으로 바인딩된 매개변수를 받아들일 수 있음.