TimescaleDB는 시계열 데이터 타입을 처리할 수 있는 오픈소스 데이터베이스 관리 시스템이다. BSD 계열인 Apache License 2.0이기 때문에, 이 데이터베이스를 사용하는 애플리케이션은 소스코드의 공개 의무를 갖지 않는다.
대표적인 시계열(Time-series) DBMS은 InfluxDB와 TimescaleDB가 있으며, 둘의 차이점은 다음과 같다.
- 리소스(디스크, 메모리) 사용량 및 성능에서, cardinality가 높을수록(중복도가 낮은 경우) TimescaleDB가 좋고 cardinality가 낮을수록(중복도가 높은 경우) InfluxDB가 좋다.
- 메모리 부족 및 높은 cardinality에서는 InfluxDB에서 안정성 문제가 발생할 수 있다.
- 복잡한 질의 및 데이터의 변경이 자주 일어나면 TimescaleDB가 좋다.
- InfluxDB는 BLOB(Binary Large Object) 데이터타입을 다루지 않지만, TimescaleDB에서는 bytea 형태로 BLOB를 다룬다.
내가 진행하고 있는 프로젝트가 BLOB를 다루어야 하는 상황이기 때문에 TimescaleDB를 사용하기로 했다.
1. 운영환경
- Redhat Enterprise Linux 8
- PostgreSQL 14
2. 설치
- TimescaleDB는 PostgreSQL을 기반으로 돌아가기 때문에 PostgreSQL이 설치되어 있어야 한다.
- 설치 가이드라인에서 #는 root 로그인, $는 local user 로그인 상태를 의미한다.
1) PostgreSQL 설치확인
# yum list installed | grep postgresql
postgresql11.x86_64 11.15-1PGDG.rhel8 @pgdg11
postgresql11-libs.x86_64 11.15-1PGDG.rhel8 @pgdg11
postgresql11-server.x86_64 11.15-1PGDG.rhel8 @pgdg11
postgresql14.x86_64 14.2-1PGDG.rhel8 @pgdg14
postgresql14-libs.x86_64 14.2-1PGDG.rhel8 @pgdg14
postgresql14-server.x86_64 14.2-1PGDG.rhel8 @pgdg14
timescaledb-2-loader-postgresql-11.x86_64 2.3.1-0.el8 @timescale_timescaledb
timescaledb-2-loader-postgresql-14.x86_64 2.6.0-0.el8 @timescale_timescaledb
timescaledb-2-postgresql-14.x86_64 2.6.0-0.el8
- 기존 설치된 DBMS와 충돌이 일어날 수 있어서 필요가 없다면 지우고 시작합니다.
# yum remove postgresql11-server
# yum remove postgresql14-server
2) PostgreSQL 14 설치
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
$ sudo dnf -qy module disable postgresql
$ sudo dnf install -y postgresql14-server
$ sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
$ sudo systemctl enable postgresql-14
$ sudo systemctl start postgresql-14
3) TimescaleDB 14 설치
# dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm –E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOL
// 위의 구문이 끝나고 실제로 /etc/yum.repos.d/timescale_timescaledb.repo에 내용 작성이 되어있는지 확인한다. 작성이 안 되어 있으면 vi편집기로 넣어준다.
# dnf update
# dnf install timescaledb-2-postgresql-14
4) TimescaleDB toolkit 14 설치
# dnf install timescaledb-toolkit-postgresql-14
5) 환경설정
- 호스트명을 postgres로 변경
# hostnamectl set-hostname postgres
- 방화벽 해제
# firewall-cmd --zone=public --add-port=5432/tcp --permanent
# firewall-cmd --reload
6) postgres 비밀번호 설정
[root@postgres data]# su – postgres// root 접속 후에 명령 실행
[postgres@postgres ~]$ psql
psql (14.2)
도움말을 보려면 "help"를 입력하십시오.
postgres=# \password
Enter new password for user "postgres":
다시 입력해 주세요:
postgres=#
7) PostgreSQL 접속 후 TimescaleDB 적용
$ psql -U postgres –h localhost –p 5432
Password for user postgres :
Type "help" for help.
postgres=# CREATE database example; // example 데이터베이스 생성
postgres=# \l // 데이터베이스 목록 확인
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
example | postgres | UTF8 | ko_KR.utf8 | ko_KR.utf8 |
postgres | postgres | UTF8 | ko_KR.utf8 | ko_KR.utf8 |
template0 | postgres | UTF8 | ko_KR.utf8 | ko_KR.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ko_KR.utf8 | ko_KR.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
postgres=# \c example // example 데이터베이스 선택
postgres=# CREATE EXTENSION IF NOT EXISTS timescaledb; // example 데이터베이스에 TimescaleDB 적용
example=# \dx
Name | Version | Schema |
Description
---------------------+---------+------------+-----------------------------------
----------------------------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
timescaledb | 2.6.0 | public | Enables scalable inserts and compl
ex queries for time-series data
8) 설치한 Toolkit 적용
example=# CREATE EXTENSION timescaledb_toolkit;
Name | Version | Schema |
Description
---------------------+---------+------------+-----------------------------------
----------------------------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
timescaledb | 2.6.0 | public | Enables scalable inserts and compl
ex queries for time-series data
timescaledb_toolkit | 1.5.2 | public | Library of analytical hyperfunctio
ns, time-series pipelining, and other SQL utilities
(3 rows)
9) 예제 테이블 생성
example=# create table hi(a int, b int);
CREATE TABLE
10) 예제 테이블 스키마 컬럼 정보 조회
example=# select column_name, data_type from information_schema.columns where table_name = 'hi';
column_name | data_type
-------------+-----------------------------
a | integer
b | integer
(2 rows)
11) 예제 데이터 삽입
example=# insert into hi(a,b) values(1,2);
INSERT 0 1
12) 예제 데이터 조회
example=# select * from hi;
a | b
---+---
1 | 2
(1 row)
- Linux에 기본적인 TimescaleDB 설치를 완료했고 테이블 생성 및 데이터 삽입과 조회를 테스트해봤다.
'프로그래밍 > TimescaleDB | PostgreSQL' 카테고리의 다른 글
Linux에서 TimescaleDB(PostgreSQL)를 외부로 오픈할 때 필요한 명령어 (0) | 2022.03.25 |
---|---|
TimescaleDB에 구조체 삽입 후 조회(2) (0) | 2022.03.23 |
TimescaleDB에 구조체 삽입 후 조회(1) (0) | 2022.03.22 |
Server-side에서 TimescaleDB libpqxx 라이브러리 설치 및 사용하기 (0) | 2022.03.21 |
댓글