| 항목 | 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 기반) |
| 성능 | 복잡 쿼리에 강함 (인덱싱 구조 활용 시) | 대량 문서 처리에 최적화 |
| 스키마 | 약간의 스키마 필요성 존재 | 완전한 스키마리스 |