데이터베이스 - 관계형과 비관계형
데이터베이스 종류
관계형 데이터베이스
관계형 데이터베이스를 활용함으로써 중복 정보 문제와 데이터 불일치 문제를 쉽게 방지할 수 있음. 오늘날 사용되는 데이터베이스 시스템은 대부분 관계형 방식.
- 관계형 모델에서는 데이터를 여러개의 테이블로 나누어 저장
- 데이터 항목 하나는 표를 구성하는 행 하나로 저장
- 각 항목이 갖는 다양한 속성은 열로 표현
- 일반적으로 각 열에는 입력되는 데이터의 유형이 정해짐
- 열은 필드라고 불림. 어떤 열이 정수만을 허용한다면 정수 필드라고 함
- 필드와 제약사항을 정해둔 것을 표의
스키마
schema
라고 함
SQL
관계형 DBMS는 거의 대부분이 SQL(structured query languange 구조화 질의어)이라는 질의어를 지원
질의문이란 조회하려는 데이터에 관해 서술하는 문장
다음 코드는 SQL 질의문의 기본 양식
SELECT <field name> [, <field name>, <field name>,...]
FROM <table name>
WHERE <condition>;
질의문에서는 SELECT
명령어 뒤에 조회하려는 필드들을 나열. 표의 모든 필드를 다 조회하려면 와일드 문자인 *
을 이용해 SELECT *
와 같이 작성하면 됨.
ORDER BY
: 조회결과를 지정한 필드를 기준으로 정렬- ‘GROUP BY`: 조회결과를 여러 그룹으로 나눈 뒤 그룹별 통계를 구할 때 사용
예를 들어 customers표에 country 필드와 age 필드가 있다고 할 때, 다음과 같이 질의
SELECT country, AVG(age)
FROM customers
GROUP BY country
ORDER BY country;
이 질의문은 고객들이 거주하는 국가의 목록을 정렬하여, 국가별 평균 고객 나이와 함께 반환. AVG(age)를 MAX(age)로 바꾸면 국가별 최고령 고객의 나이를 구할 수 있다.
SELECT DISTINCT customers.name, customers.phone
FROM customers
JOIN orders ON orders.customer = customers.id
WHERE orders.amount > 100.00;
이 질의문은 100달러를 초과하는 주문을 한 고객들의 이름과 전화번호를 구한다. 여기서 SELECT DISTICT
절은 동일한 고객 정보가 여럿 있을 때, 중복 없이 하나만 반환하도록 하는 명령.
JOIN
절은 지정한 조건에 따라 두 표를 서로 결합하여, 연관된 표를 동시에 가져올 수 있도록 해준다. 이 기능을 사용하면 질의를 매우 유연하게 수행할 수 있다. JOIN
은 비용이 많이 드는 연산으로 최악의 경우 질의문에서 결합하려는 표들의 모든 조합을 계산해야 할 수도 있다.
색인
표에서 각 행의 ID 값은, 그 값을 가진 행을 다른 행이 가리킬 때 사용된다. 기본 키를 유용하게 사용하려면 ID 값을 통해 해당 항목을 빠르게 조회할 수 있어야 한다. 이를 위해 DBMS는 각 행의 ID와 메모리 속 주소를 대응시키는 색인(index)을 추가로 만들어 둔다.
고유 필드
- 중복 값이 허용되지 않는 필드
- 자동으로 색인이 생성되는 것이 일반적
- 신규 항목을 빠르게 추가하기 위해 자동으로 색인을 생성
정렬
필드가 색인되어 있으면 항목을 구할 때, 그 필드를 기준으로 정렬하여 구하기가 더 쉽다. 예를들어 이름 필드가 색인되어 있다면 행을 이름순으로 정렬하여 조회하더라도 추가 비용이 발생하지 않는다.
트랜젝션
연산 도중에 장애가 발생하여 데이터가 불일치하는 문제를 방지하려면, 여러 단계로 이루어진 연산을 모두 온전히 수행하거나, 아니면 아무 연산도 수행하지 않고 데이터를 그대로 두는 기능
START TRANSACTION;
UPDATE vault SET balance = balance + 50 WHERE id=2;
UPDATE vault SET balance = balance - 50 WHERE id=1;
COMMIT;
비관계형 데이터베이스
관계형 데이터베이스에서는 연동된 프로그램이 복잡해질수록 관리해야 하는 표도 많아진다. 그에 따라 작성해야 하는 질의문도 커지고 이해하기 어려워진다. JOIN 연산이 많아져 계산비용이 늘고, 병목현상이 유발된다.
비관계형 모델에서는 표를 이용한 관계를 사용하지 않는다. 그러므로 여러 데이터 항목을 서로 결합하는 작업도 거의 필요로 하지 않는다. 비관계형 데이터베이스 시스템은 질의어로 SQL을 사용하지 않기 때문에 NoSQL 데이터베이스하고 불린다.
문서 저장소
데이터를 응용프로그램에서 다루는 형식처럼 보관한다. 동일한 정보를 필요한 곳마다 복제해둔다. 관계형 모델의 관점에서는 중복 정보다.
이러한 장점을 얻기 위해서 관련된 데이터를 묶어둔다.
- 관련된 정보를 얻기 위해 JOIN을 수행할 필요가 없다
- 고정된 스키마가 필요하지 않다
- 각 데이터 항목에 서로 다른 필드를 지정할 수 있다
문서저장소는 표나 행 같은 용어를 사용하지 않는다. 대신 데이터 항목 하나를 문서로 관리한다. 그리고 서로 연관된 문서들을 collection으로 묶어 둔다.
키-값 저장소 key-value store
데이터를 조직적이고 일관적으로 저장하기 위한 방식 중에서 가장 단순한 방식이다. 주로 캐시에 사용된다.
그래프 데이터베이스
각 항목을 정점으로, 항목 사이의 관계를 간선으로 저장하는 데이터베이스. 고정된 스키마의 제약 없이, 데이터를 여러 정점으로 자유롭게 연결하며 유연하게 저장 할 수 있다. 데이터 항목들의 연결망을 나타낼 때 특히 적합하다.
연결망 형태의 데이터를 다룬다면 그래프 데이터베이스를 사용하는 것이 자연스럽다.
빅데이터
이 용어는 단순히 데이터가 많은 정도를 뜻하는 것이 아니다. 빅데이터란 취급하려는 데이터가 volume, velocity, variety 라는 세가지 측면에서 다루기가 극도로 까다로운 상황을 의미한다.
양적 측면에서의 빅데이터란 수천 테라바이트에 달하는 규모의 방대한 데이터를 다루는 것을 말한다.
작성하는 프로그램에서 이와 같이 양,속도,다양성의 문제 때문에 기존의 데이터 관리법을 활용할 수 없다면 그 프로그램은 빅데이터를 다룬다고 할 수 있다.