검색엔진으로 Redshift를 사용하려고 했는데 왜 이렇게 속도가 안나오는거지?


Redshift는 속도 보다는 대용량 데이터를 보관하고 찾을 수 있는 DW로 만족해야하는 것 같다. ㅠㅜ


데이터를 빠르고 여러가지 방법으로 Query해서 찾기 위해 여러가지 OSS를 찾기 시작했다.


HIVE2.0도 보이고 드레멜도 보이고 드릴, 임팔라, 타조 그리고 드루이드까지~


수많은 OSS가 있지만 우선 페이스북에서 시작한 프레스토가 현재 가장 눈에 들어온다.


드루이드도 괜찮은 것 같지만 현재 우리 시스템에서 빈번하고 중요한 부분 중에 하나인 JOIN 기능이 완벽하지 않다.


대용량 데이터에서 JOIN이란 넘기 힘든 산이지만 분석하는 분들은 그렇게 생각 안하시는 듯...ㅠㅜ


서비스를 위해서라면 최대한 성능이 날 수 있는 구조로 데이터를 정제하는 것이 최 우선이다.


하지만 안정화 되기 전까지는 분석에서 필요한 다양한 View를 확인하기 위해 최대한 정제되지 않은 체로 사용하려고 한다.



그래서 프레스토로 확인 하는 중 ㅎㅎㅎㅎ

https://prestodb.io


대용량 데이터를 위한 분산 SQL Query 엔진으로 기가바이트에서 페타 바이트에 이르기는 원본 데이터를 대화형으로 분석할 수 있도록 설계 되었다.



하이브나 카산드라와 같이 독립적인 저장소를 가지고 있고, 독립적인 저장소 외에도 다양한 소스의 데이터를 결합해서 분석 할 수 있다.



제약 사항


우선 몇 초에서 몇 분 정도 걸리는 쿼리를 검색하는 것이지 아주 빠른 분석을 위한 비싼 검색 솔루션은 아니다.


프레스토는 일반적인 SQL을 지원하는 것이지 RDB가 아니다. Online Transaction Processing 목적이 아니라는 말이다.

(솔직히 그럼에도 불가하고 속도가 나왔으면 한다.)




구조적


프레스토는 코디네이터랑 워커 그리고 디스커버리로 역활이 나누어져있고 클라이언트에서는 프레스토 CLI를 통해 검색을 할 수 있다.


Connector Plugin을 통해 다양한 소스에 대한 접근이 가능한데... 워커는 데이터를 코디네이터는 메타데이터를 커넥터 플러그인을 통해 가져온다.


Http와 JSON을 통해 통신하며 루비, 파이선, PHP, 자바, R, Node.JS 등을 지원한다.


비주얼 툴과 연동 시 ODBC/JDBC보다는 PostrgreSQL ODBC/JDBC 드라이버를 사용하는 것을 추천한다. 훨씬 빠르다고 한다.



설치 환경


프레스토를 사용하기 위해서는 리눅스나 맥OS에 설치 해야하고, 자바 8버전과 파이선 2.4버전 이상이 설치 되어 있어야 한다.


AWS에서는 EMR에서 프레스토를 지원해준다.


다른 것보다 워커의 스펙이 중요하다. 연산을 위한  CPU와 JOIN을 위한 MEMORY이 높아야 성능이 잘 나온다.

저작자 표시
신고

'IT' 카테고리의 다른 글

검색엔진 프레스토 Presto 알아보기  (0) 2016.12.27

데이터 검색 엔진을 찾아보고 있다. 근데  SQL이 잘되는 RDB를 사용하기에는 데이터의 양이 많은 것 같다. 기존 시스템에서 사용한 RDB로는 커버하기 힘든 양이라 다른 database를 찾고 있다.


우선 http://db-engines.com/en/ranking 에서 기존 DB들과 새롭게 등장한 녀석들을 쓱~~~ 훓어봤다. 양이 양이지만 검색엔진이 잘되어야하는 특성이 존재한다.


첫번째로 눈에 들어온건 MongoDB, Elastics search, Splunk 그리고 redshift이다.

우선 Splunk는 유료이니~ PASS ! Elastics Search는 JOIN 불가능(현재 5.0버전까지)~


여기에서는 Amazon Redshift에 대해서 한번 봐야겠다.


주요 꼭지로 뽑으라면.....

데이터 Warehouse system이다. 그리고 성능을 당연히 봐야겠지? 특성과 구조에 대해서 파악해야할 것 같다. 마지막으로는 연동할 수 있는 다른 서비스적 관점이다.


구조와 특성

RedShift는 PostgreSQL을 베이스로 만들어졌다. JDBC와 ODBC와 같은 SQL을 사용할 수 있다. 

데이터를 저장할 때는 Column base로 압축 저장하며 Clustering환경에서 분산 저장된다.


http://docs.aws.amazon.com/ko_kr/redshift/latest/dg/images/02-NodeRelationships.png


Leader Node에서 SQL에 대한 처리를 담당하고 있다. 특정 쿼리의 경우 Leader Node에서만 동작이 되며 Compute nodes에서는 실행 되지 않은다.(Error 반출) 개별 Node에서 처리한 값들을 Leader Node에서 최종 통합 된다.


http://docs.aws.amazon.com/ko_kr/redshift/latest/dg/images/05-InternalComponents.png


Node들은 Cluster로 묶여 있고 Node는 여러 개의 Slices들로 구분되며 해당 Slices들은 메모리나 디스크에 데이터를 저장하고 있다.


사용함에 있어 중요한 정보는 다음과 같다.

- Best Practices for Designing Tables.

- Best Practices for Disugning Queries.

- Best Practices for Loading Data.



Mysql 과 PostgreSQL을 비교하는 건 다음 사이트에서 확인 가능하다.

http://developer.olery.com/blog/goodbye-mongodb-hello-postgresql/


ConstraintsOraclePostgresMySQL
Check constraintsYesYesNo
Check constraints using custom functions(*)YesYesNo
Exclusion constraints(*)NoYesNo
Statement based constraint evaluationYesYesNo
IndexingOraclePostgresMySQL
Partial index(*)YesYesNo
Descending Index(*)YesYesNo
Index on expression(*)YesYesNo
Index using a custom function(*)YesYesNo
Data TypesOraclePostgresMySQL
User defined datatypes(*)NoYesNo
DomainsNoYesNo
ArraysNoYesNo
Enums(*)NoYesYes
IP addressNoYesNo
BOOLEAN(*)NoYesNo
JOINs and OperatorsOraclePostgresMySQL
FULL OUTER JOINYesYesNo
LATERAL JOINYesYesNo
INTERSECTYesYesNo
INTERSECTYesYesNo
ORDER BY ... NULLS LASTYesYesNo
* 표) 출처 - AGENS (http://www.agens.co.kr/sp.php?p=33)


저작자 표시
신고

'Cloud' 카테고리의 다른 글

아마존 레드쉬프트(RedShift)  (0) 2016.10.18

+ Recent posts

티스토리 툴바