Skip to main content

Posts

Showing posts with the label Dev

MySQL Index, I/O, BufferPool, Lock, Count, Hint

MySQL InnoDB PK, Index Key  내부 MySQL InnoDB는 Index 테이블을 B-Tree (Balanced tree) 로 구성. Delete index 재정렬이 일어나지 않음 delete 되었다는 '상태값' 만 변경함으로써 index 테이블에 성능영향을 최소화 하기 위함 - by 순차 I/O, 랜덤 I/O 에 대해서 ... (Full Table Scan 이 더 효율적일 때도 있다.) Disk I/O의 속도는 '헤더' 의 움직임과 연관이 있다. '디스크에 데이터를 쓰고 읽는 데 걸리는 시간은 디스크 헤더를 움직여서 읽고 쓸 위치로 옮기는 단계에서 결정된다.' '일반적으로 쿼리를 튜닝하는 것은 랜덤 I/O 자체를 줄이는 것이 목적이라 할 수 있다.' 순차 I/O 는 탐색을 위해 헤더를 1개씩 움직이는 반면 랜덤 I/O는 더 많이 움직인다. Index Scan: 랜덤 I/O , Full Table Scan:순차 I/O 'Index Range Scan은 데이터를 읽기 위해 주로 랜덤 I/O 를 사용하며, 풀 테이블 스캔은 순차 I/O를 사용한다. 그래서 큰 테이블의 레코드를 읽을 때는 풀 테이블 스캔을 사용하여 디스크헤더 의 움직임을 최소화 하는 방법이 더 효율적이다. 이런 형태는 웹서비스 보다는 데이터 웨어하우스나 통계 작업에서 자주 사용된다.' InnoDB Buffer Pool 구조 랜덤 I/O , Disk write 의 비용이 크기 때문에 InnoDB Engine 은 Buffer Pool (메모리 캐시) 을 사용하여 처리한다. 최근 접근한 데이터는 다시 Access 될 가능성이 큼. Insert Buffer Thread에 의해 처리. DB write 는 Disk Write Thread가 처리. INDEX Column은  'NOT NULL' 로 설정 INDEX 로 잡은 Column 에...

substring method performance in Java 1.8 String Class

Many people use 'substring' method. I found many people simply use 'substring' method in String class. I was wondering substring of String class cause overhead. so i decompiled String.class. public String substring( int beginIndex) { if (beginIndex < 0 ) { throw new StringIndexOutOfBoundsException (beginIndex); } int subLen = value . length - beginIndex; if (subLen < 0 ) { throw new StringIndexOutOfBoundsException (subLen); } return (beginIndex == 0 ) ? this : new String (value, beginIndex, subLen); } You can see 'new String()' code at the end of the function. Every time new instance created when it called. The HackerRank Problem is below. https://www.hackerrank.com/challenges/reduced-string It is better to use 'StringBuffer' then 'String'. Below is deleteCharAt method of 'StringBuffer'. public AbstractStringBuilder deleteCharAt( int index) { if ...

YAGNI. You aren't gonna need it.

요할 때 까지 기능을 추가해 놓지 마라 ! YGNI '오버스팩을 구현하지 마라.' 라는 말을 <Clean Code> 책에선 봤어도. 이렇게 용어로 위키에 정리되는 정도인줄은 몰랐네.. https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it

MySQL InnoDB 특징 및 기본 개념

InnoDB index MySQL InnoDB는 Index 테이블을 B-Tree (Balanced tree) 로 구성. Delete index 재정렬이 일어나지 않음 delete 되었다는 '상태값' 만 변경함으로써 index 테이블에 성능영향을 최소화 하기 위함 - by  <Real MySQL> 순차 I/O, 랜덤 I/O 에 대해서 ... (Full Table Scan 이 더 효율적일 때도 있다.) Disk I/O의 속도는 '헤더' 의 움직임과 연관이 있다. '디스크에 데이터를 쓰고 읽는 데 걸리는 시간은 디스크 헤더를 움직여서 읽고 쓸 위치로 옮기는 단계에서 결정된다.' '일반적으로 쿼리를 튜닝하는 것은 랜덤 I/O 자체를 줄이는 것이 목적이라 할 수 있다.' 순차 I/O 는 탐색을 위해 헤더를 1개씩 움직이는 반면 랜덤 I/O는 더 많이 움직인다. Index Scan: 랜덤 I/O , Full Table Scan:순차 I/O 'Index Range Scan은 데이터를 읽기 위해 주로 랜덤 I/O 를 사용하며, 풀 테이블 스캔은 순차 I/O를 사용한다. 그래서 큰 테이블의 레코드를 읽을 때는 풀 테이블 스캔을 사용하여 디스크헤더 의 움직임을 최소화 하는 방법이 더 효율적이다. 이런 형태는 웹서비스 보다는 데이터 웨어하우스나 통계 작업에서 자주 사용된다.' InnoDB Buffer Pool 구조 랜덤 I/O , Disk write 의 비용이 크기 때문에 InnoDB Engine 은 Buffer Pool (메모리 캐시) 을 사용하여 처리한다. 최근 접근한 데이터는 다시 Access 될 가능성이 큼.   COUNT() 에 대해서... COUNT(*) 에 WHERE 절을 사용하는 것을 권장... COUNT All MyISAM 엔진의 경우  테이블 내에 Record Count를 캐시로 저장해 놓아서 WHE...

Strategy Pattern을 가장 간단하게 구현할 수 있는 언어 (Javascript)

https://en.wikipedia.org/wiki/Strategy_pattern Strategy Pattern 을 사용해서 문제를 해결! 자바스크립트는 OOP, Functional 모든 특성을 다 가지고 있다. 괜히 "자바스크립트가 왕” 이라는 말이 나오는게 아니었다. Node.js + MongoDB 에는 Mongoose 모듈을 사용한다. Mongoose로 객체를 만들면 Hash Key 역할을 하는   "_id" 가 생긴다. var user = new User(); console.log(user); 를 찍으면 _id가 들어가 있다. 우리가 하는 짓을 Mongoose 만든 사람이 보면  화가 나거나, 슬퍼하거나, 이해를 못하거나, 무관심  하겠지만. 우리는 코드의 구조를 최대한 이쁘게 하기 위해 Mongoose에서 원하지 않는 방향으로 Model을 한번 만들어봤다. Content, Free-Coin, Offer, Saies 라는 모델이 있었다. 이 모델들을 Content 모델로 통합을 하고, 나머지 세 모델들은 개념상 모델로만 지칭할 뿐 실제로는 Content를 사용하여 save, update, find를 한다. * 개요   - 개념모델 : Content, Free-Coin, Offer, Saies   - 물리모델 : Content만 존재 때문에  Factory pattern 을 써야 했다. createMarketContent() 라는 함수를 만들고, 이 안에 각 모델을 받도록 Strategy pattern을 사용했다. var freeCoin = createMarketContent(obj, FreeCoin); var offer = createMarketContent(obj, Offer); var sale = createMarketContent(obj, Sale...