RDBMS
[Transaction] lost update problem (isolation level, deadlock, update lock)
[Transaction] lost update problem (isolation level, deadlock, update lock)
2019.07.23포인트 읽기 - 포인트 차감 순으로 DB 작업이 발생하는 상황이었다. ```java @Transactional public foo bar() { // SELECT MemberRestMileageInfo member = getMemberMileageByKey(memberKey); ... // UPDATE memberInfoMapper.update(member); } ``` 이런 상황에서 같은 `` memberKey`` 를 대상으로 빠르게 두 번 요청하면 갱신 손실 문제가 발생한다. ``` T1 T2 start transaction start transaction SELECT SELECT UPDATE UPDATE ``` 즉, 먼저 들어온 트랜잭션이 UPDATE 하기 전에 다른 트랜잭션이 SELECT를 해버리..
[Oracle] 오라클 개요 및 정리
[Oracle] 오라클 개요 및 정리
2019.05.31DBGuide.net 오라클 oracle 장점? 왜 기업에서 오라클을 선호하는가? 성능이 좋고 다양한 옵션이나 기능을 제공한다는 장점도 있긴 하지만, 가장 큰 이유 중 하나는 안정성. 어떤 관점에서 안정성이 좋은가? RAC를 통한 고가용성 => DB 이중화 / 클러스터링 간단히 정리하면, 스토리지와 오라클 인스턴스를 분리해서 인스턴스에 장애가 나더라도 유실 없이 다른 인스턴스에서 곧바로 Active로 서비스 할 수 있다는 것. 타입 관련 팁 숫자 타입은 `` NUMBER``를 쓰는 것이 좋다. `` NUMBER(, )``로, 가변길이 타입이다 문자열은 `` CHAR || VARCHAR2`` 날짜 저장은 `` DATE``를 사용하는 것이 좋다. 삽입할 때 TRUNC()함수로 시분초를 잘라 넣어라. CONS..
DB 접근 툴 : Universal Database Tool
DB 접근 툴 : Universal Database Tool
2019.05.27https://www.eversql.com/top-7-mysql-gui-tools-for-windows/ DBeaver 다양한 DB들을 지원하고, Enterprise 버전이면 NoSQL들도 지원함. SQL developer Oracle을 쓸거라면 무난하고 괜찮음. Sequel Pro 괜찮은 듯? JetBrain DataGrip JetBrain에서 나온거라 친숙하고 여러모로 괜찮을 듯 유료라는 것만 빼면 ㅎ IntelliJ 내장 DB Tool 뭐 대단한 작업 할게 아니면 그냥 IntelliJ에 내장되어 있는 DB Tool 기능을 활용한다. 스마트 서치에서 Database 입력하면 있음. 단점은 intelliJ 프로젝트 마다 각각 DB연결 설정을 따로 해줘야 한다는 점. 뭔가 좀 더 복잡한 작업을 해야 하거..
8장. 직접화일 : 해시테이블, 확장성 해싱 VS 선형 해싱
8장. 직접화일 : 해시테이블, 확장성 해싱 VS 선형 해싱
2019.01.18왜 선형 해싱과 확장성 해싱이 modular 보다 나은가? modular는 overflow로 인한 확장이 발생했을 때, 전체 데이터를 다 재배치해주어야 한다. 반면 선형 해싱과 확장성 해싱은 overflow가 발생하는 버킷만 split하므로 데이터 재배치를 최대한 줄일 수 있다. 즉 선형 해싱과 확장성 해싱을 사용해도 데이터의 이동을 완전히 피할 수는 없지만 modular 보다는 낫다. 선형 해싱 (Linear hashing) 선형 해싱은 next에 대한 정보가 필요 (next 이전이면 3bit 접근, 이후이면 2bit 접근) 별도로 유지하거나, 유지 안해도 bucket 개수로 evaluation 가능할 듯 확장성 해싱 (Extendiable hashing) 확장성 해싱은 global 디렉터리 구조(bu..
6장. 인덱스 구조 / 7장. 인덱스된 순차 화일 : B트리
6장. 인덱스 구조 / 7장. 인덱스된 순차 화일 : B트리
2019.01.026장. 물리적 데이터베이스 설계 : 인덱스 관련 B 트리 이진트리 (binary search tree) (2-원 탐색 트리) 의 단점? 한쪽으로 편향되는 경우 탐색이 오래걸린다. 분기율(branching factor)이 2로 너무 낮아 트리가 너무 높아지고 탐색 경로가 길어질 수 있다. B 트리? B 트리의 B는 Balance로, 균형 트리다. m-원 탐색 트리로 분기율 선택 가능. 특징 leaf node 뿐만 아니라 중간 node에도 모두 데이터 레코드의 주소를 저장. 따라서 순차 탐색 하는 경우 중위 순회 해야 함. 순차 탐색 성능 나쁨. 반면 최상위 node가 가리키는 데이터 레코드는 빠르게 접근 가능. B+ 트리 즉 B트리와 B+트리의 가장 큰 차이는 B+트리는 leaf node만 데이터 레코드 ..
7장. 릴레이션 정규화
7장. 릴레이션 정규화
2018.04.12ER 스키마 >> 릴레이션 사상 간단한 요소에서 복잡한 요소 순으로 사상한다. 단계 1: 정규 엔티티 타입 단계 2: 약한 엔티티 타입 단계 3: 2진 1:1 관계 타입 단계 4: 정규 2진 1:N 관계 타입 단계 5: 2진 M:N 관계 타입 단계 6: 3진 관계 타입 단계 7: 다치 애트리뷰트 정규화 Normalization 정규화란 무엇이고 왜 하나? 정규화란? 릴레이션 스키마를 함수적 종속성과 기본키를 기반으로 분리하는 것. 왜 하나? 1. 데이터 중복 최소화 2. [수정, 삽입, 삭제] 이상 최소화 (보통 데이터 중복 -> 갱신 이상으로 이어지는 경우가 많음.) 세 가지 갱신 이상 수정 이상 : 데이터가 중복되어 모든 항목을 일괄 수정하지 않으면 데이터 불일치가 발생 삽입 이상 : 불필요한 정보를..
6장. 물리적 데이터베이스 설계 : 인덱스 기본 원리
6장. 물리적 데이터베이스 설계 : 인덱스 기본 원리
2018.04.06디스크 상에서 화일의 레코드 배치 결국 DB에 저장되어 있는 레코드들도 최종적으로는 파일 안에 들어있다. [원하는 레코드가 위치한 블록을 어떻게 빨리 찾을 것인가?, 블록을 얼마나 적게 읽을 것인가?]가 핵심. Disk IO는 block 단위로 이루어지기 때문에 block을 몇 개 읽어야 하는지가 중요하다. (page 단위로 메모리에 올리게 되니까) DBMS의 버퍼 관리 어차피 DB에 있는 레코드들도 다 디스크에 저장되어 있다가 메모리에 올라가야 서빙이 가능함. DBMS는 메모리에서 버퍼 영역을 따로 잡고 관리함. 다단계 인덱스 대부분의 다단계 인덱스는 B+ 트리를 사용 06장. 인덱스 구조 / 07장. 인덱스된 순차 화일 : B트리 클러스터링 인덱스 vs 비 클러스터링 인덱스 클러스터링 인덱스 (기본 ..
5장. 데이터베이스 설계와 ER 모델
5장. 데이터베이스 설계와 ER 모델
2018.01.07ERD (Entity-Relationship Diagram) 중요성 개체-관계 모델 설명 wiki ERD가 없으면 기존 구조를 파악하기 어려워, 새로운 컬럼이나 테이블을 추가하면서 역정규화 되거나, 같은 내용의 컬럼이 서로 다른 테이블 2개에 각각 생성되는 경우가 빈번하다. 이는 갱신이상 등 데이터 불일치를 유발한다. 이런 식으로 같은 용도의 테이블을 여러개 추가하다 보면 돌이킬 수 없어진다. 나중에 정규화 하려고 했는데 기존 레코드를 싹 다 복사해서 2개로 나눠주어야만 한다거나, migration이 운영 환경에 영향을 주는 등 불상사가 발생할 수 있다. 따로 손으로 관리하기 보단 DB tool, IDE 등에서 현재 table 구조 바탕으로 ERD 자동 생성해주는 기능 사용하는게 편한데, FK를 사용하지..
[mysql] 일반적인 SQL
[mysql] 일반적인 SQL
2017.06.11쿼리 테스트 (MySQL을 쓰는건지 모르겠지만 간단한 쿼리는 어차피 공통 문법이라) https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all MySQL String Functions https://dev.mysql.com/doc/refman/5.7/en/string-functions.html CREATE TABLE | VIEW | DOMAIN CREATE TABLE Syntax & Options 자주 사용하는 옵션만 포함하면 이렇다. ```sql CREATE TABLE tbl_name( col_name1 data_type [NOT NULL] [AUTO_INCREMENT] [PRIMARY KEY], user_id BIGINT UNSIGNED ..
[mysql] 초기 설정 및 계정, DB
[mysql] 초기 설정 및 계정, DB
2017.06.11```bashsudo service mysql startsudo mysql 또는 mysql -u root [-p] [db_name]```ERROR 1045 (28000): Access denied for user 뜨면서 안될 때는 패스워드를 설정해준다.```bashmysqladmin -u root -p password``` SHOW자주 쓰는 ``sql SHOW`` 명령어```sqlhelp show; SHOW DATABASES;SHOW TABLES;SHOW FIELDS FROM tbl_name; -- Type | Null | Key | Default | Extra``` SET PASSWORD```sqlSET PASSWORD FOR user@host = PASSWORD('pw');````` root@loca..