본문 바로가기
728x90

카테고리249

[RealMysql 8.0]04아키텍처 4.2.1 ~ 4.2.6 프라이머리 키에 의한 클러스터링 InnoDb의 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링되어 저장된다. 즉 프라이머리 키 값의 순서대로 디스크에 저장된다. 모든 세컨더리 인덱스는 레코드의 주소 대신 프라이머리 키의 값을 논리적인 주소로 사용한다.(디스크 접근도 프라이머리 키로 접근한다.) 프라이머리 키를 통한 범위 검색이 매우 빠르지만, 쓰기 성능은 저하된다. 클러스터링? 테이블을 여러 노드로 분산하는 기술, 이를 통해 데이터베이스의 성능과 확장성을 향상시킬 수 있음. 두 대 이상의 서버를 하나의 서버처럼 운영하는 기술 mysql 은 프라이머리 키를 기준으로 클러스터링하기 때문에 프라이머리 키 값에 대한 인덱싱을 통해 쿼리가 빠르게 수행됩니다. InnoDb 스토리지 엔진과는 달리 MyI.. 2023. 1. 28.
[RealMysql 8.0]04아키텍처 4.1.3 ~ 4.1.10 그냥 기억 정리. 메모리 할당 및 사용 구조 mysql 에서 사용되는 메모리 공간은 크게 글로벌 메모리 영역, 로컬 메모리 영역으로 구분할 수 있다. 글로벌 메모리 영역 mysql 서버가 시작되면서 운영체제로부터 할당된다. 클라이언트 스레드와 무관하게 하나의 메모리 공간만 할당 받는다. 필요에따라 n개의 메모리 공간을 할당 받을 수 있지만 이는 클라이언트 스레드 수와는 무관하다. 생성된 글로벌 영역이 n개라 하더라도 모든 스레드에 의해 공유된다. 대표적인 메모리 영역은 => 테이블 캐시, InnoDb 버퍼 풀, InnoDb 리두 로그 버퍼 등이 있다. 로컬 메모리 영역 세션메모리 영역이라고도 한다.(클라이언트와 서버의 커넥션을 세션이라 부르기도 하여) 클라이언트 스레드가 쿼리를 처리하는 데 사용하는 메모.. 2023. 1. 28.
[RealMysql 8.0]04아키텍처 4.1 ~ 4.1.2.2 그냥 기억 정리 글. MySql 엔진 아키텍처 Mysql 서버는 크게 MySql 엔진, 스토리지 엔진으로 구분할 수 있음. 전체구조 MySql 서버 MySql 엔진 요청된 sql 문장을 분석하거나 최적화 하는 등 dbms 의 두뇌에 해당하는 처리를 수행 스토리지 엔진 실제 데이터를 디스크 스토리지에 저장, 디스크 스토리지로부터 데이터를 읽어오는 부분을 전담한다. 핸들러 API mysql 엔진의 쿼리 실행기에서 데이터를 쓰거나 읽어야 할 때, 각 스토리지 엔진에 쓰기, 읽기를 요청하는데 이러한 요청을 핸들러 요청이라하고, 여기서 사용되는 api를 핸들러 api 라고 한다. mysql 스레딩 구조 mysql 서버는 프로세스 기반이 아니라 스레딩 기반으로 작동, 크게 1.포그라운드 스레드, 2.백그라운드 스레.. 2023. 1. 28.
StringTokenizer, split 차이점[공유링크] 둘다 문자열을 구분자로 분리하고 싶을때 사용 StringTokenizer 은 java.util 메서드 split은 String 메서드 속도는 몇몇 경우에서 StringTikenizer 가 빠르다. 하지만 split 을 대부분 추천한다. 한번 읽어보면 좋은 링크: https://blog.naver.com/PostView.nhn?blogId=makga87&logNo=221949199317&parentCategoryNo=&categoryNo=17&viewDate=&isShowPopularPosts=true&from=search 2023. 1. 23.
자바 Scanner vs BufferedReader 자바로 알고리즘 풀다가 매번 입력받는 형식을 Scanner 복붙으로 하다, BufferedReader 로 받는 방식이 보여 찾아봄. Scanner 방식 import java.util.Scanner; public class Sc { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); } } BufferedReader 방식 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Bf { public static void main(Stri.. 2023. 1. 22.
클래스리스, 서브넷마스크, 서브네팅 간략히. - 클래스리스, 서브넷마스크, 서브네팅 - 플래스풀의 단점을 해결하기 위해 나옴 - 클래스별로 나누는게 아닌 서브넷마스크를 중심으로 구분함 - 서브네팅: 네트워크를 나눈다는 의미 - 서브넷: 서브네트워크, 쪼개진 네트워크 - 서브넷마스크: 서브네트워크를 위한 비트마스트 - 앞에 1의 비트만큼을 네트워크주소로 할당 - 11111111.11111111.11111111.0 - 3번째 옥텟까지를 네트워크 주소로 할당됨 - 호스트주소는 254개(256-2)까지 설정가능 - 11111111.11111111.11111111.10000000 - 호스트주소는 128개까지 설정가능 - 11111111.11111111.11111111.11000000 - 호스트주소는 64개까지 설정가능 - 즉 서브넷마스크에 비트를 &&연산자.. 2023. 1. 19.
enumMap, enumSet 에 대해 간략히 알아보자. enumMap? enumSet? enumMap, enumSet 도 Map, Set 인터페이스를 구현한다. 사용하려면 key 값으로 enum 이 있어야 하는 제약이 있음. null 을 추가할 수 없음 enumMap 은 map 처럼 같지만 enum 타입을 키로 사용하는데 특화됨 hashMap 은 키를 해싱해서 저장하지만 enumMap은 enum 상수를 인덱스로 사용하기 떄문에 해시충돌도 일어나지않음. put메소드 수행시 key 값에 ordinal 메소드를 통해 index 정보를 가져온다. jpa에서도 본 ordinal (0, 1, 2, 3, 4...) enumMap 은 내부적으로 배열로 구현되어 있기 때문에 접근 속도가 빠르다. enumSet은 다 비슷하지만 내부적으로 키가 있다 없다를 판단하는 지시자가 들.. 2023. 1. 19.
[이펙티브자바]item 15. 클래스와 멤버의 접근 권한을 최소화하라 구현과 API 분리하는 정보은닉 장점 시스템 개발 속도를 높인다 인터페이스 설계시 사용하는 쪽과 지원하는 쪽이 동시에 개발이 가능하다. 시스템 관리 비용을 낮춘다 컴포넌트를 더 빨리 파악할 수 있기 떄문에, 인터페이스 위주로 빠르게 파악이 가능하다 소스프퉤어 재사용성을 높인다 모듈화가 잘되어 있따면 병목지점을 빠르게 찾아서 처리할 수 있다. 시스템 개발 난이도를 낮춘다 큰 시스템을 개발할때 작은 단위로 나눠서 구현하다보면 전체를 구현할 수 있다. 모든 클래스와 멤버의 정급성을 가능한 한 좁혀야 한다. 톱레벨 클래스와 인터페이스에 pakage-private(default) 또는 public 을 쓸 수 있다. public 으로 선언하면 API가 되므로 하위 호환성을 유지하려면 계속 관리해야 한다. 패키지 외.. 2023. 1. 19.
[이펙티브자바]item14.Comparable을 구현할지 고려하라. 추후 업데이트 예정. 2023. 1. 19.
728x90