spark 1.6을 기준으로 spark sql에 대해서 개략적으로 설명한 자료입니다. 발표 자료가 친절하지 않으나 한글로 된 자료가 없길래 혹시나 도움 되시는 분들이 있을까 하여 공유합니다.
발표자료 보다는 마지막 페이지의 참고자료들을 읽어보시기를 권장 드립니다.
출처만 남겨주시면 자유롭게 가져가셔서 사용하셔도 무방합니다.
스프링군살없이세팅하기(The way to setting the Spring framework for web.)EunChul Shin
깔끔하게 스프링 프레임워크 세팅하는 것에 대한 이야기 입니다.
군살없이 프레임워크를 세팅한다는 의미와 이유, 그리고 스프링 기본 설정 및 설정들의 역할에 대해서 정리해 보았습니다.
This presentation is about Spring framework.
I want to talk about the way to setting the spring framework as tidy in this presentation.
The MyBatis data mapper framework makes it easier to use a relational database with object-oriented applications. This document explain about MyBatis basic concept.
3. 병렬 처리 강화
Global 락을 없애고, DB 레벨 락으로.
이후에도 계속 락의 단위를 좁힐 예정.
락 상태는 아래의 명렬어를 확인 가능
db.currentOp()
db.serverStatus()
4. Page fault 아키텍처 개선
락 중에 PageFault가 발생하여 락이 연장되는 것을 피하도록.
if 쓰기 오퍼렌이션에서
- 접근 하는 곳이 메모리 상이 아니면 mutation이 일어난다
- Page fault 하려고 할 때
Then
- PageFaultException을 발생 시킨다
- 락을 해제하고 page을 메모리로 올린다
- 쓰기 오러페이션을 재 실행
6. Aggregation Framework
SQL의 GROUP BY 기능과 비슷하다.
저장된 데이터에 대해 다양한 처리나 조작을 하여 이전에는
JavaScript로 실해하고 있던 집계 처리를 MongoDB 명령어로
할 수 있다.
- $match //집계 처리 조건을 지정하고 매칭한다(SQL의 WHERE 또는 HAVING)
- $project //집계 처리를 할 필드를 선택/삭제, 리네임(SQL의 AS), 집계 결과를 ins
ert 한다
- $unwind //배열을 지정하고 전개해서 반환한다
- $group //$sum, $avg 등을 사용하여 집계 처리를 한다
- $sort
// 지정된 sort 키에 의한 소트
- $skip
//지정된 숫자 만큼 skip 한다
- $limit //지정된 문자 만큼 집계 결과를 반환한다
8. Read에 관한 설정
Read 시에 consistency 강도를 지정 가능 하도록
- PRIMARY
- PRIMARY PREFERRED
- SECONDARY
- SECONDARY PREFERRED
- NEAREST
9. Tag를 사용한 Sharding 가능하도록
Tag 베이스로 레플리케이션
- sharding key에 의한 쓸 곳을 제어
- uid=1~100은 A 데이터 센터의 노드, uid=101~200은 B 데
이터 센터의 노드 라는 설정이 가능
10. TTL(Time To Live) Collections
기한 있는 컬렉션을 만들 수 있다.
date-type 필드가 필요.
capped collection으로는 사용할 수 없다.
//events 컬렉션 데이터를 status 필드를 기점으로 30초 후에 삭제하도록 설정
db.events.ensureIndex( { "status": 1 }, { expireAfterSeconds: 30 } )
//status에는 date-type information을 넣는다. new Date()로 OK.
db.events.insert( { "status" : new Date(), "value" : 1 } );
db.events.insert( { "status" : new Date(), "value" : 2 } );
db.events.insert( { "status" : "not Date", "value" : 3 } );
db.events.insert( { "no-status" : "blank", "value" : 4 } );
db.events.find();
//30초 후에
db.events.find();
14. 전문 검색 기능
인덱스가 있는 전문 검색 기능 지원. 영어만 지원 -_크게 3 부분으로 나누어 처리
- Tokenizer로 형태소 분석
- Stop Word Fultering로 불 필요한 단어를 제거
- Stemming 처리
15. Kerberos 인증 지원
서브 스크립션 판만 지원.
mongod 인증으로 이용 가능.
mongod 기동 시에 파라미터로 지정한다.
16. 권한에 의한 접근 룰
권한은 데이터 베이스 마다 설정 가능.
{database}.system.users 컬렉션에 저장.
roles(권한)
내용
read
모든 컬렉션 데이터를 읽기 가능
readWrite
모든 컬렉션 데이터를 읽기, 쓰기 가능
dbAdmin
인덱스 작성, DB 통계 정보 취득 등 데이터 베이스 관리자 조작 가능
userAdmin
system.users에 대해서 읽기 쓰기 가능, 유저 작성이나 권한 변경 등 관리 가능
clusterAdmin
레플리케이션이나 샤딩 관리자 조작 가능
readAnyDatabase
admin 데이터 베이스를 포함한 모든 논리 데이터 베이스를 읽기 가능
readWriteAnyDatabase
admin 데이터 베이스를 포함한 모든 논리 데이터 베이스를 읽기 쓰기 가능
userAdminAnyDatabase userAdmin으로서 유저 관리를 하고, 모든 논리 데이터 베이스를 읽기, 쓰기 가능
dbAdminAnyDatabase
dbAdmin으로서 데이터 베이스를 관리하고, 모든 논리 데이터 베이스를 읽기, 쓰
기 가능
17. JavaScript 엔진을 V8로 변경
기본 JavaScript 엔진을 SpiderMonkey에서 V8로 변경.
mongo shell 에서 db.serverBuildInfo()로 확인할 수 있다.
또는 interpreterVersion()으로 확인 할 수 있다.
18. GeoJSON을 사용한 구면지리 공간 인
덱스
2.4 에서 구면지리공간(Spherical Geospatial) 인덱스의 index
type가 2dsphere로 되었다.
19. 인덱스 구축 자동 재개 (resume 기능)
인덱스 구축 중에 mongod를 정지한 경우라도 다음 기동 후에
자동적으로 재개.
2.4 이전에는 mongod를 정지하기 전에 인덱스 구축을 끝내야
했다.
noIndexBuildRetry 옵션으로 무효화 할 수 있다.
20. 해쉬 도큐먼트 키를 이용한 샤딩
샤드 키를 해쉬화 하여 데이터 치우침을 막는다.
예를 들면 샤드 키가 메일 주소인 경우 알파벳에 의한 치우침
이 생겨 균등한 범위 지정이 어렵게 된다.