Database/DB (50) 썸네일형 리스트형 Trino로 서로 다른 DB 조인하기 (MySQL ↔ PostgreSQL) 이 글은 Trino를 이용해 서로 다른 데이터베이스(여기서는 MySQL과 PostgreSQL)를 하나의 쿼리로 조인하는 최소 예제를 그대로 따라 할 수 있도록 정리했습니다. trinoTrino는 여러 저장소(예: MySQL, PostgreSQL, Hive, BigQuery 등)에 흩어진 데이터를 단일 SQL로 다룰 수 있게 해 주는 분산 쿼리 엔진입니다. 이기종 조인: postgresql.sales.orders와 mysql.crm.customers처럼 서로 다른 시스템의 테이블을 직접 조인할 수 있습니다.커넥터-카탈로그 모델: Trino는 커넥터를 통해 외부 시스템에 접속하며, 각 커넥터 인스턴스를 카탈로그로 노출합니다. 중요 제약: 트랜잭션을 시스템으로 보장하지 않습니다. 또한 조인 시 네트워크 I.. MySQL id 범위 조건 하나로 10분 → 2분 시간대 필터만 있는 쿼리와 id 조건을 함께 건 쿼리의 실행 시간이 극적으로 달랐습니다. 같은 테이블에서 같은 시간 범위를 조회했지만, 전자는 10분이 넘었고 후자는 2분도 걸리지 않았습니다. 문제 상황두 쿼리는 선택 컬럼과 시간 범위가 동일합니다. 차이는 id 조건의 유무입니다.-- A 조건explainSELECT id, user_id, lotto_round_id, lottery_numbers, created_atFROM lotto_lotteriesWHERE created_at >= '2025-05-22 00:00:00' AND created_at -- B 조건explainSELECT id, user_id, lotto_round_id, lottery_numbers, created_atFRO.. [논문] Presto: SQL on Everything / A Decade of SQL Analytics at Meta / History-based Query Optimizer https://trino.io/Presto_SQL_on_Everything.pdfhttps://www.vldb.org/pvldb/vol17/p4077-shankhdhar.pdfhttps://scontent-icn2-1.xx.fbcdn.net/v/t39.8562-6/338697424_1576642486169536_1067048833935401645_n.pdf NTRODUCTION Presto(프레스토)는 Meta(메타, 이전 Facebook)에서 개발되어 2012년에 프로덕션에 도입된 오픈 소스 분산 SQL 쿼리 엔진입니다. 현재 Uber, Netflix, Alibaba, Bloomberg, LinkedIn 등 여러 대기업에서 사용되고 있으며, Amazon Athena와 같은 서비스의 기반으로 활용되기도 .. 3. MySQL CDC 데이터를 Debezium을 통해 Pub/Sub으로 전송하기 서비스 운영 중에는 데이터베이스에 수많은 INSERT, UPDATE, DELETE가 발생한다.이 데이터를 다른 시스템에서 즉시 활용해야 할 때가 있다. 예를 들어:사용자 활동을 기반으로 한 실시간 추천재고 변경 알림주문 상태 업데이트실시간 데이터 파이프라인 구축전통적인 방식에서는 주기적으로 MySQL을 폴링(polling)하거나, 애플리케이션 코드에서 변경 이벤트를 직접 발행해야 한다. 하지만 이런 방식은 지연이 크고, DB와 애플리케이션 모두에 불필요한 부하를 준다. Debezium은 CDC(Change Data Capture) 도구로 MySQL의 binlog를 읽어 데이터 변경 이벤트를 추출하고, 이를 메시지 큐나 스트리밍 시스템으로 보낸다. MySQL → Debezium → Pub/Sub 구조는.. 2. mysql master - slave Replication MySQL Master-Slave Replication 구성 및 테스트이번 글에서는 Docker Compose를 이용해 MySQL Master-Slave 구조를 구성하고, 복제가 제대로 작동하는지 확인하는 방법을 소개한다.1. docker-compose.yml 구성version: '3.8'services: master: image: mysql:5.7 platform: linux/amd64 container_name: mysql-master restart: always environment: MYSQL_ROOT_PASSWORD: root volumes: - ./master/my.cnf:/etc/mysql/conf.d/my.cnf - ./ma.. 1. mysql binlog MySQL Binary Log(binlog) 설정 및 분석 실습MySQL에서 Binary Log(이하 binlog)는 데이터 변경 이력을 기록하는 중요한 기능이다. 주로 Replication, Point-in-Time Recovery, Change Data Capture 등에 활용된다. 이 글에서는 Docker 환경에서 binlog를 활성화하고, 데이터 변경 내용을 직접 로그로 확인하는 과정을 다룬다. 1. Docker로 binlog 활성화된 MySQL 구성먼저 Docker Compose로 binlog가 활성화된 MySQL을 실행합니다. 다음의 커맨드를 추가해야 binlog를 사용할수 있다. --log-bin=mysql-bin: binlog 활성화--binlog-format=ROW: row-level.. [논문] The Log-Structured Merge-Tree (LSM-Tree) https://www.cs.umb.edu/~poneil/lsmtree.pdf ABSTRACT논문이 발표된 당시에는 고성능 트랜잭션 시스템에서 activity flow를 추적하기 위한 히스토리 데이터의 저장과 시스템 복구를 위한 로그 레코드의 저장이 동시에 요구되고 있었습니다. 예를 들어 TPC-A 벤치마크와 같은 애플리케이션에서는 계정별 활동 이력을 효율적으로 조회하기 위해 계정 ID에 기반한 인덱스가 필요했습니다. 하지만 전통적인 디스크 기반 인덱스 구조인 B-tree는 insert 성능이 낮아, 인덱스를 유지하는 데 디스크 I/O 비용이 두 배 가까이 증가하여 전체 시스템 비용을 50%까지 상승시킬 수 있었습니다.이러한 문제를 해결하기 위해, 해당 논문은 Log-Structured Merge-Tree.. postgreSQL wal_level postgreSQL의 wal_level은 기본으로 replica로 설정되어 있지만, CDC를 활용하여 다른 데이베이스에 저장하려하면 postgreSQL의 wal_level을 logical로 바꿔야만 동작합니다.왜 그냥 하면 안되지? 하는 마음에 wal_level에 대해서 정리해보았습니다. 1. WAL (Write-Ahead Logging)과 wal_levelPostgreSQL의 WAL은 데이터베이스 변경 사항을 로그에 기록하여 데이터 복구와 복제를 지원합니다.wal_level은 WAL 데이터를 어떤 수준으로 기록할지를 제어하며, PostgreSQL은 다음 세 가지를 제공합니다.minimal: WAL 로그를 최소 수준으로 기록. 데이터 복구를 위한 최소한의 정보만 포함.replica: WAL 로그에 데이.. 이전 1 2 3 4 ··· 7 다음