데이터베이스에 접근하기 위해서 사용자는 질의문 즉, 쿼리를 하용한다.DBMS는 사용자가 입력한 이 쿼리를 그대로 실행하는게 아니라 필요에 따라 최적화하고, 기계가 이해할 수 있는 방식으로 재해석해서 실행한다. 최적화 쿼리는 같은 논리적인 의미를 가지는 다양한 표현이 있을 수 있다. 때문에 같은 의미를 가지는 가장 간결한 쿼리로 쿼리를 최적화시키는 작업이 필요하다. 몇가지 공식을 통해 쿼리를 최적화할 수 있다. and로 묶여있는 select는 두번의 select로 나눈다. select 연산은 교환법칙이 성립한다. 다중 project 연산은 가장 바깥쪽에 있는 하나만 남기고 제거할 수 있다. cartesian product의 select는 theta join으로 최적화할 수 있다. natural join 두..
데이터베이스를 활용하는 응용분야 중 방대한 텍스트에서 특정 키워드를 검색하는 시스템을 구축하는 방법에 대해 알아본다. 사실 데이터베이스 포스팅이라기 보다는 검색엔진에 관련된 주제이지만 뭐 데이터베이스 수업에서 나온 내용이므로 데이터베이스로 포함시켰다. 검색엔진은 원하는 키워드를 적합한 순서로 정렬해서 보여줘야하기 때문에 방대한 문서들을 정렬하는 알고리즘이 중요하다. 키워드를 사용하는 방법 특정 키워드를 검색할 때 문서에서 해당 단어의 가중치를 계산해서 정렬하는 방법이 있다. TF-IDF Term Frequency Invert Document Frequency의 약자로 여러 문서로 나타난 문서에서 특정 키워드가 얼마나 중요한지를 나타내는 가중치를 나타내는 수치이다. 문서의 핵심 단어를 추출하거나 검색엔진에..
데이터베이스는 구동 중 다양한 오류가 생길 수 있고, 좋은 데이터베이스는 이러한 오류를 문제없이 복구할 수 있어야한다. Transaction Failure 말 그대로 트랜젝션이 도중에 어떠한 작용으로 실패하는 경우이다. System Crash 하드웨어 전원이 나가는 등 시스템에 직접적인 타격을 받아서 오류가 발생하는 것을 말한다. Disk Failure 저장장치 하드웨어에 문제가 생겨서 발생하는 오류를 말한다. 이를 예방하기 위해 저장장치를 여러개의 물리적인 블록(block)으로 나누고 쓰기/읽기의 순서를 정해진 프로토콜을 따르도록 강제한다. 첫번째 블록에 쓰기를 수행한다. 1번이 끝나면 두번째 블록에 쓰기를 수행한다. 읽기는 2번까지 완전히 완료되면 수행한다. 물리적으로 나눈 블록이 서로 다른 값을 가..
Lock 여러개의 트랜젝션이 데이터베이스에 접근할 때 값에 대해 중복 쓰기, 중복 읽기를 막기 위해서 해당 값에 대한 접근을 막는것을 말한다. 기본적으로 어떤 값에 Lock을 건 트랜젝션만이 Lock을 해제할 수 있다. Lock-S (Shared Lock) - 읽기는 가능하지만 쓰기는 불가능하게 막는다. 다른 트랜젝션이 같은 값에 대해 Lock-S를 걸 수 있다. 단, Lock-S가 걸린 값에 Lock-X를 추가로 걸 수 없다. Lock-X (Exclusive Lock) - 읽기와 쓰기 모두 불가능하게 막는다. 다른 트랜젝션이 같은 값에 대해 어떠한 Lock도 추가로 걸 수 없다. 이러한 Lock을 활용해서 여러개의 트랜젝션이 동시에 수행될 때 서로 다른 값을 가지고 연산하지 않도록 만들어야한다. Two..
트랜젝션 (Transaction) 데이터베이스에서 사용하는 용어로 분할될 수 없는 작업 단위를 나타낸다. 분할될 수 없다는 말은 물리적으로 분할될 수 없다는 것이 아니라 논리적으로 분할하면 안된다는 의미로, 분할되어 실행될 시 시스템에 큰 타격을 줄 수 있다. ATM기기에서 돈을 송금하는 작업을 예로 들어보자. 돈을 송금하여 내 계좌 데이터에서는 금액이 감소되었는데, 상대방 계좌 데이터를 증가시키는 부분에서 간섭이 일어나 증가가 안된다면 문제가 된다. 위 예에서 돈을 인출하는 명령(내 계좌에서 돈을 인출)과 돈을 입금하는 명령(상대 계좌에 돈을 입금)은 하나의 트랜잭션으로 묶여서 실행되어야 한다. 트랜젝션의 특성 트랜잭션이 신뢰를 가지기 위해 다음과 같은 특성을 가진다. 원자성(Atomicity) 트랜잭..
SQL에서 where절에 추가해서 2개이상의 query를 조합할 수 있는 방법을 알아보자. set 두개 이상의 쿼리를 조합해서 새로운 쿼리를 만들어낼 수 있다. 하나의 쿼리로 표현할 수 없거나 너무 복잡도가 올라가서 사람이 이해하기 힘들 경우 간단한 쿼리를 여러개 조합하여 사용할 수 있다. ‘query1’ union/intersection/except ‘query2’ union : 두 쿼리의 합집합을 구한다. intersection : 두 쿼리의 교집합을 구한다. except : 좌항에서 우항을 제외한 결과를 구한다. Nested Subquery where절 안에 키워드로 연결하여 특정 쿼리를 통째로 내부에 삽입할 수 있다. 쿼리문이 너무 길어지거나 복잡해질 경우 이 기능을 사용해서 가독성을 높일 수 있..
데이터베이스는 중복된 정보를 가지는 속성이 없이 정규화되어야 좋은 데이터베이스라고 할 수 있다. 정규화를 제대로 하지 않으면 아래와 같은 문제들이 발생한다. 삽입이상 (Insert Anomaly) 어떠한 사실을 삽입하려고 하는데 이 삽입행위가 정규화를 해치는 경우 삭제이상 (Delete Anomaly) 어떠한 사실을 삭제했는데 원하지않는 정보도 함께 삭제되는 경우 갱신이상 (Update Anomaly) 어떤 값을 수정했을 때 정보가 손실되거나 불필요한 여러 값을 추가로 수정해주어야 하는 경우 이를 방지하기 위해 정규화 과정을 거쳐야하는데 그 방법에 대해 알아보자. 함수 종속 (Functional Defendency) 정규화를 하기 전에 관계형 데이터베이스에서 발생하는 종속에 대해 알아야한다. 정규화라는 ..
데이터베이스를 구축하다보면 순차적으로 증가하는 값을 지정해야할 때가 있다. 게시판 서비스를 만들거나 유저목록 데이터베이스를 만들 때 index 값으로 정렬하면 관리하기가 편하다. 생성 sequence는 전역변수처럼 데이터베이스에 생성할 수 있다. CREATE SEQUENCE number START WITH 1, INCREMENT BY 1, MAXVALUE 1000, MINVALUE 1, NOCYCLE; 각 옵션은 설정하지 않으면 기본값 시작값(1), 증가값(1), 최소값(1), 최대값(가장 큰 숫자), NOCYCLE 으로 설정된다. 이렇게 생성된 number라는 sequence 변수를 데이터베이스 내에서 접근하여 사용할 수 있다. 사용 sequence는 주로 INSERT와 함께 사용된다. 테이블에 row..
- Total
- Today
- Yesterday
- Cocos2d-x
- game
- swift
- 국내여행
- OS
- DesignPattern
- scala
- SHADER
- ios
- C++
- Spring
- SOCKET
- Java
- Git
- 자료구조
- C/C++
- 알고리즘
- SwiftUI
- 데이터베이스
- rxswift
- database
- mongoDB
- C
- 수학
- JSP
- 드라마
- winsock
- machine learing
- ue4
- 운영체제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |