[Bigdata] - 빅데이터 기초 07 : 빅데이터 저장과 분석



1. 분산 파일 시스템

분산 파일 시스템은 저장되는 데이터에 대해 종속적이지 않으므로 스키마가 없는 데이터 저장소를 지원한다. 복제를 통해 데이터를 여러 위치에 복사하여 중복성 및 높은 가용성을 제공한다. 또한 동시성 제어를 위한 간단한 파일 잠금 메커니즘을 기반함과 동시에, 빅데이터의 속도 특성이라고 할 수 있는 빠른 읽기/쓰기 기능을 제공한다.

분산 파일 시스템은 많은 수의 작은 파일로 구성된 데이터 세트에 이상적이지 않다. 과도한 디스크 탐색을 유발하여 전체 데이터 액세스 속도를 저하시킬 수 있기 때문이다. 이러한 한계로 인해 순차적 방식으로 접근되는, 소수의 사이즈가 큰 파일을 대상으로 가장 잘 작동한다.

분산 파일 시스템 저장 장치는 원자료의 대량 데이터 세트가 저장되거나 데이터 세트의 아카이브가 필요할 때 적합하다. 또한 장기간에 걸쳐 온라인 상태로 유지해야 하는 많은 양의 데이터를 대상으로 저렴한 저장 옵션을 제공한다.


2. 관계형 데이터 베이스 관리 시스템

관계형 데이터베이스 관리 시스템(RDBMS)는 임의의 읽기/쓰기 특성을 사용하여 소량의 데이터가 포함된 트랜잭션 작업부하를 처리하는 데 적합하다. 관계형 데이터베이스 관리 시스템은 ACID를 준수하며, 이러한 규정을 준수하기 위해 일반적으로 단일 노드로 제한한다.

이중화(redundancy)결함 포용성(fault tolerance)를 제공하지 않는다.

관계형 데이터베이스는 주로 응용 프로그램의 로직에 따라 수동으로 샤딩해야 한다. 이것은 응용 프로그램이 필요하는 데이터를 얻기 위해 어떠한 특정 샤드를 쿼리해야 하는지 미리 알아야 한다는 것을 의미한다. 특히 여러 샤드의 데이터가 필요할 때 데이터 처리가 더욱 복잡해진다.

관계형 데이터베이스는 해당 데이터가 관계형 스키마를 따라야 한다. 비정형 데이터반정형 데이터는 저장을 지원하지 않는다. 이런 스키마 적합성 체크로 오버헤드가 발생한다.


3. NoSQL 데이터 베이스

NoSQL은 확장성 및 결함 포용성이 뛰어난 차세대 비관계형 데이터베이스를 개발하는 데 사용되는 기술이다.

3-1) 특징
  • 스키마리스 - 데이터는 원형태로 존재할 수 있다.
  • 수평확장 - 기존 노드를 더 나은 성능/용량으로 교체하는 것과 달리 더 많은 노드를 추가할 수 있다.
  • 고가용성 - 결함 포용성을 제공하는 클러스터 기술을 기반으로 한다.
  • 운영 비용 절감 - 오픈소스 플랫폼에서 구축된다. 흔히 범용 하드웨어에 배치될 수 있다.
  • 궁극적 일관성 - 여러 노드에서 읽는 데이터는 쓰기 직후에 일관성이 없을 수 있따. 그러나 모든 노드는 결국 일관된 상태가 된다.
  • BASE 선호 - CAP이론에서 AP 또는 CP이다.
  • API 기반 데이터 접근 - 일반적으로 RESTful API를 비롯한 API 기반 쿼리를 통해 지원되지만, 일부 구현은 SQL과 유사한 쿼리 기능을 제공할 수도 있다.
  • 자동 샤딩 및 복제 - 수평확장고가용성을 제공하기 위해 자동 샤딩 및 복제 기술을 사용하여 데이트 세트를 수평으로 분할한 후 여러 노드로 복사한다.
  • 통합 캐싱 - Memcached와 같은 제3자 분산 캐싱 계층이 필요 없다.
  • 분산 쿼리 지원 - 여러 샤드에서 일관된 쿼리 동작을 유지한다.
  • 다언어(polyglot) 지속성 - 기존 관계형 데이터베이스 시스템을 동시에 사용할 수 있다. 다양한 유형의 스토리지 기술을 사용하여 데이터를 보존하는 방식인 다언어(polyglot) 지속성을 지원한다. 비정형/반정형 데이터가 필요한 시스템을 개발할 때 유용하다.
  • 집계 중심(aggregate-focused) - 관계형 데이터베이스는 완전히 정규화된 데이터에서 가장 효과적이고, NoSQL에서는 정규화되지 않은 집계 데이터를 저장한다. 그러나 그래프 데이터베이스는 집계 중심이 아니다.
3-2) 이유

빅데이터 세트의 크기, 속도다양성에 기인한다.

  • 크기

지속적으로 증가하는 데이터 크기에 대한 요구사항으로 확장성이 뛰어나고 비용 절감을 유지하면서 경쟁력을 유지하도록 요구한다. NoSQL은 저가형 범용 서버를 사용하면서 확장 기능을 제공함으로 이 요구사항을 충족한다.

  • 속도

빠른 데이터 유입으로 인해 빠른 액세스 데이터 쓰기 기능이 필요하다. NoSQL은 스키마를 쓰는 것이 아니라 스키마를 읽는 방식을 사용하여 빠른 쓰기가 가능하다. 또한 가용성이 높기 때문에 네트워크 에러 등으로 인해 쓰기 대기 시간이 발생하지 않는다.

  • 다양성

다양한 형태의 반정형/비정형 데이터 형식을 저장할 수 있다. 스키마를 변경하는 기능을 추가하여 스키마가 없는 데이터와 불완전한 데이터를 저장할 수 있다. 즉 NoSQL 데이터베이스는 스키마 진화(schema evolution)을 지원한다.

3-3) 타입

NoSQL은 4가지 형태로 나눌 수 있다.

  • 키-값
  • 문서
  • 칼럼-패밀리
  • 그래프
3-3-1) 키-값 NoSQL

데이터를 키-값 쌍으로 저장하고, 해시 테이블처럼 작동한다. 값은 불투명하며 일반적으로 BLOB으로 저장된다.

값 조회는 키를 통해 수행할 수 있다. 저장된 집계 값의 세부사항을 알지 못하기 때문에 부분적인 업데이트는 불가능하다. 갱신은 삭제 또는 삽입 조작을 통하여 이루어진다.

키-값 저장 장치는 일반적으로 인덱스를 유지하지 않으므로 쓰기가 매우 빠르다. 간단한 저장 모델을 기반으로 확장성이 뛰어나다.

저장된 데이터에 구조를 만들어주기 위해, 대부분의 키-값 저장 장치는 키-값 쌍이 구성될 수 있는 컬렉션 또는 버킷을 제공한다. 단일 컬랙션은 여러 데이터 형식을 포함할 수 있다. 스토리지 풋프린트를 줄이기 위해 데이터 값을 압축 저장하기도 한다. 그러나 리턴되기 전에 먼저 데이터의 압축을 해제해야 하기 때문에 읽기 시간에 지연이 발생한다.

이미지

다음의 경우 사용이 적절하다.

  • 비정형 데이터 저장 장치 필요
  • 고성능읽기/쓰기
  • 키를 통해 완전히 식별 가능한 값들
  • 값이 종속되지 않는 독립된 개체
  • 단순한 구조이거나 바이너리
  • 쿼리 패턴이 간단하며 삽입, 선택 및 삭제 작업만 있을 때 (수정 없음)
  • 저장된 값 처리를 응용프로그램에서 할 때

다음의 경우 사용이 적절하지 않다.

  • 값의 속성을 사용하여 검색 및 필터링
  • 데이터간 관계가 존재할 때
  • 하나의 트랜잭션으로 업데이트해야 할 때
  • 여러 키가 한번의 운용으로 조작이 필요할 때
  • 스키마 일관성이 필요할 때
  • 개별 속성에 대한 업데이트가 필요할 때

대표적인 키-값 NoSQL

Riak, RedisAmazon Dynamo DB

3-3-2) 문서 NoSQL

문서 NoSQL 또한 데이터를 키-값 쌍으로 저장한다. 그러나 키-값 쌍과 달리 데이터베이스에서 쿼리할 수 있는 문서이다. 복잡한 중첩 구조를 가질 수 있다. 문서는 XML 또는 JSON과 같은 텍스트 기반 인코딩 체계 혹은 BSON(Binary JSON)과 같은 2진법 인코딩 체계를 사용한다.

키-값 NoSQL과의 차이는 다음과 같다.

  • 값을 인식할 수 있다.
  • 저장된 값은 자체 설명된다. 스키마는 값의 구조로 추론되거나 스키마의 참조가 값에 포함된다.
  • 셀렉트 연산은 집계 값 내부의 필드참조할 수 있다.
  • 셀렉트 연산은 집계 값의 일부를 검색할 수 있다.
  • 부분 업데이트가 지원된다.
  • 검색 속도를 높이는 인덱스가 지원된다.

초기 삽입 후에 추가 필드를 문서에 추가할 수 있으므로 유연한 스키마 지원이 제공된다.

이미지

다음의 경우 사용이 적절하다.

  • 플랫 혹은 네스티드 스키마를 포함하는 반정형 구조 문서 기반
  • 문서 구조를 알 수 없거나 변경될 가능성이 있어 스키마의 진화가 필수적인 경우
  • 문서로 저장되어 있는 집계의 부분 업데이트가 필요한 경우
  • 검색이 문서 내 다른 필드에서 수행되어야 하는 경우
  • 직렬화된 객체 형식으로 저장하려는 경우
  • 삽입, 선택, 업데이트삭제가 쿼리 패턴에 포함된 경우

다음의 경우 사용이 적절하지 않다.

  • 단일 트랜잭션의 일부로 여러 문서 업데이트
  • 여러 문서를 조인하거나 정규화된 데이터 저장이 필요한 경우
  • 바이너리 데이터를 저장
  • 저장된 값이 자체적으로 설명되지 않거나 스키마에 대한 참조가 없는 경우
  • 쿼리를 재구성해야 하는 연속 쿼리 실행 시, 문서 구조가 변경될 것을 감안하는 일관된 쿼리 디자인의 스키마 적용이 필요한 경우

대표적인 문서 NoSQL

MongoDB, CouchDB, 그리고 Terrastore 등이 있다.

3-3-3) NewSQL 데이터 베이스

칼럼-패밀리(Column-Family)는 기존 관계형 데이터베이스 관리 시스템처럼 데이터를 저장하지만, 관련 열을 함께 그륩화하여 칼럼-패밀리를 생성한다.

관련 열의 모음을 슈퍼 칼럼이라고도 한다. 각 행은 여러 칼럼-패밀리로 구성되며 다른 열 집합을 가질 수 있으므로, 플렉시블 스키마 지원을 나타낸다. 각 행은 키로 식별된다. 칼럼-패밀리는 임의의 읽기/쓰기 기능으로 빠른 데이터 액세스를 제공한다. 별도의 물리적 파일에 서로 다른 칼럼-패밀리를 저장하고, 탐색 시 필요한 칼럼-패밀리만 검색되므로 쿼리 응답성이 향상된다.

이미지

다음의 경우 사용이 적절하다.

  • 실시간 무작위 읽기/쓰기 기능이 필요하고, 임의로 정의된 구조가 있는 경우
  • 표 형식의 구조를 나타내며, 각 행이 많은 수의 열로 구성되어 상호 연결된 데이터의 네스티드 그룹이 존재
  • 시스템 중단 없이 칼럼-패밀리를 추가하거나 제거할 수 있는 스키마 변경 지원이 필요
  • 특정 필드가 대부분 함께 액세스 될때, 필드 값을 사용하여 검색을 수행하는 경우
  • 데이터가 공간이 부족한 행으로 구성되어 저장 장치의 효율적인 사용이 필수적인 경우
  • 쿼리 패턴에 삽입, 선택, 업데이트삭제 작업이 포함된 경우

다음의 경우 사용이 적절하지 않다.

  • 관계형 데이터 접근이 필요한 경우 (예 : 조인)
  • ACID 트랜잭션이 필요한 경우
  • 바이너리 데이터를 저장해야 하는 경우
  • SQL 호환 쿼리를 실행해야 하는 경우
  • 쿼리 패턴이 자주 변경되는 경우

대표적인 NewSQL 데이터 베이스

Cassandra, HBase, 그리고 Amazon SimpleDB 등이 있다.

3-3-4) 그래프

그래프(graph)는 상호 연결된 개체(entity)를 지속시키는 데 사용된다. 개체의 구조를 강조하는 다른 NoSQL과 달리 개체 간의 관계를 저장하는데 중점을 둔다.

개체는 노드로 저장되며 (클러스터 노드와 혼동하지 않도록 하자), 꼭짓점이라고도 한다. 개체 간의 연결은 에지(edge)로 저장된다. RDBMS 용어에서, 각 노드단일 행으로 간주되고 에지조인을 나타낸다.

노드는 여러 에지를 통해 둘 이상의 링크 유형을 가질 수 있다. 각 노드는 키-값 쌍 속성의 데이터를 가질 수 있다. 아래 그림이 예시이다.

에지의 속성을 사용하여 쿼리 결과를 추가적으로 필터링할 수 있다. 에지가 여러 개인 것은 관계형데이터베이스에서 여러 개의 외래 키를 정의하는 것과 유사하다.

그래프 저장 장치의 일관성은 보통 ACID 준수를 통해 제공된다. 그래프 저장 장치의 유용성은 노드 간 정의된 에지의 수와 유형에 따라 달라진다. 에지의 수가 크거나 유형이 다양할수록 처리 가능한 쿼리 역시 다양해진다.

이미지

다음의 경우 사용이 적절하다.

  • 상호 연결된 개체를 저장할 필요가 있는 경우
  • 개체의 속성이 아닌 관계를 기반으로 개체 쿼리 작업을 진행해야 하ㅁ는 경우
  • 상호 연결된 개체들의 집합을 찾아야 하는 경우
  • 노드 트랜스버설 거리를 사용하요 개체 간의 거리를 계산해야 하는 경우
  • 패턴 탐색을 위한 데이터마이닝 기법을 사용하려는 경우

다음의 경우 사용이 적절하지 않다.

  • 많은 수의 노드 또는 에지를 업데이트해야 하는 경우 (검색으로 비용이 많이 든다)
  • 개체가 많은 수속성이나 네스티드 데이터를 가지고 있는 경우 (가벼운 개체를 그래프에 저장하고, 나머지 속성은 별도의 저장장치에 저장하는 것이 낫다.)
  • 바이너리 저장소가 필요한 경우
  • 작업하려는 쿼리가 노드 트랜스버설 쿼리를 지배하는 노드/에지 속성 선택에 기반한 경우

대표적인 NewSQL 데이터 베이스

NeoJ4, Infinite Graph, 그리고 OrientDB가 있다.


4. NewSQL 데이터 베이스

NoSQL은 읽기/쓰기 작업에 있어서 확장성, 가용성, 결함 포용성 및 신속성은 뛰어나지만, ACID 기준을 준수하는 RDBMS가 가지는 동일한 트랜잭션 및 일관성을 제공하지 않는다. BASE모델과 같이 NoSQL은 즉각적이 아니라 궁극적 일관성을 제공한다. 이런 이유로 NoSQL은 대규모 트랜잭션 시스템을 구현할 때엔 사용하기에 적합하지 않다.

NewSQL은 RDBMS의 ACID 속성과 NoSQL가 제공하는 확장성과 결함 포용성을 모두 지니는데, 일반적으로 데이터 정의 및 데이터 정제 작업을 위해 SQL 호환 구문을 지원하며 데이터 저장을 위해 논리적 관계형 데이터 모델을 사용한다.

NewSQL은 거래량이 매우 많은 OLTP 시스템(예: 은행시스템)을 개발하는데 사용할 수 있다. 일부 구현은 인메모리 저장을 활용하므로 운영 분석과 같은 실시간 분석에도 사용할 수 있다. NoSQL과 비교할 때, SQL 지원을 통해 RDBMS에서 확장성이 뛰어난 데이터베이스로 쉽게 전환이 가능하다.

대표적인 NewSQL 데이터 베이스

VoltDB, NuoDB, 그리고 InnoDB가 있다.


  • 출처 [빅데이터 기초 개념,동인,기법]