2018년 8월 6일

오늘 한 일:

내일 할 일:

회고

운영체제를 꼭 공부해야 되겠다

DATABASE

RDBMS: ER모델을 바탕으로 만들어진 DBMS

최초의 rdbms : system-R 과 ingres

graphdb

postgress

noSQL: Sql이 아닌 db

rdbms

redis: 매우빠름

elasticsearch: 검색전용

DB관련용어

CAP

ACID

트랜잭션? : A transaction is a unit of a program execution that accesses and possibly modifies various data objects

운영체제의 잠금 공부하기

serial schedule: 한번에 하나식 실행된다

프로세스와 쓰레드

명령어는 워드 단위

명령어가 어디까지 실행된 흐름을 포인터로 가리키고 있다

흐름은 한 CPu에서 돌아간다

크롬은 멀티 쓰레드

멀티쓰레드에 의해 발생되는 문제를 해결하는 방법 동기화

ERD와 DB설계

개념적 설계: ERD가 탄생(누가 해석해도 똑같은 의미의 무언가)

논리적 설계: db에 넣을 수 있는 데이터가 탄생

물리적 설계: db에 어떻게 저장할지(요즘은 대부분 소프트웨어가 자동화함)

해당개체를 구분하는 유니크한 속성: 키 속성(밑줄)

ERD

ERD: entity-relationship diagram

entity: 개체 (사각형으로 표시)

relation: 엔티티간의 관계 (관계도 속성을 가질 수 있다)

약개체: 혼자만으로는 유니크한 속성이 없을 때(부양가족)

다른 필드에 의존적인 속성은 점점점으로 표현(number of emloyee)

복수의 값으로 이루어진 속성은 두개 의 타원형으로 표현

table

1대 1관계에서는 속성을 하나에만 넣으면 되는데

외래키: 다른 테이블의 pk(primary key)를 참조, 참조 무결성 제약조건을 따라야 한다

관계가 m:n일경우
// 사원이 여러 프로젝트를 맡을 수 있는경우
// 사원의 프로젝트 당 일한 시간을 속성으로 두고자 한다
emp (eid, ...)
proj (pid, ...)

새로 테이블을 만든다

emp-proj (eid, pid, workinghour)
// eid와 pid가 동시에 기본키가 된다

JOIN

inner join: 없는 레코드는 안보여줌

left outer join: 왼쪽 테이블의 없는 레코드도 보여줌

right outer join: 오른쪽 테이블의 없는 레코드도 보여줌

양쪽 다 보이려면 UNION을 이용

Join 복잡도

inner join은 O(n*m)의 복잡도: 너무 느리다

방법

조인하지 않고 하나의 테이블로 한다(중복 되더라도 성능은 빠르다): 역정규화

DISK

기계적인 HDD <-> 전자적인 SSD

디스크는 순차접근이 빠르다(돌면서)

한 번당 블록단위로

저장 방법

row store: 레코드 순서대로 저장, 일반적인 방법

column store: 컬럼 순서대로 저장, 분석에 용이

OLTP와 Analytics

레코드는 정렬되어있을까?

정렬 안됨(그럼 유일함 체크는? index이용)

b+tree

pk에는 유니크함을 조사해야 되므로 자동으로 b+tree 인덱스가 생김 > clustered index가 생김

그럼 다른 필드 검색은 어떻게 할 까??

키워드에 또 인덱스를 만듦 > 그 인덱스는 pk인덱스를 가리킴 : secondary index

join

sort merge join: 정렬이 되어잇는 상태에서 조인

CREATE INDEX …를 이용해서 특정 필드에 인덱스를 설정하면 검색속도가 빨라짐

책추천: 데이터베이스 첫걸음