본문 바로가기
MySQL 퍼포먼스 향상 (3) 인덱스 3. 인덱스 B-tree 인덱스 - 인덱스는 데이터 사이즈에 비례한다. - 인덱스는 스토리지 계층에서 사용되며 엔진마다 조금씩 동작이 다르다. - MySQL 의 거의 모든 스토리지 엔진은 B-Tree 인덱스이다. - B-Tree 인덱스는 키, 키 범위, 키 프리픽스에 의한 검색에 적절하다. - MyISAM 은 인덱스가 압축됨. InnoDB 는 인덱스를 압축하지 않음. - MyISAM 은 물리적 위치로 인덱스를 참조하지만, InnoDB 는 주키로 참조한다. - LIKE 검색에서는 그 열의 인덱스는 사용불가 해시 인덱스 - 검색 값을 주면 해시 함수를 통해 결과값을 가지고 찾는다. 해시함수 결과에 대한 값을 저장하기 때문에 컬럼길이가 아무리 길어도 저장되는 양은 현저히 줄어든다는 장점이 있다. - 실제 저장.. 2015. 6. 20.
MySQL 퍼포먼스 향상 (2) 스키마 최적화 2. 스키마 최적화, 그리고 인덱스 데이터형 지정 관련 - 데이터형은 사용가능한 가장작은 형을 사용해야 한다. - 문자보다는 숫자같이 단순한 형이 좋다. - 필드는 NOT NULL 로 지정하고 디폴트 값을 넣자. NULL 로 지정하면 MySQL 내부에서 처리를 해야하고 인덱스 붙이기에도 적절하지 않다. 날짜 관련 - DATETIME, TIMESTAMP 의 차이. TIMESTAMP 는 반의 용량을 사용하며, 타임존에도 대응한다. 숫자형 관련 - 정수형도 좀더 세분하게 나눠서 정의하자. 무조건 INT 는 피하자 - 정수계산은 32 비트 아키텍처라 하도 64비트로 계산된다. - double, float, decimal 같은 실수형. decimal 은 소수점 계산이 가장 정확하다. 돈 계산같은 정확한 계산에 필.. 2015. 6. 20.
MySQL 퍼포먼스 향상 (1) 아키텍처 1. MySQL 의 아키텍처 우선 MySQL 의 아키텍처 면에서 퍼포먼스를 생각해보자. MySQL 은 논리적 3 계층으로 구성되어짐. - 접속관리 및 시큐리티 : 유저 1 명당 1개의 스레드가 작성되어지며, 항상 캐쉬처리 된다. - 최적화 및 실행 : 쿼리실행, 캐쉬, 함수, 프로시져, 트리거, 인덱스 등의 동작 - 스토리지 엔진 : Row Lock 데이터베이스 락 - MySQL 스레드에서 각 유저에 대한 처리를 동시적으로 처리하기 때문에, 동기화 전략이 필요하다. Lock기법을 통해 각 스레드가 쿼리순서를 동기화 시킨다. - 공유락은 트랜잭션에 읽기 허용. 배타락과는 충돌한다. 다른 트랜잭션은 공유락에 걸린 열을 읽기 O - 배타락은 트랙잭션에 갱신과 삭제를 허용. 공유락, 배타락 모두 충돌한다. 다른.. 2015. 6. 20.
PHP 리팩토링(2) 리팩토링(2) 1. 여러겹의 조건문을 감시절로 전환 function PayAmount() {$num = DB::getRate(); $result = '';if (_isDead) {$result = $num / 100;} else {if (is_Seperated) {$result = $num * 0.1:} else {if (is_Retired) {$result = $num * 0.3:} else {$result = $num * 0.5;}}} return $result;} 예를 들어 이런 메서드가 있다면, 우선 계산식들을 모두 메서드로 전환 function deadAmount($num){return $num / 100;} function seperatedAmount($num){return $num * 0.1.. 2015. 6. 4.
PHP 리팩토링(1) 리팩토링 (1) 고객측에서 리팩토링 의뢰가 들어왔다. 기존 누군가가 짜논 코드를 효율좋게 고치라는 미션이다. 본격적으로 시작하기 앞서 몇가지 필요하다고 생각하는 기법들을 찾아서 참고하려고 하려고 한다. 기법은 마틴 파울러의 리팩토링을 근간으로 하려고 한다. 1. 마법숫자를 상수로 전환 클래스 밖에서 사용할 때 define("LOCAL", "1");define("DEV", "2");define("REAL", "3"); 클래스 안에서 선언할 때 class MyClass {const MIN_VALUE = 0.0; } 2. 절차코드를 객체로 전환각 레코드타입을 읽기 / 쓰기 메소드만 있는 덤 데이터 객체로 변경모든 절차코드를 하나의 클래스에 넣기메소드를 static 로 . 싱글턴 활용 3. 메서드 추출 기법 사.. 2015. 6. 4.
Laravel 5 루트 설정 AWS 에 아파치2.4 를 돌리고 있는데, 거기다가 laravel 5 를 배치했다. 하지만 허거덩, 찾을 수 없는 경로 에러가 나면서 안되는 것이었다. 좀 찾아본 결과. http://127.0.0.1/laravel/public/index.php/home 이런식으로 index.php 를 넣어야 그 담부터 처리를 하고 있었다. 뭐...당연한 프레임워크의 사양일 수도 있는데,index.php 다음으로 라우트를 처리하는 것은 꼴베기 싫기 때문에 sudo vi /etc/httpd/conf/httpd.conf 를 조금 손보기로 했다. 132 # 133 # Possible values for the Options directive are "None", "All", 134 # or any combination of: .. 2015. 5. 30.
반응형