지난 Microsoft Ignite 2022에서 발표된 내용이라 연계해 간략히 정리.

Azure Cosmos DB for PostgreSQL가 발표되었고, 관련해 OSS 프로젝트인 Citus 정리.

 

citus-readme-banner.png

Citus란 무엇인가?

Citus is a PostgreSQL extension that transforms Postgres into a distributed database—so you can achieve high performance at any scale.

https://github.com/citusdata/citus

PostgreSQL에 분산데이터베이스를 제공하는 확장기능.

 

로컬 구성과 클라우드 환경에서 구성

로컬구성: https://docs.citusdata.com/en/stable/installation/single_node.html

클라우드: https://learn.microsoft.com/azure/cosmos-db/postgresql/quickstart-create-portal

 

분산테이블 SQL 간단 예제

일반적인 분산 테이블 아키텍처와 코드

select statement parallelized across shards

아키텍처 컨셉 참조: https://docs.citusdata.com/en/stable/get_started/concepts.html

 

예제 코드

Creating Distributed Tables
The create_distributed_table UDF will transparently shard your table locally or across the worker nodes:

CREATE TABLE events (
  device_id bigint,
  event_id bigserial,
  event_time timestamptz default now(),
  data jsonb not null,
  PRIMARY KEY (device_id, event_id)
);

-- distribute the events table across shards placed locally or on the worker nodes
SELECT create_distributed_table('events', 'device_id');
After this operation, queries for a specific device ID will be efficiently routed to a single worker node, while queries across device IDs will be parallelized across the cluster.

-- insert some events
INSERT INTO events (device_id, data)
SELECT s % 100, ('{"measurement":'||random()||'}')::jsonb FROM generate_series(1,1000000) s;

-- get the last 3 events for device 1, routed to a single node
SELECT * FROM events WHERE device_id = 1 ORDER BY event_time DESC, event_id DESC LIMIT 3;
┌───────────┬──────────┬───────────────────────────────┬───────────────────────────────────────┐
│ device_id │ event_id │          event_time           │                 data                  │
├───────────┼──────────┼───────────────────────────────┼───────────────────────────────────────┤
│         1 │  1999901 │ 2021-03-04 16:00:31.189963+00 │ {"measurement": 0.88722643925054}     │
│         1 │  1999801 │ 2021-03-04 16:00:31.189963+00 │ {"measurement": 0.6512231304621992}   │
│         1 │  1999701 │ 2021-03-04 16:00:31.189963+00 │ {"measurement": 0.019368766051897524} │
└───────────┴──────────┴───────────────────────────────┴───────────────────────────────────────┘
(3 rows)

Time: 4.588 ms

-- explain plan for a query that is parallelized across shards, which shows the plan for
-- a query one of the shards and how the aggregation across shards is done
EXPLAIN (VERBOSE ON) SELECT count(*) FROM events;
┌────────────────────────────────────────────────────────────────────────────────────┐
│                                     QUERY PLAN                                     │
├────────────────────────────────────────────────────────────────────────────────────┤
│ Aggregate                                                                          │
│   Output: COALESCE((pg_catalog.sum(remote_scan.count))::bigint, '0'::bigint)       │
│   ->  Custom Scan (Citus Adaptive)                                                 │
│         ...                                                                        │
│         ->  Task                                                                   │
│               Query: SELECT count(*) AS count FROM events_102008 events WHERE true │
│               Node: host=localhost port=5432 dbname=postgres                       │
│               ->  Aggregate                                                        │
│                     ->  Seq Scan on public.events_102008 events                    │
└──────────────────────────────────────

 

분산데이터베이스의 특성상 instance provision이 자유로운 cloud를 택한것은 좋은 선택.

Postgres를 사용하는 여러 기업 고객들에게 좋은 옵션이 될 것으로 예상.

 

참고링크

https://github.com/citusdata/citus

https://docs.citusdata.com/en/stable/get_started/what_is_citus.html

 

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 603
2206 Azure CosmosDB 소개 - Azure Cosmos DB Essentials Season 1 코난(김대우) 2022.12.23 36
2205 Azure SQL Database : 소개 및 데모 [ADS Training] ㅣ Microsoft Day 코난(김대우) 2022.12.22 50
2204 Azure Database for MySQL : 소개 및 데모 [ADS Training] ㅣ Microsoft Day [2] 코난(김대우) 2022.12.20 76
2203 Microsoft SQL Server 2022 공식발표 file 코난(김대우) 2022.11.24 106
2202 Azure Synapse Analytics 빅데이터 분석 코난(김대우) 2022.11.05 45
2201 Azure Synapse Analytics를 활용한 게임사 유저 이탈분석과 ML Modeling 코난(김대우) 2022.11.02 33
2200 ETL의 끝판왕, 애저 데이터 팩토리 | ep3. 클로징 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.01 31
2199 ETL의 끝판왕, 애저 데이터 팩토리 | ep2. 데모 | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.31 28
2198 ETL의 끝판왕, 애저 데이터 팩토리 | ep1. 소개 | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.30 42
2197 ETL의 끝판왕, 애저 데이터 팩토리 | ep0. 인트로 | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.28 76
2196 Azure Cosmos DB의 PostgreSQL file 코난(김대우) 2022.10.19 71
» Citus PostgreSQL extension - 분산데이터베이스 file 코난(김대우) 2022.10.18 71
2194 Azure purview - data governance, compliance 솔루션에 대해 file 코난(김대우) 2022.10.16 56
2193 Azure Synapse - COPY INTO로 대용량 데이터 분산 로드 코난(김대우) 2021.10.21 248
2192 Azure SQL Database로 CSV 파일 BULK INSERT - Python 코난(김대우) 2021.09.27 294
2191 Azure Synapse - Spark와 SQL Data warehouse 서비스 file 코난(김대우) 2021.09.16 210
2190 Azure에서 제공하는 데이터베이스 서비스 종류, AWS 및 GCP와 제품 비교 코난(김대우) 2020.12.25 722
2189 SQL Server 트랜잭션 로그 복원시 복원 시간이 오래 걸리는 현상 jevida(강성욱) 2020.02.28 1526
2188 SQL Server 2019 temp table을 사용한 워크로드에서 recompile 감소 jevida(강성욱) 2019.09.24 1766
2187 Azure SQL Managed Instance 및 SQL Server 2016 Later에서 대기 통계 분석 jevida(강성욱) 2019.09.24 1318





XE Login