데이터베이스

개요 데이터베이스간의 데이터를 분리할 경우 데이터베이스 하나의 트랜잭션을 사용하여 상태 변화를 ACID 원칙에 따라서 보장할 수 없다. 이를 해결하기 위한 방안이 있다 Two Phase Commit 여러 노드들 상에서의 원자적 트랜잭션 커밋을 이루기 위한 알고리즘 또는 프로토콜 탄생 배경 싱글 노드에서 실행되는 데이터베이스의 원자성은 보통 스토리지 엔진에 의해 구현됨. 클라이언트가 데이터베이스 노드에 요청하면, 데이터베이스는 트랜잭션이 durable 하게 write 될 수 있도록 보장함 (write-ahead. log) 만약 쓰기 연산이 실패하면 log 로 부터 트랜잭션을 recovery 함. 싱글 노드 상에서, 트랜잭션 커밋은 데이터가 디스크에 쓰여진 순서에 의존하게됨. 트랜잭션의 성공여부는 커밋 레코..
개요 MongDB Replicaset 은 모든 데이터를 복제하여 가지고 있는 몽고 데이터베이스 프로세스의(mongod) 그룹임 모든 프로덕션 배포의 기초가 되며 중복을 허용하고 데이터베이스의 가용성을 높입니다. mongod 는 MongoDB 시스템의 기본 데몬 프로세스입니다. 데이터 요청 처리, 데이터 엑세스 관리, 백그라운드 관리 작업을 수행합니다. 중복성과 가용성 중복성 분산 시스템 환경에서 데이터의 복제본을 여러 서버에 유지하는것은 조회 연산의 overhead를 분산시킬 수 있고, 데이터의 지역성을 높일 수 있음 가용성 각 데이터베이스 서버는 동일한 데이터를 가지고있기 때문에 Primary 서버가 다운될경우에도 이를 교체할 수 있음 => increase fault tolerance Replicati..
Database Connection Pool 데이터베이스와 백엔드 서버가 데이터를 주고받을 때 TCP 프로토콜을 기반으로 데이터를 전달받음. TCP 를 기반으로 데이터를 송수신하기 위해서는 매번 connection 을 열고 닫아줘야하는데 이때 시간적인 비용이 발생함 → 서비스 성능에 좋지 않음 DBCP 커넥션 N 개를 미리 열어놓고 connection 을 반환하는 방식으로 연결을 수립하고 종료하는 시간을 절약하는 방식으로 동작함 설정방법 백엔드 서버와 데이터베이스 서버에서의 설정을 통해 명시할 수 있음 MySQL max_connections client 와 맺을 수 있는 최대 connection 수 wait_timeout connection 이 inactive 할 때 다시 요청이 오기까지 얼마의 시간이 ..
개요 해당 글은 쉬운코드님의 https://www.youtube.com/watch?v=0PScmeO3Fig&t=31s 를 시청하고 개인적으로 정리한 글입니다 :) 쓰기 락 (베타 락) read/write 할 때 사용한다 다른 트랜잭션이 데이터를 read/write 하는 것을 허용하지 않는다. 데이터베이스에서 값을 변경하는 작업은 단순히 값 하나 바꾸는 것보다 더 복잡한 과정을 거친다 (인덱스 테이블 갱신, 파일 입출력), 같은 데이터에 read/write 가 발생하면 예상치 못한 동작을 할 수 있다. 읽기 락 (공유 락) read 할 때 사용한다 다른 트랜잭션이 같은 데이터를 읽는 것을 허용한다 락을 사용해도 이상한 결과가 반환될 수 있을때 (x=100, y=200) 이란 데이터베이스가 존재할때 서로 다..
개요 해당 글은 쉬운코드님의 https://www.youtube.com/watch?v=89TZbhmo8zk 영상을 시청하고 개인적으로 정리한 글입니다:) Unrecoverable schedule 스케쥴 내에서 1)commit된 transaction 이 2)rollback 된 transaction이 write 했었던 데이터를 읽은 경우, rollback을 해도 이전 상태로 회복 불가능 할 수 있기 때문에 이런 schedule 은 DBMS 가 허용하면 안됨 durability: 이미 커밋된 트랜잭션은 rollback 할 수 없음 Recoverable schedule 스케쥴 내에서 그 어떤 트랜잭션도 자신이 읽은 데이터를 write 한 트랜잭션이 먼저 commit/rollback 하기 전까지는 commit 하..
개요 해당 글은 쉬운코드님의 https://www.youtube.com/watch?v=DwRN24nWbEc 강의를 시청하고 개인적으로 정리한 글입니다 :) 트랜잭션 동시성 제어 K 가 H에게 20만원을 이체하고 H도 본인 계좌에 30만원을 입금한다면 여러 형태의 트랜잭션 실행이 가능할 수 있음 Schedule 여러 transaction 들이 동시에 실행될 때 각 transaction 에속한 operation 들의 실행 순서, 각 transaction 내의 operation 들의 순서는 바뀌지 않음 트랜잭션 1가 K 자원을 읽을때 : r1(K) 트랜잭션 1가 K 자원을 쓸때 : w1(K) Serial Schedule transaction 들이 겹치지 않고 순차적으로 실행될때 성능 어떠한 operation ..
개요 서비스를 개발하다보면 데이터베이스 쿼리 연산으로 인해서 애플리케이션 서버의 성능이 떨어지는것을 경험할 수 있습니다. 여러가지 방법을 사용하여 이러한 성능 문제를 개선할 수 있는데요. 해당 게시글에서는 대표적인 11가지 방법에 대해 설명하겠습니다. 1. 인덱싱 단일 인덱스 조건절에 자주 사용되는 컬럼을 인덱싱하면 보다 빠르게 조건에 만족하는 데이터들을 조회할 수 있습니다. 하지만 인덱스를 적용하면 데이터가 삭제, 추가 될 때마다 인덱스 테이블을 갱신해서 성능 이슈가 발생할 수 있습니다. CREATE INDEX idx_username ON users(username); 복합 인덱스 복합인덱스는 여러 개의 조건으로 데이터를 탐색할 때 빠른 속도로 탐색할 수 있도록 도와줍니다. CREATE INDEX id..
개요 SQL 을 선택하는것은 단순히 프레임워크에 따라서 결정하는 것이 아님 프로젝트를 진행하기에 앞서 적합한 데이터베이스를 선택해야 함 SQL (관계형 DB) SQL 을 사용하면 RDBMS 에서 데이터를 저장, 수정, 삭제 및 검색할 수 있음 두가지 특징 데이터는 정해진 데이터 스키마에 따라 테이블에 저장 관계를 통해 여러 테이블에 분산 스키마를 준수하지 않은 레코드는 테이블에 추가 할 수 없음 NoSQL (비관계형 DB) 스키마도 없고, 관계도 없음 NoSQL 에서는 레코드를 문서라고 부름 SQL 은 정해진 스키마를 따르지 않으면, 데이터 추가가 불가능했음, 하지만 NoSQL에서는 다른 구조의 데이터를 같은 컬렉션에 추가 가능함 문서 (documents) 는 Json 과 비슷한 형태로 가지고 있음, 관..
파커초
'데이터베이스' 카테고리의 글 목록