PostgreSQL Bulk IO 처리를 위한 Ring Buffer
사내 스터디에서 PostgreSQL9.6 성능이야기 책을 참고하여 학습 후 정리한 글입니다. Q1. IO 전략 4가지 중 BULK READ는 언제 발생할까? Shared Buffer 크기의 1/4 이상인 테이블에 대해 Seq Scan 시 발생한다. // PostgreSQL의 IO 유형 typedef enum BufferAccessStra...
사내 스터디에서 PostgreSQL9.6 성능이야기 책을 참고하여 학습 후 정리한 글입니다. Q1. IO 전략 4가지 중 BULK READ는 언제 발생할까? Shared Buffer 크기의 1/4 이상인 테이블에 대해 Seq Scan 시 발생한다. // PostgreSQL의 IO 유형 typedef enum BufferAccessStra...
사내 스터디에서 PostgreSQL9.6 성능이야기 책을 참고하여 학습 후 정리한 글입니다. Shared Buffer 구조 Shared Buffer의 구성 요소 Shared Buffer 를 구성하는 요소는 크게 4가지 (해시 테이블, 해시 테이블에 딸린 해시 엘리먼트, 버퍼 상태를 관리하는 버퍼 디스크립터, 실제 블록을 저장하는 버퍼 풀) 이다. ...
사내 스터디에서 PostgreSQL9.6 성능이야기 책을 참고하여 학습 후 정리한 글입니다. 01. 아키텍처 개요 postgreSQL 의 물리적 구조는 다음과 같다. 참고 : https://severalnines.com/blog/understanding-postgresql-architecture/ Shared Memory Shared Me...
코루틴 코루틴이란 실행의 지연과 재개를 허용함으로써, 비선점적 멀티태스킹을 위한 서브 루틴을 일반화한 컴퓨터 프로그램 구성요소를 뜻한다. 비선점적 멀티태스킹이란? 비선점형 : 하나의 프로세스가 CPU를 할당받으면 종료되기 전까지 다른 프로세스가 CPU를 강제로 차지할 수 없다. 선점형 : 하나의 프로세스가 다른 프로세스 대신에 프로세서(CP...
chapter09. 제네릭스 9.1 제네릭 타입 파라미터 제네릭스를 사용하면 타입 파라미터를 받는 타입을 정의할 수 있다. 제네릭 타입의 인스턴스를 만들려면 타입 파라미터를 구체적인 타입인자로 치환해야 한다. 제네릭 클래스 Box를 정의하는 예시를 통해 알아보자. class Box<T>(val value: T) 여기서 Box 클래...
chapter08. 고차 함수: 파라미터와 반한 값으로 람다 사용 8.1 고차 함수 정의 고차 함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수다. 코틀린에서는 람다나 함수 참조를 사용해 함수를 값으로 표현할 수 있다. 따라서 고차 함수는 람다나 함수 참조를 인자로 넘길 수 있거나 람다나 함수 참조를 반환하는 함수다. 8.1.1 함수 타입 ...
chapter07. 연산자 오버로딩과 기타 관례 7.1 산술 연산자 오버로딩 7.1.1 이항 산술 연산 오버로딩 코틀린에서 이항 산술 연산자를 오버로딩하려면, 클래스에 해당 연산자에 대한 멤버 함수를 정의해야한다. 예를 들어 + 연산자를 오버로딩하려면 plus라는 멤버 함수를 정의해야한다. x 좌표와 y 좌표를 갖는 필드를 갖는 Point라는...
chapter06. 코틀린 타입 시스템 6.1 널 가능성 6.1.1 널이 될 수 있는 타입: ? 코틀린 타입 시스템은 널이 될 수 있는 타입을 명시적으로 지원한다. 기본적으로 코틀린의 타입은 null 참조를 저장할 수 없다. 널 허용 타입 만들기 널과 명시된 타입을 인자로 받을 수 있게 하려면 타입 뒤에 물음표(?)를 명시해야 한다. 널이 ...
chapter05. 람다로 프로그래밍 5.1 람다 식과 멤버 참조 5.1.1 람다 소개: 코드 블록을 함수 인자로 넘기기 코틀린은 함수형 프로그래밍을 지원하며, 함수형 프로그래밍에서는 함수를 값처럼 다룰 수 있어 함수를 직접 다른 함수에 전달할 수 있다. 이 때 람다 식을 사용하면 함수를 선언할 필요가 없고 코드 블록을 직접 함수의 인자로 전달...
chapter04. 클래스, 객체, 인터페이스 4.1 클래스 계층 정의 4.1.1 코틀린 인터페이스 코틀린 인터페이스 안에는 추상 메서드 뿐 아니라 구현이 있는 메서드를 정의할 수 있다. 다만 인터페이스에는 아무런 상태(필드)도 들어갈 수 없다. 만약 인터페이스를 여러개 상속 받을 때 인터페이스에 디폴트 구현이 들어있는 동일한 이름과 시그니처가...