본문 바로가기
데이터 엔지니어링/DB

DB 및 grafana 생성 및 데이터 마이그레이션

by blog_autumn 2025. 8. 10.

DB 및 Grafana 생성 및 데이터 마이그레이션

1. tsdb / grafana 생성 with docker

# tsdb setting
docker pull timescale/timescaledb-ha:pg14-latest
docker run -d --name timescaledb -p 5432:5432 -e POSTGRES_PASSWORD={password} timescale/timescaledb-ha:pg14-latest
# grafana setting
mkdir grafana
git clone https://github.com/grafana/grafana-docker
docker compose up -d

2. TSDB 내 테이블 생성 및 setting

# docker container 내 bash 실행
docker exec -it {docker container ID} bash
psql
CREATE TABLE transactions (
    time TIMESTAMPTZ,
    block_id INT,
    hash TEXT,
    size INT,
    weight INT,
    is_coinbase BOOLEAN,
    output_total BIGINT,
    output_total_usd DOUBLE PRECISION,
    fee BIGINT,
    fee_usd DOUBLE PRECISION,
    details JSONB
);
  1. 현재까지는 일반 테이블이다. hypertable로 전환 하고자 한다.
  2. time 컬럼을 파티션으로 사용하기 위해 create_hypertable('테이블명','파티션 컬럼') 함수를 사용한다.
  3. 이때 파티션 컬럼은 timestamp 데이터 형식이어야 한다.
SELECT create_hypertable('transactions', 'time');
  1. hash / block_id / time & hash 에 대해 인덱스를 생성한다.
    생성하는 이유는 각각의 항목 기준으로 쿼리 시 빠르게 조회하기 위함이다.
CREATE INDEX hash_idx ON public.transactions USING HASH (hash); -- hash 컬럼에 해시 인덱스 생성
CREATE INDEX block_idx ON public.transactions (block_id);
CREATE UNIQUE INDEX time_hash_idx ON public.transactions (time, hash);
  1. 최근 5일간 비트코인 거래 내역을 불러온다.
    https://assets.timescale.com/docs/downloads/bitcoin-blockchain/bitcoin_sample.zip
  2. DB 접속 후 data import 를 실행하여 데이터를 load 한다.