[Database] DBA급 개발자로 - #0 소개
2022. 12. 18. 13:27
Database/DBA급 개발자로
DBA급 개발자로 시리즈는 데이터베이스를 더 깊게 학습하고 싶은 개발자들을 위한 시리즈입니다. 해당 시리즈는 Youtube의 CMU Database Group 강의를 기반으로 작성됐습니다. 목차 1. Relational Model 2022.08.31 - [Database] - [Database] DBA급 개발자로 - #1 Relational Model Relational model Tuple VS Record 2. Intermediate SQL 2022.08.31 - [Database] - [Database] DBA급 개발자로 - #2 Intermediate SQL Aggregation functions Window functions CTE(Common Table Expressions) 3. Databa..
[Database] DBA급 개발자로 - #23 Distributed Database 3/3
2022. 12. 16. 09:23
Database/DBA급 개발자로
이번 포스팅에서는 분산 환경에서의 OLAP, 쿼리 실행 모델 및 그 외 알아두면 괜찮은 것들에 대해 살펴보겠습니다. OLAP OLAP란 On-Line Analytical Processing의 약자입니다. OLAP는 OLTP처럼 단순한 CRUD 유형의 작업이 목적이라기보다는 분석 등의 복작한 작업을 수행하는 데 사용됩니다. Schema OLAP용 스키마는 fact 테이블과 dimenstion table로 구성됩니다. Fact 테이블은 dimention 테이블의 모든 키와 종합된 데이터를 가지고 있습니다. Dimension 테이블의 경우 fact 테이블의 종합된 데이터를 생성하기 위한 정보를 가지고 있습니다. Star Schema 별 모양을 닮은 스키마를 의미합니다. 다음에 살펴볼 snowflake sche..
[Database] DBA급 개발자로 - #22 Distributed Database 2/3
2022. 12. 10. 09:54
Database/DBA급 개발자로
이전 포스팅에서 분산 데이터베이스에 대해 간략히 살펴봤습니다. 이번 포스팅에서는 분산 트랜잭션 커밋을 어떻게 atomic 하게 처리할지, 복제는 어떻게 하는지 그리고 CAP 이론에 대해 살펴보겠습니다. Atomic Commit Protocol 분산 트랜잭션을 커밋하기 위해서는 모든 노드가 작업을 정상적으로 처리했는지 확인해야 합니다. 분산 환경에서 atomic 한 커밋을 보장하기 위한 프로토콜에는 two phase commit, three phase commit, paxos, raft, ZAP(apache zookeeper)과 viewstamped replication 등이 존재합니다. 이번 포스팅에서는 two phase commit과 paxos에 대해 살펴보겠습니다. Two Phase Commit Tw..
[Database] DBA급 개발자로 - #21 Distributed Database 1/3
2022. 12. 9. 22:38
Database/DBA급 개발자로
이전 포스팅에서 로깅을 활용해서 시스템 장애 시 데이터베이스를 어떻게 복구하는지 살펴봤습니다. 이번 포스팅에서는 분산 데이터베이스에 대해 살펴보겠습니다. Distributed Database 데이터베이스 노드가 네트워크로 연결돼서 데이터베이스 기능을 제공하는 형태를 분산 데이터베이스라고 합니다. 노드 간 통신이 네트워크를 통해 이뤄지므로 통신 비용을 고려해야 합니다. System Architecture 분산 데이터베이스는 다음과 같이 구성할 수 있습니다. 하나씩 살펴보겠습니다. Shared Memory 데이터베이스 노드가 네트워크를 통해 하나의 메모리를 공유하는 형태입니다. 데이터베이스 노드는 하나의 메모리에 적재된 데이터를 공유합니다. Shared Disk 네트워크를 통해 디스크를 공유하는 형태입니다...
[Database] DBA급 개발자로 - #20 Database Recovery
2022. 12. 5. 15:14
Database/DBA급 개발자로
이전 포스팅에서는 DBMS의 정책(steal, force policy)에 따라 데이터를 디스크에 어느 시점에 저장하는지와 WAL에 대해 간단히 살펴봤습니다. 이번 포스팅에서는 로그를 활용해서, 특히 WAL(Write Ahead Log)를 활용해서 어떻게 복구를 수행하는지 살펴보겠습니다. WAL(Write Ahead Log) WAL 기록 방법 우선 WAL을 활용한 데이터베이스에서는 변경사항이 어떻게 기입되는지 살펴보겠습니다. WAL에는 다음과 같은 로그를 추가합니다. 새로운 트랜잭션이 시작되면 WAL에 로그를 기입합니다. 트랜잭션이 종료되면 로그를 기입합니다. WAL에 기입된 각각의 로그는 transaction Id, Object Id, 이전 값과 변경 이후의 값을 포함합니다. A의 값이 1이고 B의 값이..
[Database] DBA급 개발자로 - #19 Database Logging
2022. 12. 4. 10:49
Database/DBA급 개발자로
이전 3개의 포스팅을 통해 DBMS가 어떻게 트랜잭션 동시성을 제어하는지 살펴봤습니다. 이번 포스팅에서는 database logging에 대해 살펴보겠습니다. Database Logging 데이터베이스는 다음과 같은 특성을 보장해야 합니다. 트랜잭션이 abort 된 경우 데이터가 부분적으로 영구 저장소에 저장되면 안 됩니다. 트랜잭션이 commit 된 경우 데이터는 영구 저장소에 영구 저장돼야 합니다. DBMS는 위와 같은 특성을 보장하기 위해 undo와 redo 기능을 제공합니다. Undo: 성공적으로 commit 되지 않거나 abort 된 트랜잭션에 의한 변경사항을 되돌립니다. Redo: Commit된 트랜잭션에 의한 변경사항을 영구저장소에 다시 반영할 수 있습니다. DBMS의 이런 기능이 어떻게 구..
[Database] DBA급 개발자로 - #18 Mutli-Version Concurrency Control
2022. 11. 14. 08:45
Database/DBA급 개발자로
이전 포스팅에서 timestamp ordering을 활용하여 트랜잭션 동시성을 어떻게 제어하는지 살펴봤습니다. 이번 포스팅에서는 multi version의 데이터를 활용해서 트랜잭션 동시성을 제어하는 MVCC에 대해서 살펴보겠습니다. MVCC MVCC(Multi-Version Concurrency Control)는 여러 버전의 데이터를 저장합니다. 트랜잭션은 해당 트랜잭션이 시작한 시점을 기준으로 가장 최근 버전의 데이터를 읽습니다. MVCC를 활용하면 데이터가 특정 시점에 어떻게 변경됐는지 확인할 수 있기 때문에 다양한 isolation level을 보장할 수 있습니다. 또한 특정 시점에 필요가 없는 버전은(더 이상 트랜잭션에 의해 참조되지 않는 데이터) 제거됩니다. MVCC의 장점은 읽기 작업이 쓰기..
[Database] DBA급 개발자로 - #17 Timestamp Ordering Concurrency Control
2022. 11. 13. 11:25
Database/DBA급 개발자로
이전 포스팅에서는 2 phase locking을 통해 어떻게 concurrent transaction을 처리하는지 살펴봤습니다. 이번 포스팅에서는 timestamp를 통해 concurrent transaction을 처리하는 방법을 살펴보겠습니다. Timestamp Ordering Timestamp ordering 방식도 2 phase locking처럼 concurrent transaction을 처리하기 위한 프로토콜입니다. 주된 차이점은 2 phase locking의 경우 트랜잭션이 실행되는 과정에서 충돌이 발생하면 해당 트랜잭션을 롤백하지만 timestamp ordering의 경우 트랜잭션이 실행되기 전에 충돌 여부를 미리 확인합니다. 두 트랜잭션 Ti, Tj이 동시에 진행되고 트랜잭션이 시작된 시간이..