일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 학점
- K6
- gradle
- 오라클
- oracle
- 프로젝트
- 파이썬 소스
- 문법 정리
- 파이썬
- hyperledger
- 리눅스
- 자바 프로젝트
- 티스토리
- 자바
- 오라클 디비
- JVM
- 운영체제
- dynamic query
- MongoDB
- resilience4j
- 유사코드
- 백준 알고리즘
- jsp
- c#
- 초대장
- smart cast
- spring
- 알고리즘
- SQL
- auto configure
- Today
- Total
목록Programming/데이터베이스 (34)
모종닷컴
mariadb에서 시퀀스 테이블을 생성하거나 혹은 변경할 때 변수를 사용할 수 없는 제약이 있습니다. 이는 동적 쿼리를 이용하여 해결이 가능한데 간단하게 공유드립니다. MariaDB 설치 및 실행 먼저 docker를 이용해서 maria db를 설치합니다. 가장 간단하게 mariadb를 실행하는 방법은 terminal에서 docker 명령어로 실행시키는 방법입니다. docker run -d \ --name=db \ -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=password \ -e MYSQL_DATABASE=mariadb_test \ --restart always \ mariadb:10.3.8 \ mysqld --character-set-server=utf8 --collation-..
Transaction 먼저 트랜잭션이란 연속되는 연산들을 묶은 단위입니다. 이 단위에 정의된 연속된 연산들이 모두 성공해야 트랜잭션이 성공하며, 이 연산들 중 일부가 실패하면 정의된 연산들은 모두 실행되지 않았던 시점으로 다시 돌아가야 합니다. 예를 들어 A가 B에게 M원을 송금하는 것을 트랜젝션으로 정의한다면 아래와 같은 연산들이 포함될 것입니다. A가 B에게 M원을 송금한다 B의 계좌 상태가 유효한지 체크 A의 계좌에서 M원을 차감할 수 있는지 체크 A의 계좌에서 M원을 차감 B의 계좌에 M원을 더한다. 연산이 제대로 이루어졌는지 체크 트랜잭션 완료. 이러한 연산을 실행하는 중 4번 연산(=B의 계좌에 M원을 더하는 연산)에서 이 알 수 없는 오류에 실패하였을 때 A의 계좌에서 M원을 차감했던 것을 ..
MongoDB 준비 MongoDB replication 세팅을 위해서는 2개 이상의 몽고 인스턴스가 필요합니다. 문서를 보면 일반적으로는 3개의 인스턴스로 구성하는 게 가장 일반적인 설정인 것 같습니다. 테스트 편의를 위해 도커를 사용하도록 하겠습니다. 도커가 없다면 로컬에 몽고DB 인스턴스를 3개 준비해주셔도 무방 할 겁니다. version: "3.6" services: mongo-1: image: mongo:4.4 container_name: mongo-1 ports: - "30000:30000" command: mongod --replSet replset --port 30000 mongo-2: image: mongo:4.4 container_name: mongo-2 ports: - "30001:30..
이전 글 : https://monny.tistory.com/223 VIEW 알고리즘 이해하기 - MERGE 편 뷰 테이블이 있는데 되게 느려져서 좀 찾아보다가 알게된 부분들이 있어 글로 정리하려고 합니다. 알고리즘 MySQL에서 뷰를 처리할 때 알고리즘의 종류는 아래와 같다. MERGE : MERGE를 사용하면 뷰 monny.tistory.com 이전 글에서 MERGE에 대해서 알아보았습니다. 오늘은 TEMPTABLE 전략에 대해 알아보려고 하는데 TEMPTABLE 전략은 아래 글의 Materialize와 같습니다. 옵티마이저의 파생 테이블 관련 전략 옵티마이저는 파생 테이블 참조를 두 가지 전략을 이용하여 다룹니다. Merge (병합) : 외부 쿼리에 파생 테이블을 병합. Materialize (구체화..
뷰 테이블이 있는데 되게 느려져서 좀 찾아보다가 알게된 부분들이 있어 글로 정리하려고 합니다. 알고리즘 MySQL에서 뷰를 처리할 때 알고리즘의 종류는 아래와 같다. MERGE : MERGE를 사용하면 뷰 정의와 뷰를 참조하는 명령문의 관련 부분이 병합됩니다 TEMPTABLE : TEMPTABLE을 선택하면 뷰 결과가 임시 테이블에 저장됩니다. UNDEFINED : MySQL이 사용할 알고리즘을 정합니다. 기본 알고리즘은 optimizer_switch 시스템 변수의 derived_merge 플래그 값에 결정됩니다. UNDEFINED 뷰 알고리즘은 아래와 같은 상황에 지정됩니다. CREATE VIEW 에 알고리즘을 지정하지 않았을 때 CREATE VIEW 문에 명시적으로 ALGORGERM = UNDEFI..
mongodb에 특정 기간 안에 생성된 데이터를 검색해야 할 일이 있었습니다. mongodb를 자주 다뤄보지는 않아 between 관련 쿼리를 구글에 검색해봤는데 어떤 글은 new Date를 사용하고 어떤 글에서는 ISODate를 이용해서 쿼리를 날린다고 합니다.. 이 두 개의 차이가 뭘까 하고 알아보았는데 일단 mongodb에는 항상 UTC를 기준으로 시간 데이터가 입력된다고 합니다. 따라서 한국 20시 00분의 시간을 mongo에 저장하면 11시 00분이 들어가게 되는 것이죠. 이게 사실인지 확인해보기 위해 실습을 조금 해봤습니다. Spring Boot + Mongodb 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-data-..
버퍼 풀 InnoDB 스토리지 엔진의 핵심적인 부분이다. 디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐시해 두는 공간. 쓰기 작업을 지연시켜 일괄 작업으로 처리할 수 있게 해주는 버퍼 역할도 같이 한다. => 디스크 작업의 횟수를 줄일 수 있다. 버퍼 풀 사이즈 운영체제와 클라이언트 스레드가 사용할 메모리를 고려하여 설정해야 한다. 클라이언트 세션에서 테이블의 레코드를 읽고 쓸 때 버퍼로 사용하는 공간을 '레코드 버퍼'라고 하는데, 커넥션이 많고 사용하는 테이블도 많다면 레코드 버퍼 용도로 사용되는 공간이 많이 필요해질 수 있다. 하지만 레코드 버퍼 공간은 별도로 설정할 수 없으며, 전체 커넥션 수와 커넥션에서 읽고 쓰는 테이블의 개수를 가늠할 수 없으므로 정확한 메모리 공간 산정이 어렵다. 위에서..
InnoDB 스토리지 엔진 아키텍처 InnoDB는 MySQL에서 사용할 수 있는 스토리지 엔진 중 거의 유일하게 레코드 기반의 잠금을 제공해서 높은 동시성 처리가 가능한 스토리지 엔진입니다. InnoDB의 특징들을 하나씩 알아보도록 하겠습니다. Primary Key 클러스터링 InnoDB의 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링되어 디스크에 저장됩니다. 프라이머리 키 외에 세컨더리 인덱스가 존재하는데 이곳에는 레코드의 주소(디스크의 데이터 위치)가 아닌 프라이머리 키의 값을 논리적인 주소로 사용합니다. 따라서 디스크는 프라이머리 키 기준으로 저장되어 있어 프라이머리 키를 이용한 레인지 스캔은 상당히 빨리 처리될 수 있습니다. Foreign Key 지원 외래 키에 대한 지원은 Inno..
쿼리 파서 요청으로 들어온 쿼리 문장을 토큰(MySQL이 인식할 수 있는 최소 단위의 어휘나 기호)으로 분리해 트리 형태의 구조로 만든다. 쿼리 문장의 기본 문법 오류는 이 과정에서 발견 전처리기 각 토큰을 테이블 이름이나 칼럼 이름, 또는 내장 함수와 같은 개체를 매핑해 해당 객체의 존재 여부와 객체의 접근 권한 등을 확인하는 과정 옵티마이저 사용자의 요청으로 들어온 쿼리 문장을 저렴한 비용으로 가장 빠르게 처리할지를 결정 DBMS의 두뇌에 해당 실행 엔진 만들어진 계획대로 각 핸들러에게 요청해서 받은 결과를 또 다른 핸들러 요청의 입력으로 연결하는 역할 수행 옵티마이저가 두뇌라면 실행 엔진은 손과 발 핸들러 (스토리지 엔진) MySQL 서버의 가장 밑단에서 MySQL 실행 엔진의 요청에 따라 데이터를..
플러그인 스토리지 엔진 모델 MySQL에서 쿼리가 실행되는 과정을 본다면 거의 대부분의 작업이 MySQL 엔진에서 처리되고, 마지막 '데이터 읽기/쓰기' 작업만 스토리지 엔진에 의해 처리된다. MySQL 에는 이미 기본적으로 많은 스토리지 엔진을 지니고 있다. 하지만 수많은 사용자의 요구 조건을 만족시키기 위해 기본적으로 제공되는 스토리지 엔진 이외에 부가적인 기능을 더 제공하는 스토리지 엔진이 필요할 수 있기에, 사용자가 직접 스토리지 엔진을 개발하는 것(=플러그인)도 가능하다. 플러그인해서 사용할 수 있는 것이 스토리지 엔진만은 아니다. 검색어 파서도 플러그인 형태로 개발해서 사용할 수 있으며, 사용자의 인증을 위한 플러그인도 있다. 모든 쿼리 작업에 스토리지 엔진 모델이 적용되지는 않는다. MySQ..