HOWTO · PostgreSQL

PostgreSQL의 JSONB

JSONB는 JSON 바이너리를 나타냅니다. 기본적으로 JSON 데이터를 저장하기 위한 분해된 바이너리 형식입니다. 이것을 사용하는 이유는 스키마의 유연성, 중첩된 개체 및 외부 데이터 소스와의 동기화입니다.

이 페이지의 내용

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

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

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

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

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