4-4. 비구조화 데이터의 분산 스토리지
NoSQL 데이터베이스에 의한 데이터 활용
▪ 빅데이터를 위한 분산 스토리지에는 확장성과 데이터를 구조화하지 않고 저장할 수 있는 유연성이 요구됨
▪ 객체 스토리지는 임의의 파일을 저장할 수 있음, 하지만 파일을 써넣으면 교체가 어려움, 즉 수시로 변경하는 용도로는 적합하지 않음
▪ 쓰기 빈도가 높은 데이터는 별도의 RDB에 저장하고 정기적으로 스냅샷 하거나 다른 '분산 데이터 베이스'에 저장
▪ 객체 스토리지에 저장된 데이터는 집계하는 시간이 오래 걸림, 데이터를 곧바로 활용할 경우 실시간 집계와 검색에 적합한 데이터 저장소가 필요
▪ NoSQL 데이터베이스: 특정 용도에 최적화된 데이터 저장소
분산 KVS
▪ 분산 KVS (distributed Key-Value Store): 모든 데이터를 키값 쌍으로 저장하도록 설계된 데이터 저장소
▪ 분산 KVS는 모든 데이터에 고유의 키를 지정하고 이를 부하 분산을 위해 사용
▪ 키가 정해지면 그 값을 클러스터 내에 어느 노드에 배치할 것인지 결정하여, 노드간에 부하를 균등하게 분산
▪ 시스템에 따라 키에 여러 값을 할당하거나 여러 키의 조합에 값을 할당, 분산 KVS는 구현이 다양함
▪ '마스터/슬레브 형' 시스템에서는 1대의 마스터가 전체를 관리하기에 마스터가 중지되면 데이터를 읽고 쓸 수 없음
▪ 'P2P 형' 시스템에서는 모든 노드가 동등한 관계로 클라이언트가 어떤 노드와 연결해도 데이터를 읽고 쓸 수 있음
Amazon DynamoDB
▪ DynamoDB는 안정된 읽기 쓰기 성능을 제공하도록 디자인된 분산형 NoSQL 데이터베이스
▪ 하나 또는 두 개의 키에 연결하는 형태로 임의의 스키마리스 데이터를 저장
▪ JSON과 같이 중첩된 데이터 구조도 취급할 수 있는 도큐먼트 스토어
▪ DynamoDB는 P2P 형의 분산 아키텍처를 가짐
▪ 미리 설정한 초 단위의 요청 수에 따라 노드가 증감되는 특징
▪ 데이터의 읽기 및 쓰기에 지연이 발생하는 애플리케이션에 유용
▪ DynamoDB의 데이터를 분석하려면, AWS 서비스인 Amazon EMR 및 Amazon Redshift 등과 결합하여 Hive에 의한 배치처리를 실행하거나 데이터 웨어하우스에 데이터를 전송
▪ DynamoDB의 고유 기능인 'DynamoDB Streams'를 사용하면 데이터 변경을 이벤트로 외부에 전송해 실시간 스트림 처리 할 수 있음
▪ NoSQL 데이터베이스는 애플리케이션에서 처음에 데이터를 기록하는 장소로 사용
▪ NoSQL 데이터베이스 자체에는 대량의 데이터를 집계하는 기능이 없기에 외부로 데이터를 추출해야함
▪ NoSQL 데이터베이스는 읽기 성능이 높기 때문에 쿼리 엔진에서 접속해도 문제 없음
와이드 칼럼 스토어
▪ 와이드 칼럼 스토어(wide-column store): 2개 이상의 임의의 키에 데이터를 저장할 수 있도록 한것
▪ 내부적으로 행 키와 칼럼 명의 조합에 대해 값을 저장
▪ 테이블에 행을 추가하는 것처럼 칼럼도 추가할 수 있는 구조
Apache Cassandra
▪ 오픈 소스의 와이드 칼럼 스토어로 'CQL' 이라 불리는 쿼리 언어가 구현되어 있어 SQL과 동일하게 테이블 조작 가능
▪ 테이블의 결정할 필요가 있기에 구조화 데이터만을 취급, RDB와 비슷해 보이지만 쿼리의 의미가 SQL과는 다름
▪ Cassandra는 P2P 형의 분산 아키텍처를 갖고 있고, 지정한 키에 의해 결정한 노드에 해당 키와 관련된 모든 값을 저장
▪ 사용자 ID를 키로 사용할 경우 사용자에 대한 기록이 하나의 노드에 모이게 됨
▪ 와이드 칼럼 스토어는 데이터를 집계하는 데에 적합하지 않음
▪ 따라서 Hive, Presto, Spark 등의 쿼리 엔진을 이용해 데이터를 추출해서 사용
▪ 애플리케이션에서의 영향을 없애기 위해 Cassandra 클러스터를 복제해서 이용
도큐먼트 스토어
▪ 와이드 칼럼 스토어는 성능향상을 목표로 하고, 도큐먼트 스토어는 데이터 처리의 유연성을 목적으로 함
▪ JSON처럼 복합한 스키마리스 데이터를 그대로 저장하고 쿼리로 실행 가능
▪ 배열과 연상 배열(맵 형)과 같은 중첩된 데이터 구조에 인덱스를 만들거나, 도큐먼트 일부를 치환하는 쿼리를 쉽게 실행 가능함
▪ 스키마를 정하지 않고 데이터 처리가 가능, 이는 외부에서 들여온 데이터를 저장하는데 적합
▪ 참고 시스템의 데이터 및 로그 저장 등에 적합
MongoDB
▪ 오픈 소스의 분산형 도큐먼트 스토어
▪ 여러 노드에 데이터를 분산할 수 있지만, 대량의 데이터를 집계하는 데 적합하지 않음
검색 엔진
▪ '검색 엔진(search engine)'은 NoSQL 데이터베이스와 다르지만, 저장된 데이터를 쿼리로 찾아낸다는 점에서 유사한 부분도 많음
▪ 주로 텍스트 데이터 및 스키마리스 데이터를 집계하는 데 사용
▪ 역 색인(inverted index): 텍스트에 포함된 단어를 분해하고, 어떤 단어가 레코드에 포함되어 있는 지에 대한 인덱스를 만듬
▪ 텍스트 데이터를 전문 검색하기 위해 역 색인을 만들어 키워드 검색을 고속화
▪ 검색 엔진은 장기적으로 데이터를 축적하기보다는 실시간 집계 시스템의 일부로 이용
▪ 메시지가 배송된 데이터를 분산 스토리지에도 저장하고, 검색 엔진에도 전송하여 실시간성이 높은 데이터 처리를 위해 사용
Elasticsearch
▪ 오픈 소스의 검색 엔진으로 로그 수집 소프트웨어인 'Logstash', 시각화 소프트웨어인 'Kibana'와 함께 'ELK 스택' 또는 'Elastic 스택'으로 자주 이용
▪ 임의의 JSON 데이터를 저장할 수 있음, 아무것도 지정하지 않으면 모든 필드에 색인이 만들어짐
▪ 부하가 크기에 필요에 따라 스키마를 결정함으로써 색인을 무효하는 식의 튜닝 필요
▪ 자체 쿼리 언어에 의한 고급 집계 기능을 제공, 열 지향 스토리지에도 대응
▪ 표준 쿼리 언어는 사용이 어려움, 따라서 Kibana 같은 프런트 엔드 이용 또는 프로그램 안에서 호출
▪ Elasticsearch를 일반 도큐먼트 스토어로서 임의의 스키마리스 데이터를 읽고 쓰는 데 사용하기도 함
Splunk
▪ 오픈소스는 아니지만, 텍스트 데이터를 집계하기 위한 도구
▪ 주로 웹서버나 네트워크 기기 등으로부터 출력되는 로그 파일 또는 JSON같은 비정형 데이터를 다룸
▪ 키워드를 입력하면 그것을 포함하는 로그를 찾을 수 있음
▪ 검색할때마다 데이터가 구조화되어 쿼리를 다시 작성함으로써 유연하게 테이블을 만듬
'Data Engineering > 책 리뷰' 카테고리의 다른 글
[빅데이터를 지탱하는 기술] 5. 빅데이터의 파이프라인 (2) (0) | 2023.11.15 |
---|---|
[빅데이터를 지탱하는 기술] 5. 빅데이터의 파이프라인 (1) (1) | 2023.11.12 |
[빅데이터를 지탱하는 기술] 4. 빅데이터의 축적 (3) (0) | 2023.09.20 |
[빅데이터를 지탱하는 기술] 4. 빅데이터의 축적 (2) (0) | 2023.09.12 |
[빅데이터를 지탱하는 기술] 4. 빅데이터의 축적 (1) (0) | 2023.09.08 |