Database (64) 썸네일형 리스트형 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.. illegal argument exception es index 관리중 illegal_argument_exception을 마주했다. reindex 작업을 통해 해결하는것을 소개한다. 운이 좋으면 index patterns에서오른쪽 상단의 리플래시 만으로 해결이 가능할수~~~도 있다. 그게 안된다면 인덱스를 리인덱싱 하는 작업이 필요하다. 매핑 스키마 드리프트(schema drift)동일한 목적을 가진 데이터 필드들이 시간이 지남에 따라 서로 다른 데이터 타입 또는 구조로 인덱스에 저장되는 현상Elasticsearch는 스키마리스(schema-less)처럼 보이지만, 실제로는 매핑(mapping)이라는 강력한 타입 시스템을 가지고 있어, 스키마가 일관되지 않으면 검색, 집계, 쿼리에서 오류가 발생. 최초 데이터 삽입 시:{ "user_id": .. es 칼럼 limit 변경하기 [Limit of total fields [1000] has been exceeded] "error": { "type": "illegal_argument_exception", "reason": "Limit of total fields [1000] has been exceeded" } 인덱스에 총 필드 수가 1000개를 초과했고, 그로 인해 이 이벤트(document)가 인덱싱되지 않고 실패한 것엘라스틱서치의 기본 필드 수는 1000개로 지정되어 있다. Elasticsearch는 데이터의 모든 하위 키를 개별 필드로 매핑한다. 즉, app.sdk_version_code, app.app_name, ..., user.nickname, device.height 등 각각이 하나의 필드로 계산되어 전체 필드 수가 1000개를 넘는 상황이 발생하면 위와 같이 에러가 발생한다. 기존 인덱스에.. 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 로그에 데이.. timesacle db + fastapi https://www.youtube.com/watch?v=Se5ipte9DMY&t=3s timesacleDBtimesacle DB 는 PostgreSQL 을 기반의 TimescaleDB는 오픈소스 기반의 시계열(time-series) 데이터베이스로 시계열 데이터를 효율적으로 저장, 관리, 분석할 수 있는 기능을 제공하며, PostgreSQL의 모든 기능을 그대로 사용할 수 있는 확장(extension) 형태로 동작한다. 주요 특징PostgreSQL의 확장이므로, PostgreSQL의 모든 기능과 호환 (SQL 쿼리, 트랜잭션, 인덱스, 사용자 정의 함수 등을 그대로 활용)시간 축을 기준으로 데이터를 효율적으로 분할 및 저장 (데이터의 쓰기/읽기 성능을 최적화하기 위해 자동 파티셔닝과 압축을 제공)Hyp.. 이전 1 2 3 4 ··· 8 다음