2022/12 12

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) 루트 노드도 아니고 리브 노드도 아닌 노드: 브랜치 노드..

[12월 2주차] 알고리즘 스터디

1. 수들의 합 4 - 골드 4 출처 - https://www.acmicpc.net/problem/2015 Sol) 스터디원 코드 JW - 440 ms public class Test3 { public static BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); public static BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(System.out)); public static int N; public static int K; public static Map nums = new HashMap(); public static long result; pub..

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

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

[4단계] 태양계 애니메이션 - 미완성

Ex) 1,2,3 단계에서 만든 것을 활용해서 태양계 애니메이션을 만든다. Sol) public class Animation extends JFrame { static int width = 2000; static int height = 1000; static JPanel page1 = new JPanel() { Image background = new ImageIcon(Animation.class.getResource("\\img\\sun.png")).getImage(); public void paint(Graphics g) { g.drawImage(background, width / 2 - 100, height / 2 - 100, null);// background를 그려줌, x값은 x값 그대로, y값..

[3단계] 콘솔 태양계 출력 프로그램 완성

Ex) 연, 월, 일을 입력하면 태양계가 출력되도록 하라 태양, 지구, 달 외에 다른 행성, 인공 위성 등을 추가해도 된다. Sol) Planet 클래스 2단계의 공전 클래스 메서드를 가져와서 조금만 수정했다. 지구는 검은 별, 달은 달 모양으로 표시한다. 은하수를 추가하는 메서드를 이용해서 은하수를 그린 다음에 태양, 지구, 달을 그린다. 태양, 지구, 달 그리는 메서드를 모두 따로 만들었다. public class Planet { static char[][] graph = new char[50][50]; static Set sunCharSet = Set.of('\\', '!', '/', 'O', '-', '|', '.', '*', 'Y', 'o', 'u', 'A', 'r', 'e', ' ', 'H',..

[2단계] 지구 태양 달의 위치 표시하기

Ex) 날짜(m월 d일)를 입력 받아서 지구, 태양, 달의 위치를 표시하기 1월 1일은 태양, 지구, 달이 일직선 상에 위치한다고 가정한다. 문제에 주어지지 않았으나 지구와 달이 모두 반시계 반향으로 공전한다고 가정했다. 그래프 크기 50 * 50, 태양의 지름: 5, 지구: 3, 달 1로 설정한다. Sol) public class Revolution { static final double mercuryOrbitalPeriod = 88; public static LocalDate enterDate() throws IOException { System.out.println("날짜를 입력하세요. ex) m월 d일"); BufferedReader br = new BufferedReader(new InputSt..

[1단계] 콘솔로 원 출력하기

Ex ) 3이상 80이하 값을 입력 받아서 입력값을 지름으로 하는 원을 출력한다. Sol) /** * 1단계 콘솔로 원 그리기 */ public class Circle { static char[][] graph = new char[100][100]; public static int inputDiameter() { System.out.println("원의 크기는?"); Scanner scanner = new Scanner(System.in); int r; try { r = scanner.nextInt(); } catch (InputMismatchException e) { throw new RuntimeException("[ERROR] 숫자만 입력 가능합니다."); } if (r 80) ..

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_..