PostgreSQL 성능 최적화 팁 - TimescaleDB

정찬수·2024년 9월 22일

DB

목록 보기
1/1
post-thumbnail

드디어 더운 여름이 지나고 가을이 찾아오는 것 같아요.
이번 주말부터 조금 선선해 지기 시작하네요.
카페에서 개발하기 딱 좋은 그런 날씨 너무 좋네요.

그래서 오늘은 조금 가볍게 요즘 많이 쓰는 DB 중 하나인 PostgreSQL에 대한 간단한 소개와
시계열 데이터와 같이 대용량 데이터 처리에 대한 성능 최적화 팁!
TimescaleDB 확장법 그리고 사용법, 내부동작에 대해 애기 해 보겠습니다.

1. PostgreSQL 인기?

요즘 보면 PostgreSQL을 참 많이 사용하는 것 같아요.
여러분들은 PostgreSQL을 왜 많이 쓸까? 에 대해 한번쯤 생각해 보셨나요?
저는 그냥 인기있구나 하고 UI 깔끔하네 좋네 하고 썻는데 문득 위와같은 생각이 들더라구요.
그래서 궁금해서 찾아봤어요. ㅎㅎ;; 순서가 좀 반대로 된 것 같긴 하지만

2. PostgreSQL 장점

많이 사용하는 이유는 아무래도 오픈소스와 업데이트!,

1. PostgreSQL은 오픈소스로 무료인게 가장 큰 장점이에요. 대부분의 오픈소스들은 양날의 검이라 업데이트가 꾸준히 되던지 아니면 도태되고 다른 소프트웨어로 대체되는데 이 친구는 꾸준히 업데이트 되더라구요.

확장성, 모듈성!

2. 이게 확장성이 되게 좋아요, 크롬보면 추가적인 기능이 필요하면 확장해서 쓰잖아요? 애도 그렇게 만들어뒀더라구요. 예를 들어 지리 데이터 처리를 하려면 DB구조를 또 잘 짜줘야하는데 그냥 PostGIS 이거 확장형 모듈 설치해서 쓰면 되요. 많이 쓰는 시계열 데이터? TimescaleDB 확장해서 쓰면 됨..ㅇㅇ 아주좋아요

성능!

3. 성능에 대해 애기해보려는데 여기서 Redis 같은 램으로 처리하는 db와는 ㅠㅠ.. 비교 하면 안되요. 테스트해보니 차이 심하네요;; 그래도 일반 DB들 중에서는 성능이 좋은편이에요. ACID 트랜잭션 깔끔하게 지원하구요. 여러 트랜잭션이 들어오는 문제에 대해서도 동시성 꽤나 안정적으로 잘 지원합니다.

데이터타입 많음!

4. 이거 사실 다른 RDB들도 다 지원하니까 넣을까 고민했는데 애가 데이터 타입이 좀 많아요. 생각보다 이게 편리하더라구요. 이렇게 넣어도 되나? 싶어서 보면 데이터타입이 있어요.

개인적으로 깔끔한 UI!

5. 이건 Pgadmin 써야해당하는 애기인데 PostgreSQL 쓰면 UI로 보려고 PSQL 쓰던가 해서 보잖아요?.. 좀 불편... GUI로 보려고 PgAdmin 쓰면 신세계 경험해볼수 있습니다. mysql, mongodb 등등 여러 db들 gui 제공하는거 써봤는데 Pgadmin이 넘사로 깔끔, 기능도 다 GUI로 제공하고 솔직히 PostgreSQL 성능 떨어져도 GUI 떄문에 쓸듯. 아 PgAdmin은 PostgreSQL을 GUI로 보여주기 위한 소프트웨어에요!

이렇게 적다보니까 무료에 GUI 탄탄하지, 성능 준수하지, 확장성 좋지, 호환성 좋지, 데이터타입도 많이 제공하지, 음 많이 쓸만합니다.

근데 위의 장점에서도 말씀 드렸지만 이게 성능이.. 조금 아쉽다.. 사실 모든 DB가 그럴거에요 인메모리로 올리지 않는 이상 정말 높은 속도는 기대하기 힘들죠, 그래서 Redis로 다 처리하자니 ram이 비싸유, 현실과 타협 보자고요. 그래서 나온게 TimescaleDB 확장 모듈이 있더라구요

TimescaleDB

PostgreSQL의 확장형 모듈로, 시계열 데이터에 특화된 데이터베이스에요. 시계열 데이터 관련해서 다양한 성능최적화 기능 및 추가기능을 확장해서 사용할 수 있어요.

1. Hypertable

사실 이게 핵심입니다. 하이퍼테이블, 이게 파티셔닝을 자동으로 해줘요, 요즘시대에 컴퓨터 성능도 좋은데 데이터가 초당으로 몇만개씩 처리하잖아요?지금 제가 회사에서 하는 작업도 마찬가지에요, 근데 일반 DB로 하면 몇일 지나면 데이터가 너무 쌓여서 insert는 그냥 넣어주니까 문제가 안되는데 update나 select해서 꺼내오려고 하면 정말 정말 느려요. 그래서 Chunk로 나누어서 DB에 저장하면 조회할때 해당 Chunk만 가져와서 처리하면 빠르잖아요? 그걸 자동으로 해줍니다. 확실히 쓸때랑 안쓸때랑 차이가 큽니다.

2. 자동압축

이게 또 장점이 시계열 데이터 경우 초당 2만개 들어온다 가정하면 하루면 거의 18억건이에요, 그럼 데이터가 쌓이고 쌓여서 공간이 많이 부족한데 참 좋은게 압축을 제공합니다. 기간을 설정해두면 자동으로 압축해줘요. 오래된 데이터들은 잘 안 꺼내쓰니까 압축해줘서 공간절약도 되고 좋아요.

설명을 좀 부실하게 적었는데 TimescaleDB의 핵심은 저 2개가 다에요, 그만큼 매우 강력하거든요

PostgreSQL에서 TimescaleDB 확장 되게 쉽습니다.
그냥 https://www.timescale.com/ (TimescaleDB 공식사이트) 에서 맞는 버전 받아주시고
CREATE EXTENSION IF NOT EXISTS timescaledb; 쿼리문 써서 확장 해주시면 끝.

하이퍼 테이블 만드는 방법도 그냥 일반 SQL 테이블 만드는거 똑같이 만들어주시고
SELECT create_hypertable( , ); 로 하이퍼테이블 변환해주시면 끝.

추가 설정에 대해서는 환경마다 너무 다르니 설정에 필요하신 정보는 검색해보시면 쉽게 찾으실 수 있습니다.

오늘도 짧게 써볼려고 했는데 할말이 많아서 그런가...? ㅎㅎ;; 점점 더 글이 길어지는 것 같네요
요즘 이렇게 제가 이해하고 사용하는 기술이나 지식들을 글로 남기는게 재밌네요.

해당 포스팅 읽으시는 분들 항상 오류없는 코딩 되시길 바랍니다.
긴글 읽어주셔서 감사해요~~

profile
Beyond the Best

0개의 댓글