본문 바로가기

Stream API 람다표현식 변환 int count = 0; for (String word : words) { if (word.length() > 12) { count++; } } - streamint count = words.stream().filter(word -> word.length() > 12).count(); - parallel streamint count = words.parallelStream().filter(word -> word.length() > 12).count(); of 메서드 : 파라미터로 가변 인자를 받음 Stream words = Stream.of("1", "2", "3"); empty 메서드 : 요소가 없는 스트림을 생성Stream emptyStream = Stream.empty(); map..
Hash Join - join 조건을 hash값으로 만들어 join 하는 방식 - 대용량 처리 시 성능에 영향을 주는 random access와 sorting에 대한 해결책으로 등장 - equal join에서만 수행 가능(Hash값이 크다고 실제 값이 크지는 않음) - 작은 table과 큰 table의 join에서 사용하면 성능에 좋음 - 작은 table을 driving table(build input)으로 잡아야 함 - 다른 join방법보다 CPU자원을 많이 사용(Hash Area 등) - 병렬 처리를 이용한 Hash Join은 대용량 데이터 처리를 위한 최적의 방법을 제공
Sort Merge Join - join 되는 table을 각각 엑세스하여 sort한 결과를 차례로 scan하면서 merge를 수행 - sorting 된 집합을 scan하면서 merge를 하기 때문에 join 자체는 빠르지만, sort 작업에 대한 부담이 큼 - 비동등 join(. like 등)이 가능함 - 충분한 메모리 활용이 가능하고, 병렬처리를 통해 빠르게 정렬할 수 있다면 대량의 데이터 조인에 유용하게 적용 가능
Nested Loop Join - outer table(driving table)의 데이터를 읽어 inner table의 데이터와 1건씩 join 하는 방법 - outer table의 결정과 처리 범위에 따라 성능이 결정 됨 - Inner table에 join 조건에 인덱스가 없으면 outer table에서 추출 된 건수 만큼 table full scan을 타게 됨 - OLTP 환경에서 주로 사용(부분 범위 처리) - 아래와 같은 매커니즘(2중 for문)으로 동작한다고 이해하면 된다 for (int i = 0; i < outer.length; i++){ -- outer loop for (int j = 0; j < inner.length; j++){ -- inner loop ..... } }
반정규화(역정규화) 1. 테이블 반정규화 분류 기법 내용 테이블 병합 1:1 관계 테이블 병합 1:1 관계를 통합 1:M 관계 테이블 병합 1:M 관계를 통합 슈퍼/서브타입 테이블 병합 슈퍼/서브타입 관계를 통합 테이블 분할 수직 분할 컬럼 단위로 분할 수평 분할 로우 단위로 분할 테이블 추가 중복 테이블 추가 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 생성 통계 테이블 추가 SUM, AVG 등을 미리 계산해 둔 테이블을 추가 이력 테이블 추가 마스터 테이블에 존재하는 레코드를 시간, 트랜잭션 발생 시점에 따라 복사해 두는 테이블을 추가 부분 테이블 추가 수평 분할이란 동일한 개념 2. 컬럼 반정규화 기법 내용 중복 컬럼 추가 조인에 의한 성능 저하를 예방하기 위해 중복 된 컬럼을 위치 시킴 파생 컬럼..
람다 나중에 한 번 이상 실행할 수 있도록 전달할 수 있는 코드 블록Integer.compare(first.length(), second.length()); 파라미터가 있는 표현식(String first, String second) -> Integet.compare(first.length(), second.length()); 파라미터의 타입을 추정할 수 있는 경우는 타입을 생략 (first, second) -> Integet.compare(first.length(), second.length()); 파라미터를 받지 않으면 빈 괄호를 사용 () -> { for (int i = 0; i Int..
Spring Bean 설정(XML) 1. context:component-scan - base-package : @Controller, @Component, @Service, @Repository 어노테이션을 가진 클래스들을 빈으로 등록하기 위해 탐색 할 최상위 패키지 - use-default-filters : true이면 exclude-filter를 통해 선언 된 어노테이션을 제외하고 등록 exclude-filter가 없으면 4개의 어노테이션을 모두 등록, false이면 아래 include-filter를 통해 선언 된 어노테이션만 등록(default = true) - context:include-filter : @Controller, @Component, @Service, @Repository 중 등록하고 싶은 어노테이션만 지정해서 등록..
쿼리 실행 계획 1. 실행 계획 확인 하는 법 - 쿼리 앞에 explain을 붙여 줌 2. 실행 계획 각 항목이 의미하는 내용 구분 설명 ID Select 아이디로 Select를 구분하는 번호 Select_type Select에 대한 타입 Table 참조하는 테이블 Type 조인 혹은 조회 타입 Possible_Keys 데이터를 조회할 때 DB에서 사용할 수 있는 인덱스 리스트 Key 실제로 사용할 인덱스 Key_len 실제로 사용할 인덱스의 길이 Ref Key 안의 인덱스와 비교하는 칼럼(상수) Rows 쿼리 실행 시 조사하는 행 수 Extra 추가 정보 3. Select_type 구분 설명 SIMPLE UNION이나 서브쿼리가 없는 단순 SELECT PRIMARY 서브쿼리가 있을 때 가장 바깥쪽에 있는 SELECT ..