DataOps39 Elasticsearch Data Streams 시계열 데이터를 다루는 많은 엔지니어들이 직면하는 문제가 있습니다. 시간이 지남에 따라 계속 쌓이는 로그, 메트릭, 이벤트 데이터를 어떻게 효율적으로 관리할 것인가? 특히 대규모 환경에서는 이러한 데이터의 저장, 관리, 쿼리가 상당한 도전이 됩니다. Elasticsearch의 Data Streams 기능은 이런 문제를 해결하기 위한 우아한 솔루션을 제공합니다.Data Streams란 무엇인가?Elasticsearch 7.9 버전에서 정식 출시된 Data Streams는 시계열 데이터를 위한 특별한 추상화 계층입니다. 기존에 여러 개의 인덱스를 수동으로 관리하던 방식에서 벗어나, 마치 하나의 인덱스처럼 동작하는 데이터 관리 패러다임을 제공합니다.가장 중요한 점은 Data Streams가 백엔드에서 여러 인.. 2025. 3. 27. [Database] INSERT 작업 최적화: 부하 감소를 위한 실용적인 접근법 데이터베이스는 많은 애플리케이션의 핵심 구성 요소입니다. 특히 대량의 데이터를 처리하는 서비스에서 INSERT 작업은 성능에 상당한 영향을 미칠 수 있습니다. 이 글에서는 데이터베이스 INSERT 작업 시 부하를 줄이는 다양한 방법과 실제 예시를 살펴보겠습니다.1. 효율적인 INSERT 구문 사용하기기본 INSERT vs 특수 INSERT 구문INSERT IGNORE 대신 ON DUPLICATE KEY UPDATE 사용INSERT IGNORE는 충돌이 발생할 경우 오류를 무시하고 작업을 계속합니다. 하지만 이 방식은 모든 경우에 최적이 아닙니다.-- 일반적으로 사용되는 방식INSERT IGNORE INTO users (id, name, email, created_by) VALUES (1, 'John', .. 2025. 3. 20. [MySQL] 중복 데이터 처리하기: INSERT IGNORE, REPLACE INTO, ON DUPLICATE KEY UPDATE 가이드 개요데이터베이스 작업에서 중복 키 처리는 매우 중요한 부분입니다. MySQL은 이러한 중복 상황을 처리하기 위한 여러 방법을 제공하고 있습니다. 이 포스트에서는 INSERT IGNORE, REPLACE INTO, ON DUPLICATE KEY UPDATE 세 가지 방식에 대해 각각의 특징, 장단점, 그리고 적절한 사용 시나리오를 살펴보겠습니다.중복 키란?중복 키(Duplicate Key)는 테이블에 이미 존재하는 고유 값(UNIQUE 또는 PRIMARY KEY)과 동일한 값을 다시 삽입하려 할 때 발생합니다. 기본적으로 MySQL은 중복 키 삽입 시도 시 에러를 발생시키지만, 이를 다양한 방식으로 처리할 수 있습니다.예를 들어, 다음과 같은 users 테이블이 있다고 가정해 보겠습니다:CREATE TAB.. 2025. 3. 20. [Mysql] pt-online-schema-change 로 서비스 중단 없이 데이터베이스 스키마 변경하기 개요이 글에서는 운영 환경에서 스키마 변경이 필요할 경우, 어떻게 무중단 변경을 수행하는지 살펴보고. 관련해서 Mysql Online DDL, pt-online-schema-change 에 대해서 알아봅니다. 상황회사에서 사용하는 프로그램에서 요청 결과를 log 형식으로 데이터베이스에 저장하고 있습니다. 시간이 흘러 데이터가 많이 쌓였고, 자연스레 쿼리 성능이 떨어지기 시작했습니다. 확인해보니 34,977,366개의 데이터가 쌓여있었고 인덱스 개선을 통해 이를 개선해보기 결정했습니다. Mysql 8.0 을 사용 중이기 때문에 Mysql Online DDL(https://mystudylab.tistory.com/207) 을 활용해도 되었지만, 테이블의 크기가 크고 DML 이 자주 일어나는 테이블에 적용하면.. 2025. 3. 17. [Mysql] MySQL Online DDL 개요이 글에서는 Mysql Online DDL에 대해서 알아봅니다.MySQL Online DDLMySQL의 Online DDL은 테이블 구조를 변경하면서도 서비스 중단을 최소화하기 위해 설계되었습니다. 등장 전에는 스키마 변경 시, 무조건 테이블 전체 락이 걸리기 때문에 운영 환경에서 사용하기 어려움이 있었습니다.데이터가 많을 수록 중단 시간은 더 오래걸리기 때문에 다른 전략이 필요헀고, DBA들은 복잡한 우회 방법을 개발해야 했습니다:수동으로 새 테이블 생성 후 데이터 일괄 복사트리거를 사용한 변경 내용 동기화테이블 스왑 및 애플리케이션 재시작MySQL 5.6 버전부터 공식적으로 Online DDL 기능을 도입되었고. 이 기능을 통해 많은 ALTER TABLE 작업을 테이블에 대한 전체 락(lock)을.. 2025. 3. 17. [Kafka] 카프카 메시지 저장 방식, 오프셋이 2개씩 증가? 카프카 저장 단위카프카 메시지는 세그먼트라는 저장 단위로 관리되며 세그먼트 내부에 레코드가 쌓이는 형식입니다.[Topic]└── [Partition] ├── 00000000000000000000.log # 활성 세그먼트 (Active Segment) ├── 00000000000000000000.index # 오프셋 인덱스 ├── 00000000000000000000.timeindex # 타임스탬프 인덱스 ├── 00000000000000456789.log # 이전 세그먼트 ├── 00000000000000456789.index └── 00000000000000456789.timeindex 실제로 카프카에 접속해 토픽 데이터를 확인할 수 있습니다. test1이.. 2024. 11. 25. [Spark] SparkSQL (DataFrame, DataSet) 구조와 장점 2024. 8. 21. [Spark] Spark란? Spark?데이터 센터나 클라우드에서 대규모 분산 데이터 처리를 하기 위해 설계된 통합형 엔진 2024. 8. 21. [Kafka] Log Compaction, Message Compression TL;DR- 모두 저장 공간 효율을 위해 사용될 수 있는 기능이다.- Log Compaction은 같은 record key를 갖는 가장 최신 로그만 남기고 삭제하는 것을 말한다.- Message Compression은 메시지 자체를 압축해서 전달하는 것을 말한다. 1. Message Compression (메시지 압축)- Message Compression은 메시지의 크기를 줄이는 기술- 메시지 크기를 줄임으로써 네트워크 대역폭을 절약하고 저장 공간을 효율적으로 사용하며, 더 빠른 전송 및 처리 속도를 제공- 주로 사용되는 압축 알고리즘에는 Gzip, Snappy, LZ4 등이 있음- 프로듀서 레벨 압축이 있고, 브로커 레벨 압축이 있음- 프로듀서 레벨 압축은 전송되는 데이터 양을 줄이기 위해 데이터가 .. 2024. 7. 30. [Kafka] 트랜잭션, exactly-once Kafka Transaction?스트림 처리 애플리케이션을 위해 도입된 기능이다. exactly-once 을 보장해준다.동작트랜잭션 프로듀서를 사용할 경우, 트랜잭션 코디네이터가 트랜잭션를 관리하게 된다.출력 토픽에 레코드 저장, 오프셋 증가 2가지 작업이 동시에 커밋되는 것을 보장한다. (Atomic multipartition write)트랜잭션이 해결할 수 있는 문제들1. 앱 크래시로 인한 중복 메시지 문제앱이 토픽에 메시지를 쌓았는데 커밋은 못한 경우 중복 메시지가 쌓일 수 있음.Atomic multi partition write 보장으로 해결2. 브로커 응답 문제로 인한 인한 중복 메시지 문제브로커가 커밋은 성공했는데 성공 응답에 실패한 경우, 프로듀서는 재요청을 보내며 중복 메시지가 쌓일 수 있.. 2024. 6. 24. 이전 1 2 3 4 다음