컴퓨터 과학 79

Chapter 08.04 R-Tree 인덱스 ~ 08.05 전문 검색 인덱스

8.5 전문 검색 인덱스(Full text Search Index) Def) 전문 검색 인덱스: 문서 전체에 대한 분석과 검색을 위한 인덱싱 알고리즘을 말한다. B-Tree인덱스는 실제 칼럼의 값이 1MB 이더라도 1MB 전체의 값을 인덱스 키로 사용하는 게 아니라 1000 바이트(MyISAM) 또는 3072바이트(InnoDB)까지만 잘라서 인덱스 키로 사용한다. B-Tree인덱스는전체 일치나 좌측 일부 일치와 같은 검색만 가능하다. 문서 내용 전체를 인덱스화해서 특정 키워드가 포함된 문서를 검색하는 전문(FullText )검색에는 InnoDB나 MyISAM 스토리지 엔진에서 제공하는 일반적 용도의 B-Tree인덱스를 사용할 수 없다. 8.5.1 인덱스 알고리즘 전문 검색에서는 문서 본문 내용에서 사용자..

Chapter 08.03 B-Tree 인덱스

8.3 B-Tree 인덱스 B-Tree는 칼럼의 원래 값을 변형하지 않고 인덱스 구조체 내에서는 항상 정렬된 상태로 유지한다. 전문 검색 같은 특수 상황이 아닌 경우, 대부분 B-Tree를 사용한다. B-Tree는 데이터베이스 인덱싱 알고리즘 가운데 가장 일반적으로 사용되고, 가장 먼저 도입된 알고리즘이다. 현재도 가장 범용적인 목적으로 사용된다. 일반적으로 B+-Tree, B*-Tree 가 사용된다. B-Tree의 B는 "balanced"를 의미한다. 8.3.1 구조 및 특성 B-Tree는 트리 구조에서 최상위에 하나의 루트노드가 존재하고 그 하위에 자식 노드가 붙어 있는 형태이다. 트리 구조에서 가장 하위의 노드: 리프 노드(leaf node) 루트 노드도 아니고 리브 노드도 아닌 노드: 브랜치 노드..

Chapter 08.01 디스크 읽기 방식 ~ 08.02 인덱스란?

8.1 디스크 읽기 방식 컴퓨터의 CPU나 메모리처럼 전기적 특성을 띤 장치의 성능을 빠른속도로 발전했으나 디스크같은 기계식 장치의 성능은 제한적으로 발전했다. 최근에는 하드디스크보다 SSD드라이브를 많이 사용하지만 여전히 데이터 저장 매체는 컴퓨터에서 가장 느린 부분이다. 8.1.1 하드 디스크 드라이브(HDD)와 솔리드 스테이트 드라이브(SSD) 컴퓨터에서 CPU나 메모리같은 주요 장치는 대부분 전자식 장치지만 하드 디스크 드라이브는 기계식 장치이다. 그래서 데이터베이스 서버에서는 항상 디스크 장치가 병목이 된다. 이런 HDD를 대체하기 위해 SSD가 많이 출시되고 있다. SSD는 기존 하드 디스크의 데이터 저장용 플래터(원판)을 제거하고 그 대신 플래시 메모리를 장착하고 있다. HDD처럼 원판을 회..

Chapter 05. 트랜잭션과 잠금

5.1 트랜잭션 트랜잭션이란 작업의 완전성을 보장해주는 것이다. 논리적인 작업 셋을 모두 완벽 처리하거나 처리하지 못할 때에는 원 상태로 복구해서 작업의 일부만 적용되는 현상(partial update)이 발생하지 않도록 만들어주는 기능이다. MyISAM은 트랜잭션이 지원되지 않는다. 잠금(Lock)과 트랜잭션의 차이 잠금: 동시성을 제어하는 기능이다. ex) 여러 커넥션에서 하나의 데이터를 동시에 수정하려고 하는 경우에 적용하는 기능 트랜잭션: 데이터의 정합성을 보장하기 위한 기능이다. 격리 수준: 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨을 의미한다. 데이터의 정합성(consistency): 데이터가 모순없이 일관되어야한다. 5.1.1 ..

Chapter 04.03 MyISAM 스토리지 엔진 아키텍처(architecture) ~ 04.04 MySQL 로그 파일

4.3 MyISAM 스토리지 엔진 아키텍처(architecture) 4.3.1 키 캐시(Key Cache) 키 캐시(key cache, 키 버퍼) MyISAM의 키 캐시는 InnoDB의 버퍼 풀과 비슷한 역할을 한다. 인덱스만 대상으로 동작한다. 키 캐시의 효율성 판단 key_reads: 인덱스를 디스크에서 읽어 들인 횟수를 저장하는 상태 변수 key_read_requests: 키 캐시로부터 인덱스를 읽은 횟수를 저장하는 상태 변수 키 캐시 히트율(Hit rate) = 100 - (key_reads / key_read_requests * 100) 키 캐시율 99% 이상으로 권장한다. 아래 코드로 key_read_requests를 확인 가능 SHOW CLOBAL STATUS LIKE 'Key%'; key_..

Chapter 04.02 InnoDB 스토리지 엔진 아키텍처(architecture)

4.2  InnoDB 스토리지 엔진 아키텍처(architecture)InnoDB는 MySQL의 스토리지 엔진 가운데 가장 많이 사용된다.MySQL 스토리지 엔진 중 유일하게 레코드 기반의 잠금을 제공한다.동시성 처리 가능하고 안정적, 성능 뛰어나다. cf) 클러스터링(Clustering)이란?하나의 데이터베이스를 여러 개의 서버로 구축하는 것을 말한다.1개의 서버에 데이터베이스를 이용할 경우, 서버가 다운될 경우 서비스가 다운되기 때문에 클러스터링을 이용한다. 4.2.1 프라이머리 키(Primary Key)에 의해 클러스터링InnoDB의 모든 테이블의 PK를 기준으로 클러스터링(Clustering)되어 저장된다.(PK = 클러스터링 인덱스)PK 순서대로 디스크에 ..

Chapter 04.01 MySQL 엔진 아키텍처(architecture)

MySQL (서버)에 대한 구분 사람의 머리 역할을 하는 MySQL 엔진 커넥션 핸들러, SQL 인터페이스, SQL 파서, SQL 옵티마이저, 캐시 & 버퍼 손발 역할 담당하는 스토리지 엔진: 핸들러 API를 만족하면 스토리지 엔진을 구현해서 MySQL 서버에 추가해서 사용 가능하다. InnoDB, MyISAM, Memory MySQL (서버)은 크게 MySQL엔진 + 스토리지 엔진으로 구성된다. 4.1 MySQL 엔진 아키텍처 MySQL(서버)는 다른 DBMS에 비해 독특한 구조로 이뤄져서 큰 혜택이 있는 동시에 다른 DBMS에서는 생기지 않는 문제가 발생하기도 한다. 4.1.1 MySQL의 전체 구조 프로그래밍 언어로부터 MySQL에 접근하는 방법 C API, JDBC, .NET 의 표준 드라이버 제..

[programmers] GROUP BY

진료과별 총 예약 횟수 출력하기 - level 2 출처 - https://school.programmers.co.kr/learn/courses/30/lessons/132202 GROUP BY, WHERE 절을 이용한다. Sol) SELECT MCDP_CD '진료과코드', COUNT(*) '5월예약건수' FROM APPOINTMENT WHERE YEAR(APNT_YMD) = 2022 AND MONTH(APNT_YMD) = 5 GROUP BY MCDP_CD ORDER BY 2, 1 식품 분류별 가장 비싼 식품의 정보 조회하기 - level 4 출처 - https://school.programmers.co.kr/learn/courses/30/lessons/131116 cf) 정답 # 식용 마저유: 8950 #..

[leetcode] Day 2. SELECT & Order

1873. Special Bonus 출처 - https://leetcode.com/problems/calculate-special-bonus/ Write an SQL query to calculate the bonus of each employee. The bonus of an employee is 100% of their salary ,if the ID of the employee is an odd number and the employee name does not start with the character 'M'. The bonus of an employee is 0 otherwise. Return the result table ordered by employee_id. The query resul..

Chapter 07. Git 사용하기

7.1 clone clone: 로컬에서 작업하기 위해 remote repository를 복제해서 내 PC에 local repository로 저장한다. ssh를 선택한다. https 방식은 보안상 취약하다. ssh 방식은 클론 받을 컴퓨터가 이 프로젝트에 대해 접근할 수 있는 권한을 가지고 있는지 체크한다. 7.2 add, commit, push, pull 기본 용어 origin: 원격(깃허브 저장소)에 있는 코드 자체를 의미한다. head: 내가 작업 중인 로컬 브랜치 add: working directory에서 staging area로 등록한다. commit: staging area에서 local 저장소에 등록한다. commit message: commit 할 때 등록하는 메모 push: local 저..