[Database] DBA급 개발자로 - #8 Index Concurrency Control
2022. 9. 7. 08:33
Database/DBA급 개발자로
이전 포스팅에서 B+Tree에 대해 살펴봤습니다. 이번 포스팅에서는 인덱스 동시성 문제를 어떻게 해결하는지 살펴보겠습니다. Concurrency Control 여태까지 논의했던 B+Tree는 단일 스레드 환경에서만 정상적으로 동작합니다. 멀티 스레드 환경에서는 두 개 이상의 스레드가 동일한 노드에 동시에 접근할 수 있습니다. DBMS는 concurrency control protocol을 통해 동시에 접근되는 데이터를 물리적 또는 논리적으로 보호합니다. 물리적 단위에서 데이터를 보호하는 것은 메모리 상의 데이터가 일관된 상태를 유지할 수 있도록 보호하는 것입니다. 논리적 단위에서 데이터를 보호하는 것은 논리적으로 스레드가 접근할 수 있는 데이터에 접근할 수 있도록 보장하고 접근할 수 없는 데이터는 접근할..
[Database] DBA급 개발자로 - #7 B+Tree
2022. 9. 6. 19:58
Database/DBA급 개발자로
이전 포스팅에서 hash table에 대해 살펴봤습니다. 이번 포스팅을 통해 인덱스에 활용되는 B+Tree 자료구조에 대해 살펴보겠습니다. B+Tree B+Tree는 O(log n)의 시간 복잡도로 삽입, 삭제 및 검색이 가능한 자료구조입니다. 이진 탐색 트리와 다르게 하나의 부모 노드는 여러 자식 노드를 가질 수 있습니다. B+Tree의 특징은 다음과 같습니다. - Perfect balance : 모든 leaf node는 트리 내 동일한 깊이를 가집니다. - 노드가 최대 M개의 자식 노드를 가질 수 있다고 가정하면, 각 노드는 최소 (M/2 -1) ~ (M-1) 개의 키를 가집니다. - Inner node가 k 개의 키를 저장한다고 가정하면 총 k+1 자식 노드(non-null)를 가집니다. B+Tre..
[Database] DBA급 개발자로 - #6 Hash Table
2022. 9. 4. 17:07
Database/DBA급 개발자로
이전 포스팅에서 DBMS가 디스크의 데이터를 메모리의 버퍼 풀에 어떻게 로드해서 사용하는지와 버퍼 풀에 로드된 페이지를 제거하는 여러 정책에 대해 살펴봤습니다. 이번 포스팅에서는 버퍼 풀에 로드된 페이지를 효과적으로 읽고 쓰기 위해서 사용하는 자료구조인 Hash table에 대해 살펴보겠습니다. Hash Table 해시 테이블은 배열을 활용해 정렬되지 않은 key와 value를 저장하는 자료구조입니다. Key에 해시함수를 적용한 결괏값을 사용해서 해당 key와 value를 저장할 배열의 offset을 구할 수 있습니다. DBMS에서 사용되는 해시 테이블에 대해 알아보겠습니다. Static Hash Table 저장하고자 하는 데이터 수를 N이라 할 때, 길이 N의 배열을 사용하는 해시 테이블입니다. 대표적..
[Database] DBA급 개발자로 - #5 Buffer Pools
2022. 9. 3. 23:13
Database/DBA급 개발자로
이전 포스팅에서 DBMS가 데이터를 어떻게 디스크에 저장하는지 살펴봤습니다. 이번 포스팅에서는 디스크에 저장된 데이터를 메모리에 어떻게 적재해서 사용하는지 살펴보겠습니다. Buffer Pool 데이터베이스 버퍼 풀은 데이터베이스 시스템에서 사용하는 메모리 공간을 의미합니다. 이 공간은 데이터베이스 시스템이 일반적으로 사용하는 데이터를 임시로 저장하는 데 사용됩니다. 데이터베이스 버퍼 풀은 데이터를 읽거나 쓸 때 자주 사용되는 데이터를 미리 읽거나 쓰는 것을 돕습니다. 이렇게 하면 데이터베이스 시스템이 자주 사용하는 데이터를 빠르게 읽고 쓸 수 있으며, 이를 통해 전체적인 성능을 향상할 수 있습니다. 버퍼 풀은 프레임(frame)의 배열 형태로 구성됩니다. 디스크의 페이지는 버퍼 풀의 프레임에 적재돼서 활..
[Database] DBA급 개발자로 - #4 Database Storage 2/2
2022. 9. 3. 12:34
Database/DBA급 개발자로
이전 포스팅에서는 DBMS가 데이터를 file, page, tuple의 형태로 디스크에 저장하는 방법에 대해 살펴봤습니다. 이번 포스팅에서는 튜플에 대해 더 자세하게 알아보고 메타데이터는 어떻게 저장하는지와 칼럼형 데이터베이스에 대해 간략히 살펴보겠습니다. 튜플 속성(attribute) 데이터베이스에서 튜플은 데이터베이스의 개별 행을 나타내는 것으로, 각 튜플은 여러 개의 속성을 가질 수 있습니다. 예를 들어 고객 정보 테이블의 튜플은 "이름", "전화번호", "주소" 등의 속성을 가질 수 있습니다. 이러한 튜플 속성은 데이터베이스의 테이블 컬럼과 대응됩니다. 튜플 속성이 가질 수 있는 대표적인 데이터 형식은 다음과 같습니다. INTEGER / BIGINT / SMALLINT / TINYINT FLOAT..
[Database] DBA급 개발자로 - #3 Database Storage 1/2
2022. 9. 1. 08:32
Database/DBA급 개발자로
이전 포스팅에서 중급 SQL에 대해 살펴봤습니다. 이번 포스팅을 통해서 DBMS가 데이터를 디스크에 어떻게 저장하고 관리하는지 살펴보겠습니다. DBMS가 데이터를 저장하는 방법 대다수의 DBMS는 전원이 꺼져도 데이터가 보존되는 비휘발성 저장 장치를 기준으로 설계됐습니다. 최근에는 휘발성 저장 장치만큼 빠르면서도 비휘발성 저장 장치처럼 전원이 꺼져도 데이터가 보존되는 특성을 지닌 NVRAM이 개발됐습니다. 비휘발성 저장 장치는 휘발성 저장 장치보다 더 많은 데이터를 저장할 수 있지만 I/O에 소요되는 시간이 훨씬 깁니다. 따라서 DBMS는 비휘발성 저장장치를 사용함에 있어 I/O 비용을 최소화할 수 있도록 설계됐습니다(예를 들면 random access보다는 sequential access를 선호하도록 ..
[Database] DBA급 개발자로 - #2 Intermediate SQL
2022. 8. 31. 19:02
Database/DBA급 개발자로
이전 포스팅에서 relational model에 대해서 살펴봤는데요, 이번 포스팅에서는 RDBMS 중급 난이도 SQL의 사용법과 특징을 살펴보고자 합니다. Aggregation Functions 데이터베이스에서 aggregate 함수는 여러 개의 데이터 값을 입력으로 받아 하나의 결과 값을 내놓는 함수입니다. 이러한 함수는 데이터베이스에서 대량의 데이터를 다루는 데 있어서 매우 유용합니다. 일반적으로 데이터베이스에서는 이러한 함수를 이용하여 평균, 최댓값, 최솟값, 합계 등을 계산할 수 있습니다. 예를 들어, 고객 데이터베이스에서 고객들의 연령대별 평균 소득을 계산하기 위해서는 소득이라는 열을 이용하여 aggregate 함수인 평균 함수(AVG)를 적용할 수 있습니다. Aggregation 함수의 예시입..
[Database] DBA급 개발자로 - #1 Relational Model
2022. 8. 31. 19:01
Database/DBA급 개발자로
Relational Model 이번 포스팅에서는 다양한 데이터베이스가 탄생할 수 있었던 계기인 관계형 모델(Relational Model)에 대해 알아보겠습니다. 개발자에게 가장 큰 관심사는 역시 데이터베이스입니다. 그럼 데이터베이스가 무엇인지부터 살펴보겠습니다. 데이터베이스는 데이터를 쉽게 접근, 관리하고 업데이트할 수 있도록 구성된 데이터의 모음입니다. 따라서 우리는 데이터를 flat file에 저장을 하던, csv에 저장을 하던 상관없이 데이터를 저장하는 것을 데이터베이스라고 부를 수 있습니다. 하지만 데이터를 아무런 생각 없이 저장하게 된다면 무슨 문제가 발생할 수 있을까요? 첫 번째로는 데이터가 정확한지 확신할 수 없습니다. 만약 중복 데이터가 있다면 어떤 게 정말 내가 원하는 데이터인지 어떻게..