전체 글291 [Concurrency Control]Insert and Delete opertaion phantom phemnomenon 부산 지점에 있는 모든 계좌의 금액을 합쳐서 부산 지점의 잔고와 비교하는 트랜잭션이 있다고 하자. 이 때, 동시에 부산 지점에 계좌가 하나 추가 된다면 어떻게 될까? 2 phase locking을 해도 insert, delete는 non-serializable schedule을 만들게 될 수 있다. 이런 상황을 phantom phemnomenon이라 한다. 이것을 해결하는 방식으로 delete, insert는 X lock를 획득한 상태로 진행해보자. 2PL 방식이다. 처음에 주어진 상황을 설명하는 예시는 다음과 같다. insert가 있어서 2PL을 해도 잘못된 결과가 나온다. 락의 단위를 튜플로 하면 이런 상황이 발생하게 된다. 테이블 단위 락을 사용하면 이 상황을 막.. 2020. 6. 1. [Concurrency Control]Deadlock 데드락을 해결하는 방법에 대해 알아보자. 위와 같이 데드락이 발생할 수 있다. 해결 방법은 여러 가지가 있다. prevention, detection Prevention 1. timeout을 활용 쉬운 방법이긴 하지만 timetout interval을 정하는 것이 어렵고 starvation이 발생할 수도 있다. 2.deadlock prevention 트랜잭션 수행하기 전에 어떤 아이템에 접근하는지 파악해서 방지하는 것이다. 이 방법은 어렵다. pratial ordering으로 데이터에 접근하도록 하는 것이다. 이 방법은 graph-based protocol에서 살펴보았다. 3.wait-die/ wound-wait(preemption) 트랜잭션이 timestamp를 가지는 것을 이용한다. timestamp.. 2020. 6. 1. [Concurrency Control]Multiple Granularity Locking 락을 거는 단위에 대해서 살펴보자. 아이템에 락을 걸 때 단위가 다양하다. 즉, DB가 계층적으로 구성되어 있다고 하면 락을 걸게 되었을 때 노드의 자식 노드에 대해서도 동일한 락을 건다는 뜻을 담는다. 계층적 구조에서 root에 X락을 걸었다면 모든 하위 노드에도 X락을 걸게된다. 또한 root가 아닌 하위 노드에서 X락을 걸려면 부모부터 root까지 IX락이 걸려있어야 한다. 학생 테이블에서 평균값을 구하는 상황을 생각해보자. 단위를 레코드 처럼 작게 설정하면 트랜잭션에서 락을 걸 때 concurrency가 높다. 하지만 모든 학생 레코드를 읽으려면 오버헤드가 크다. 단위를 테이블 처럼 크게 설정하면 락을 걸 때 테이블에 대해서만 락을 걸면 된다. 학생들의 평균 값을 구할 때 테이블에 락을 걸면 오버.. 2020. 6. 1. [Function] return value 1. 생성자 함수가 아닌 경우 함수에서 리턴값을 지정하지 않으면 어떻게 될까? 답은 undefined가 리턴된다. 2. 생성자 함수인 경우 function A(name){ this.name = name } var foo = new A('bob'); 생성자 함수인 경우 return이 별도로 없으면 생성된 객체를 리턴한다. 즉, name이 'bob'인 객체를 리턴한다. 생성자 함수가 동작하는 방식을 자세히 살펴보면 다음과 같다. 1. 빈 객체 생성 및 this 바인딩 우선 {}로 생성할 때와 비슷하게 빈 객체가 생성되고 this는 이 빈 객체가 된다. 빈 객체라고 해도 [[prototype]]은 있다. 자세한 것은 이후 포스팅에서 다루도록 한다. 2. 코드 실행 필요에 따라 this 속성 값 추가 3. th.. 2020. 6. 1. 이전 1 ··· 36 37 38 39 40 41 42 ··· 73 다음