본문 바로가기

전체 글

(49)
Druid 정리(5) 쿼리Aggregation Queries· Timeseries· TopN· GroupBy Metadata Queries· Time Boundary· Segment Metadata· Datasource Metadata Search Queries· Search 어떤 쿼리를 사용해야 하나?· GroupBy 대신에 Timeseries나 TopN을 사용하는 것을 추천한다.· GroupBy는 드루이드에서 가장 유연하지만 가장 성능이 낮다.· Timeseries는 GroupBy보다 분명히 빠르다.( 디멘전을 그룹핑해서 요청하는 집계가 아닐 경우)· 싱글 디멘전에서 그룹핑과 정렬은 TopN 쿼리가 GroupBy보다 더 최적화돼있다. 집계 쿼리 사용은 결론적으로..· 그룹핑 없이 전체 소스에 필터링, 집계, 정렬을 할 경..
Druid 정리(4) 조인· 드루이드는 쿼리타임 룩업을 통해 제한된 조인을 지원한다.· 쿼리타임 룩업의 흔한 사용 케이스는 한 디멘전의 값을 또 다른 값으로 교체하는 것이다.· 이것은 star-schema 조인과 유사하다.· 드루이드는 아직 조인을 완벽하게 지원하지 않는다.· 비록 드루이드의 저장 포멧이 조인의 구현을 허락할지라도 아직 다음의 이유 때문에 조인을 완벽하게 서포트하지 않는다. · 조인 쿼리의 확장은 분산 데이터베이스 작업의 지속적인 병목 현상이다. · 기능의 점진적인 향상은 동시 처리가 많이 걸린 작업 부하를 관리 할 때 예상되는 문제보다 가치가 떨어지는 것으로 인식된다.· 조인 쿼리는 본질적으로 공유 키 집합을 기반으로 하는 두 개 이상의 데이터 스트림을 병합한다.· 조인 쿼리를 위한 주요한 고레벨 전략은 해..
Druid 정리(3) 스키마 변경· 데이터 소스의 스키마는 언제나 변할 수 있고 드루이드는 세그먼트 사이에 다른 스키마를 지원한다. 세그먼트 교체· 드루이드는 데이터소스, 간격, 버전, 파티션 넘버등을 사용하여 유니크하게 세그먼트를 구분한다.· 만약 시간 간격(granularity)에 여러 세그먼트가 있을 경우 파티션 넘버는 오직 세거먼트 아이디에서만 보인다.· 예를 들어 만약 hourly 세그먼트를 가지고 있을 경우 한 세그먼트보다 한 시간 안에 더 많은 데이터를 가질 수 있다.· 같은 hour에 여러 세그먼트를 만들 수 있다.· 이 세그먼트들은 같은 데이터소스, 간격, 버전을 공유하지만 선형적으로 증가하는 파티션 넘버를 가진다.· 나중에 어느 시점에서 새 스키마로 데이터를 다시 색인화하면 새로 작성된 세그먼트의 버전 ID..
Druid 정리(2) 스키마 디자인· 드루이드는 비정규화된 데이터와 컬럼(timestamp, dimension, metric)을 취급한다.· 모든 행은 timestamp를 가져야 한다. 데이터는 항상 time으로 파티션되고 모든 쿼리는 time filter를 가진다.· 쿼리 결과는 역시 분, 시간, 일등과 같은 time 버킷으로 나눠질 수 있다.· Dimension은 필터링이나 그룹핑 될 수 있는 필드이다. String, String 배열, Long, Double, float 타입을 가진다.· Metric은 집계될 수 있는 필드이다. 숫자형으로 저장되지만 HyperLogLog sketches나 approximate histogram sketches 같은 Complex 객체 형태로 저장될 수 있다. 숫자형 디멘전· 숫자형 타입..
Druid 정리(1) 주요기능 · 컬럼너 저장 포멧 · 확장형 분산 시스템 · 대용량 병렬 처리 · 실시간 또는 일괄 처리 · 자기 치유, 자기 균형 조정 · 내결함성 아키텍처 · 빠른 필터링을위한 인덱스 · 근사치 알고리즘 · ingest time에 자동 집계 드루이드를 쓰면 좋을 때 · 데이터 적재를 많이 하지만 업데이트가 적을 때 · 대부분의 쿼리가 집계(group by), 검색, 스캔인 경우 · 응답속도를 100ms 이하로 잡고 싶은 경우 · 둘 이상의 테이블이 있는 경우 쿼리는 큰 테이블을 조회하고 작은 테이블을 lookup 함 · 높은 카디널리티 데이터(URLs, user Ids)를 가지고 빠르게 카운팅, 랭킹을 구해야 하는 경우 · kafka, HDFS, s3등과 같은 저장소에서 데이터를 로드하고 싶은 경우 드루..
Spring boot, react 이용한 블로그 개발 (4) - Post API 개발 이번 포스트에서는 포스트를 등록하고 수정하고 삭제하고 읽는 포스트 관련 CRUD API를 개발할 것이다. 이를 통해 블로그 개발에 있어 아주 기본적인 기능을 추가하게 되고 react를 통해 개발하는 프론트엔드와 연동하여 유의미한 화면을 만들 수 있을 것이다. 1. PostDto 객체 생성 - Post와 관련된 데이터를 CRUD를 통해 받을 때는 기존에 생성한 Post 도메인 객체를 사용하지 않을 것이다. 물론 @jsonIgnore 어노테이션을 이용하는 방법으로 원하는 데이터만 노출할 수도 있겠지만 Post 객체를 직접 이용하기 보단 데이터 이동간의 필수 필드만 가지고 있는 DTO 객체를 별도로 생성하여 사용할 것이다. @Data public class PostDto { private Long id; pr..
Spring boot, react 이용한 블로그 개발 (3) - ConfigurationProperties 프로퍼티 설정 이번 포스트에서는 application.yml에 프로퍼티 정보를 저장하고 스프링의 ConfigurationProperties 어노테이션을 이용하여 자바 클래스에 바인딩하는 것을 적용할 것이다. 이를 통해 프로퍼티 정보를 명시적으로 클래스를 통해 중앙 관리하여 다른 곳에서 프로퍼티 정보를 쉽게 가져다 쓸 수 있을 것이다. 1. application.yml 작성 - application.yml에는 사용할 프로퍼티 정보를 yaml 형식으로 작성하게 된다. 아래 코드에 작성된 형식의 루트에는 application과 spring이 있는데 application 이하에는 코드 작성시 명시적으로 프로퍼티를 주입시킬 대상을 나열하였고 spring 아래에는 spring과 관련된 라이브러리에서 사용하는 프로퍼티를 작성하였다..
Spring boot, react 이용한 블로그 개발 (2) - JPA + hibernate 연동 이번 포스트에서는 DB연동 부분을 알아볼 것이다. 기본적으로 이번 프로젝트에서 ORM을 사용할 것이기 때문에 자바에서 ORM을 사용하기 위한 기본인 JPA와 Hibernate를 이용한다. DB는 로컬 환경에서는 테스트가 수월한 H2 database를 이용하고 운영환경에서는 mysql를 사용한다. 1. pom.xml 설정 - pom.xml에 spring에서 jpa를 쉽게 사용하기 위한 spring-boot-starter-data-jpa 라이브러리를 추가하고 JDBC connection pool 라이브러리는 가볍고 성능이 좋은 HikariCP를 이용한다. DB 커넥트 설정을 위해 h2와 mysql 커넥터를 추가한 것을 볼 수 있다.아래에는 위와 관련된 라이브러리를 추가한 것을 확인할 수 있다. org.spr..