본문 바로가기

DB

Real My SQL - 아키텍처(3) InnoDB 스토리지 엔진 아키텍처 InnoDB 스토리지 엔진은 레코드 기반의 잠금을 제공하여 이로인해 높은 동시성 처리가 가능하다. 특징 프라이머리 키에 의한 클러스터링 잠금이 필요없는 일관된 읽기 외래 키 지원 자동 데드락 감지 자동화된 장애 복구 프라이머리 키에 의한 클러스터링 - InnoDB 테이블은 기본적으로 프라이머리 키에 의해 클러스터링 되어 디스크에 저장된다. 즉, 프라이머리 키 값이 순차적으로 디스크에 저장된다는 뜻으로 프라이머리 키에 의해 인덱스 레인지 스캔이 빠르게 처리 될 수 있다.(다른 보조 인덱스에 비해 높게 설정된 이유) 잠금이 필요 없는 일관된 읽기 - MVCC 라는 기술을 통해 락을 사용하지 않고 읽기를 수행한다. 다른 트랜잭션이 가지고 있는 락을 기다리지 않고 읽기 작업이.. 더보기
Real My SQL - 아키텍처(2) 쿼리를 실행하는 관점에서 MySQL 구조를 설명할 수 있다. 파서 사용자로부터 요청된 SQL 문장을 서버가 인식할 수 있는 토큰으로 파싱해 트리형태의 구조를 만들어 내는 작업을 의미하다. SQL 문법 오류는 이 단계에서 필터링된다. 전처리기 파서 과정에서 만들어진 파서 트리를 기반으로 SQL 문장에 구조적인 문제가 있는지 확인한다. 각 토큰이 테이블이나 칼럼이름, 내장함수와 같은 개체에 매핑해 객체의 존재여부와 접근권한 등을 확인하는 단계이다. 실제 존재하지 않거나 권한상 접근할 수 없을경우 이 단계에서 필터링된다. 옵티마이저 요청된 문장을 저렴한 비용으로 가장 빠르게 처리하는 DBMS의 두뇌역할이다. 실행엔진 옵티마이저에 의해 수립된 실행계획을 기반으로 실행엔진은 핸들러에게 요청한다. 핸들러(스토리지 .. 더보기
Real My SQL - 아키텍처(1) My SQL 서버는 크게 MySQL 엔진과 스토리지 엔진(핸들러)로 구분해서 볼 수 있다. MySQL 엔진 - 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL 파서 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이룬다. 성능향상을 위한 MyISAM 엔진의 키 캐시나 InnoDB의 버퍼 풀과 같은 보조 저장소 기능도 포함되어 있다. 스토리지 엔진 - MySQL엔진은 요청된 SQL 문장을 파서하여 분석하거나 최적화하는 등 DBMS의 두뇌 역할을 하며, 데이터를 디스크에 저장하거나 읽어오는 역할은 스토리지 엔진이 담당한다. - 스토리지엔진은 테이블 별로 지정할 수 있다. 핸들러 API - 실행엔진이 스토리지 엔진(핸들러)에게 데이터를 읽거나 쓰기 요청을 하는데 이러한 요.. 더보기
SQL 문제풀이 6) 실력이 조금씩 상승하고 있는것을 느낍니다. 난이도 Medium 단계의 문제를 풀었는데 풀이도 보지 않고 얼마 걸리지 않았네요. 문제의 요구사항은 다음과 같습니다. code 별, power 별 최소한의 코인이 필요한 데이터를 출력하라 non-evil인 wand를 사야하며 id, age, coins_needed, power를 출력하라 power를 기준으로 내림차순 정렬하며, 같은 power일경우 age를 기준으로 내림차순 정렬하라 Wands 테이블 id code coins_needed power 1 4 3688 8 2 3 9365 3 3 3 7187 10 4 3 734 8 5 1 6020 2 6 2 6773 7 7 3 9873 9 8 3 7721 7 9 1 1647 10 10 4 504 5 Wands_pro.. 더보기
SQL 문제풀이 5) 안녕하세요. 오늘도 SQL 문제를 풀고 있습니다. 일부 막히는 부분이 있어 고민하다가 결국 풀이를 봤네요... 도대체 언제쯤 풀이를 보지 않고 풀 수 있을까.. 문제의 요구사항은 다음과 같습니다. hackers 테이블과 challenges 테이블이 존재합니다. hackers 테이블에는 hacker_id, name 칼럼이 존재하며 challenges 테이블에는 hacker_id, challenge_id가 존재합니다. 가장 많이 도전했던 hacker_id 순으로 출력하며 출력 데이터는 hacker_id, name, 도전했던 수입니다. 도전했던 수가 동일하다면 hacker_id를 오름차순으로 정렬합니다. 만약 도전했던 수가 동일한 hacker들이 존재하며 최고 도전했던 수보다 작을경우 해당 hacker들은 출.. 더보기
SQL 문제풀이 4) 오늘도 SQL 문제풀이에 대한 글을 포스팅 하겠습니다. Medium 난이도로 상승해서 풀어보니 풀 수 있는 문제가 존재하지 않네요. 계속 풀다보면 문제해결능력과 사고력이 생기지 않을까합니다. 문제 요구사항입니다. 1) 일을 시작하는 시작일자와, 일을 끝마치는 종료일자가 칼럼으로 주어집니다. 2) 일을 끝마치는 날짜와 다른 행의 일을 시작하는 날짜가 동일할 경우 프로젝트는 동일한 프로젝트로 간주합니다. ex) 2020-12-17 2020-12-18 2020-12-18 2020-12-19 2020-12-17 ~ 2020-12-19가 동일한 프로젝트 3) 동일한 프로젝트로 간주되는 프로젝트의 시작일자와 종료일자를 구합니다. 4) 프로젝트 기간을 오름차순으로 정렬하며, 동일한 프로젝트 기간일경우 시작일자를 오름.. 더보기
SQL 문제풀이 3) 안녕하세요. 최근에는 하루 2~3시간 정도 SQL 문제풀이에 집중하고 있습니다. Medium 수준인데 풀이를 안보면 풀 수가 없네요. 대신 풀이는 확실하게 분석해서 풀어봅니다. 문제의 요구사항은 다음과 같습니다. 1. 테이블의 Lat_n 값의 median 값을 구해라 2. 소수점 4번째자리에서 반올림 해라 median 값이 무엇인지 wiki를 찾아보니 다음과 같았습니다. 1. 행의 개수가 홀수이면 중간값을 구하며, 짝수이면 중간에 있는 값 2개의 평균을 구해라 예를들면 개수가 홀수인 리스트 1, 2, 3, 4, 5가 주어졌을 때 median 값은 3입니다. 개수가 짝수인 리스트 1, 2, 3, 4, 5, 6이 주어졌을 때 median 값은 3.5입니다. 해당 풀이에는 2가지가 있었는데요. 첫번째 풀이부터.. 더보기
SQL 문제풀이 2) 오늘은 SQL 문제풀이 난이도 Hard 문제를 풀어봤습니다. 2시간동안 풀어봤는데 정말 어렵더군요. 결국 풀이를 보며 이해하는 것조차도 오래걸렸습니다. 문제의 요구사항은 다음과 같습니다. 1. 날짜별 시작일로부터 최소 하나이상의 제출을 했던 해커의 숫자 출력 2. 날짜별 제출했던 수가 많은 해커 아이디 출력, 만약 같을 경우 해커의 아이디 오름차순 3. 2번의 해커의 아이디에 대한 이름 출력 테이블의 구조는 다음과 같습니다. Hackers hacker_id name 15758 Rose 20703 Angela 36396 Frank 44065 Patrick 53473 Kimberly Submissions submission_date submission_id hacker_di score 2016-03-01 2.. 더보기