일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바 thread 실행 순서 제어
- 사칙연산
- hash table
- Easy
- array
- SpringBoot 2
- R
- Kadane's Algorithm
- scanner
- input
- 자바 스레드 실행 순서 제어
- 카데인 알고리즘
- JAVA11
- heroku
- 자바입력
- 수학
- Today
- Total
목록DB (13)
DeFacto-Standard IT
서비스를 운영하며 시간이 지나면 DB에 대량의 데이터가 쌓일 수 있는데, 모든 데이터를 일일이 찾는 것 보다 인덱스를 설정해두면 원하는 데이터를 빠르게 찾을 수 있고, 더 크게 보면 시스템의 부하가 줄어들어서 시스템의 전체 성능이 향상된다. 단점 : 인덱스 생성에 시간이 많이 소요될 수 있다. 인덱스 자체가 DB공간을 차지하여 추가적 공간이 필요, 데이터의 CUD작업이 자주 일어날 경우 모든 인덱스를 수정하여야 하므로 이를 연산하느라 오히려 성능이 나빠질 수 있다. 레코드 수가 많은 경우, where절에 자주 사용되는 필드를 사용한다. 또는 조인 연산에 참여하거나 널 값이 많은 필드를 사용한다. 인덱스 종류 : B+, 복합, 해싱 인덱스 클러스터형 인덱스 -> 영어사전 테이블 당 1개만 생성 / 레코드를..
Shared Lock(공유잠금) - read연산 가능, write연산 불가, 여러 개의 트랜잭션이 동시에 걸기 가능 읽기는 데이터에 영향을 주지 않아 동시에 접근해도 문제가 안되므로 2개 이상의 트랜잭션이 접근하는 것을 허용. 데이터에 영향을 주지 않지만 lock을 거는 이유는, 읽는 도중에 데이터가 바뀌면 안되므로 lock을 걸어 데이터의 변환을 일으키는 Exclusive Lock을 걸 수 없도록 하기 위함이다. Exclusive Lock(배타잠금) - read, write 연산 둘 다 가능. 한 개의 트랜잭션만 걸 수 있음 쓰기는 데이터에 영향을 주기 때문에 동시에 접근한다면 기존에 수행했던 값은 다른 값으로 덮어씌워져 문제가 발생할 수 있다. 따라서 값을 쓰는 연산이 포함된다면 Exclusive L..
1차 정규형 – 모든 도메인을 원자값만으로 구성 2차 정규형 – 모든 필드가 키에 대해 함수적으로 종속, 부분 집합이 결정자가 되는 부분 종속이 존재하지 않는 경우(좌변최소성, 키가 하나의 필드로 구성되게 한다) 3차 정규형 – 이행적 함수적 종속을 제거 BCNF 정규형 – 모든 함수적 종속에서 결정자가 후보키
갱신이상(수정이상) – 중복된 튜플 중 일부만 수정하여 데이터가 불일치하게 되는 모순이 발생하는 경우. 삽입이상 – 새로운 열 데이터를 적용하여 튜플을 저장하려할 때 저장할 수 없거나, 저장하기 위해 원하지 않는 데이터를 삽입해야만 하는 경우.(주로 PK나 아직 결정되지 않은 나머지 열 데이터) 삭제이상 – 한 튜플을 삭제할 때, 삭제되지 말아야 할 정보까지 동시에 삭제되는 현상. -> 이상현상을 일으키는 열 데이터를 다른 테이블로 분리시키고, 기존 테이블에 FK로서 새로운 테이블의 PK를 제공하여 새로운 테이블만 변경하면 기존의 테이블을 사용해도 자동적으로 변경된 값을 사용할 수 있도록 한다.
관계형 데이터베이스의 설계에서 데이터의 중복이나 이로 인한 각종 연산에 따른 이상 현상을 최소화 하도록 데이터를 구조화 하는 것. 각 정규형의 조건에 맞게 테이블을 나누고 PK나 FK 등으로 제약조건을 걸어 놓아서,한 테이블에서 변경이 일어난다면 이를 참조하는 다른 테이블을 사용할 때도 자동적으로 변경된 데이터를 사용할 수 있다.
- 지연갱신 트랜잭션이 commit될 때 까지 갱신 내용을 디스크에 저장하지 않고 지연시킨다. 트랜잭션이 실행되는 동안에는 갱신된 내용을 주기억장치의 버퍼에 기록하고, 트랜잭션이 commit을 하면 버퍼의 내용을 디스크로 저장하도록 OS에 요청한다. 만약 트랜잭션 수행 도중 에러가 발생할 경우 디스크에 직접적으로 갱신하지 않았으므로 undo연산이 필요가 없다. 따라서 로그에는 이전 값이 필요가 없다. commit이 로그에 정상적으로 적혀 있더라도 디스크에 저장되지 않았을 경우에 대비하여 redo연산만 하면 된다. - 즉시갱신 트랜잭션이 commit할 때 마다 OS에 디스크에 저장할 것을 요구한다. 장애가 발생하여 재가동된다면 완료되지 못한 트랙잭션에 대해서 undo연산으로 값을 되돌려야 한다. commi..
undo – 갱신된 값을 이전으로 되돌려놓는 연산 redo – 쓰기 연산을 실행하였지만 디스크로 반영이 안됐을 경우 이를 재실행하는 연산
TableA.a=TableB.a일 때 TableB.b의 값을 TableA.b로 업데이트한다. UPDATE TableA SET b = (SELECT b FROM TableB WHERE TableA.a = TableB.a) 결과 여기서 a=4인 값은 TableB에 없기 때문에 업데이트가 안된다.
데이터 베이스를 직접적으로 건드는 것은 상당히 위험한 작업이다. 실제로 서비스하고 있는 DB를 백업도 없이 직접적으로 건들다가 잘못되서 자료가 날아간다면 그 사람의 인생은 끝났다고 봐도 무방하다. 그런데 MySQL을 사용하면서 Safe Mode 때문에 SQL을 실행할 수 없는 상황이 있다. 보통 update나 delete와 같이 기존의 자료를 변경이나 삭제하는 위험한 연산을 막아놓는 것이 Safe Mode이다. Safe Mode가 설정되어있으면 DB는 Read Only 상태가 되어 select 또는 insert 문만 실행할 수 있다. Safe Mode를 해제하는 방법은 아주 간단하다. SQL을 입력하는 창에 SET SQL_SAFE_UPDATES=0; 이라는 문장을 기술하고 실행하기만 하면된다. updat..