요르딩딩
Jsonb 타입 사용 본문
종종 개발하다보면 히스토리를 저장하는 테이블에 히스토리정보(변경할 정보)와 기존의 값을 저장 모두 저장해서 사용할 경우가 생깁니다.
예를들어, 사용자가 어떠한 조건에 있어서 2번 수정을 하게되면, 히스토리 테이블에는 2개의 레코드가 쌓입니다.
이때, 수정을 하게되면 기존값을 업데이트되어, 기존에 어떤값을 가지고 있었는 알 수 없게 됩니다.
기존
["인터넷뱅킹": "T", "카드": "T", "이체": "T"]
1번 수정
["인터넷뱅킹": "T", "카드": "F", "이체": "T"] -> 1번 수정전의 값을 알 수 없음
2번 수정
["인터넷뱅킹": "T", "카드": "F", "이체": "F"] > 2번 수정전의 값을 알 수 없음
그리하여, jobb타입을 갖는 칼럼을 추가하여, 기존정보를 저장하여 보존할 수 있습니다.
히스토리 테이블에 변경될 정보가 레코드로 쌓일때, 기존정보를 jsonb타입으로 하나의 칼럼에 저장하는 것입니다.
하나의 칼럼으로 여러값을 저장하여 사용하므로, 칼럼의 복잡성을 줄 일 수 있습니다.
기존
["인터넷뱅킹": "T", "카드": "T", "이체": "T"]
1번 수정
["인터넷뱅킹": "T", "카드": "F", "이체": "T", 기존정보 : {"인터넷뱅킹": "T", "카드": "T", "이체": "T"}]
1번 수정
["인터넷뱅킹": "T", "카드": "F", "이체": "F", 기존정보 : {"인터넷뱅킹": "T", "카드": "F", "이체": "T"}]
JSON, JSONB 란
* 공통점
둘다 JSON 포맷 유효성체크를 합니다.
* 차이점
1. 데이터 저장 방식
JSON은 들어온 그대로 값을 저장합니다.
JSONB는 그대로 저장하지 않습니다. 문자열 사이의 공백도 제거해주고, KEY 순서도 보장하지 않습니다.
2. 디스크사용량
JSONB가 JSON보다 좀더 많은 디스크를 사용합니다. (항상 X )
3. 인덱싱
JSON은 인덱싱이 불가능하지만 JSONB는 인덱싱이 가능하다.
* 정리
JSON 타입은 입력받은 텍스트값을 DB에 그대로 저장한다. 그래서 쓰기 비용이 크지 않습니다.. 그러나 읽기 비용이 있습니다.
JSONB 타입은 입력받은 데이터를 binary 포맷으로 저장하기 때문에 쓰기 비용이 크지만, 인덱싱이 가능하고, 데이터 파싱 비용이 들지 않기 때문에 읽기 비용이 적다는 이점이 있습니다.
출처: https://americanopeople.tistory.com/300 [복세편살]
'[Web] > [DB & Mybatis]' 카테고리의 다른 글
1:N 조인시 그룹화된 1레코드만 찾기 (0) | 2021.11.17 |
---|---|
1:N 일때 JOIN 알아보기 (inner, left, right, outer ) (0) | 2021.10.28 |
[DB] Data Base Connection Pool (커넥션 풀) (0) | 2021.08.20 |
[DB] 옵티마이저 (Optimizer) (0) | 2021.06.23 |
[DB] mybatis trim (0) | 2021.06.10 |