전통적인 데이터 레이크는 트랜잭션을 지원하지 않기 때문에, 데이터 정합성을 유지하기 어려운 단점이 있다. 반면, Delta Lake는 트랜잭션을 지원하는 데이터 레이크로, ACID(Atomicity, Consistency, Isolation, Durability) 속성을 보장하며 데이터 무결성을 보다 효과적으로 유지할 수 있다.그러나 Delta Lake에서 주장하는 트랜잭션과 무결성이 RDBMS에서의 트랜잭션과 동일한 수준으로 보장되는지에 대한 의문이 들 수 있다 (우선 내가 그랬다). 이 글에서는 Delta Lake의 트랜잭션 동작 방식과 RDBMS와의 차이점, 그리고 Delta Lake에서 데이터 정합성을 유지하기 위한 전략을 정리해보려 한다.델타 테이블에서의 트랜잭션Delta Table에서 트랜잭션..
오픈 테이블 포맷오픈 테이블 포맷 (Open Table Formats) 는 데이터 레이크(Data Lake) 에 ACID 트랜잭션과, schema 제약조건 강화, time travel 기능 등을 추가한 시스템이다. 기본적으로, 데이터레이크는 빅데이터 패러다임이 등장하면서 확장성, 유연성 그리고 무엇보다 저비용이라는 점에서 장점이 있다. 저렴한 비용으로 정형, 비정형 데이터를 모두 저장할 수 있다는 점에서 널리 쓰인다. 그렇지만 데이터레이크는 데이터베이스와 같은 ACID 트랜잭션을 지원하지 않았다. 데이터 레이크는 csv, json, parquet 과 같은 파일 형식으로 데이터를 저장한다. 따라서 CDC 나 데이터의 일관성 보장에 대해서 처리하기에는 구현하기도 어렵고 파일을 다루다 보니 처리 비용과 시간이..
완화된 격리 수준데이터베이스는 트랜잭션 격리를 제공함으로써, 동시성 문제를 감추려고 함. → 어플리케이션 개발자들의 부담을 줄여줌.직렬성 격리 : 데이터베이스가 여러 트랜잭션들이 직렬적으로 실행되는 것과 동일한 결과가 나오도록 보장한다는 것을 의미함.심지어 RDBMS 에서도 완화된 격리성을 사용하는 경우도 많음. 이런 버그 발생을 반드시 막아주지는 않음.커밋 후 읽기 (read commited)가장 기본적인 수준의 트랜잭션 격리로 이 수준에서는 두 가지를 보장해 준다.데이터베이스에서 읽을 때 커밋된 데이터만 보게 된다(더티 읽기가 없음)데이터베이스에 쓸 때 커밋된 데이터만 덮어쓰게 된다(더티 쓰기가 없음)더티 읽기 방지더티 읽기(dirty read) : 어떤 트랜잭션에서 처리한 작업이 커밋되지 않았는데도..
MLOps 란 MLOps는 머신러닝 시스템을 위한 자동화된 프로세스이다. 좀더 자세히 말하자면, 머신러닝 모델을 효과적으로 배포하고, 성능을 향상시키기 위한 절차들이다. MLOps 는 아래의 DevOps, DataOps, ModelOps 를 포함하게 되기도 한다. MLOps 파이프라인의 코드 변경이 일어난 경우 진행되는 CICD 작업 (DevOps), 모델 학습에 필요한 데이터를 수집하고, 가공하는 파이프라인 (DataOps), 모델을 학습하고 배포하는 단계의 파이프라인 (ModelOps) 로 이루어지게 된다. MLOps 에서 모델의 스테이징 단계 특히, MLOps 에서 Model 은 크게 세 단계로 나뉘게 된다. 어플리케이션 배포 전략과 유사하게 어떻게 정의하느냐에 따라 달라질 수 있지만, Databr..
회사에 입사하고 나서 처음으로 프로덕션 환경에서 데이터 파이프 라인을 구축하고 배포한 경험을 정리해보고자 한다. 사실 프로젝트 끝난지는 한달정도가 되어가는데.. 내일 새로운 빅데이터 플랫폼 구축 프로젝트가 시작되기 전에 나의 첫 프로젝트를 먼저 회고해보기로 했다. 나는 6개월짜리 Databricks 기반의 빅데이터 플랫폼을 구축하는 프로젝트에서 데이터 엔지니어링을 담당했다.실제로는 4개월 정도 참여했으나, 프로젝트가 특이하게도 1차 배포 - 2차 배포 + 운영 의 프로세스로 진행되어 운좋게도 인프라 구축부터 파이프라인 개발, 운영 모니터링 과정의 ETL 파이프라인 개발의 한 cycle을 경험할 수 있었다. 총 4개월 - 길면 길고 짧다면 짧지만 - 동안 택시도 타고 주말도 반납하면서 실전에서 부딪히며 느..
SQL 실행 순서 SQL 쿼리를 작성할 때 JOIN 절이나 GROUP BY 절의 위치가 종종 헷갈렸는데, 이는 결국 SQL 쿼리가 실행되는 순서와 관련이 있다. FROM : 테이블 선택 JOIN : 테이블 간 결합하기 WHERE : 조건에 따라서 행을 필터링하기 GROUP BY : 필터링된 데이터를 그룹화하기 HAVING : 그룹화 된 데이터에 대해서 필터링하기 SELECT : 필요한 열을 선택하기 ORDER BY : 결과에 대해 정렬하기SELECT column_name, SUM(another_column)FROM table1JOIN table2 ON table1.id = table2.idWHERE conditionGROUP BY column_nameORDER BY column_name; JOIN 이 G..
Chapter 1. Apache Airflow 살펴보기1.1 데이터 파이프라인Task 간의 의존성을 확인하는 방법 중 하나가 pipeline 을 Graph 자료구조로 그리는 것.DAG (Directed Acyclic Graph) : 방향성 비순환 그래프. 반복 및 순환 (cycle)을 허용하지 않음.1.1.2 파이프라인 그래프 실행DAG 구성을 이용하여 정해진 순서로 Task 를 실행함.1.1.3 그래프 파이프라인과 절차적 스크립트 파이프라인 비교각 Task 를 Node 로 생성하고, Task 간의 데이터 의존성을 화살표 끝점으로 연결하여 표현함.1.1.2 예시와 다른 점은 파이프라인 첫번째 단계가 독립적인 두개의 태스크로 구성되어 있으며, 병렬로 실행할 수 있다는 점이다.Task를 순차적으로 실행하는 ..
'스파크 완벽 가이드' 책에서는 스파크 성능 향상의 기법을 크게 간접적/ 직접적인 기법으로 나누어 설명하고 있다. 또한 사용자가 제어 가능한 범위 내에서 튜닝 기법들을 소개하고 있다. 19장의 내용 중 핵심 내용을 요약과 중요한 부분을 더 정리 해보았다. 1. 간접적인 스파크 성능 향상 기법 1.1 설계 방안scala vs java vs python vs R 구조적 API 로 해결이 되지 않아, RDD 트랜스포매이션이나 UDF 를 사용해야 하는 경우 R , Python 의 사용은 피하는 것이 좋다. Python 에서 RDD 코드를 실행하게 되면, Python Process 를 오가는 데이터들을 직렬화 하면서 비용이 크게 발생하고, 안정성이 떨어지게 된다. Spark 에서 직렬화란 : 객체를 바이트 스트림..