항목 | JSONB | BSON |
---|---|---|
정식 명칭 | JSON Binary | Binary JSON (Binary JavaScript Object Notation) |
사용 환경 | PostgreSQL (특히 jsonb 타입 컬럼) | MongoDB |
목적 | JSON 데이터를 효율적으로 저장하고 인덱싱 및 검색 성능 개선 | MongoDB에서 데이터를 효율적으로 저장하고 조회 성능 향상 |
항목 | JSONB | BSON |
---|---|---|
저장 형식 | 바이너리 형식으로 파싱된 JSON을 내부적으로 트리 구조로 저장 | JSON을 바이너리로 변환한 형태로 Key-Value 쌍 저장 |
데이터 타입 지원 | JSON에서 지원하는 기본 타입 (string, number, object, array, boolean, null) | JSON 타입 + 추가 타입 (e.g., Date , Binary , ObjectId , Int32 , Int64 , Decimal128 ) |
정렬 방식 | Key 순서를 무시함 (key 순서 보존 안됨) | Key 순서를 보존함 |
인덱싱 | GIN (Generalized Inverted Index) 등을 통해 다양한 JSON 속성에 인덱스 설정 가능 | MongoDB의 복합 인덱스 및 중첩 필드 인덱싱 지원 |
Null 처리 | null 값과 존재하지 않는 키를 구분함 | null 과 없는 필드를 구분할 수 있음 (쿼리에서는 차이 주의 필요) |
확장성 및 스키마 | 스키마리스 지원, 하지만 RDBMS 특성상 명시적인 구조 권장 | 완전한 스키마리스 구조, 필드가 문서마다 달라도 무방 |
CREATE TABLE items (
id serial PRIMARY KEY,
data jsonb
);
SELECT * FROM items WHERE data @> '{"type": "book"}';
db.items.insertOne({ type: "book", price: 10 });
db.items.find({ type: "book" });
항목 | JSONB | BSON |
---|---|---|
사용처 | PostgreSQL | MongoDB |
확장성 | 제한적 확장 (RDBMS 기반) | 유연한 확장 (NoSQL 기반) |
성능 | 복잡 쿼리에 강함 (인덱싱 구조 활용 시) | 대량 문서 처리에 최적화 |
스키마 | 약간의 스키마 필요성 존재 | 완전한 스키마리스 |