From 9cd0109c00f69192e36a17d569ee8c92a91ab1c8 Mon Sep 17 00:00:00 2001 From: Seogeurim Date: Sun, 15 Aug 2021 20:11:45 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[Databae]=20=ED=8A=B8=EB=9E=9C=EC=9E=AD?= =?UTF-8?q?=EC=85=98=20=EB=B0=9C=EC=83=9D=20=EB=AC=B8=EC=A0=9C=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contents/database/README.md | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/contents/database/README.md b/contents/database/README.md index b0604c9..a244198 100644 --- a/contents/database/README.md +++ b/contents/database/README.md @@ -124,14 +124,10 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데 - Isolation(고립성) : 둘 이상의 트랜잭션이 동시에 실행되고 있을 때, 각 트랜잭션은 서로 간섭 없이 독립적으로 수행되어야 한다. - Durability(지속성) : 트랜잭션이 성공적으로 완료된다면, 그 결과가 데이터베이스에 영구적으로 반영되어야 한다. - - -주의사항 +#### 주의사항 Isolation(고립성)을 보장하기 위해 무차별적으로 Lock을 걸다보면 대기시간이 매우 길어지므로 트랜잭션은 최소한으로 사용해야한다. - - ### 트랜잭션 상태 ![image](https://user-images.githubusercontent.com/22047374/125165837-a951ee00-e1d3-11eb-9b0b-486cc5eff6b2.png) @@ -142,11 +138,26 @@ Isolation(고립성)을 보장하기 위해 무차별적으로 Lock을 걸다보 - Failed : 트랜잭션 실행에 오류가 발생한 상태 - Aborted: 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태 +1. Commit : 데이터베이스 내의 연산이 성공적으로 종료되어 연산에 의한 수정 내용을 지속적으로 유지하기 위한 명령어이다. +2. Rollback : 데이터베이스 내의 연산이 비정상적으로 종료되거나 정상적으로 수행이 되었다 하더라도 수행되기 이전의 상태로 되돌리기 위해 연산 내용을 취소할 때 사용하는 명령어이다. + +### 트랜잭션에서 발생할 수 있는 문제들 +#### Dirty Read Problem -1. Commit : 데이터베이스 내의 연산이 성공적으로 종료되어 연산에 의한 수정 내용을 지속적으로 유지하기 위한 명령어이다. +한 트랜잭션 진행 중에 변경한 값을 다른 트랜잭션에서 읽을 때 발생한다. +커밋되지 않은 상태의 트랜잭션을 다른 트랜잭션에서 읽을 수 있을 때 발생하는 문제이다. -2. Rollback : 데이터베이스 내의 연산이 비정상적으로 종료되거나 정상적으로 수행이 되었다 하더라도 수행되기 이전의 상태로 되돌리기 위해 연산 내용을 취소할 때 사용하는 명령어이다. +#### Non-repeatable Read Problem + +한 트랜잭션에서 같은 값을 두 번 이상 읽었을 때 그 값이 다른 경우를 말한다. +한 트랜잭션 도중 다른 트랜잭션이 커밋되면 발생할 수 있는 문제이다. + +#### Phantom Read Problem + +한 트랜잭션에서 같은 쿼리문을 두 번 이상 실행했을 때 새로운 데이터가 조회되는 경우를 말한다. +A 트랜잭션 도중 B 트랜잭션에서 update 쿼리를 수행하고 커밋하더라도 A 트랜잭션에서 그 결과는 볼 수 없지만, +B 트랜잭션에서 insert 쿼리를 수행할 경우 A 트랜잭션에서 처음에 안 보였던 새로운 데이터가 조회될 수 있다. --- From 0f8274449917c22566264f37e14ce4a12845826c Mon Sep 17 00:00:00 2001 From: Seogeurim Date: Tue, 24 Aug 2021 02:06:29 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[Database]=20=ED=8A=B8=EB=9E=9C=EC=9E=AD?= =?UTF-8?q?=EC=85=98=20=EB=AC=B8=EC=A0=9C=20=EC=84=A4=EB=AA=85=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contents/database/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contents/database/README.md b/contents/database/README.md index a244198..945d49e 100644 --- a/contents/database/README.md +++ b/contents/database/README.md @@ -157,7 +157,7 @@ Isolation(고립성)을 보장하기 위해 무차별적으로 Lock을 걸다보 한 트랜잭션에서 같은 쿼리문을 두 번 이상 실행했을 때 새로운 데이터가 조회되는 경우를 말한다. A 트랜잭션 도중 B 트랜잭션에서 update 쿼리를 수행하고 커밋하더라도 A 트랜잭션에서 그 결과는 볼 수 없지만, -B 트랜잭션에서 insert 쿼리를 수행할 경우 A 트랜잭션에서 처음에 안 보였던 새로운 데이터가 조회될 수 있다. +A 트랜잭션 도중 B 트랜잭션에서 insert 쿼리를 수행할 경우 A 트랜잭션에서 처음에 안 보였던 새로운 데이터가 조회될 수 있다. --- From dd4d7257a08c58ee59b29490ec5fb7158172f39c Mon Sep 17 00:00:00 2001 From: Seogeurim Date: Sun, 5 Sep 2021 04:39:38 +0900 Subject: [PATCH 3/3] Update README.md --- contents/database/README.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/contents/database/README.md b/contents/database/README.md index 2b1c009..a3f9539 100644 --- a/contents/database/README.md +++ b/contents/database/README.md @@ -235,14 +235,13 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데 ### 반정규화 개념 -반정규화란 시스템의 성능 향상, 개발 및 운영의 편의성등을 위해 정규화된 데이터모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위이다. +반정규화란 시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위이다. * 반정규화를 수행하면 시스템의 성능이 향상되고 관리 효율성은 증가하지만, 데이터의 일관성과 정합성은 저하될 수 있다. * 과도한 반정규화는 성능을 저하시킨다. -* 반정규화를 위해서는 사전에 **데이터의 일관성과 무결성을 우선으로 할지, 데이터베이스의 성능과 단순화를 우선**으로 할지 생각한다. +* 반정규화를 위해서는 사전에 **데이터의 일관성과 무결성을 우선으로 할지, 데이터베이스의 성능과 단순화를 우선으로 할지** 생각한다. * 반정규화 방법에는 테이블 통합, 테이블 분할, 중복 테이블 추가, 중복 속성 추가 등이 있다. - ### 테이블 통합 두 개의 테이블이 조인되는 경우가 많아 하나의 테이블로 합쳐 사용하는 것이 성능 향상에 도움이 될 경우 수행한다. @@ -253,7 +252,6 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데 * 검색은 간편하지만, 레코드 증가로 인해 처리량이 증가한다. * 테이블 통합으로 인해 입력, 수정, 삭제 규칙이 복잡해질 수 있다. - ### 테이블 분할 테이블을 수직 또는 수평으로 분할하는 것이다. @@ -263,14 +261,14 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데 * `갱신위주의 속성 분할` : 데이터 갱신 시 레코드 잠금으로 인해 다른 작업을 수행 할 수 없으므로 갱신이 자주 일어나는 속성들을 수직 분할하여 사용한다. * `자주 조회되는 속성 분할` : 테이블에서 자주 조회되는 속성이 극히 일부일 경우 자주 사용되는 속성들을 수직분할하여 사용한다. * `크기가 큰 속성 분할` : 이미지, 2GB 이상 저장될 수 있는 텍스트 형식으로 된 속성들을 수직분할하여 사용한다. - * `보안을 적용해야 하는 속성 분할` : 데이블 내의 특정 속성에 대해 보안을 적용할 수 없으므로 보안을 적용해야 하는 속성들을 수직분할 하여 사용한다. + * `보안을 적용해야 하는 속성 분할` : 테이블 내의 특정 속성에 대해 보안을 적용할 수 없으므로 보안을 적용해야 하는 속성들을 수직분할 하여 사용한다. #### 테이블 분할 시 고려사항 * 기본키의 유일성 관리가 어려워진다. -* 데이터양이 적거나 사용빈도가 낮은 경우 테이블 분할이 필요한지를 고려해야한다. -* 분할된 테이블로 인해 수행속도가 느려질 수 있다. -* 검색에 중점을 두어 테이블 분할 여부를 결정해야한다. +* 데이터 양이 적거나 사용 빈도가 낮은 경우 테이블 분할이 필요한 지를 고려해야한다. +* 분할된 테이블로 인해 수행 속도가 느려질 수 있다. +* 검색에 중점을 두어 테이블 분할 여부를 결정해야 한다. ### 중복 테이블 추가 @@ -280,16 +278,17 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데 * 정규화로 인해 수행 속도가 느려지는 경우 * 많은 범위의 데이터를 자주 처리해야하는 경우 * 특정 범위의 데이터만 자주 처리해야 하는 경우 - * 처리 범위를 줄이지 않고는 수행속도를 개선할 수 없는 경우 + * 처리 범위를 줄이지 않고는 수행 속도를 개선할 수 없는 경우 2. 중복 테이블을 추가하는 방법 * `집계 테이블의 추가` : 집계 데이터를 위한 테이블을 생성하고, 각 원본 테이블에 트리거를 설정하여 사용하는 것으로, 트리거의 오버헤드에 유의한다. * `진행 테이블의 추가` : 이력 관리 등의 목적으로 추가하는 테이블로, 적절한 데이터 양의 유지와 활용도를 높이기 위해 기본키를 적절히 설정한다. - * `특정 부분만을 포함하는 테이블의 추가` : 데이터가 많은 테이블의 특정부분만을 사용하는 경우 해당 부분만으로 새로운 테이블을 생성한다. + * `특정 부분만을 포함하는 테이블의 추가` : 데이터가 많은 테이블의 특정 부분만을 사용하는 경우 해당 부분만으로 새로운 테이블을 생성한다. ### 중복 속성 추가 조인해서 데이터를 처리할 때 데이터를 조회하는 경로를 단축하기 위해 자주 사용하는 속성을 하나 더 추가하는 것이다. + > 중복 속성을 추가하면 데이터의 무결성 확보가 어렵고, 디스크 공간이 추가로 필요하다. 1. 중복 속성을 추가하는 경우