DataBase Flashcards Preview

PE > DataBase > Flashcards

Flashcards in DataBase Deck (122)
Loading flashcards...
31

HDFS (Hadoop Distributed File System)

▣ 정의
- 저비용의 수백 내지 수천 노드를 가지는 클러스터를 이용하여 페타 바이트의 대용량 데이터 집합을 처리하는 응용 프로그램에 적합하도록 설계한 분산 파일 시스템
▣ 특징
- 다중복제 : 1 file = n block, 1 block = 64MB => 3 replication
- Replication : 3 Replica Data node
- Fault-tolerant
- 범용서버 기반 : 저가의 x86
▣ 구성요소
1) Name Node
- 디렉토리, Access 권한 관리
- 메타데이터, 파일저장위치
2) Data Node
- 실제 데이터 저장
- 디폴트 64MB, 일반적 128MB
- Name Node와 주기적 통신
3) Secondary Name Node
- Backup Node
4) Job Tracker
- 작업 분산 스케쥴링
- Master:Task Tracker에 작업할당)
5) Task Tracker
- Data Node에서 Map-Reduce 역할 수행
- Slave:할당 받은 작업 처리
6) Replication
- Data Node 간 정보 복제
7) TCP/IP 프로토콜
8) 계층적 파일구조
▣ HDFS 동작원리
- HDFS 클라이언트는 네임노드에서 블록에 대한 위치정보를 전달 받아서, 해당 데이터노드에서 파이프 라인 방식으로 직접 블록을 조회

32

카산드라

▣ 정의
- 대용량 자료의 저장과 처리를 목적으로 하는 Key-Value 기반의 높은 가용성을 가지는 DBMS
▣ 필요성
- 대용량 데이터 저장 및 처리
- 비용측면의 분산처리 환경
- 고가용성 기능 필요
▣ 특징
- Key-Value Based DBMS
- 저장의 유연성 : Non Schema, Row마다 다른 속성 정의 가능
- 빠른 성능 : Key-value구조의 Hash 알고리즘
- 언어의 호환성 : Thrift
- 이차 인덱스 지원
- 사용의 편리성
▣ 논리 스토리지 구조
- 클러스터(Cluster)하위에 키스페이스(Keyspace) 모임으로 구성
- 키스페이스(keyspace)하위는 컬럼패밀리(Column Family) 모임으로 구성
- 컬럼패밀리(Column Family)는 컬럼(Column) 또는 슈퍼컬럼(Super Column)으로 구성
- 가장 하부조직인 컬럼(Column)은 이름(name)과 값(value)으로 구성
▣ 논리 스토리지 구조 설명
1) Column : 이름:값
{title:"Blog", content:"My Blog"}
2) Super Column : 컬럼 구조체
{name:{first:"kim", last:"sm"}}
3) Column Family : 컬럼과 슈퍼 컬럼들의 집합 키(key)로 식별
PersonalStruct={
Info1={name:"RHK", age:"20"}
Info2={name:"KEV", age:"25", email:"kev@aaa.com"}
Info3={name:"KKE", age:"30", address:"korea seoul"}
4) Keyspace
- 최상위 개념
▣ 물리적 스토리지 구조
- 노드들을 토큰링으로 구성하고 노드의 수에 따라서 구간 분할
1) Node
- 하나의 서버에서 구동되는 카산드라 프로세스
2) Token ring
- 클러스터링 서버 구성
- 토큰링 구성, 노드 구간 분할
3) Key
- Key 값 해싱값으로 저장 노드 결정

33

몽고DB

▣ 정의
- 웹 프로그램과 인터넷 기반 서비스를 위해 만들어진 도큐먼트 지향 데이터베이스 관리 시스쳄
▣ 필요성
- 웹 어플리케이션 분석과 로깅 어플리케이션 중간 정도의 캐시를 필요로 하는 어플리케이션에서 1차 데이터저장 시스템에 적합
- 스키마가 존재하지 않는 데이터를 저장하기에 용이하며 미리 구조가 알려지지 않은 데이터를 저장하는데 유용
▣ 특징
- Documented Oriented DB
- Easy Scaling : Auto Sharding
- 고가용성 : Master/Slave
- 비정형처리 : 조인연산 없이 원하는 분석결과 도출 가능
- 오픈소스 : GPL과 아파치 라이선스를 결합한 자유 오픈 소스
▣ 다큐먼트 모델
- 저장소 : 보통 XML, JSON, BSON 형태
- 데이터 형식 : 형식이 정해져 있지 않음
- 검색 기능 : RDBMS에 비해 다소 떨어짐
▣ 저장소 예시
- 기본구조는 key-value의 집합
- 배열의 형태로도 저장
- 속성값 : 문자열, 숫자, 날짜와 같이 간단한 데이터 타입 또는 배열, 다큐먼트
- 태그 : 문자열의 배열로 저장
- 코멘트 : 객체의 배열로 저장
▣ 복제 정책
1) 복제
- 데이터를 다른 서버에 백업하고 보조서버를 핵심서버의 역할로 변경
2) 읽기에 대한 확장
- 읽기 작업 분산 처리
3) 복제 방법
- 기본적으로 마스터/슬레이브 방식 채택(mongod, DataStore, Oplog)
- 쓰기 연산은 마스터에서만 이루어 지고 Data Store와 Oplog 두군데 영역에 저장
- Data Store에는 쓰기 연산을 수행한 결과 저장
- Oplog에는 연산 수행과 관련된 명령 자체를 타임스탬프와 같이 저장
- 슬레이브는 읽기만 가능
▣ 확장
1) 수직적 확장(Vertical Scaling)
- Scale up
- 기존 스토리지에 필요한 만큼의 용량증가
- 디스크만 추가되기 때문에 상대적으로 비용 감소
- 심플한 구성
2) 수평적 확장(Horizontal)
- Scale out
- 용량과 성능 요구조건에 맞추기 위해 node단위(스토리지)로 증가되고 하나의 시스템처럼 운영
- 기존의 하드웨어 장비를 그대로 사용가능
- 장애 발생시 복제 서버를 통한 지속 서비스 가능

34

RDB vs MongoDB

▣ 용어차이
Table, View - Collection
Row, Record - Document
Column - Field
Index - Index
Join - Embedded Document
Foregin Key - Reference
Partition - Shard
▣ 쿼리비교
- RDB : select * from where
- MongoDB : db.parts.find ({ })

35

Redis (REmote DIctionary System)

▣ 정의
- BSD 기반 오픈소스 NoSQL 중 하나로 Key/Value Store의 성격을 가진 in-memory 데이터베이스
▣ 특징
- pub/sub 모델 지원
- Sharding 용량 확장
- 데이터 자동삭제 정책 : Active방식, Passive방식
▣ 데이터형
1) String
- 최대 512MB 길이
- Text, Integer, JPEG 저장
2) Set
- String의 집합
- Set 간 연산, 교집합, 합집합, 차이 추출
3) Sorted set
- set에 score(가중치) 필드 추가
- 오름차순 정렬
- score범위에 따른 range query, top rank 쿼리 가능
4) Hashes
- value 내에 field/string value 쌍의 테이블 저장
5) List
- String 들의 집합
- 양방향 Linked List
- List 앞과 뒤에서 Push/Pop 연산
- Index 값을 통해 데이터 추가 삭제
▣ Redis의 데이터 저장 방식
1) Snapshotting(RDB)방식
- 순간적으로 메모리에 있는 내용 전체를 디스크에 옮겨 담는 방식
2) AOF (Append On File) 방식
- Redis의 모든 write/update 연산 자체를 log파일에 기록하는 방식

36

Snapshotting(RDB)방식

▣ 정의
- 순간적으로 메모리에 있는 내용 전체를 디스크에 옮겨 담는 방식
▣ 특징
- SAVE방식 : 순간적으로 Redis의 모든 동작을 정지시키고, snapshot 디스크에 저장 (Blocking)
- BGSAVE방식 : 별도의 프로세스를 띄운 후 명령어 수행시의 메모리 snapshot을 디스크에 저장, redis는 정지 안함 (Non-blocking call)
▣ 장점
- 메모리의 snapshot을 그대로 뜬 것이기 때문에 서버 재시작 시 snapshot만 로드하면 되므로 재시작 시간이 빠름
▣ 단점
- snapshot을 추출하는 데 시간이 오래 걸림
- snapshot이 추출된 후 소실 (백업 시점의 데이터만 유지됨을 의미)

37

AOF (Append On File) 방식

▣ 정의
- Redis의 모든 write/update 연산 자체를 log파일에 기록하는 방식
▣ 특징
- 서버가 재 시작할 때 기록된 write/update Operation을 순차적으로 재실행해 데이터 복구
- Operation이 발생할 때마다 매번 기록해 RDB방식과는 달리 특정 시점이 아니라 항상 현재 시점까지의 로그를 기록 (Non-blocking call)
▣ 장점
- log파일에 대해 append만 하기 때문에 log write속도가 빠르며 어느 시점에 서버가 다운되더라도 데이터 유실이 발생 안함
▣ 단점
- 모든 write/update Operation 에 대해 log를 남기기 때문에 로그 데이터 양이 RDB 방식에 비해 과다하게 크며 복구 시 저장된 write/update Operation을 다시 리플레이하기 때문에 재시작 속도가 느림

38

NoSQL

▣ 정의
- Not Only SQL의 약자로 기존 RDBMS 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술
▣ 특징
- 데이터 간 관계 정의 안함
- 분산형 구조
- 고정되지 않은 테이블 스키마
▣ 데이터 저장 구조
1) Key/Value Store
2) Ordered Key/Value Store
3) Document Key/Value Store

39

NoSQL Key/Value Store

▣ 정의
- 가장 기본적인 패턴
▣ 특징
- Unique한 Key에 하나의 Value를 가지고 있는 형태
- Put(key, value), Value := get(key) 형태의 API로 접근
▣ 상용제품
- Oracle Coherence, Redis
▣ 구조
- Key-Value

40

NoSQL Ordered Key/Value Store

▣ 정의
- 기본적인 Key/Value Stor에서 Key 순서로 Sorting되어 저장
▣ 특징
- Key/Value Store와 데이터 저장 방식은 동일하나, 내부적으로 Key순서로 Sorting되어 저장
▣ 상용제품
- Apache HBase, Cassandra
▣ 구조
- key {Column:Value}

41

NoSQL Document Key/Value Store

▣ 정의
- Key/Value Store의 확장, 저장되는 Value의 데이터 타입이 Document 타입 사용
▣ 특징
- XML, JSON, YAML 같은 구조화된 데이터 타입 사용
▣ 상용제품
- MongoDB, CouchDB, Riak
▣ 구조
- key : {JSON, XML Document}

42

NoSQL의 데이터 모델링 기법

▣ NoSQL의 유형별 특징
- KVS(Key-Value Store)
- Ordered Key-Value
- Column (Big-Table)
- Document
- Graph : 데이터의 관계(노드, 관계, 속성) 정보 저장
▣ NoSQL의 데이터 모델링 기법
1) 개념적 기법
- 비정규화(Denormalization)
- 집계(Aggregates)
- Application Side Join
2) 일반적 모델링 기법
- 원자집계(Atomic Aggregate)
- 열거 가능한 키(Enumerable Keys)
- 인덱스 테이블(Index Table)
- 복합 키 인텍스(Composite Key Index)
- 복합 키를 활용한 집계(Aggregation with Composite Keys)
3) 계층 모델링 기법
- 트리 집계(Tree Aggregation)
- 인접리스트(Adjacency Lists)
- 중첩된 세트(Nested Sets)
- 배치 그래프 프로세싱

43

비정규화 (Denormalization)

▣ 개념
- 비정규화는 NoSQL 데이터 모델링의 필수 불가결한 원칙
- 쿼리의 단순화, 최적화를 위해 동일한 데이터를 여러 도큐먼트 또는 테이블에 존재하도록 함
- KVS, Document, BigTable

44

집계 (Aggregates)

▣ 개념
- 엔티티의 중첩을 통해 one-to-many 관계를 최소화하여 조인을 효과적으로 줄임
- 정규화 테이블을 Aggregation 하여 군집화 함 (중첩 엔티티)

45

Application Side Join

▣ 개념
- NoSQL은 조인을 허용하는 경우가 거의 없음
- 비정규화 또는 군집화를 통해 조인 최소화
- 불가피할 경우 애플리케이션을 이용하여 가능하도록 모델링 필요

46

원자집계 (Atomic Aggregage)

▣ 개념
- NoSQL에서 트랜잭션을 지원 할 필요가 있을 경우 적용 가능한 기법
- 하나의 레코드에 대해 변경이 발생할 경우 그 레코드의 원래 버전은 그대로 유지한 채 새로운 버전을 만들어 그 새로운 버전에 대해 변경을 수행함
- KVS, Document, BigTable 계열

47

열거 가능한 키 (Enumerable Keys)

▣ 개념
- 키를 순차적으로 자동 생성되는 ID를 사용하여 저장될 수 있도록 하는 모델링 기법
- ex. 특정 날짜나 현재날짜 앞뒤로 시작하는 메시지들의 검색
- KVS 계열에 적용

48

인덱스 테이블 (Index Tables)

▣ 개념
- 내부적으로 인덱싱을 지원하지 않는 저장소에 인덱싱 기술을 활용할 수 있도록 해주는 기법
- 액세스 패턴에 따라 키의 특별한 테이블을 만들고 유지
- BitTable 계열에 적용

49

복합 키 인덱스 (Composite Key Index)

▣ 개념
- 정렬된 키를 사용할 때 유용한 기법
- 보조 정렬을 결합한 복합키로 위의 차원 축소 기법과 근본적으로 유사한 다차원 인덱스를 만들 수 있음

50

복합 키를 활용한 집계 (Aggregation with Composite Keys)

▣ 개념
- 복합 키는 인덱싱뿐만 아니라 다른 유형의 그룹화에도 사용됨
- 모든 레코드에 각 사용자 정보가 함께 저장되기 때문에 해시 테이블이나 다른 방법들을 사용해 사이트의 중복정보를 삭제한 뒤 메모리에 적재
- Ordered KVS, BigTable 계열에 적용

51

트리 집계 (Tree Aggregation)

▣ 개념
- 트리가 한 번에 접근하는 경우에 효과적인 기법
- ex. 블로그 댓글 트리를 가져와 게시물과 함께 표시하는 경우
- KVS, Document 계열에 적용

52

인접리스트 (Adjacency List)

▣ 개념
- 그래프 모델링의 직선적인 방법
- 각 노드는 선조 또는 자손을 가리키는 배열을 포함하는 별도의 레코드로 모델링 됨
- 노드를 부모 또는 자식의 식별자로 검색가능
- 노드의 모든 하위 트리를 깊이우선탐색 또는 너비우선탐색하는 경우 비효율저임
- KVS, Document 계열에 적용

53

중첩된 세트 (Nested Sets)

▣ 개념
- 트리 모양의 구조를 모델링 하기 위한 표준 기법
- RDBMA에서 널리 활용되며, KVS, Document 계열에 완벽하게 적용가능
- 메모리 사용량이 적고 탐색 없이 주어진 노드의 모든 리프에 접근가능
- 변화없는 데이터 구조에 적합
- 리프 추가시 Overhead 발생
- KVS, Document 계열에 적용

54

배치 그래프 프로세싱

▣ 개념
- MapReduce와 Message Passing 패턴을 이용한 그래프 유형 계열 NoSQL의 대용량 처리를 지원하는 분산 프로세싱을 위한 기법
- 분산네트워크를 노드집합으로 저장하고 각 노드는 인접노드의 ID목록을 포함
- MapReduce 작업이 반복적으로 수행되며 각 노드는 이웃 노드에 메시지를 전달하고 상태를 갱신하며 큰 규모의 그래프 프로세싱 처리가 가능하도록 함

55

Apache Spark

▣ 정의
- 하둡의 맵리듀스 작업에서 선응의 병목현상으로 지목되던 디스크 I/O 비용을 효율화하고 데이터 분석 작업에 용이한 인메모리 컴퓨팅 기반의 데이터 분산처리 시스템
▣ 아키텍처
- Spark SQL (SQL처리)
- Spark Streaming (스트리밍)
- MLlib (기계학습)
- GraphX (그래프연산)
- Apache Spark (실행엔진)
▣ 실행구조
- Driver (task)
- Worker (RDD, RAM, Input Data)
▣ 주요요소
- RDD(Resilient Distributed Dataset) : 사용자 데이터 집합 추상화 객체, 여러 서버에 분산, 다수의 파티션으로 관리
- RDD 연산자
- 인터프리터 결합 : 스칼라쉘
- 작업 스케줄링 : RDD 변환과정 그래프 표현, 실행단계 구성 및 스케쥴링
▣ MapReduce와 비교한 Spark의 개선사항
- Disk I/O 효율 : 인메모리
- 반복작업처리 : 10배 개선
- 다양한 연산처리: map, flatMap연산은 물론 join, union, sort, filter 등의 RDD의 변환/관리에 필요한 다양한 연산 제공

56

Apache Storm

▣ 정의
- 데이터의 실시간 처리를 위해 개발된 범용 분산 환경 기반 실시간 데이터 처리 시스템
▣ 아키텍처
- Node 0 : User Interface, Zookeeper, Nimbus
- Node 1 : Supervisor, Worker(Task1, Task2)
- Node 2 : Supervisor , Worker(Task1, Task2)
▣ 요소설명
- User Interface : Supervisor, Nimbus와 통신
- Zookeeper : Worker 관리
- Nimbus : Supervisor 관리
▣ 데이터 처리 모델
1) 스파우트
- 다양한 데이터 입력
- 토폴로지 구성에 따라 볼트로 전달
- Aggregation, Filtering, Transformation 처리 결과를 볼트에 전달
2) 볼트
- 복수의 노드로 데이터 전달 또는 복수의 노드에서 데이터 입력 받음
▣ MapReduce와 비교한 Storm의 개선사항
- 실시간 처리
- Fault tolerance : master, slave
- 스트리밍 데이터 : Spout, bolt

57

빅데이터 기술 구성요소

1) 수집 및 통합 기술
- Flume : 방대한 양의 이벤트 로그수집
- Chukwa : 분산 시스템의 로그 수집 및 모니터링
- Scribe : 분산 시스템 로그 수집 서버
- SQOOP : RDBMS와 NoSQL간의 데이터 연동
- Kafka : 분산 시스템에서 메시지 전송 및 수집
- OpenRefine : 대용량 데이터 정제
- Thrift : 비정형 데이터의 정형화 및 관리
- Protocol buffers : 오픈소스 직렬화 라이브러리
- Avro : 이기종 간 데이터 교환 및 RPC기능 제공
2) 저장 및 관리기술
- S3 : 아마존의 인터넷 스토리지 서비스
- HDFS : 분산 환경에 기반한 데이터 관리
- DynamoDB : SSD를 이용한 하둡 기반 데이터 분석, 저장
- MongoDB : DB의 수평 확장 및 범위 질의, 맵리듀스 연산
- CouchDB : ACID속성을 유지한 분산 DB
- Cassandra : 데이터의 저장 및 처리, 제한적 정렬
- HBase : 분산 클러스터 관리 및 복구, 데이터의 Get/Put/Scan/Delete 기능
- Redis : 정의된 데이터 타입을 이용한 구조화된 데이터 관리
- Riak : 링형 구조를 이용한 데이터 분산저장
- Hypertable : HBase와 비슷한 하둡 기반 DB, SQL과 비슷한 HQL명령어 제공
- Zookeeper : 여러종류의 하둡기반 시스템 관리
- Voldemort : 해싱을 이용한 빠른 조회, 동시 입력 데이터 처리
3) 처리기술
- Hadoop : 맵리듀스 기반의 분산처리 프레임워크
- Pig : 고수준의 추상화로 개발 편의를 제공하는 데이터 처리 언어 프레임워크
- Hive : 하둡기반의 SQL 프로그램 구현 인프라
- Cascading : JVM에 바탕을 둔 언어 기반 데이터 처리및 통합 API
- Cascalog : SQL보다 높은 수준의 사용자 추상화 제공
- Mrjob : Python 기반의 맵리듀스 개발 모듈
- S4 : 분산 환경 기반의 이벤트 스트림 처리 시스템
- MapR : 기업에 적합한 분산처리 통합 솔루션
- Acunu : 처리속도 개선에 중점을 둔 통합 솔루션
- Azkaban : 워크 플로우를 정의하는 배치 스케줄러
- Oozie : 하둡 기반의 워크플로우 제어 시스템
- Greenplum : 맵리듀스 처리가 가능한 MPP구조의 DB
- EC2 : 컴퓨팅 규모 제어가 가능한 클라우드 서비스
- Heroku : Ruby 기반의 클라우드 개발도구
- R : 통계적 계산과 그래픽을 처리하는 프로그램 언어
- Pipes : 데이터 파이프라인을 생성하는 웹 응용프로그램
- Mechanical Turk : 크라우드소싱 인터넷 마켓
- Solr/Lucene : 전체 텍스트 검색 서버 플랫폼
- ElasticSearch : Lucene기반의 오픈소스 검색엔진
- Datameer : 방대한 양의 데이터 수집 및 분석 플랫폼
- InfoSphere Streams : 대용량 스트리밍 데이터 분석 솔루션
4) 분석기술
- 텍스트마이닝 : 비/반정형 텍스트 데이터에서 자연어처리 기술에 기반하여 의미 있는 정보 추출
- 오피니언마이닝 : 의견이나 평가 등을 분석
- 리얼리티 마이닝 : 모바일 기기로 사용자의 인간관계, 행동방식, 라이프스타일 등을 분석
- 군집화 : 데이터들의 특성을 고려하여 군집을 정의하고 군집을 대표할 수 있는 대표점 찾기
- 소셜네트워크 분석 : 특정 관계망에서 어떤 전체적인 연결 관계가 있는 지를 분석하여 관계의 패턴과 개인 사이의 상대적인 위치 분석
- 그래프 마이닝 : 소셜미디어의 데이터를 표현하는 방법
5) 표현기술
- Tag Cloud : 태그의 연관성에 따른 빈발도 및 관계분석
- Gephi : 데이터를 네트워크 형태로 생성 후 표현
- GraphViz : 흐름도나 트리 ㅏ이어 그램 성생 표현 툴
- Processing : 그래픽 디자인을 위한 프로그래밍 언어
- Fusion Tables : 대용량 데이터를 표현해주는 온라인 서비스
- Tableau : 데이터의 시각적 분석과 리포팅 도구 제공
- TinkerPop : 그래프를 처리하는 통합 서버형 시스템
- Clustergram : 계층적 군집화에 적합한 데이터 표현툴
- Spatial Information Flow : 특정 정보를 기준으로 데이터 흐름 표현

58

빅데이터 수집 기술

▣ 개념
- 대용량의 고속 이벤트 데이터(로그)를 수집 하는 기술
▣ 필요조건
- 확장성 : 무한대로 확장되는 수집대상 서버의 대응
- 안정성 : 수집되는 데이터가 유실되지 않고 안정적 저장
- 유연성 : 다양한 포맷의 데이터, 다양한 프로토타입
▣ 종류
1) Apache Flume
2) Facebook Scribe
3) Apache Chukwa

59

Apache Flume

▣ 개념
- 전형적인 Converging Flow 구조, 스트림 지향의 데이터 플로우를 기반
- 지정된 모든 서버로부터 로그를 수집한 후 하둡 HDFS와 같은 중앙 저장소에 적재
▣ 구성
- Web Server
- Agent (Source, Channel, Sink)
- HDFS
▣ 주요요소
1) Source
- Event를 Sink로 전달
2) Channel
- Source와 Sink의 Dependency를 제거하고 장애대비 위해 중간 채널 제공
- Source는 Channel에 Event정보를 저장, Sink는 채널로 부터 정보를 전달 받아 처리
3) Sink
- 채널로부터 Source가 전달한 Event정보를 HDFS에 저장하거나 다음 Tier Agent 또는 DB로 전달

60

Facebook Scribe

▣ 개념
- Facebook에서 제작, 사용하던 log aggregator system
▣ 구성
- Frontend Servers : 여러개의 Scribe로 구성
- Aggregator nodes : Frontend Servers의 Scribe 정보 집계하는 Scribe
- HDFS : 집계정보 저장
▣ 장점
- Facebook에서 실제로 사용하여 성능과 안전성에서 신뢰
▣ 단점
- 더이상 Facebook에서 사용하지 않음. 거의 발전이 없는 상태