본문 바로가기

ComputerScience/Database

(19)
[Database] DB MVCC와 PostgreSQL, MySQL의 동작 비교 기존 Lock based Concurrency Control read-lockwrite-lockread-lockOXwrite-lockXX 위 표는 각 read와 write lock의 호환 관계를 나타낸 표이다.예를 들어 두 Transaction이 모두 read-lock + read-lock을 가지고 있을 때는 block이 될 필요 없지만, 한 Transaction이 read-lock, 다른 Transaction은 write-lock을 가지고 있을 경우 둘 중 하나만 실행이 가능하며, 다른 한쪽은 unlock 할 때까지 기다려야 한다. 이러한 호환성 문제를 개선하기 위해서 MVCC(Multiversion Concurrency Control)가 등장한다.MVCC (Multiversion Concurrency..
[Database] LOCK을 활용한 concurrency control 기법 + 2PL (two-phase locking) Lock여러 Transaction이 같은 데이터에 read / write를 한다면 예기치 못한 데이터 변경이 일어날 수 있다.이를 막기 위해 데이터를 Lock이라는 장치를 설정하여, Lock을 취득하기 전까진 그 데이터의 read/write를 못하게 막을 수 있다. Write Lock (Exclusive Lock)read / write(insert, modify, delete)할 때 사용한다.다른 transaction이 같은 데이터를 read / write 하는 것을 허용하지 않는다.write 할 때만 사용하는 것은 아니다. Read Lock (Shared Lock)read 할 때 사용한다.다른 transaction 같은 데이터를 read 하는 것은 허용한다.Lock을 사용한 시나리오상황Transacti..
[Database] DB concurrency control: schedule과 serializability, recoverability Lost Update 현상데이터베이스 시스템에서 Lost Update는 동시에 실행되는 두 트랜잭션이 동일한 데이터 항목을 업데이트하여 이전 업데이트가 손실되는 현상을 의미합니다.다음과 같은 상황에서 발생할 수 있습니다. Alice가 Transaction을 시작합니다.동시에 Bob도 Transaction을 시작합니다. 이 때 Product의 quantity와 likes는 Alice, Bob에게 각각 7, 5 입니다.Alice가 product의 quantity를 6으로 Update 합니다.Bob은 product의 quantity를 10으로 Update 합니다.Alice는 자신의 Update를 Commit 하여 DB에 반영합니다.Bob 또한 자신의 Update를 Commit 하여 DB에 반영합니다. 결과적으..
[Database] isolation이 안될 때 나타날 수 있는 여러 현상 Isonlation이 안될 때 발생할 수 있는 이상한 현상들Dirty Readcommit 되지 않은 변화를 읽어서 이상한 값이 반영되는 상황을 Dirty Read 라고 한다.예시를 살펴보자.Transaction 1 Begins: A가 어떤 계좌에 $100 달러를 입금하려 한다. (Transaction 1) 현재 계좌 잔액은 $500 달러이다.Transaction 1 Modifies Data: Transaction 1은 새 잔액을 계산한다.($500 + $100 = $600) 하지만 commit은 하지 않는다.Dirty Read Occurs: 또 다른 transaction이 시작하여 계좌에 $500 달러를 read 한다. (Transaction 2)Transaction 2 Reads Uncom..
[Database] Join의 의미와 여러 종류의 Join SQL에서 join join은 SQL에서 두 개 이상 테이블 데이터를 함께 조회하는 것을 말한다. join은 여러 종류의 join이 존재한다. Implicit join과 Explicit join SELECT D.name FROM employee AS E, department AS D WHERE E.id = 1 and E.dept_id = D.id; 위 SQL문은 implicit join을 사용한 예시이다. implicit join은 from 절에는 table들만 나열하고 where절에 join condition을 명시하는 방식이다. implicit join은 where절에 selection condition과 join condition이 같이 있기 때문에 가독성이 떨어지며, 실수할 가능성이 높아서 exp..
[Database] 데이터베이스의 파티셔닝, 샤딩, 레플리케이션 파티셔닝(Partitioning) 파티셔닝은 테이블을 더 작은 크기의 테이블로 나누는 것으로, Vertical Partitioning과 Horizontal Partitioning으로 나눌 수 있다. Vertical Partitioning은 컬럼을 기준으로 테이블을 나누는 방식으로, 데이터 테이블을 정규화하기 위해 사용될 수도 있으며, 다른 경우에도 활용할 수 있다. Vertical Partitioning을 통해 컬럼을 나눠 서로 다른 테이블에 저장할 수도 있으며, 게시판에서 게시물의 조회수, 댓글 수 등을 별도의 테이블로 나눠 저장할 수 있다. Horizontal Partitioning은 행을 기준으로 테이블을 나누는 방식이다. Vertical Partitioning으로 컬럼 기준으로 테이블을 나누어 데..
[Database] 인스타그램의 Justin Bieber 문제 ️Justin Bieber 문제 Justin Bieber 문제는 인스타그램에서 저스틴 비버가 사진을 업로드할 때 마다 인스타그램이 다운되거나 매우 느려지는 현상을 말합니다. 이는 그 당시 인스타그램의 '좋아요' 수를 계산하는 방식 때문이었습니다. 인스타그램에서는 어떤 유저가 언제 어떤 사진에 '좋아요'를 클릭했는지 알 수 있습니다. 그래서 저스틴 비버의 팔로워들에게 그의 최신 사진을 표시할 때 해당 사진을 본 모든 사람에 대해 '좋아요' 수를 최신화된 수치로 보여주어야 했습니다. '좋아요' 수를 계산하기 위한 테이블로 다음과 같은 DB 테이블를 구성해보겠습니다. Photos id title user_id file_url 1 Photo A 2 http://example.com/photo1.jpg 2 Pho..
[Database]DB 정규화(normalization)개념과 정규화 과정(Normal form), 1NF ~ BCNF 데이터베이스 정규화와 Normal Form 테이블 정규화는 중복 데이터와 데이터 업데이트 충돌을 최소화하기 위해, 일련의 normal forms(NF)에 따라 relational DB를 구성하는 과정 Normal Form(NF)이란 정규화 과정에서 준수해야 하는 규칙들이며, 처음부터 순차적으로 진행하며 normal form을 해당 규칙을 모두 만족할 때 1NF부터 BCNF까지 적용할 수 있다. 1NF와 BCNF는 functional dependency와 key로만 정의될 수 있다. 1NF부터 BCNF까지 를 만족하면 데이터베이스가 정규화됐다고 말하기도 하며, 일반적으로 실무에서는 3NF 혹은 BCNF까지만 진행하는 경우가 많다. 5NF나 6NF 같은 경우에는 대부분의 경우 발생하지 않으며, 상당히 복잡하..