- 일관성 있는 데이터를 여러 사람들에게 실시간으로 제공할 수 있습니다.
- 데이터베이스는 서로 다른 목적을 가진 유저들이 사용 가능하며 동적으로 최신 데이터를 유지하고 실시간 처리에 응답이 가능하다는 특징을 가지고 있습니다. (중복최소화, 동시 접근, 실시간, 동적)
- 데이터의 정확성과 일관성을 고려해야 합니다.
- 데이터의 정확성이란 데이터의 중복이나 누락이 없는 상태를 말합니다.
- 데이터의 일관성은 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태를 의미합니다.
- 스키마란 데이터베이스의 구조와 제약 조건에 대한 명세를 기술한 것입니다. 그리고 그 유형은 외부 스키마와 개념 스키마와 내부 스키마로 나눌 수 있습니다.
- 다수의 컴퓨터 사용자들이 컴퓨터에 수록 된 수 많은 자료들을 쉽고 빠르게 추가, 수정, 삭제 할수 있도록 해주는 시스템입니다.
- 복잡한 현실 세계의 데이터를 단순화해서 컴퓨터 세계의 데이터베이스로 변환하는 과정입니다.
- 복잡한 현실 세계의 데이터를 단순화해서 컴퓨터 세계의 데이터베이스로 변환하는 과정입니다.
- 한마디로 표현하면 데이터의 정보를 담고 있는 데이터이다. 예를 들면 이미지 파일의 크기나 날짜 데이터들을 메타데이터라고 할 수 있다.
- 기본키, 대체키, 슈퍼키, 후보키
- 기본키 -> 후보키 중 선정된 키
- 대체키 -> 기본키가 아닌 후보키
- 후보키 -> 튜플을 식별할 수 있는 속성의 최소 집합
- 슈퍼키 -> 튜플을 식별할 수 있는 속성의 집합
- 테이블에 부적절한 자료가 입력 되는 것을 방지하기 위해서 테이블을 생성할 때 각 컬럼에 대해서 정의하는 여러가지 규칙을 나타냅니다. 개체, 참조, 도메인 등의 제약조건이 존재합니다.
- 무결성 제약조건이란 데이터가 정확성과 일관성을 유지하기 위해 가져야 할 조건들을 의미합니다.
- 개체 무결성 : 기본키는 null값을 가질 수 없다.
- 참조 무결성 : 외래키는 null값 또는 참조하는 릴레이션의 기본키 값이어야 한다.
- 도메인 무결성 : 속성값이 도메인에 속한 값이어야 함을 의미합니다.
- 키 무결성 : 한 릴레이션에 최소한 하나의 키가 존재해야 합니다.
- 데이터의 성능이 일반적으로 좋아 정렬, 탐색, 분류가 빠릅니다.
- 신뢰성이 높아 데이터의 무결성을 보장합니다.
- 정규화에 따른 갱신 비용을 최소화합니다.
- 무결성 제약조건은 기본 테이블에서 일치하는 필드가 기본키(PK)이거나 고유 인덱스를 갖고 있거나 관련 필드의 데이터 형식이 같아야 한다는 것입니다.
- View는 직접 테이블에 접근하는 것이 아니라 테이블에서 사용자가 필요로 하는 부분만 선택하여 만들어 놓은 데이터 집합입니다.
- 가장 큰 이유는 사용자의 편의와 데이터베이스의 보안 때문입니다.
- 원본 테이블에 직접 접근하지 않아도 사용자가 임의의 뷰를 구성하여 별도의 이름을 붙이거나 접근 가능한 사람을 지정할 수 있기 때문입니다.
- NoSQL이 RDB와 다른 점은 스키마가 없다는 것입니다. 즉 데이터 관계와 정해진 규격(table-column의 정의)이 없습니다.
- NoSQL은 분산처리(수평적 확장)의 기능을 쉽게 제공합니다.
- 하지만 NoSQL은 관계 정의가 없어 Join이 불가능합니다. 또한 트랜잭션을 지원하지 않습니다.
- FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
- Primary Key은 테이블에서 각 Row(행)을 유일하게 구분하는 Column-Key입니다.
- Foreign Key는 하나의 테이블에 있는 Column(열)으로는 그 의미를 표현할 수 없는 경우, 다른 테이블의 Primary-Key Column의 값을 반드시 참조해야 하는 Key입니다.
- sql문 안에 있는 sql문 입니다.
- MySQL 5.5버전 이하에서는 최적화를 지원하지 않아 서브쿼리는 full scan하게 되어 성능이 좋지 않습니다. 5.5 이상 버전에서도 간단한 서브쿼리가 아니면 최적화가 되어 있지 않아 join문으로 변경하는 것이 성능적으로 우수합니다.
-
엘라스틱서치는 비정형 데이터의 색인과 검색이 가능합니다. 이런 특성은 빅테이터 처리에서 매우 중요합니다. 데이터를 CRUD하기 위해서 RESTful API라는 방식을 이용합니다. 데이터 공간을 절약할 수 있다. 컬럼을 동적으로 정의하여, 필요한 데이터만 넣게 되어 데이터 공간 및 CPU 사용량, 네트워크 트래픽도 줄일 수 있는 효과가 있습니다.
-
엘라스틱서치의 단점은 실시간 처리가 불가능하다는 점입니다.
- 관계형 데이터베이스에서 데이터 중복을 최소화 하기 위해 데이터를 구조화하는 작업입니다.
- 자료의 손실이나 불필요한 정보의 도입 없이 데이터의 일관성 및 데이터 중복을 최소화하기 위해 진행합니다. 또한 최대의 데이터 안정성 확보를 위한 안정적 자료구조로 변환하기 위해서 하나의 테이블을 둘 이상으로 분리합니다.
- 제 1정규형은 도메인 제약조건을 만족합니다.
- 제 2정규형은 부분적 함수종속을 제거합니다.
- 제 3정규형은 이행적 함수종속을 제거합니다.
- 함께 사용하는 테이블이 정규화로 인해 쪼개진다면 연산 할때마다 join문을 실행해야하므로 성능의 저하가 생길 수 있습니다. 이러한 경우에 역정규화를 실행합니다.
- 이상현상은 원하지 않는 값이 연쇄적으로 삭제되거나 수정 또는 삽입되는 현상입니다. 이상현상에는 갱신이상, 삽입이상, 삭제이상이 있습니다.
- DB의 상태를 하나의 일관된 상태에서 또 다른 일관된 상태로 변환시켜주는 연산들의 집합입니다.
- locking은 트랜잭션이 DB를 다루는 동안 다른 트랜잭션이 관여하지 못하게 막는 것입니다.
- 교착상태가 발생할 수 있습니다.
- 트랜잭션들이 잠금이 걸린 자원을 무기한 대기하는 현상
- 예방과 회피기법이 있습니다. 예방은 트랜잭션 전에 필요한 데이터에 Lock을 미리 걸어주는 방법입니다. 하지만 데이터 양이 많으면 데드락이 발생할 수 있습니다. 회피기법은 타임스탬프 기법을 적용하여 데이터를 시간 순서대로 제어하는 방법입니다.
- 책의 목차처럼 지정한 칼럼을 정렬하여 쉽게 찾을 수 있도록 만든 테이블입니다.
- 검색과 정렬 작업의 속도를 높이기 위해 사용됩니다.
- 해쉬테이블과 B+Tree 구조가 있습니다. 하지만 데이터베이스에서 범위 연산에서 우수한 B+ Tree를 사용합니다.
- 인덱스 자료구조로 해시 테이블과 B+Tree가 있습니다.
- 해시테이블은 컬럼의 값으로 생성된 해시를 기반으로 인덱스를 구현합니다. 시간복잡도가 O(1)이라 검색이 매우 빠르지만, 부등호와 같은 연속적인 데이터를 위한 순차 검색이 불가능합니다.
- B+Tree는 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조입니다. BTree의 리프노드들을 LinkedList로 연결하여 순차 검색을 용이하게 합니다.
- 인덱스를 설정하지 않아도 기본적으로 PK값이 인덱스로 설정되어 있습니다.
- 양이 많은 테이블에서 일부 데이터만 불러 올 때, 풀 스캔 시 처리 성능 떨어지게됩니다.
- 모든 컬럼에 인덱스를 추가해 준다면 자칫 본체보다 인덱스가 더 큰 용량을 필요로 하게 됩니다.
- 삽입, 삭제, 갱신이 거의 없고 검색을 많이 하는 테이블에 사용하는 것이 좋습니다.
- 인덱스를 사용하면 데이터를 가져오는 작업의 성능은 향상시킬 수 있습니다.
- 데이터 삽입, 변경 등이 일어날 떄 매번 인덱스가 변경되기 떄문에 성능이 떨어질 수 있습니다.
- 물리적으로 떨어져 있는 여러 개의 데이터베이스에 대하여 로컬 데이터베이스의 변경된 내용을 원격데이터베이스에 복제하고 관리하는 것
- 목적
- 사용자는 하나의 데이터베이스에 대해서만 작업을 수행
- 데이터베이스 이중화시스템에 연결되어 있는 다른 데이터베이스에도 작업내용이 동일하게 적용
- 여러개의 데이터베이스를 동시에 관리
- Elastic-Search
- Sharding