- [ 학습기록/CS 공부 ][DB/쉬운코드] 파티셔닝과 샤딩2024-05-18 04:00:37파티셔닝 & 샤딩파티셔닝은 큰 테이블을 작은 크기의 테이블로 나누는 과정으로, 데이터베이스의 성능을 향상시킬 수 있다. 파티셔닝은 크게 두 종류로 나뉘는데, vertical partitioning은 column을 기준으로, horizontal partitioning은 row를 기준으로 테이블을 나눈다. vertical partitioning은 테이블의 열을 기준으로 데이터를 분리한다. 정규화 뿐만 아니라 성능을 위해 열을 별도로 분리할 수 있다. 포스팅에 대한 테이블에서 내용 속성인 `content`를 별도의 테이블로 분리하면, 포스팅 목록 조회 시 더 이상 무거운 `content`를 조회하지 않아도 된다.이외에도 민감한 정보는 함부로 조회하지 못하도록, 자주 사용하는 속성만 모아 성능을 향상시킬 목적으..
- [ 학습기록/CS 공부 ][DB/쉬운코드] 인덱스 (EXPLAIN/B 트리)2024-05-16 04:31:19인덱스SELECT * FROM customer WHERE name = 'Jennie';customer 테이블에서 Jennie라는 이름을 가진 소비자를 찾는 상황을 가정해보자. `name`에 인덱스가 걸려있지 않다면 해당 쿼리는 customer 테이블을 풀 스캔하게 된다. O(n) 이는 모든 레코드를 하나 하나 확인하므로 성능 저하를 일으킨다. 하지만 인덱스를 사용하면 풀 스캔보다 더 빠르게 데이터를 조회할 수 있다. O(log n) 즉, 인덱스는 조건을 만족하는 레코드를 빠르게 조회하기 위해 사용한다. 인덱스는 쿼리 실행 속도를 향상시키지만 부작용도 존재한다.테이블을 수정할 때마다 인덱스도 변경된다.인덱스별로 추가적인 저장 공간이 필요하다.💡 커버링 인덱스 : 인덱스만으로 조회하려는 속성들을 모두 커버..
- [ 학습기록/CS 공부 ][DB/쉬운코드] 정규화 (함수적 종속/1NF/2NF/3NF/BCNF)2024-05-15 03:23:19정규화정규화는 데이터 중복과 이상 현상을 최소화하기 위해 일련의 normal form* (NF) 에 따라 관계형 DB를 구성하는 과정이다.*normal form : 정규화를 위해 준수해야 하는 몇 가지 규칙잘못된 테이블 설계로 인한 문제`employee` 테이블을 다음과 같이 설계하는 상황을 가정해보자.emp_id, emp_name, birth_date, position, salary, dept_id, dept_name, dept_leader_id위 설계에 따르면 직원 정보와 부서 정보가 `employee` 테이블에서 모두 관리된다. (2개의 관심사가 하나의 테이블에 존재한다!) 1번 직원과 2번 직원이 같은 부서에 속한다면 어떤 상황이 발생할까? `dept_id`, `dept_name`, `dept_l..
- [ 학습기록/CS 공부 ][DB/쉬운코드] MVCC2024-05-13 17:10:19MVCC; multiversion concurrency controllock 기반의 동시성 제어는 같은 데이터를 read 하는 경우는 허용하지만, 그 외의 경우는 모두 허용하지 않는다. 이는 동시에 실행될 수 있는 트랜잭션을 제한하여 성능 저하를 유발한다. 반면, MVCC는 같은 자원에 대해 write 하는 경우만 허용하지 않는다. MVCC는 특정 시점을 기준으로 가장 최근에 commit된 데이터를 읽는다. 특정 시점은 isolation level에 따라 달라진다. MVCC는 데이터의 변화 이력을 관리해야 하므로 추가적인 저장 공간이 필요하다. isolation level🚨 MVCC는 commit된 데이터를 읽으므로 read uncommitted level은 MVCC가 적용되지 않는다.read commi..
- [ 학습기록/CS 공부 ][DB/쉬운코드] 트랜잭션과 동시성 제어 (ACID/이상 현상)2024-05-03 17:06:02트랜잭션J가 H에게 20만원을 이체하는 상황을 SQL문으로 작성해보면 위와 같다. 이체 작업은 두 SQL문이 모두 성공해야만 성공한다. 즉, 하나라도 실패해서는 안된다. 트랜잭션은 하나의 논리적인 작업 단위를 의미한다. 즉, 논리적인 이유로 여러 SQL문을 단일 작업으로 묶어서 처리해야 하는 것을 의미한다. 위 이체 작업을 트랜잭션으로 처리하면 일부만 성공해서 DB에 반영되는 일이 일어나지 않는다.START TRANSACTION; /* 트랜잭션의 시작 (= AUTOCOMMIT 비활성화) */UPDATE account SET balance = balance - 200000 WHERE id = 'J';UPDATE account SET balance = balance + 200000 WHERE id = 'H'..
- [ 학습기록/CS 공부 ][DB/쉬운코드] stored program2024-05-02 22:00:20stored programstored program은 데이터베이스 내부에 저장되어 있는 프로그램을 의미한다.functionproceduretriggerstored program은 데이터베이스에서 직접 실행하기 때문에 서버와 데이터베이스 간의 네트워크 트래픽을 줄여준다는 장점이 있다. stored functionstored function은 사용자가 정의한 함수로, 연산 후 하나의 값을 반환한다. stored function을 정의하기 위해서는 `CREATE FUNCTION`문을 사용한다.CREATE FUNCTION func_name(param1, param2) RETURN data_type [characteristics] BEGIN /* function body */ END🚨 `func_na..
- [ 학습기록/CS 공부 ][DB/쉬운코드] 데이터베이스 (모델/스키마/relation)2024-05-02 17:12:20데이터베이스데이터베이스는 전자적으로 (electronically) 저장•사용되는 관련있는 데이터 (related) 들의 조직화된 집합이다. 같은 목적으로 사용되는 데이터들을 조직적으로 관리하여 데이터를 빠르게 검색하고, 불필요한 데이터가 중복으로 저장되는 것을 방지하여 데이터 불일치 문제를 예방한다. DBMS : 사용자에게 데이터베이스를 정의/생성/관리하는 기능을 제공하는 소프트웨어 시스템ex. PostgreSQL, MySQL, Oracle, MSSQL 등메타데이터 : 데이터베이스를 정의하거나 기술하는 부가적인 데이터ex. 데이터 유형, 구조, 제약 사항, 보안, 인덱스, 사용자 그룹 등데이터베이스 시스템 = 데이터베이스 + DBMS + 연관된 어플리케이션 데이터 모델데이터 모델은 DB 구조*를 추상화할..
- [ backend/데이터베이스 ][mysql] 성능 최적화 3편 (데이터 크기)2024-02-13 15:36:22데이터 구조 최적화 테이블을 설계할 때 적절한 데이터 타입을 설정하는 것이 매우 중요하다. 최소한의 데이터 크기를 사용함으로써 테이블이 차지하는 디스크 공간을 최적화할 수 있고, 데이터가 메모리에 로드될 때 메모리 공간을 적게 사용하기 때문에 더 많은 데이터를 캐싱할 수 있다. 데이터 크기 최적화 데이터 크기를 최적화하면 디스크에 저장되는 데이터 양을 줄일 수 있다. 이는 저장소 비용을 절감하고 데이터 전송 시간을 단축시킨다. 테이블 컬럼 최적화 작은 크기의 데이터 타입을 사용하여 디스크 공간과 메모리를 확보한다. 가능한 `NOT NULL`로 선언하여 각 값이 null인지 테스트하는 오버헤드를 제거한다. `TINYINT` `SMALLINT` `MEDIUMINT` `INT` `BIGINT` 바이트 1 2 ..