DB/PostgreSQL

PostgreSQL hstore 타입이란?

검정비니 2025. 4. 22. 22:03
728x90
반응형

1. hstore 타입의 내부 저장 구조

PostgreSQL의 hstore 타입은 Key-Value 쌍을 저장하는 자료형이다.

내부적으로는 바이너리 형태로 저장되게 된다.

  • 초기 입력은 문자열 형태로 입력되지만, 실제 데이터는 바이너리로 압축하여 저장됨
  • 각 Key-Value 쌍은 내부적으로 바이너리로 인코딩되며, 데이터 접근 시 이를 파싱하여 처리한다.
  • 따라서 일반적으로 저장공간 효율성이 뛰어난 편이며, JSON 타입과 비교할 때 좀 더 간결하게 저장될 수 있다.

 

2. hstore 타입의 인덱스 사용법

PostgreSQL의 hstore는 다음과 같은 인덱스들을 지원한다.

(1) GIN 인덱스

  • 가장 자주 쓰이며 권장되는 방법이다
  • hstore 필드에서 특정 key의 존재 여부나 특정 key-value 쌍이 존재하는지(@> 연산자) 등 다양한 검색 시 매우 효율적으로 동작
CREATE INDEX idx_hstore_gin ON table USING GIN (hstore_column);

 

예시 쿼리:

SELECT * FROM table WHERE hstore_column ? 'somekey';
SELECT * FROM table WHERE hstore_column @> 'key => value';

(2) GiST 인덱스

  • GIN에 비해 범용성이 약간 떨어지고 성능상 GIN보다 덜 효과적인 경우가 많으나 특정 용례에서 유리할 수 있다.
    • 특히 동적 쿼리나 범위 쿼리 등에 유리할 수 있다.
CREATE INDEX idx_hstore_gist ON table USING GiST (hstore_column);

 

 

3. 블룸필터 (Bloom filter)의 지원 여부

  • PostgreSQL의 기본 hstore 타입 및 기본 인덱스에서는 내부적으로 블룸필터를 직접 지원하지는 않음
  • 그러나 PostgreSQL에서는 bloom 확정을 제공하여 사용자가 명시적으로 여러 칼럼에 대해 블룸필터를 만들 수는 있다.
  • 다만 이는 일반적인 hstore의 활용법과는 약간 다르다.
  • hstore 데이터 자체에 대해서는 기본적으로 블룸필터가 자동 적용되지 않는다.

 

반응형