PostgreSQL의 JSONB
JSONB는 분해된 바이너리 형식으로 저장되는 일종의 JSON 데이터입니다. Google 트렌드를 따르거나 조사를 해보면 개발 부문에서 JSON이 점점 더 대중화되고 있음을 알 수 있습니다.
요즘 NoSQL은 기본적으로 JSON 데이터를 저장할 수 있습니다. 사용하기에 강력하고 중첩된 객체를 다른 객체 안에 넣을 수 있습니다. 따라서 더 인기를 얻고 있습니다.
Postgres를 사용하면 SQL 유형 데이터베이스에서 JSON 및 JSONB 데이터 유형을 생성할 수 있습니다.
PostgreSQL에서 JSONB로 테이블 생성
제품에 대한 테이블을 만들고 싶다고 가정해 보겠습니다. 다양한 유형의 제품이 있을 수 있습니다.
예를 들어, 그 중 일부는 리터로, 일부는 그램으로, 일부는 조각으로 측정할 수 있습니다. 또한 특정 제품에 대해 다른 제품과 유사할 수 없는 데이터 유형이 있을 수 있습니다.
이 경우 JSON이나 JSONB를 사용하여 이 익숙하지 않은 데이터를 저장하는 것이 좋습니다. JSONB 유형의 데이터로 테이블을 만드는 방법은 다음과 같습니다.
CREATE TABLE Products(
id SERIAL PRIMARY KEY,
seller TEXT NOT NULL,
data JSONb NOT NULL
);
PostgreSQL에 JSONB 데이터 유형 삽입
이전에는 JSONb
유형의 데이터가 있는 열이 포함된 테이블을 만들었습니다. 이제 테이블을 채우겠습니다.
아시다시피 JSONB는 Python의 사전과 동일한 키-값 형식으로 데이터를 저장합니다. 위의 표를 일부 데이터로 채우겠습니다.
INSERT INTO Products(seller,data)
VALUES
('Jones Heard',
'{ "name": "Milk Shake",
"price": "10$",
"ingredients":
{ "Milk":
{ "amount":"250ml","calorie":"100 Kcl"},
"Coco Powder":
{ "amount":"50 gram", "calorie":"100 Kcl"}
}
}'
);
JSONB 데이터를 테이블에 성공적으로 삽입했으므로 추가된 데이터를 볼 차례입니다. 위의 JSON에서 중첩된 객체가 있음을 알 수 있습니다.
여기 data
키에 name
, price
및 ingredient
가 있습니다. 성분
안에는 칼로리 값과 함께 성분과 함량이 있습니다.
따라서 중첩된 개체입니다. 여기서 동기는 이와 같이 중첩된 출력을 갖기 위해 복잡한 조인이 필요하지 않다는 것입니다.
SELECT id ,seller, jsonb_pretty(data) as Product_Details
FROM products;
출력:
id | seller | product_details
----+-------------+----------------------------------
1 | Jones Heard | { +
| | "name": "Milk Shake", +
| | "price": "10$", +
| | "ingredients": { +
| | "Milk": { +
| | "amount": "250ml", +
| | "calorie": "100 Kcl"+
| | }, +
| | "Coco Powder": { +
| | "amount": "50 gram",+
| | "calorie": "100 Kcl"+
| | } +
| | } +
| | }
(1 row)
여기 명령에서 jsonb_pretty()
함수를 사용했습니다. 필요한 들여쓰기로 JSON 개체의 형식을 지정합니다.
그렇지 않으면 전체 JSON이 한 줄로 표시되고 개체의 관계를 이해하기가 정말 어렵습니다.
PostgreSQL에서 JSONB의 장단점
Postgres에는 JSON 유형이 있지만 JSONB 형식도 도입했습니다. 우리가 보았듯이 선언 및 기타 쿼리는 JSON과 매우 유사합니다.
다음은 JSON을 통해 JSONB를 사용할 때 얻을 수 있는 몇 가지 이점입니다.
- JSON보다 효율이 좋다.
- 바이너리로 분해되어 더 빠른 처리가 가능하다.
- 인덱싱을 지원하지만 JSON은 지원하지 않습니다.
또한 몇 가지 단점이 있습니다. 다음은 다음과 같습니다.
- 느린 입력.
- 더 많은 발자국을 남기기 때문에 JSON보다 더 많은 디스크 공간을 차지합니다.
- 경우에 따라 집계 함수로 인해 프로세스가 느려질 수 있습니다.