PostgreSQL의 JSONB

Shihab Sikder 2023년1월30일
  1. PostgreSQL에서 JSONB로 테이블 생성
  2. PostgreSQL에 JSONB 데이터 유형 삽입
  3. PostgreSQL에서 JSONB의 장단점
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, priceingredient가 있습니다. 성분 안에는 칼로리 값과 함께 성분과 함량이 있습니다.

따라서 중첩된 개체입니다. 여기서 동기는 이와 같이 중첩된 출력을 갖기 위해 복잡한 조인이 필요하지 않다는 것입니다.

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를 사용할 때 얻을 수 있는 몇 가지 이점입니다.

  1. JSON보다 효율이 좋다.
  2. 바이너리로 분해되어 더 빠른 처리가 가능하다.
  3. 인덱싱을 지원하지만 JSON은 지원하지 않습니다.

또한 몇 가지 단점이 있습니다. 다음은 다음과 같습니다.

  1. 느린 입력.
  2. 더 많은 발자국을 남기기 때문에 JSON보다 더 많은 디스크 공간을 차지합니다.
  3. 경우에 따라 집계 함수로 인해 프로세스가 느려질 수 있습니다.

JSONB에 대해 더 알고 싶다면 이 블로그를 방문하세요. 또한 여기에서 공식 문서를 확인하십시오.

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website